arduino學(xué)習(xí)筆記a4-arduino軟件模擬pwm以及提高軟pwm效率_第1頁
arduino學(xué)習(xí)筆記a4-arduino軟件模擬pwm以及提高軟pwm效率_第2頁
arduino學(xué)習(xí)筆記a4-arduino軟件模擬pwm以及提高軟pwm效率_第3頁
arduino學(xué)習(xí)筆記a4-arduino軟件模擬pwm以及提高軟pwm效率_第4頁
arduino學(xué)習(xí)筆記a4-arduino軟件模擬pwm以及提高軟pwm效率_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Arduino學(xué)習(xí)筆記A4-Arduino軟件模擬PWM以及進(jìn)步軟PWM效率Arduino軟件模擬PWMU及進(jìn)步軟PW瞰率注:1. 這篇文章斷斷續(xù)續(xù)寫了很久,畫圖技術(shù)也不精,難免錯(cuò)漏,大家湊合看.有問題可以留言.2. 論壇排版把我的代碼縮進(jìn)全弄沒了,大家將代碼粘貼到arduino編譯器,然后按ctrl+T重新格式化代碼格式即可看的舒適.一、什么是PWMPWMPPulseWavelengthModulation脈寬調(diào)制波,通過調(diào)整輸出信號(hào)占空比,從而到達(dá)改變輸出平均電壓的目的。相信Arduino的PWMt家都不陌生,在ArduinoDuemilanove2021中,有6個(gè)8位精度PWII腳,分別

2、是3,5,6,9,10,11腳。我們可以使用analogWrite()控制PWMIP輸出頻率大概在500Hz的左右的PW碉制波。分辨率8位即2的8次方等于256級(jí)精度。但是有時(shí)候我們會(huì)覺得6個(gè)PWMI腳不夠用。比方我們做一個(gè)10路燈調(diào)光,就需要有10個(gè)PWFHP。ArduinoDuemilanove2021有13個(gè)數(shù)字輸出腳,假設(shè)它們都可以PWMH舌,就能滿足條件了。于是本文介紹用軟件模擬PWM二、Arduino軟件模擬PWMArduinoPWM調(diào)壓原理:PWMT好幾種方法。而Arduino因?yàn)殡娫春蛯?shí)現(xiàn)難度限制,一般使用周期恒定,占空比變化的單極性PWM。通過調(diào)整一個(gè)周期里面輸出腳高/低電平

3、的時(shí)間比即是占空比去獲得給一個(gè)用電器不同的平均功率如下列圖,假設(shè)PWN波形周期1mS即1kHz,分辨率1000級(jí)。那么需要一個(gè)信號(hào)時(shí)間精度1ms/1000=1us的信號(hào)源,即1MHz所以說,PWM勺實(shí)現(xiàn)難點(diǎn)在于需要使用很高頻的信號(hào)源,才能獲得快速與高精度。下面先由一個(gè)簡單的PWM!序開始:constintPWMPin=13;intbright=0;voidsetup()pinMode(PWMPinOUTPUTvoidloop()if(bright+)=255)bright=0;for(inti=0;i<255;i+)if(i<bright)digitalWrite(PWMPinHI

4、GH);delayMicroseconds(30);elsedigitalWrite(PWMPi,nLOW);delayMicroseconds(30);這是一個(gè)軟件PWhMS制ArduinoD13引腳的例子。只需要一塊Arduino即可測試此代碼。程序解析:由for循環(huán)可以看出,完成一個(gè)PW隅期,共循環(huán)255次。假設(shè)bright=100時(shí)候,在第0100次循環(huán)中,i等于1到99均小于bright,于是輸出PWMPiiW電平;然后第100到255次循環(huán)里面,i等于100255大于bright,于是輸出PWMPirn'氐電平。無論輸出上下電平都保持30us。那么說,假設(shè)bright=10

