十脉波宽度调变(PulseWidthModulation)_第1页
十脉波宽度调变(PulseWidthModulation)_第2页
十脉波宽度调变(PulseWidthModulation)_第3页
十脉波宽度调变(PulseWidthModulation)_第4页
十脉波宽度调变(PulseWidthModulation)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十一章脈波寬度調變(PulseWidthModulation)11-1、簡介脈波寬度調變(PulseWidthModulation,(PWM))基本的控制原理是根據輸入信號的大小,調整輸出脈波的寬度,而此脈波的頻率為固定。如圖11-1(a)所示是一個正弦波的正半週波形,若取樣點如圖11-1(a)所示,根據取樣值的大小,來決定脈波的寬度。因此就可以得到如圖11-1(b)所示的脈衝列。圖11-1:PWM基本控制原理PWM的輸出時序如圖11-2所示。PWM輸出有兩個名詞需要注意到:Period和DutyCycle。當PWM輸出由此次變High到下一次變High的時間稱為Period;而PWM輸出保

2、持在High(1)的時間除以Period,稱呼它為PWM的DutyCycle。圖11-2:PWM輸出時序圖11-2、ET44M210的PWM1/17ET44M210微控制器提供兩組16位元解析度的PWM輸出。PWM0是連接到PORTA的Bit7,PWM1是連接到PORTC的Bit5。因為ET44M210微控制器的PWM輸出是16位元的解析度,因此DutyCycle是由2個暫存器所決定:DutyCycleHighByte(DT0H;DT1H)和DutyCycleLowByte(DT0L;DT1L)。DT0H:DT0L是針對PWM0所設定的暫存器;DT1H:DT1L是針對PWM1所設定的暫存器,統

3、稱為DTX。另外ET44M210也定義了一組16位元的DutyCycleLatch暫存器,DutyCycleLatch暫存器是由2個暫存器所決定:DutyCycleLatchHighByte(DL0H;DL1H)和DutyCycleLatchLowByte(DL0L;DL1L)。DL0H:DL0L是針對PWM0所設定的暫存器;DL1H:DL1L是針對PWM1所設定的暫存器,統稱為DLX。DutyCycleLatch暫存器是唯讀的暫存器。PWM的Period也是由2個暫存器所決定:PeriodHighByte(PRD0H;PRD1H)和PeriodLowByte(PRD0L;PRD1L)。PRD

4、0H:PRD0L是針對PWM0所設定的暫存器;PRD1H:PRD1L是針對PWM1所設定的暫存器,統稱為PRDX。在ET44M210內部有2個與PWM有關的16位元計數器:TMR0和TMR1。TMR0是針對PWM0所設定的計數器;TMR1是針對PWM1所設定的計數器,統稱為TMRX。當PWM啟動之後,SystemClock就會送到TMRX開始上數,此時會將PWM輸出接腳設為1,在此同時會分別與DLX與PRDX做比較;當TMRX的值等於DLX的值時,PWM輸出接腳會設為0。當TMRX的值等於PRDX的值時,會將PWM輸出接腳設為1,並且將TMRX清除為0,同時PWM的中斷旗標也會設為1。當TMR

5、X被清除為0的同時,會將DTX的值Latch在DLX內。Note:當要改變Period時必須先將PWM的功能Disable。DutyCycle的計算公式入下所示:2DutyCycle(DTX1)(FSCO)FSCOSystemClockPeriod的計算公式入下所示:2Period(PRDX2)(FSCO)FSCOSystemClock如圖11-3所示為PWM的功能方塊圖。2/17圖11-3:PWM功能方塊圖11-3、與PWM相關的暫存器中斷旗標暫存器(InterruptFlagRegister)INTF(0 x11)765432103/17ADIFRBFIFPWM1IFPWM0IFEINT1

6、FEINT0FTCCOFFRCOFBit4Bit5(PWM0IF&PWM1IF):PWM中斷旗標:當TMRX等於PRDX時,中斷條件成立,此位元設為1。以軟體指令清除。PWMDutyCycle暫存器(PWMDuty)DT0L(0 x21)/DT0H(0 x22)&DT1L(0 x27)/DT1H(0 x28)DT0L76543210DT07DT06DT05DT04DT03DT02DT01DT00DT0H7DT0F6DT0E5DT0D4DT0C3DT0B2DT0A1DT090DT08DT1L7DT176DT165DT154DT143DT132DT121DT110DT10DT1H76543210D

