戈 亮
(上海船舶運(yùn)輸科學(xué)研究所研究開發(fā)中心,上海200135)
脈寬調(diào)制技術(shù)是一種對模擬信號電平進(jìn)行數(shù)字編碼的技術(shù),最早應(yīng)用于通信技術(shù)領(lǐng)域。隨著科學(xué)技術(shù)的發(fā)展,現(xiàn)已廣泛應(yīng)用在電力、電子、微型計算機(jī)、自動控制等多個學(xué)科領(lǐng)域,并逐漸成為一項(xiàng)不可或缺的控制技術(shù)。同時,由于現(xiàn)代大容量FPGA芯片在數(shù)字電路設(shè)計方面應(yīng)用也日益廣泛,其具有高精度、速度快、可靠性高等優(yōu)點(diǎn),用戶可以靈活地根據(jù)自身系統(tǒng)的特點(diǎn)進(jìn)行數(shù)字電路設(shè)計,且相應(yīng) SOPC(System on Programmable Chit)技術(shù)也迅速發(fā)展,使得利用FPGA芯片進(jìn)行集成多路高性能PWM 模塊的開發(fā)設(shè)計成為可能。本文根據(jù)系統(tǒng)設(shè)計要求,介紹一種在FPGA芯片上集成可編程多路高精度數(shù)字PWM發(fā)生器的設(shè)計,可實(shí)現(xiàn)通過串行接口與片上處理器或與外部處理器連接,實(shí)現(xiàn)一個完整的控制系統(tǒng)。
本設(shè)計采用的是嵌入式處理器外加FPGA芯片擴(kuò)展多路PWM信號輸出的方式來構(gòu)建的。嵌入式處理器通過SPI串行數(shù)據(jù)總線與FPGA芯片進(jìn)行通信,對各路PWM輸出信號的參數(shù)、使能開關(guān)等功能進(jìn)行設(shè)置,達(dá)到信號調(diào)制的功能。而FPGA中主要由SPI總線接口、譯碼控制、內(nèi)部寄存器、PWM計數(shù)發(fā)生器等4部分組成,圖1為FPGA芯片內(nèi)部結(jié)構(gòu)示意框圖。SPI總線接口主要負(fù)責(zé)SPI總線規(guī)范數(shù)據(jù)的收發(fā),收到的數(shù)據(jù)通過譯碼控制模塊后,得到相應(yīng)的地址和命令,就可對內(nèi)部寄存器進(jìn)行數(shù)據(jù)存取工作。內(nèi)部寄存器主要用于存放內(nèi)部控制信號、內(nèi)部狀態(tài)信號以及PWM輸出的設(shè)置參數(shù)等。而PWM波形主要由2個計數(shù)器及輔助組合邏輯所組成的PWM計數(shù)發(fā)生器來產(chǎn)生,PWM計數(shù)發(fā)生器會自動裝載內(nèi)部寄存器中的相關(guān)設(shè)置數(shù)據(jù),在控制信號的控制下進(jìn)行PWM波形發(fā)生工作,并返回自身工作的一些狀態(tài)信號以供監(jiān)控。
圖1 總體設(shè)計方案框圖
圖2 基于Flash結(jié)構(gòu)邏輯單元
本設(shè)計中FPGA采用Actel公司的ProASIC3系列A3P030芯片,其具有高速度、低功耗、低成本、大容量及可靠性高等優(yōu)點(diǎn)。芯片內(nèi)部由Flash-CMOS結(jié)構(gòu)的可編程邏輯單元組成,如圖2所示。其具有掉電不丟失,故無需外部配置電路,硬件電路實(shí)現(xiàn)簡單,上電工作快等優(yōu)點(diǎn)。芯片還提供了豐富的用戶IO接口資源,且兼容多種IO電平標(biāo)準(zhǔn),具有通用JTAG編程調(diào)試接口。在本方案的硬件電路設(shè)計中,只需連接一個50 MHz有源晶體振蕩器作為FPGA時鐘輸入,再配以單電源電路和簡單復(fù)位電路,芯片就可以正常工作。
SPI總線接口模塊主要任務(wù)是對數(shù)據(jù)的發(fā)送和接受進(jìn)行控制。采用開放的IP軟核SPI總線Slave器件模塊,如圖3所示,通過該模塊將串行的總線數(shù)據(jù)轉(zhuǎn)換為并行的8位數(shù)據(jù)形式,并輸出鎖存信號。本設(shè)計設(shè)定數(shù)據(jù)傳輸?shù)臅r序模式為:CPOL空閑狀態(tài)極性設(shè)置為“0”,CPHA時鐘相位選擇設(shè)置為“0”,可根據(jù)實(shí)際情況進(jìn)行更改配置。該模塊收發(fā)數(shù)據(jù)波形如圖4,圖5所示。
圖3 SPI總線Slave器件模塊
圖4 MISO(主收從發(fā))模式SPI總線數(shù)據(jù)波形
圖5 MOSI(主發(fā)從收)模式SPI總線數(shù)據(jù)波形
譯碼控制部分通過對接受鎖存和發(fā)送完成信號進(jìn)行觸發(fā)切換,以區(qū)分指令與數(shù)據(jù),并對SPI主器件發(fā)送來的指令進(jìn)行譯碼,輸出對應(yīng)內(nèi)部寄存器地址的讀寫信號,使數(shù)據(jù)鎖存或被讀出。命令譯碼部分采用VHDL代碼實(shí)現(xiàn),VHDL代碼如下:
內(nèi)部寄存器模塊存放內(nèi)部控制信號、內(nèi)部狀態(tài)信號以及PWM輸出的設(shè)置參數(shù)等。內(nèi)部寄存器模塊由多個8位數(shù)據(jù)存儲單元組合構(gòu)成。每個存儲單元都可對輸入數(shù)據(jù)進(jìn)行鎖存,以及將存儲數(shù)據(jù)輸出到總線。數(shù)據(jù)存儲單元模塊又由輸入鎖存器與輸出緩沖器組成,如圖6所示。
PWM發(fā)生邏輯模塊是實(shí)現(xiàn)PWM輸出的主要功能模塊,由2個16位計數(shù)器及一些輔助組合邏輯組成,故其PWM輸出調(diào)節(jié)精度最高可達(dá)1/65 536。PWM計數(shù)模塊的計數(shù)值還可被讀出,以供檢查驗(yàn)證。外部視圖如圖7所示。
PWM發(fā)生邏輯模塊內(nèi)部邏輯如圖8所示。2個16位計數(shù)器分為脈寬計數(shù)器與頻率周期計數(shù)器,同時裝載各自計數(shù)數(shù)據(jù),當(dāng)EN_IN為“1”時,2個計數(shù)器同時開始計數(shù),由于脈寬計數(shù)器計數(shù)值小于頻率周期計數(shù)器計數(shù)值,脈寬計數(shù)器計數(shù)先溢出,關(guān)閉自身計數(shù)使能。頻率周期計數(shù)器繼續(xù)計數(shù),直至計數(shù)溢出后,輸出溢出信號再次開啟脈寬計數(shù)器計數(shù),如此循環(huán)往復(fù),即可得穩(wěn)定的可調(diào)脈寬波形輸出。
圖6 內(nèi)部寄存器
圖7 PWM發(fā)生邏輯模塊外部視圖
圖8 PWM發(fā)生邏輯模塊內(nèi)部視圖
圖9 ,圖10為仿真輸出波形:
圖9 占空比為1.95%的PWM波形輸出
圖10 占空比為56.25%的PWM波形輸出
仿真結(jié)果證明PWM發(fā)生邏輯模塊功能完整、工作正常,且實(shí)際模塊電路輸出波形與軟件仿真結(jié)果相符,控制效果達(dá)到了設(shè)計預(yù)期。
由于文中所述的數(shù)字PWM發(fā)生器每路使用獨(dú)立的寄存器和使能信號,不僅能對脈寬進(jìn)行高精度調(diào)節(jié),還可實(shí)現(xiàn)對頻率周期及初始相位的控制,且每1路都可獨(dú)立工作,在多路輸出時,每1路都可以以不同頻率或不同相位輸出。外部處理器可方便地通過SPI總線訪問和配置本模塊,以實(shí)現(xiàn)多路PWM輸出,從而大大減少了主處理器IO、寄存器及運(yùn)算資源。同時,此PWM發(fā)生器也可作為1個功能子模塊與片上處理器集成,構(gòu)成SOPC系統(tǒng)。此擴(kuò)展數(shù)字PWM發(fā)生器現(xiàn)已在實(shí)際模塊上成功運(yùn)用,且工作穩(wěn)定可靠,具有較高的調(diào)節(jié)精度和靈活性。以它為基礎(chǔ)可進(jìn)一步實(shí)現(xiàn)精確D/A轉(zhuǎn)換輸出和精密電機(jī)控制等功能。
[1] 孫立志.PWM與數(shù)字化電動機(jī)控制技術(shù)應(yīng)用[M].北京:中國電力出版社,2007.
[2] 金西.VHDL與復(fù)雜數(shù)字系統(tǒng)設(shè)計[M].西安:西安電子科技大學(xué)出版社,2003.
[3] 侯伯亨,顧新.VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計[M].西安:西安電子科技大學(xué)出版社,2002.