5、0的話,就有100次循環(huán)是高電平,155次循環(huán)是低電平。假設(shè)忽略指令執(zhí)行時(shí)間的話,這次的PW瞰形占空比為100/255,假設(shè)調(diào)整bright的值,就能改變接在D13的LED的亮度。這里設(shè)置了每次for循環(huán)之后,將bright加一,并且當(dāng)bright加到255時(shí)歸0。所以,我們看到的最終效果就是LED漸漸變亮,到頂之后然后突然暗回去重新變亮。這是最本的PWM法,也應(yīng)該是大家想的比較多的想法。然后介紹一個(gè)簡單一點(diǎn)的。思維風(fēng)格完全不同。不過對(duì)于驅(qū)動(dòng)一個(gè)LED來說,效果與上面的程序一樣。constintPWMPin=13;intbright=0;voidsetup()pinMode(PWMPi,nOU

6、TPU)T;voidloop()digitalWrite(PWMPi,nHIGH);delayMicroseconds(bright*30);digitalWrite(PWMPi,nLOW);delayMicroseconds(255-bright)*30);if(bright+)=255)bright=0;可以看出,這段代碼少了一個(gè)For循環(huán)。它先輸出一個(gè)高電平,然后維持(bright*30)us。然后輸出一個(gè)低電平,維持時(shí)間(255-bright)*30)us。這樣兩次上下就能完成一個(gè)PW倜期。分辨率也是255三、多引腳PWMArduino本身已有PWMI腳并且運(yùn)彳f起來不占CPU時(shí)間,所

7、以軟件模擬一個(gè)引腳的PWMlg全沒有實(shí)用意義。我們軟件模擬的價(jià)值在于:他能將任意的數(shù)字IO口變成PWMI腳。當(dāng)一片Arduino要同時(shí)控制多個(gè)PWM并且沒有其他重任務(wù)的時(shí)候,就要用軟件PWMT。多引腳PWMT一種下面的方式:intbrights14=0;/定義14個(gè)引腳的初始亮度,可以隨意設(shè)置intStartPWMPin=0,EndPWMPin=13;/設(shè)置D0D1刻PWMII腳intPWMResolution=255;/設(shè)置PWM空比分辨率voidsetup()/定義所有IO端輸出for(inti=StartPWMPin;i<=EndPWMPi;ni+)pinMode(i,OUTPU)

8、T;/隨意定義個(gè)初始亮度,便于觀察brightsi=random(0,255);voidloop()/這for循環(huán)是為14盞燈做漸亮的。每次Arduinoloop()循環(huán),/brights自增一次。直到brights=255時(shí)候,將brights置零重新計(jì)數(shù)。for(inti=StartPWMPin;i<=EndPWMPi;ni+)if(brightsi+)=PWMResolution)brightsi=0;for(inti=0;i<=PWMResolution;i+)/i是計(jì)數(shù)一個(gè)PWMU期for(intj=StartPWMPin;j<=EndPWMP;nj+)/每個(gè)PWM

9、®期均遍歷所有引腳if(i<brightsj)digitalWrite(j,HIGH);delayMicroseconds(2);elsedigitalWrite(j,LOW);delayMicroseconds(2);這個(gè)程序比較簡單,彳!是能演示根本的PWMfo能。我們看100P()段,里面第一個(gè)for循環(huán)是做亮度漸增的,跟上面程序一樣,每次循環(huán)自增,然后到255就置零重來。下面的for循環(huán)是外層循環(huán)組成一個(gè)PW幗期的,每個(gè)周期用255次循環(huán)完成。就是說,PWMH度255級(jí)??磧?nèi)層for循環(huán),每個(gè)PWffi期都包含由StartPWMPin至ijEndPWMPi的遍歷。就是說

10、,按照brights數(shù)組里面的元素去設(shè)置每個(gè)引腳的PWMt。由于每個(gè)PWM0期都要遍歷14個(gè)引腳,所以我們使用的delayMicroseconds);延時(shí)要P低到2us左右。每個(gè)PWMU期就是2usx14只腳=28us左右,在加上代碼執(zhí)行時(shí)間誤差。大概與原來的30us接近了。四、進(jìn)步PWM6度由上面可以看出,多引腳PWM勺周期大致為每引腳PW幗期=每引腳斷定后延時(shí)*要PWM勺引腳數(shù)*每周期PW版定次數(shù)(PWM精度)上面的代碼不包括指令執(zhí)行時(shí)間,大概是2usx14x255y7msh個(gè)周期,頻率142Hz。假設(shè)使用ArduinoMega2560這樣的大板,我們或者會(huì)用更多的引腳,比方32個(gè)。周期就變成2usx32x255y16ms一個(gè)周期,頻率就是62Hz了。大概實(shí)驗(yàn)可以看到,假

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論