單片機原理及應用系統設計第12章--IAP15W4K58S4單片機的-PWM模塊課件_第1頁
單片機原理及應用系統設計第12章--IAP15W4K58S4單片機的-PWM模塊課件_第2頁
單片機原理及應用系統設計第12章--IAP15W4K58S4單片機的-PWM模塊課件_第3頁
單片機原理及應用系統設計第12章--IAP15W4K58S4單片機的-PWM模塊課件_第4頁
單片機原理及應用系統設計第12章--IAP15W4K58S4單片機的-PWM模塊課件_第5頁
已閱讀5頁,還剩32頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、 第12章 IAP15W4K58S4單片機的 PWM模塊單片機原理及應用系統設計本章主要內容312單片機PWM模塊的結構單片機PWM模塊的應用單片機PWM模塊的控制IAP15W4K58S4單片機內部集成了一組(各自獨立6路)增強型的PWM波形發生器。增強型PWM發生器大大增加了PWM控制的靈活性。 第12章 IAP15W4K58S4單片機PWM模塊PWM波形發生器內部有一個15位的PWM計數器供6路PWM使用,用戶可以設置每路PWM的初始電平。另外,PWM波形發生器為每路PWM又設計了兩個用于控制波形翻轉的計數器T1/ T2 ,可以非常靈活的每路PWM 的高低電平寬度,從而達到對PWM 的占空

2、比以及PWM 的輸出延遲進行控制的目的。由于6路PWM是各自獨立的,且每路PWM 的初始狀態可以進行設定,所以用戶可以將其中的任意兩路配合起來使用,即可實現補對稱輸出以及死區控制等特殊應用。 12.1 IAP15W4K58S4單片機PWM模塊的結構增強型的PWM波形發生器還設計了對外部異常事件(包括外部端口P2.4的電平異常、比較器比較結果異常)進行監控的功能,可用于緊關閉PWM輸出。PWM波形發生器還可在15 位的PWM計數器歸零時觸發外部事件(觸發外部事件、外部事件、ADC轉換)。 12.1 IAP15W4K58S4單片機PWM模塊的結構 -IAP15W4K58S4單片機PWM模塊的結構

3、12.1 IAP15W4K58S4單片機PWM模塊的結構圖12-1 PWM波形發生器結構框圖 表12-1 端口配置寄存器各位的定義 12.2 IAP15W4K58S4單片機PWM模塊的控制位號B7B6B5B4B3B2B1B0位名稱EAXSFR000-S4_SS3_SS2_SEAXSFR :擴展SFR 訪問控制使能。 EAXSFR=0 :MOVX A,DPTR/MOVX DPTR,A指令的操作對象為擴展RAM(XRAM)。 EAXSFR=1 :MOVX A,DPTR/MOVX DPTR,A指令的操作對象為擴展SFR (XSFR)。注意:若要訪問PWM在擴展RAM區的特殊功能寄存器,必須先將EAX

4、SFR 位置為1;BIT6, BIT5, BIT4為內部測試使用,用戶必須填0。1. 端口配置寄存器P_SW2該寄存器地址為BAH,復位值為00H。 各位定義如表12-1所示: 12.2 IAP15W4K58S4單片機PWM模塊的控制位號B7B6B5B4B3B2B1B0位名稱-CBTADCC7INIC6INIC5INIC4INIC3INIC2INI表12-2 PWM配置寄存器PWMCFG各位定義2. PWM配置寄存器PWMCFG該寄存器地址為F1H,復位值為00H。各位定義如表12-2所示。CBTADC :PWM計數器歸零時(CBIF=1 時)觸發ADC轉換 0:PWM計數器歸零時不觸發ADC

