左明偉 馮江榮 王邦靖 曼茂立
摘 要:通過對MC9S12XS128單片機脈沖寬度調制模塊(PWM)的研究,主要了解了脈沖寬度調制模塊相關寄存器的功能,并深入探討脈寬調制模塊的調制方法,此外,也設計了適用于直流電機驅動的程序,并在此基礎上進行了詳細講解,以便更為直觀的了解并熟練地使用飛思卡爾單片機的脈沖寬度調制模塊。
關鍵詞:脈沖寬度調制模塊;寄存器;單片機
中圖分類號:TM571.6 文獻標志碼:A 文章編號:2095-2945(2018)23-0035-02
Abstract: By studying the pulse width modulation module PWM of MC9S12XS128 single chip microcomputer, the function of the registers related to the pulse width modulation module is mainly understood, and the modulation method of the pulse width modulation module is discussed in depth. In addition, the modulation method of the pulse width modulation module is discussed. In order to understand and skillfully use the pulse width modulation module of Freescale single-chip microcomputer, a program suitable for direct current (DC) motor drive is also designed and explained in detail.
Keywords: pulse width modulation module; register; single chip microcomputer
引言
飛思卡爾是全球知名的半導體公司[1],該公司為許多行業設計和制作嵌入式半導體產品,現如今幾乎所有市售的單片機都集成了PWM功能模塊[2]。脈寬調制技術是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,可以通過調整方波的占空比來實現輸出電壓的變壓變頻效果,脈寬調制技術以其控制簡單、靈活和動態響應好的優點成為電子技術最廣泛應用的控制方式,在電機調速等領域的應用日益廣泛,所以對脈寬調制模塊的學習與應用是十分必要的。
1 PWM主要寄存器介紹
飛思卡爾單片機脈沖寬度調制是通過設置其內部寄存器來輸出相應的波形。
1.1 時鐘寄存器
時鐘寄存器主要包括:PWMCLK、PWMPCLK、PWMSCLA/PWMSCLB,這三個寄存器分別是PWM時鐘選擇寄存器、模塊時鐘源A、B預分頻寄存器、模塊時鐘源SA、SB預分頻寄存器[3]。PWM時鐘選擇寄存器用來選擇PWM通道使用A、B時鐘或者SA、SB時鐘的哪一個。它和周期寄存器共同決定了PWM輸出脈沖的頻率。
1.2 周期寄存器
PWMPER寄存器共有8個,每一個通道都有一個這樣的周期寄存器。這個寄存器的值就決定了相關PWM通道的周期。周期寄存器的值越大,PWM調制精度越高[4]。
1.3 占空比寄存器
PWMDTY寄存器共有8個,每一個通道都有一個這樣的占空比寄存器。這個寄存器的值就決定了相關PWM通道的輸出脈沖的占空比。
2 PWM設置步驟及程序實例
在了解相關寄存器,并掌握脈沖寬度輸出頻率以及占空比的計算方法后,便可以進行設置并輸出PWM波形了。
2.1 PWM設置步驟如下[5]
a.選擇極性PWMPOL;
b.選擇及設置時鐘 PWMCLK、PWMPRCLK、PWMSCLA、PWMSCLB;
c.對齊方式 PWMCAE;
d.是否聯級輸出 PWMCTL;
e.周期設定 PWMPER;
f.占空比設定 PWMDTY;
g.打開PWM通道PWME;
2.2 程序實例
在直流電機控制電子節氣門開度的控制系統中PWM脈沖波形的輸出頻率常為1KHz,因而我們設計了相關程序。首先是進行初始化函數設置[6](其中晶振頻率16MHz、總線時鐘32MHz)。
#include "main.h"
void PWM_Init(void)
{
PWMCTL_CON01=1; //聯結0號和1號通道形成16位PWM通道號,由PWM1輸出
PWMPOL_PPOL1=1; //通道01的極性為高電平有效
PWMPRCLK=0x22; //A時鐘和B時鐘的分頻系數為4,頻率=32/4=8MHz
PWMSCLA=2; //SA時鐘設置寄存器CLOCK SA=CLOCK A/(2*PWMSCLA)=8M/2*2=2MHz
PWMCLK=0x02; //通道01用SA時鐘作為時鐘源
PWMPER01=2000; //通道01的頻率=CLOCK SA/2000=1KHz
PWMDTY01=0; //通道01的占空比為0%
PWME_PWME1=1; //使能通道01
}
其次,主函數調用相關初始化函數,并輸出相應占空比的脈沖。
void main(void)
{
INIT_PLL(PLL32) ; //初始化PLL為32M
PWM_Init();
EnableInterrupts; //使能中斷
PWMDTY01=1000; //占空比=PWMPER01/PWMDTY01=1000/2000*100%=50%
}
在飛思卡爾MC9S12XS128單片機中用CodeWarrior5.0編譯并燒錄后,可從示波器讀取到如圖1的脈沖波形。如果我們想輸出占空比=70%的PWM波形,只需要改變主函數居中寄存器PWMDTY01=PWMPER01*70%=2000*70%=1400即可,圖2是占空比為70%的脈沖波形。
3 結束語
在完成了對飛思卡爾單片機脈沖寬度模塊的分析,并設計相關程序后,總結了如下幾個常見問題:
3.1 頻率問題
針對直流電機脈寬調制的PWM頻率問題[7],目前尚待商榷,建議進行多次試驗選取讓電機正常工作的頻率。其他如S3010舵機的使用頻率是50Hz-200Hz[8],對應周期是5ms-20ms,超出頻率的話,舵機不會線性工作。
3.2 級聯問題
80引腳封裝的XS128系列單片機有8個8位精度的PWM通道[9],通過級聯可以得到4個16位精度的PWM通道,當處于級聯模式時,時鐘、極性以及對齊方式等都是受級聯后的低8位對應通道的寄存器控制的,即由通道1、3、5、7的寄存器控制,且只有這幾個通道可以輸出PWM波形。
參考文獻:
[1]周鑫玲.飛思卡爾8位單片機脈寬調制模塊用法探究[D].天津大學,2010.
[2]李剛.飛思卡爾8位單片機實用教程[M].北京:電子工業出版社,2009.
[3]邵貝貝.單片機認識與實踐[M].北京:北京航空航天大學出版社,2006.
[4]劉和平.DSP原理及電機控制系統應用[M].北京:北京航空航天大學出版社,2007.
[5]李勇.汽車單片機與車載網絡技術[M].北京:電子工業出版社,2015.
[6]薛濤.單片機與嵌入式系統開發方法-HCS12XS[M].北京:清華大學出版社,2009.
[7]庹朝永.基于單片機的直流電機PWM調速系統設計與開發[J].哈爾濱煤礦機械研究所,2011.
[8]趙開理.基于單片機設計直流電機控制系統[D].南京郵電大學,2017.
[9]李瑋.基于單片機控制的直流電機PWM調速系統設計[J].河北省科學技術學協會,2018.