7、T1FDT1EDT1DDT1CDT1BDT1ADT19DT18DT0H:DT0L是PWM0輸出的DutyCycle。DT1H:DT1L是PWM1輸出的DutyCycle。PWMPeriod暫存器(PWMPeriod)PRD0L(0 x23)/PRD0H(0 x24)&PRD1L(0 x29)/PRD1H(0 x2A)PRD0L765432104/17PRD07PRD06PRD05PRD04PRD03PRD02PRD01PRD00PRD0H7PRD0F6PRD0E5PRD0D4PRD0C3PRD0B2PRD0A1PRD090PRD08PRD1L7PRD176PRD165PRD154PRD143P

8、RD132PRD121PRD110PRD10PRD1H76543210PRD1FPRD1EPRD1DPRD1CPRD1BPRD1APRD19PRD18PRD0H:PRD0L是PWM0輸出Period。PRD0H:PRD0L是PWM1輸出Period。PWMDutyCycleLatch暫存器(PWMDutyLatch)DL0L(0 x25)/DL0H(0 x26)&DL1L(0 x2B)/DL1H(0 x2C)DL0L76543210DL07DL06DL05DL04DL03DL02DL01DL00DL0H7DL0F6DL0E5DL0D4DL0C3DL0B2DL0A1DL090DL08DL1L7D

9、L176DL165DL154DL143DL132DL121DL110DL10DL1H76543210DL1FDL1EDL1DDL1CDL1BDL1ADL19DL18DL0H:DL0L是PWM0輸出DutyCycleLatch暫存器。DL1H:DL1L是PWM1輸出DutyCycleLatch暫存器。Note:這是唯讀的暫存器週邊功能致能控制暫存器(PeripheralsEnableControl)PRIE(0 x80)76543210SPIEUSBEWMEADEPWM1EPWM0ETCCEFRCE此暫存器控制是否啟用週邊功能。當設為0時,表示不啟用該週邊功能,當設為1時,表示啟用該週邊功能。5

10、/17Bit2(PWM0E):脈寬調變0(PWM0)功能致能位元。Bit3(PWM1E):脈寬調變1(PWM1)功能致能位元。中斷功能致能控制暫存器(InterruptsEnableControl)INTE(0 x81)76543210GIERBFIEPWM1IEPWM0IEEINT1EEINT0ETCCOEFRCOE此暫存器控制是否啟用中斷功能。當設為0時,表示不啟用中斷功能,當設為1時,表示啟用中斷功能。Bit4(PWM0IE):脈寬調變(PWM0)一個週期完成中斷功能致能位元。Bit5(PWM1IE):脈寬調變(PWM1)一個週期完成中斷功能致能位元。脈寬調變控制暫存器(PWMContr

11、olRegister)PWMCR(0 x98)76543210-S_PWM1S_PWM0-Bit2(S_PWM0):SelectedPWM0outputenable此位元是設定PWM0輸出致能位元。當設為0時,表示DisablePWM0輸出,當設為1時,表示EnablePWM0輸出。Bit3(S_PWM1):SelectedPWM1outputenable此位元是設定PWM1輸出致能位元。當設為0時,表示DisablePWM1輸出,當設為1時,表示EnablePWM1輸出。Bit0,Bit1andBit4Bit7:保留11-4、程式範例1.實習1-PWM喇叭音效控制實習動作說明程式使用PWM功

12、能,使喇叭發出聲音。6/17硬體連接此範例使用ET44M210的實驗電路板。程式說明此範例使用PWM功能,PWM0:2222DutyCycle(DTX1)(FSCO)=(33)(6MHz)=11s。Period(PRDX2)(FSCO)=(259)(6MHz)=86s。PWM1:2222DutyCycle(DTX1)(FSCO)=(33)(6MHz)=11s。Period(PRDX2)(FSCO)=(1030)(6MHz)=343s。程式一開始先起始PWM設定:清除PWM相關暫存器,設定PWM暫存器的值。主程式只需等待PWM中斷發生。Note:由於實驗電路板的喇叭是連接到PWM1,因此PWM0

13、並不需要Enable。流程圖STARTPWM中斷向量起始PWM設定清除PWM中斷旗標RETIPWM開始執行程式碼PWM01.dt中副程式及程式區段說明7/17PWM01.dt程式共包含了5個副程式及程式區段,依照程式的撰寫順序有:PWM:、EXIT:、CLR_PWM1_FLAG:、INITIAL:、PWM_START:為了方便讀者閱讀瞭解,針對程式中所定義的LABEL,以字母排序,整理如下表:程式中所定義的副程式或LABEL說明編號LABEL名稱行號說明0CLR_PWM1_FLAG:1EXIT:2INITIAL:3PWM:4PWM_START:3732412873PWM中斷副程式下的LABEL