5、轉換。 1:PWM計數器歸零時自動觸發ADC轉換。(注:前提條件是PWM和ADC必須被使能,即ENPWM=1,且ADCON=1)CnINI:設置PWM 輸出端口的初始電平,n=27。 0:PWM7 輸出端口的初始電平為低電平。 1:PWM7 輸出端口的初始電平為高電平。CBTADC :PWM計數器歸零時(CBIF=1 時)觸發ADC轉換 0:PWM計數器歸零時不觸發ADC轉換。 1:PWM計數器歸零時自動觸發ADC轉換。(注:前提條件是PWM和ADC必須被使能,即ENPWM=1,且ADCON=1)CnINI:設置PWM 輸出端口的初始電平,n=27。 0:PWM7 輸出端口的初始電平為低電平。

6、 1:PWM7 輸出端口的初始電平為高電平。 12.2 IAP15W4K58S4單片機PWM模塊的控制ENPWM :使能增強型PWM波形發生器 0:關閉PWM波形發生器。 1:使能PWM波形發生器,PWM計數器開始計數。ECBI :PWM計數器歸零中斷使能位 0:關閉PWM計數器歸零中斷(CBIF依然會被硬件置位)。 1:使能PWM計數器歸零中斷。ENCnO :PWMn 輸出使能位,n=27。 0:PWM通道n的端口為GPIO。 1:PWM通道n的端口為PWM輸出口,受PWM波形發生器控制。 12.2 IAP15W4K58S4單片機PWM模塊的控制位號B7B6B5B4B3B2B1B0位名稱EN

7、PWMECBIENC70ENC60ENC50ENC40ENC30ENC203. PWM控制寄存器PWMCR該寄存器地址為F1H,復位值為00H。各位定義如表12-3所示。表12-3 PWM控制寄存器PWMCFG各位定義12.2 IAP15W4K58S4單片機PWM模塊的控制4. PWM中斷標志寄存器PWMIF 該寄存器地址為F6H,復位值為00H。各位定義如表12-4所示。表12-4 PWM中斷標志寄存器PWMIF各位定義。 5. PWM外部異常控制寄存器PWMFDCR 該寄存器地址為F7H,復位值為00H。各位定義如表12-5所示。表12-5 PWM中斷標志寄存器PWMIF各位定義。位號B7

8、B6B5B4B3B2B1B0位名稱-CBIFC7IFC6IFC5IFC4IFC3IFC2IF位號B7B6B5B4B3B2B1B0位名稱-ENFDFLTFLIOEFDIFDCMPFDIOFDIF12.2 IAP15W4K58S4單片機PWM模塊的控制 5. PWM外部異常控制寄存器PWMFDCR該寄存器地址為F7H,復位值為00H。各位定義如表12-5所示。位號B7B6B5B4B3B2B1B0位名稱-ENFDFLTFLIOEFDIFDCMPFDIOFDIF表12-5 PWM中斷標志寄存器PWMIF各位定義12.2 IAP15W4K58S4單片機PWM模塊的控制ENFD :PWM外部異常檢測功能控

9、制位 0:關閉PWM的外部異常檢測功能。 1:使能PWM的外部異常檢測功能。FLTFLIO :發生PWM外部異常時對PWM輸出口控制位 0:發生PWM外部異常時,PWM的輸出口不作任何改變。 1:發生PWM外部異常時,PWM的輸出口立即被設置為高阻輸入模式(既不對外輸出電流,也不對內輸出電流)。【注】只有ENCnO=1 所對應的端口才會被強制懸空;當PWM外部異常狀態取消時,相應的PWM的輸出口會自動恢復以前的I/O設置。EFDI :PWM異常檢測中斷使能位 0:關閉PWM異常檢測中斷(FDIF依然會被硬件置位)。 1:使能PWM異常檢測中斷。12.2 IAP15W4K58S4單片機PWM模塊

