AVR使用范例--定時器實現(xiàn)PWM功能_第1頁
AVR使用范例--定時器實現(xiàn)PWM功能_第2頁
AVR使用范例--定時器實現(xiàn)PWM功能_第3頁
AVR使用范例--定時器實現(xiàn)PWM功能_第4頁
AVR使用范例--定時器實現(xiàn)PWM功能_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、AVR使用范例-定時器實現(xiàn)PWM功能本頁關鍵詞: 什么是pwm pwm原理 pwm控制 pwm芯片 pwm 單片機 單片機pwm控制應用 pwm電路 pwm輸出 pwm調(diào)制 脈寬調(diào)制PWM是開關型穩(wěn)壓電源中的術語。這是按穩(wěn)壓的控制方式分類的,除了PWM型,還有PFM型和PWM、PFM混合型。脈寬寬度調(diào)制式(PWM)開關型穩(wěn)壓電路是在控制電路輸出頻率不變的情況下,通過電壓反饋調(diào)整其占空比,從而達到穩(wěn)定輸出電壓的目的。通俗的說PWM就是波形,波形的波峰以波谷的比例關系成為占空比,我們可以通過PWM控制電機,音量控制,模擬控制等。AVR單片機的定時器可以輕松實現(xiàn)PWM功能。mega16和mega32

2、的timer0是和timer2都具有PWM功能,timer0和timer2都為8位定時器。timer2為異步操作定時器,在操作過程中要等待寄存器狀態(tài)更改完成。詳情參看數(shù)據(jù)手冊:8位有pwm操作的異步操作定時器timer2。下圖設定使用timer0來實現(xiàn)PWM功能。PWM電機控制:。OC0 output mode 設定了pwm輸出控制選擇:正常的端口操作,不與OC0 相連接, 比較匹配發(fā)生時OC0 取反, 比較匹配發(fā)生時OC0 清零, 比較匹配發(fā)生時OC0 置位。Waveform mode設定了波形產(chǎn)生模式:比較匹配輸出模式,快速PWM 模式,相位修正PWM 模式。更詳細的內(nèi)容請參看數(shù)據(jù)手冊。看

3、看程序代碼: /ICC-AVR application builder : 2006-11-25 0:15:12/ Target : M16/ Crystal: 7.3728Mhz#include #include void port_init(void) PORTA = 0x00; DDRA = 0x00; DDRB = 0x08; /PB3為PWM輸出,非常重要,否則無法輸出波形 DDRB = 0x00; PORTC = 0x00; /m103 output only DDRC = 0x00; PORTD = 0x00; DDRD = 0x00;/TIMER0 initialize - p

4、rescale:64/ WGM: Normal/ desired value: 1KHz/ actual value: 1.002KHz (0.2%)void timer0_init(void) TCCR0 = 0x00; /stop TCNT0 = 0x8D; /set count /*TCNT0*/ OCR0 = 0x73; /set compare /*OCR0*/ TCCR0 = 0x23; /start timer /*TCCR0*/#pragma interrupt_handler timer0_comp_isr:20void timer0_comp_isr(void) /comp

5、are occured TCNT0=OCR0#pragma interrupt_handler timer0_ovf_isr:10void timer0_ovf_isr(void) TCNT0 = 0x8D; /reload counter value/call this routine to initialize all peripheralsvoid init_devices(void) /stop errant interrupts until set up CLI(); /disable all interrupts port_init(); timer0_init(); MCUCR

6、= 0x00; GICR = 0x00; TIMSK = 0x03; /timer interrupt sources /*TIMSK*/ SEI(); /re-enable interrupts /all peripherals are now initializedvoid main(void) /*加上這些,程序就可以運行了。*/ init_devices(); while(1) ;程序運行效果:波形從PB3輸出:看看幾個關鍵的寄存器的意義:1. TCNT0:定時器計數(shù)值,定時過程中不斷增大,溢出后重新置數(shù),開始下一輪。 2. OCR0:定時器比較的值,當TCNT0 OCR0時,會產(chǎn)生t

7、imer0_comp_isr中斷。 3. TCCR0:控制timer0的寄存器,這里0x23代表的是: 波形產(chǎn)生模式為普通模式,比較匹配發(fā)生時OC0 清零,clkI/O/64 ( 來自預分頻器),詳細內(nèi)容請查看數(shù)據(jù)手冊。4. TIMSK:定時器中斷選項,這里允許timer0比較中斷,溢出中斷。 5. 預分頻器:預分頻器是獨立運行的。也就是說,其操作獨立于T/C 的時鐘選擇邏輯,且它由T/C1 與 T/C0 共享。由于預分頻器不受T/C 時鐘選擇的影響,預分頻器的狀態(tài)需要包含預分頻時鐘 被用到何處這樣的信息。一個典型的例子發(fā)生在定時器使能并由預分頻器驅(qū)動(6 > CSn2:0 > 1)的時候:從計時器使能到第一次開始計數(shù)可能花費 1 到N+1個系統(tǒng)時鐘周期, 其中N 等于預分頻因子(8、64、256 或1024)。 PWM的工作流程:1. 初始化,定時器開始工作,TCNT0逐漸增大,在預分頻這么多個時鐘周期里變化一次。 2. 輸出比較寄存器包含一個8 位的數(shù)據(jù),不間斷地與計數(shù)器數(shù)值TCNT0 進行比較。匹配事件可以用來產(chǎn)生輸出比較中斷,或者用來在OC0 引腳上產(chǎn)生波形。 3. TCNT0溢出,溢出中斷用于在OC0上產(chǎn)生波形,置位或者清零。 4. TCNT0

溫馨提示

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

評論

0/150

提交評論