14、PWM中斷副程式下的LABEL主程式起始化PWM中斷副程式主程式本表格是針對程式中所定義的LABEL所整理出來的,針對表格每一欄的屬性說明如下:編號:為該表格中所要說明的LABEL順序編號。LABEL名稱:為程式中實際的LABEL名稱。行號:為該LABEL實際於程式中第幾行。說明:該說明用以描述解釋該LABEL下面的副程式或程式區段所要執行的動作。PWM01.dt完整的原始程式碼000/*001程式說明002程式使用PWM功能,使喇叭發出聲音。003004PERIOD=(PRD+2)*(2/Fsco);Fsco=6MHz005DutyCycle=(DTX+1)*(2/Fsco)006*/007

15、INCLUDEET44M210_REG.H008R41=0X41009R42=0X42010R43=0X43011PRD0L_VALUE=1;PWM0的PERIODLOWBYTE0255012PRD0H_VALUE=1;PWM0的PERIODHIGHBYTE0255013PRD1L_VALUE=4;PWM1的PERIODLOWBYTE0255014PRD1H_VALUE=4;PWM1的PERIODHIGHBYTE0255015DT0L_VALUE=32;PWM0的DUTYCYCLELOWBYTE0255016DT0H_VALUE=0;PWM0的8/17DUTYCYCLEHIGHBYTE0255

16、017DT1L_VALUE=32;PWM1的DUTYCYCLELOWBYTE0255018DT1H_VALUE=0;PWM1的DUTYCYCLEHIGHBYTE0255019020ORG0X0000;起始位址021JMPINITIAL022023ORG0X0040;PWM中斷位址024JMPPWM025026ORG0X0100027;PWM中斷副程式028PWM:029JBSINTF,PWM1IF,CLR_PWM1_FLAG/CHECKPWM1INTERRUPTFLAG030BCINTF,PWM0IF/CLRPWM0INTERRUPTFLAG031;PWM中斷副程式下的LABEL032EXIT

17、:033NOP034RETI035036;PWM中斷副程式下的LABEL037CLR_PWM1_FLAG:038BCINTF,PWM1IF/CLRPWM1INTERRUPTFLAG039JMPEXIT040;主程式起始化041INITIAL:042CLRPRD0H043CLRPRD0L044CLRPRD1H045046047048049050051052053CLRCLRCLRCLRCLRMOVMOVMOVMOVPRD1LDT0HDT0LDT1HDT1LA,#PRD0L_VALUE/LOADPRD0L,PRD0H,PRD1L,PRD1HVALUEPRD0L,AA,#PRD0H_VALUEPRD

18、0H,A9/17054MOVA,#DT0L_VALUE/LOADDT0L,DT0H,DT1L,DT1HVALUE055056057058059060061062063064MOVMOVMOVMOVMOVMOVMOVMOVMOVMOVDT0L,AA,#DT0H_VALUEDT0H,AA,#PRD1L_VALUEPRD1L,AA,#PRD1H_VALUEPRD1H,AA,#DT1L_VALUEDT1L,AA,#DT1H_VALUE065MOVDT1H,A066;BSPRIE,PWM0E/ENABLEPWM0,PWM1PERIPHERAL067BSPRIE,PWM1E068;BSINTE,PWM0I

19、E/ENABLEPWM0,PWM1OVERFLOWINTERRUPT069BSINTE,PWM1IE070MOVA,#0B00001000071MOVPWMCR,A/PWM0,PWM1OUTPUTENABLE072;主程式073PWM_START:074ENI075NOP076NOP077JMP$078079ORG0X3FFF080DW0X400010/172.實習2-類比搖桿PWM輸出控制LED亮度實習動作說明程式使用PWM及ADC的功能,使搖桿在移動時,LED的亮度產生變化。硬體連接此範例使用ET44M210的實驗電路板,並在PortC的Bit5接上LED。程式說明此範例使用PWM及ADC

20、的功能。此範例使用PWM及ADC的功能,並且採用Polling的方式而不使用中斷的方式。程式一開始先起始ET44M210的動作:除能所有的中斷功能,設定PORTA為輸出端,清除ADDATAH、ADDATAL的值,設定ADC類比輸入及ADC轉換速率,設定ADC轉換的Channel。設定PWM的Period。當起始ET44M210的動作完成後,ADC便開始轉換,並等待ADC轉換完成,當ADC轉換完成後,將ADC轉換完成後的資料傳給PWM的DL1,程式開始執行PWM的功能。Note:可以將連接到喇叭的Jump移除,在PortC的Bit5接上LED,不需要使喇叭發出聲音。11/17流程圖START起始

