第14講自己動(dòng)手學(xué)習(xí)單片機(jī)-PWM_第1頁
第14講自己動(dòng)手學(xué)習(xí)單片機(jī)-PWM_第2頁
第14講自己動(dòng)手學(xué)習(xí)單片機(jī)-PWM_第3頁
第14講自己動(dòng)手學(xué)習(xí)單片機(jī)-PWM_第4頁
第14講自己動(dòng)手學(xué)習(xí)單片機(jī)-PWM_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第14講PWM青島科技大學(xué)王澤料清單+5v電源最小系統(tǒng)板面包板插線若干本章重點(diǎn)掌握PWM的作用掌握快速PWM編程方法掌握相位修正的PWM編程方法PWMPWM(PulseWidthModulation)脈沖寬度調(diào)制 簡稱脈寬調(diào)制技術(shù),是一種利用微處理器的數(shù)字技術(shù)進(jìn)行模擬電路的控制得一種有效技術(shù),廣泛應(yīng)用于測量、通訊、功率控制和變換等領(lǐng)域。ATMega16的PWM產(chǎn)生方式(三種)

快速PWM(T/C0,T/C1,T/C2)

相位修正的PWM(T/C0,T/C1,T/C2)

相位與頻率修正的PWM(T/C1)ATMega16的PWM輸出引腳(共4個(gè))

OC0(T/C0)

OC1A,OC1B(T/C1)

OC2(T/C2)

T/C0的PWM快速PWM模式 用來產(chǎn)生高頻的PWM波形,適合于功率調(diào)節(jié),整流和DAC應(yīng)用??焖貾WM模式是單斜坡工作。計(jì)數(shù)器從BOTTOM計(jì)到MAX,然后立即回到BOTTOM重新開始。

普通比較輸出模式:輸出比較引腳OC0在TCNT0與OCR0匹配時(shí)清零,在BOTTOM時(shí)置位。

反向比較輸出模式:

OC0的動(dòng)作正好相反。 計(jì)時(shí)器數(shù)值達(dá)到MAX時(shí)T/C溢出標(biāo)志TOV0置位。如果中斷使能,在中斷服務(wù)程序可以更新比較值(OCR0中的值)。T/C0寄存器T/C控制寄存器TCCR0

WGM01:0:bit6,bit3。PWM模式選擇,如下表所示

COM01:0:bit5:4比較匹配輸出模式

CS02:0:分頻選擇T/C寄存器-TCNT0和輸出比較寄存器-OCR0

PWM模式下,TCNT0在T/C時(shí)鐘作用下不斷進(jìn)行+1或-1運(yùn)算,OCR0存放一個(gè)確定的比較值。一旦TCNT0的數(shù)據(jù)與OCR0中的值相等,將在OC0引腳上產(chǎn)生PWM波形。

PWM模式下,OCR0是雙緩沖的。使用雙緩沖時(shí),CPU訪問的是OCR0緩沖寄存器,T/C0使用的是OCR0本身。雙緩沖可以將更新OCR0寄存器與top或bottom時(shí)刻同步起來,從而防止產(chǎn)生不對稱的PWM脈沖,消除了干擾脈沖。T/C中斷屏蔽寄存器-TIMSK

當(dāng)TOIE0和狀態(tài)寄存器SREG的全局中斷使能位I都為”1”時(shí),T/C0的溢出中斷使能。當(dāng)T/C0發(fā)生溢出,即TIFR中的TOV0位置位時(shí),中斷服務(wù)程序得以執(zhí)行??梢栽谥袛喾?wù)程序中更改OCR0中的數(shù)據(jù)。T/C中斷標(biāo)志寄存器-TIFR

TOV0在TCNT0達(dá)到MAX時(shí),置位。當(dāng)SREG的I位,TIMSK的TOIE0位,TOV0位都為1,中斷發(fā)生。在相位修正PWM模式中,當(dāng)T/C0在0x00改變記數(shù)方向時(shí),TOV0置位。快速PWM波的頻率和占空比計(jì)算

PWM波占空比計(jì)算 占空比=高電平時(shí)間/PWM周期 =(255-OCR0)/256

5、采用1024分頻(CS02:0=101),故方波周期為32768us,方波頻率為31Hz。

總之:在8MHz時(shí)鐘下,PWM波的頻率可以是31Hz到31KHz之間變化快速PWM模式下,產(chǎn)生基本的PWM波任務(wù)描述:

產(chǎn)生3906Hz的PWM波,要求占空比為30%。采用反向比較輸出模式。

3906Hz對應(yīng)8分頻。 根據(jù)占空比計(jì)算公式,由 (255-OCR0)/256=30%,得

