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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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) /*加上這些,程序就可以運(yùn)行了。*/ init_devices(); while(1) ;程序運(yùn)行效果:波形從PB3輸出:看看幾個(gè)關(guān)鍵的寄存器的意義:1. TCNT0:定時(shí)器計(jì)數(shù)值,定時(shí)過程中不斷增大,溢出后重新置數(shù),開始下一輪。 2. OCR0:定時(shí)器比較的值,當(dāng)TCNT0 OCR0時(shí),會(huì)產(chǎn)生t

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

溫馨提示

  • 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. 人人文庫(kù)網(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)論