011第十一章脉波宽度调变Pulse Width Modulation文档格式.docx
《011第十一章脉波宽度调变Pulse Width Modulation文档格式.docx》由会员分享,可在线阅读,更多相关《011第十一章脉波宽度调变Pulse Width Modulation文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
DutyCycleLatchHighByte(DL0H;
DL1H)和DutyCycleLatchLowByte(DL0L;
DL1L)。
DL0H:
DL0L是針對PWM0所設定的暫存器;
DL1H:
DL1L是針對PWM1所設定的暫存器,統稱為DLX。
DutyCycleLatch暫存器是唯讀的暫存器。
PWM的Period也是由2個暫存器所決定:
PeriodHighByte(PRD0H;
PRD1H)和PeriodLowByte(PRD0L;
PRD1L)。
PRD0H:
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。
當TMRX被清除為0的同時,會將DTX的值Latch在DLX內。
Note:
當要改變Period時必須先將PWM的功能Disable。
DutyCycle的計算公式入下所示:
DutyCycle=(DTX+1)×
(2∕FSCO)
FSCO=SystemClock
Period的計算公式入下所示:
Period=(PRDX+2)×
如圖11-3所示為PWM的功能方塊圖。
圖11-3:
PWM功能方塊圖
11-3、與PWM相關的暫存器
Ø
中斷旗標暫存器(InterruptFlagRegister)–INTF(0x11)
7
6
5
4
3
2
1
ADIF
RBFIF
PWM1IF
PWM0IF
EINT1F
EINT0F
TCCOF
FRCOF
✓Bit4~Bit5(PWM0IF&
PWM1IF):
PWM中斷旗標:
當TMRX等於PRDX時,中斷條件成立,此位元設為1。
以軟體指令清除。
PWMDutyCycle暫存器(PWMDuty)–DT0L(0x21)/DT0H(0x22)&
DT1L(0x27)/DT1H(0x28)
DT0L
DT07
DT06
DT05
DT04
DT03
DT02
DT01
DT00
DT0H
DT0F
DT0E
DT0D
DT0C
DT0B
DT0A
DT09
DT08
DT1L
DT17
DT16
DT15
DT14
DT13
DT12
DT11
DT10
DT1H
DT1F
DT1E
DT1D
DT1C
DT1B
DT1A
DT19
DT18
DT0H:
:
DT0L是PWM0輸出的DutyCycle。
DT1H:
DT1L是PWM1輸出的DutyCycle。
PWMPeriod暫存器(PWMPeriod)–PRD0L(0x23)/PRD0H(0x24)&
PRD1L(0x29)/PRD1H(0x2A)
PRD0L
PRD07
PRD06
PRD05
PRD04
PRD03
PRD02
PRD01
PRD00
PRD0H
PRD0F
PRD0E
PRD0D
PRD0C
PRD0B
PRD0A
PRD09
PRD08
PRD1L
PRD17
PRD16
PRD15
PRD14
PRD13
PRD12
PRD11
PRD10
PRD1H
PRD1F
PRD1E
PRD1D
PRD1C
PRD1B
PRD1A
PRD19
PRD18
PRD0H:
PRD0L是PWM0輸出Period。
PRD0L是PWM1輸出Period。
PWMDutyCycleLatch暫存器(PWMDutyLatch)–DL0L(0x25)/DL0H(0x26)&
DL1L(0x2B)/DL1H(0x2C)
DL0L
DL07
DL06
DL05
DL04
DL03
DL02
DL01
DL00
DL0H
DL0F
DL0E
DL0D
DL0C
DL0B
DL0A
DL09
DL08
DL1L
DL17
DL16
DL15
DL14
DL13
DL12
DL11
DL10
DL1H
DL1F
DL1E
DL1D
DL1C
DL1B
DL1A
DL19
DL18
DL0H:
DL0L是PWM0輸出DutyCycleLatch暫存器。
DL1H:
DL1L是PWM1輸出DutyCycleLatch暫存器。
Note:
這是唯讀的暫存器
週邊功能致能控制暫存器(PeripheralsEnableControl)–PRIE(0x80)
SPIE
USBE
WME
ADE
PWM1E
PWM0E
TCCE
FRCE
此暫存器控制是否啟用週邊功能。
當設為0時,表示不啟用該週邊功能,當設為1時,表示啟用該週邊功能。
✓Bit2(PWM0E):
脈寬調變0(PWM0)功能致能位元。
✓Bit3(PWM1E):
脈寬調變1(PWM1)功能致能位元。
中斷功能致能控制暫存器(InterruptsEnableControl)–INTE(0x81)
1
GIE
RBFIE
PWM1IE
PWM0IE
EINT1E
EINT0E
TCCOE
FRCOE
此暫存器控制是否啟用中斷功能。
當設為0時,表示不啟用中斷功能,當設為1時,表示啟用中斷功能。
✓Bit4(PWM0IE):
脈寬調變(PWM0)一個週期完成中斷功能致能位元。
✓Bit5(PWM1IE):
脈寬調變(PWM1)一個週期完成中斷功能致能位元。
脈寬調變控制暫存器(PWMControlRegister)–PWMCR(0x98)
-
S_PWM1
S_PWM0
✓Bit2(S_PWM0):
SelectedPWM0outputenable
此位元是設定PWM0輸出致能位元。
當設為0時,表示DisablePWM0輸出,當設為1時,表示EnablePWM0輸出。
✓Bit3(S_PWM1):
SelectedPWM1outputenable
此位元是設定PWM1輸出致能位元。
當設為0時,表示DisablePWM1輸出,當設為1時,表示EnablePWM1輸出。
✓Bit0,Bit1andBit4~Bit7:
保留
11-4、程式範例
1.實習1-PWM喇叭音效控制實習
動作說明
程式使用PWM功能,使喇叭發出聲音。
硬體連接
此範例使用ET44M210的實驗電路板。
程式說明
此範例使用PWM功能,
PWM0:
(2∕FSCO)=(33)×
(2∕6MHz)=11μs。
(2∕FSCO)=(259)×
(2∕6MHz)=86μs。
PWM1:
(2∕FSCO)=(1030)×
(2∕6MHz)=343μs。
程式一開始先起始PWM設定:
清除PWM相關暫存器,設定PWM暫存器的值。
主程式只需等待PWM中斷發生。
由於實驗電路板的喇叭是連接到PWM1,因此PWM0並不需要Enable。
流程圖
程式碼
PWM01.dt中副程式及程式區段說明
PWM01.dt程式共包含了5個副程式及程式區段,依照程式的撰寫順序有:
PWM:
、EXIT:
、CLR_PWM1_FLAG:
、INITIAL:
、PWM_START:
為了方便讀者閱讀瞭解,針對程式中所定義的LAB