OCR0的值為178。#defineF_CPU8000000UL#include<avr/io.h>#definepwmDDRDDRB //pwm方向寄存器#definepwmPORTPORTB //pwm數(shù)據(jù)寄存器#defineoPwm3 //pwm針腳3#define_NOP()__asm____volatile__("nop"::)/********** 端口初始化*****************************/voidinitPin(){PORTA=0xFF; //A口上拉電阻使能

DDRA=0x00;PORTB=0xFF; //B口上拉電阻使能

DDRB=0x00;PORTC=0xFF; //C口上拉電阻使能

DDRC=0x00;PORTD=0xFF; //D口上拉電阻使能

DDRD=0x00;_NOP();}/***********************pwm寄存器及輸出針腳初始化**********************/voidinitPwm() { TCCR0|=(1<<WGM01)|(1<<WGM00); //快速PWM模式

TCCR0|=(1<<COM01)|(1<<COM00); //反向比較輸出

pwmPORT&=~(1<<oPwm); //pwm針腳輸出0 pwmDDR|=(1<<oPwm); //pwm針腳定義為輸出

TCCR0|=(1<<CS01); //8分頻,啟動(dòng)pwm}intmain(void){ initPin(); initPwm(); OCR0=178; while(1); return(0);}快速PWM模式下,產(chǎn)生可變占空比的PWM波任務(wù)描述:

產(chǎn)生3906Hz的PWM波,要求占空比在30%和50%之間跳變,跳變由PA0的按鍵來控制。采用反向比較輸出模式。

3906Hz對應(yīng)8分頻。 根據(jù)占空比計(jì)算公式,由(255-OCR0)/256=30%,得OCR0的值為178。 由(255-OCR0)/256=50%,得OCR0的值為127。#defineF_CPU8,000,000UL#include<avr/io.h>#include<avr/interrupt.h>//定義鍵盤使用的端口PA0#definekey_DDRDDRA#definekey_PORTPORTA#definekey_PINPINA//鍵盤狀態(tài)機(jī)#defineState_NoKey 0 //無鍵按下狀態(tài)#defineState_KeyPress 1 //有鍵按下狀態(tài)#defineState_ValidKey 2 //有效按鍵狀態(tài)#defineState_KeyRelease 3 //鍵盤釋放狀態(tài)intState_Key=State_NoKey; //鍵狀態(tài),初始為無鍵按下狀態(tài)volatilecharvalue_keyscan=0;#definepwmDDRDDRB //pwm方向寄存器#definepwmPORTPORTB //pwm數(shù)據(jù)寄存器#defineoPwm3 //pwm針腳3(PB3)#define_NOP()__asm____volatile__("nop"::)charflagPWM=0;//偶數(shù)時(shí)為占空比為30%,否則50%/********** 端口初始化*****************************/voidinitPin(){PORTA=0xFF; //A口上拉電阻使能

DDRA=0x00;PORTB=0xFF; //B口上拉電阻使能

DDRB=0x00;PORTC=0xFF; //C口上拉電阻使能

DDRC=0x00;PORTD=0xFF; //D口上拉電阻使能

DDRD=0x00;_NOP();}/******************鍵盤掃描**********************************/charkey_scan(){ key_DDR&=0xFE;

key_PORT|=0x01;//PA0輸入,內(nèi)部上拉,這樣PA0引腳高電平,一旦按鍵按下,PA變?yōu)榈碗娖?/p>

_NOP(); if(key_PIN&0x01) //無鍵按下

return(0); //返回PA0端口值

else //有鍵按下

return(1);}charFsm_KeyDither(charevent_trig){ staticcharf_key_release; staticcharkey_value; switch(State_Key) { caseState_NoKey: if(event_trig)//key_scan!=0,轉(zhuǎn)到有鍵按下狀態(tài)

State_Key=State_KeyPress;

else //key_scan=0,在無鍵狀態(tài)下循環(huán)

State_Key=State_NoKey; f_key_release=0; key_value=0; break; caseState_KeyPress: if(event_trig)//key_scan!=0,轉(zhuǎn)到有效按鍵狀態(tài)

State_Key=State_ValidKey; else //key_scan=0,無效按鍵,轉(zhuǎn)無鍵狀態(tài)

State_Key=State_NoKey; f_key_release=0; key_value=0; break;

caseState_ValidKey: if(event_trig)//key_scan!=0,在狀態(tài)中循環(huán),存儲(chǔ)鍵值

{ State_Key=State_ValidKey; key_value=event_trig; } else //key_scan=0,轉(zhuǎn)鍵釋放狀態(tài)

State_Key=State_KeyRelease; f_key

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論