21、ET44M210ADC轉換開始NO等待AD轉換完成YES將ADC轉換的值傳給DL1NO等待PWM1輸出12/17程式碼PWM02.dt中副程式及程式區段明PWM02.dt程式共包含了14個副程式及程式區段,依照程式的撰寫順序有:START:、AD_START:、WAIT_AD_TRANS:、AD_TRANS_OK:、WAIT_PWM_TRANS:、PWM_TRANS_OK:、EXIT:、CLR_PWM1_FLAG:、INITIAL:、DELAY:、DELAYDD:、DELAYCC:、DELAYAA:、DELAYA:為了方便讀者閱讀瞭解,針對程式中所定義的LABEL,以字母排序,整理如下表:程式

22、中所定義的副程式或LABEL說明編號LABEL名稱行號說明0AD_START:1AD_TRANS_OK:2CLR_PWM1_FLAG:314264ADC轉換開始AD轉換完成清除PWM1旗標3DELAY:4DELAYA:5DELAYAA:6DELAYCC:7DELAYDD:104DELAY副程式122延遲副程式下的LABEL118延遲副程式下的LABEL113延遲副程式下的LABEL108延遲副程式下的LABEL8EXIT:9INITIAL:10PWM_TRANS_OK:11START:12WAIT_AD_TRANS:13WAIT_PWM_TRANS:616857283449離開PWM副程式主程

23、式起始化PWM轉換完成程式開始等待AD轉換完成等待PWM輸出完成本表格是針對程式中所定義的LABEL所整理出來的,針對表格每一欄的屬性說明如下:編號:為該表格中所要說明的LABEL順序編號。LABEL名稱:為程式中實際的LABEL名稱。行號:為該LABEL實際於程式中第幾行。說明:該說明用以描述解釋該LABEL下面的副程式或程式區段所要執行的動作。PWM02.dt完整的原始程式碼000/*001程式說明002程式使用PWM及ADC功能,使喇叭發出聲音。003由VR類比輸入訊號經由MCU轉換成數位訊號,13/17004當成PWM的DutyCycle使LED的亮度產生變化005PERIOD=(PR

24、D+2)*(2/Fsco);Fsco=6MHz006DutyCycle=(DTX+1)*(2/Fsco)007008009*/010INCLUDEET44M210_REG.H/ACCORDINGTOIC_NUMBERTO011INCLUDEGENERAL_REG.H012PRD1L_VALUE=255;PWM1的PERIODLOWBYTE0255013PRD1H_VALUE=0;PWM1的PERIODHIGHBYTE0255014DT1L_VALUE=0X40;PWM1的DUTYCYCLELOWBYTE0255015DT1H_VALUE=0;PWM1的DUTYCYCLEHIGHBYTE0255

25、016CKR=7;設定ADC轉換的速率017;0:CLK_SOURCE/2;1:CLK_SOURCE/4018;2:CLK_SOURCE/8;3:CLK_SOURCE/16019;4:CLK_SOURCE/32;5:CLK_SOURCE/64020;6:CLK_SOURCE/128;7:CLK_SOURCE/256021ANALOG_CHANNEL=0X0E;設定ADC轉換的CHANNEL022023ORG0X0000;程式起始位址024JMPSTART025026ORG0X0100027;程式開始028START:029CALLINITIAL030;ADC轉換開始031AD_START:03

26、2BSADCCR,ADRUN;ADC轉換開始033;等待AD轉換完成034WAIT_AD_TRANS:035;當AD_STATE中TRANS_OKBIT為1036;表示AD轉換完成037;程式跳至AD_TRANS_OK執行038JBSINTF,ADIF,AD_TRANS_OK039NOP14/17040JMPWAIT_AD_TRANS;若無則程式跳回繼續等待041;AD轉換完成042AD_TRANS_OK:043;AD轉換完成044BCINTF,ADIF;清除AD_STATE的TRANS_OKBIT045MOVA,ADDATAH;將資料傳給PORTA046MOVPORTA,A047MOVDT1

27、L,A048;等待PWM輸出完成049WAIT_PWM_TRANS:050;當AD_STATE中TRANS_OKBIT為1051;表示AD轉換完成052;程式跳至AD_TRANS_OK執行053JBSINTF,PWM1IF,PWM_TRANS_OK054NOP055JMPWAIT_PWM_TRANS;若無則程式跳回繼續等待056;PWM轉換完成057PWM_TRANS_OK:058JBSINTF,PWM1IF,CLR_PWM1_FLAG/CHECKPWM1INTERRUPTFLAG059BCINTF,PWM0IF/CLRPWM0INTERRUPTFLAG060;離開PWM副程式061EXIT:062JMPAD_START;程式跳至AD_START繼續執行063;清除PWM1旗標064CLR_PWM1_FLAG:065BCINTF,PWM1IF/CLRPWM1INTERRUPTFLAG066JMPEXIT067;主程式起始化068INITIAL:069CALLDELAY070MOVA,#0X00071072073074075076077

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论