周 欣
(南京信息工程大學(xué)電子與信息工程學(xué)院,江蘇南京 210044)
PWM[1]成為現(xiàn)代電子系統(tǒng)中的重要技術(shù)手段,在電機(jī)調(diào)速、開關(guān)電源、逆變電源、D類功放、弧焊機(jī)和超聲波清洗設(shè)備等方面有廣泛的應(yīng)用[2]。在電機(jī)調(diào)速中適當(dāng)?shù)眠x擇PWM的開關(guān)頻率能有效地降低電機(jī)的噪聲[3]。目前許多單片機(jī)和DSP中都集成了一定功能的PWM控制器。但也有一些共有的局限性。主要表現(xiàn)在:(1)位數(shù)較。,一般不會(huì)超過16位,因而精度較低。(2)功能受指令的限制。(3)使用時(shí)占用微控制器的引腳[4]。當(dāng)前有關(guān)使用CPLD進(jìn)行PWM模塊的設(shè)計(jì),都局限于使用定寬調(diào)頻法、調(diào)頻調(diào)寬法和定頻調(diào)寬法3種中的一種方法[5],這3種方法各有相應(yīng)的優(yōu)點(diǎn)和局限。本文提出了一種基于CPLD的可編程PWM控制器的設(shè)計(jì),有效地避免了上述缺點(diǎn)。由于是可編程設(shè)計(jì),因而可以與微處理器接口使用,通過微處理器對(duì)可編程PWM控制器的初始化,做到在系統(tǒng)工作中根據(jù)要求靈活合理地使用上述3種PWM實(shí)現(xiàn)方法中的任意一種。
CPLD選用Altera公司MAX II系列的EPM570,可編程PWM控制器設(shè)計(jì)的內(nèi)部結(jié)構(gòu)如圖1所示。
圖1 可編程PWM控制器設(shè)計(jì)的內(nèi)部結(jié)構(gòu)
該系統(tǒng)由一個(gè)加法計(jì)數(shù)器、16位的高低電平預(yù)置數(shù)寄存器、分頻數(shù)寄存器、數(shù)控分頻器、數(shù)據(jù)總線緩沖器以及地址譯碼器構(gòu)成[6]。CLK提供基準(zhǔn)頻率信號(hào),經(jīng)過一個(gè)數(shù)控分頻器進(jìn)行分頻可以控制輸出頻率,分頻數(shù)由分頻數(shù)寄存器確定。將分頻后的時(shí)鐘送入計(jì)數(shù)器進(jìn)行計(jì)數(shù)。當(dāng)計(jì)數(shù)值分別等于高低電平預(yù)置數(shù)寄存器的值時(shí),讓計(jì)數(shù)器的輸出發(fā)生邏輯翻轉(zhuǎn),這樣就實(shí)現(xiàn)了PWM波的輸出。假設(shè)CLK的頻率為Fs;分頻數(shù)寄存器的值為Ndiv,則分頻后的時(shí)鐘頻率為Fs/(Ndiv+1);若高低電平預(yù)置數(shù)寄存器的計(jì)數(shù)值分別為Nh、Nl,則PWM波的頻率為Fs/((Ndiv+1)(Nl+Nh));占空比為Nh/(Nh+Nl)??梢娫撓到y(tǒng)的輸出頻率和占空比均數(shù)控可調(diào),如果希望頻率不變,占空比可調(diào),只需保持Nl+Nh為常數(shù)即可。
表1 端口地址譯碼表
該系統(tǒng)的硬件描述采用VHDL語言,利用Quartus II進(jìn)行編譯、適配、綜合。其硬件描述的頂層文件如圖2所示。其中clk_div為數(shù)控分頻器,pre_freq_div_reg為8位分頻數(shù)寄存器,pre_low_reg和pre_high_reg分別為16位預(yù)置低字節(jié)和預(yù)置高字節(jié)寄存器,其預(yù)置值通過data_buffer8位數(shù)據(jù)鎖存器分兩次寫入,先寫入低字節(jié),后寫入高字節(jié),address_decoder為2/4線地址譯碼器。其端口譯碼如表1所示。counter為16位輸出計(jì)數(shù)器,使計(jì)數(shù)器清零開始計(jì)數(shù),Pout輸出為高電平當(dāng)其計(jì)數(shù)達(dá)到預(yù)置高字?jǐn)?shù)時(shí)Pout輸出翻轉(zhuǎn)為低電平,并使計(jì)數(shù)器清零且重新計(jì)數(shù),當(dāng)計(jì)數(shù)達(dá)到預(yù)置低字?jǐn)?shù)時(shí),使計(jì)數(shù)器清零重新開始計(jì)數(shù)且Pout輸出翻轉(zhuǎn)為高電平。如此往復(fù)產(chǎn)生相應(yīng)的PWM波形。其初始化編程步驟為:(1)向數(shù)據(jù)總線鎖存器寫入相應(yīng)的分頻數(shù),然后向地址總線輸入00,將數(shù)據(jù)輸出使能。(2)向地址總線輸入01,將分頻數(shù)寫入到分頻數(shù)寄存器中。(3)向數(shù)據(jù)總線鎖存器寫入低電平預(yù)置數(shù)的低字節(jié),然后向地址總線輸入00,將數(shù)據(jù)輸出使能。(4)向地址總線輸入10,將低電平預(yù)置數(shù)的低字節(jié)寫入到低電平預(yù)置數(shù)寄存器中的低字節(jié)中(5)向數(shù)據(jù)總線鎖存器寫入低電平預(yù)置數(shù)的高字節(jié),然后向地址總線輸入00,將數(shù)據(jù)輸出使能。(6)向地址總線輸入10,將低電平預(yù)置數(shù)的高字節(jié)寫入到低電平預(yù)置數(shù)寄存器中的高字節(jié)中(7)向數(shù)據(jù)總線鎖存器寫入高電平預(yù)置數(shù)的低字節(jié),然后向地址總線輸入00,將數(shù)據(jù)輸出使能。(8)向地址總線輸入11,將高電平預(yù)置數(shù)的低字節(jié)寫入到高電平預(yù)置數(shù)寄存器中的低字節(jié)中(9)向數(shù)據(jù)總線鎖存器寫入高電平預(yù)置數(shù)的高字節(jié),然后向地址總線輸入00,將數(shù)據(jù)輸出使能。(10)向地址總線輸入11,將高電平預(yù)置數(shù)的高字節(jié)寫入到高電平預(yù)置數(shù)寄存器中的高字節(jié)中。初始化編程結(jié)束,從 Pout輸出相應(yīng)的PWM波。
圖2 硬件描述的頂層原理圖
使用Quartus II仿真功能對(duì)設(shè)計(jì)的系統(tǒng)進(jìn)行仿真[7],其仿真如圖 3所示。通過在自行開發(fā)的KMCPLD-II型實(shí)驗(yàn)開發(fā)系統(tǒng)上進(jìn)行下載實(shí)驗(yàn),輸入頻率為1 MHz的方波信號(hào),分頻數(shù)分別為10、50、100、200,任意選擇高低電平的預(yù)置值,只要使得Nl+Nh=常數(shù)其實(shí)驗(yàn)結(jié)果如表2所示。從仿真和實(shí)驗(yàn)的結(jié)果可以看出,設(shè)計(jì)結(jié)果符合預(yù)計(jì)的設(shè)計(jì)要求。
圖3 系統(tǒng)仿真圖
表2 實(shí)驗(yàn)結(jié)果表
提出的基于CPLD的可編程PWM控制器的設(shè)計(jì)方法,具有結(jié)構(gòu)簡(jiǎn)單,穩(wěn)定可靠,數(shù)控精度高,頻率設(shè)置靈活的優(yōu)點(diǎn)。由于采用CPLD技術(shù),因而可以根據(jù)實(shí)際應(yīng)用要求調(diào)整數(shù)控精度。由于其采用可編程設(shè)計(jì),因而可受各種CPU控制,通過對(duì)該可編程PWM控制器的初始化,實(shí)現(xiàn)在系統(tǒng)的工作中根據(jù)系統(tǒng)要求在較寬的范圍內(nèi)任意使用定寬調(diào)頻法、調(diào)頻調(diào)寬法和定頻調(diào)寬法3種中的一種方法,并隨時(shí)改變其PWM的輸出頻率和占空比參數(shù)。
[1]李旭,謝運(yùn)祥.PWM技術(shù)實(shí)現(xiàn)方法綜述[J].電源技術(shù)應(yīng)用,2005(2):40-43.
[2]劉松,熊臘森.使用VHDL設(shè)計(jì)基于CPLD/FPGA逆變電源的 PWM 波形[J].焊接學(xué)報(bào),2002,23(6):89-91.
[3]滿永奎,邊春元,許寧.零空間矢量和PWM開關(guān)頻率對(duì)異步電機(jī)噪聲的影響[J].東北大學(xué)學(xué)報(bào):自然科學(xué)版,2002,23(8):738 -739.
[4]馮小平,張林,趙煥軍.一種基于CPLD實(shí)現(xiàn)的數(shù)字化PWM 波形產(chǎn)生器[J].現(xiàn)代電子技術(shù),2003(3):71-72.
[5]楊志剛,蔣欣.CPLD在基于PCI總線的功率模塊設(shè)計(jì)中的應(yīng)用[J].國外電子元器件,2008(4):29-31.
[6]梁中華,肖丹,楊霞.一種基于CPLD的SPWM控制波形生成方法[J].沈陽工業(yè)大學(xué)學(xué)報(bào),2005,27(2):187-191.
[7]任愛鋒.基于FPGA的嵌入式系統(tǒng)設(shè)計(jì)[M].西安:西安電子科技大學(xué)出版社,2004.