10、的控制FDCMP :設定PWM異常檢測源為比較器的輸出 0:比較器與PWM無關 。 1:當比較器正極P5.5/CMP+ 的電平比比較器負極P5.4/CMP-的電平高或者比較器正極。 P5.5/CMP+ 的電平比內部參考電壓源1.28V高時,觸發PWM異常。FDIO :設定PWM異常檢測源為端口P2.4 的狀態 0:P2.4 的狀態與PWM無關。 1:當P2.4 的電平為高時,觸發 為高時,觸發PWM異常。FDIF :PWM異常檢測中斷標志位 當發生PWM異常(比較器正極P5.5/CMP+ 的電平比比較器負極P5.4/CMP- 的電平高 或比較器正極P5.5/CMP+ 的電平比內部參考電壓源1.

11、28V 高或者P2.4 的電平為高)時,硬件自動將此位置1 。當EFDI=1 時,程序會跳轉到相應中斷入口執行中斷服務程序。需要軟件清零。 12.2 IAP15W4K58S4單片機PWM模塊的控制 6. PWM計數器(1)PWM計數器高字節PWMCH(高7位)該寄存器地址為FFF0H(XSFR),復位值為00H。各位定義如表12-6所示。 表12-6 PWM計數器高字節PWMCH各位定義位號B7B6B5B4B3B2B1B0位名稱-PWMCH14:812.2 IAP15W4K58S4單片機PWM模塊的控制(2)PWM計數器低字節PWMCL(低8位) 該寄存器地址為FFF1H(XSFR),復位值為

12、00H。各位定義如表12-7所示。 表12-7 PWM計數器高字節PWMCH各位定義 PWM計數器位一個15位的寄存器,可設定132767之間的任意值作為PWM 的周期。PWM 波形發生器內部的計數器從0開始計數,每個PWM 時鐘周期遞增1,當內部計數器的計數值達到PWMCH,PWMCL所設定的PWM周期時,PWM波形發生器內部的計數器將會從0重新開始開始計數,硬件會自動將PWM歸零中斷中斷標志位CBIF置1,若ECBI=1 ,程序將跳轉到相應中斷入口執行中斷服務程序。位號B7B6B5B4B3B2B1B0位名稱PWM2CR7:07. PWM時鐘選擇寄存器PWMCKS 該寄存器地址為FFF2H(

13、XSFR),復位值為00H。各位定義如表12-8所示。 表12-8 PWM時鐘選擇寄存器器PWMCKS各位定義SELT2 :PWM時鐘源選擇 0:PWM時鐘源為系統時鐘經分頻器分頻之后的時鐘 。 1:PWM時鐘源為定時器2 的溢出脈沖PS3:0 :系統時鐘預分頻參數。當SELT2=0時,PWM時鐘為系統時鐘 / ( PS3:0+1)。 12.2 IAP15W4K58S4單片機PWM模塊的控制位號B7B6B5B4B3B2B1B0位名稱-PS3:012.2 IAP15W4K58S4單片機PWM模塊的控制 8. PWMn的翻轉計數器(n=27) (1)PWMn的第一次翻轉計數器的高字節PWMnT1H

14、,復位值是00H。各位定義如表12-9所示。 表12-9 PWMn的第一次翻轉計數器的高字節PWMnT1H(n=27)各位定義。 位號B7B6B5B4B3B2B1B0位名稱-PWM2T1H14:812.2 IAP15W4K58S4單片機PWM模塊的控制(2) PWMn的第一次翻轉計數器的低字節PWMn T1L,各位定義如表12-10所示。表12-10 PWMn的第一次翻轉計數器的低字節PWMnT1L(n=27)各位定義。(3)PWMn的第二次翻轉計數器的高字節PWMnT2H,復位值是00H。各位定義如表12-11所示。表12-11 PWMn的第一次翻轉計數器的高字節PWMnT2H(n=27)各

15、位定義。位號B7B6B5B4B3B2B1B0位名稱PWM2T1L7:0位號B7B6B5B4B3B2B1B0位名稱-PWM2T1H14:812.2 IAP15W4K58S4單片機PWM模塊的控制(4)PWMn的第二次翻轉計數器的低字節PWMnT2L,各位定義如表12-12所示。表12-12 PWMn的第一次翻轉計數器的低字節PWMnT2L(n=27)各位定義。PWM2的第二次翻轉計數器的高字節:PWM2T2H,各位定義如表12-13所示。表12-13 PWMn的第二次翻轉計數器的高字節PWMnT2H(n=27)各位定義。 位號B7B6B5B4B3B2B1B0位名稱PWM2T1L7:0SFR na

16、meAddressbitB7B6B5B4B3B2B1B0Reset ValuePWM2T2HFF02H(XSFR)name-PWM2T2H14:8x000,0000BPWM2T2HFF02H(XSFR)name-PWM2T2H14:8x000,0000B12.2 IAP15W4K58S4單片機PWM模塊的控制PWM2的第二次翻轉計數器的低字節:PWM2T2L,各位定義如表12-14所示。SFR nameAddressbitB7B6B5B4B3B2B1B0Reset ValuePWM2CRFF03H(XSFR)namePWM2CR7:00000,0000BPWM波形發生器設計了兩個用于控制PWM

17、波形翻轉的15位計數器,可設定1327間的任意值。PWM波形發生器內部的計數器的計數值與T1/T2所設定的值相匹配時,PWM 的輸出波形將發生翻轉。表12-14 PWMn的第二次翻轉計數器的低字節PWMnT2H(n=27)各位定義12.2 IAP15W4K58S4單片機PWM模塊的控制 9. PWMn的控制寄存器PWMnCR 復位值為00H。各位定義如表12-15所示。 表12-15 PWMn的控制寄存器PWMnCR各位定義。PWMn_PS :PWMn輸出引腳選擇位 0:PWMn的輸出引腳為第一組PWMn。 1:PWMn的輸出引腳為第二組PWMn_2。EPWMnI :PWMn中斷使能控制位。

18、0 :關閉PWMn 中斷 。 1:使能PWMn 中斷,當CnIF被硬件置1時,程序將跳轉到相應中斷入口執行中斷服務程序。 bitB7B6B5B4B3B2B1B0name-PWMnPSEPWMnECn2SIECn1SI12.2 IAP15W4K58S4單片機PWM模塊的控制 ECnT2SI :PWMn 的T2匹配發生波形翻轉時的中斷控制位 0 :關閉T2翻轉時中斷 。 1:使能T2翻轉時中斷,當PWM波形發生器內部計數值與T2計數器所設定的值相匹配時,PWM 的波形發生翻轉,同時硬件將C2IF置1,此時若EPWM2I=1 ,則程序將跳轉到相應中斷入口執行中斷服務程序。 ECnT1SI :PWMn

19、 的T1匹配發生波形翻轉時的中斷控制位 0 :關閉T1翻轉時中斷 。 1:使能T1翻轉時中斷,當PWM波形發生器內部計數值與T1計數器所設定的值相匹配時,PWM 的波形發生翻轉,同時硬件將CnIF置1,此時若EPWMnI=1 ,則程序將跳轉到相應中斷入口執行中斷服務程序。6路高低字節兩次控制PWM波形翻轉的15位計數器和PWMn控制寄存器。PWMnCR地址如表12-16所示。 12.2 IAP15W4K58S4單片機PWM模塊的控制 表12-16 PWM2PWM7計數器和寄存器地址地址PWM2PWM3PWM4PWM5PWM6PWM7第一次翻轉計數器高字節FF00HFF10HFF20HFF30H

20、FF40HFF50H 低字節FF01HFF11HFF21HFF31HFF41HFF51H第二次翻轉計數器高字節FF02HFF12HFF22HFF32HFF42HFF52H 低字節FF03HFF13HFF23HFF33HFF43HFF53HPWMn控制寄存器PWMnCRFF04HFF14HFF24HFF34HFF44HFF54H12.2 IAP15W4K58S4單片機PWM模塊的控制10. PWM中斷優先級控制寄存器IP2該寄存器地址為B5H,復位值為00H。各個中斷源均為低優先級中斷。不可位尋址,只能用字節操作指令更新相關內容,各位定義如表12-17所示。PPWMFD:PWM異常檢測中斷優先級

21、控制位。 PPWMFD=0:PWM異常檢測中斷為最低優先級中斷(優先級0) 。 PPWMFD=1:PWM異常檢測中斷為最高優先級中斷(優先級1) 。PPWM: PWM中斷優先級控制位。 PPWM=0:PWM中斷為最低優先級中斷(優先級0) 。 PPWM=1:PWM中斷為最高優先級中斷(優先級1) 。SFR nameAddressbitB7B6B5B4B3B2B1B0Reset ValueIP2B5Hname-PX4PPWMFDPPWMPSPIPS20000,0000B表12-17 PWM中斷優先級控制寄存器IP2各位定義 12.3 IAP15W4K58S4單片機PWM模塊的應用 【例12-1】

22、 利用IAP15W4K58S4單片機PWM模塊,生成一個占空比可調的波形。占空比初始值為50%。設置3個按鍵,分別控制占空比的加和減以及恢復至初始值。波形由引腳P1.7輸出,可使用示波器觀察波形。請編寫程序。 解:C語言源程序代碼:#include stc15w4k32s4.h /包含單片機頭文件#define CYCLE 11059 /PWM計數值unsigned int T2Cnt=CYCLE/2; /PWM翻轉計數值 void IO_Init(void); /函數聲明void PWM_Init(void);void Key_Process(void);void Delay_ms(unsi

23、gned int ms);void PWM7_SetPWMT2(unsigned int dat);unsigned char Key_Scan(void); 12.3 IAP15W4K58S4單片機PWM模塊的應用/* 主函數 */void main(void) IO_Init(); /端口初始化 PWM_Init(); /PWM模塊初始化 while(1) Key_Process(); /按鍵掃描 12.3 IAP15W4K58S4單片機PWM模塊的應用 void Delay_ms(unsigned int ms) /延時函數 unsigned int i; while( (ms-) !=

24、 0) for(i = 0; i 580; i+); 12.3 IAP15W4K58S4單片機PWM模塊的應用 /* PWM模塊初始化函數 */void PWM_Init(void) P1M1 &= (17); /將P17設置為準雙向口 P1M0 &= (17); P_SW2 |=0 x80; /允許訪問PWM特殊功能寄存器 PWMCR&=0 x7f; /關閉PWM發生器,進行PWM設置 PWMCKS=0 x00; /PWM時鐘選擇:系統時鐘,不分頻 PWMC=CYCLE; /PWM計數器,設置PWM周期 PWM7CR=0 x00; /PWM7輸出到P1.7,關閉中斷 PWMCFG=0 x00

25、; /設置PWM的初始輸出低電平 PWMCR |=0 x20; /使能PWM7信號輸出 PWMCR|=0 x80; /設置完畢,啟動PWM發生器 P_SW2 &=0 x7f; /關閉訪問PWM特殊功能寄存器12.3 IAP15W4K58S4單片機PWM模塊的應用 /* 設置PWM中T2計數器 */void PWM7_SetPWMT2(unsigned int dat) PWMCR&=0 x7f; /關閉PWM發生器,進行PWM設置P_SW2 |=0 x80; /允許訪問PWM特殊功能寄存器PWM7T2=dat;P_SW2 &=0 x7f; /關閉訪問PWM特殊功能寄存器PWMCR|=0 x80

26、; /啟動PWM發生器unsigned char Key_Scan(void) /按鍵掃描函數 unsigned char KeyTemp1,KeyTemp2;unsigned char KeyValue;KEYPORT |= (1KEY10) | (1KEY11) |(1KEY12); /讀入端口先置高, / P3.3口置高 KeyTemp1=KEYPORT | (1KEY10)|(1KEY11)|(1KEY12);/將讀 /入端口不用的位屏蔽掉 if(KeyTemp1!=0 xff) /如果有鍵按下Delay_ms(20); /延時,防抖動KeyTemp1=KEYPORT | (1KEY10)|(1KEY11)|(1KEY12)if(KeyTemp1!=0 xff) while(KeyTemp1!=0 xff) /等待按鍵釋放 KeyTemp2=K

溫馨提示

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

評論

0/150

提交評論