系統(tǒng)中的H橋驅動電路采用2路脈寬調制器(PWM)信號驅動一個電機來控制其正,反兩個方向的運轉,且兩路信號必須有一定的時間間隔來避免驅動電流過大損害驅動元件。為使其能靈活應用,針對系統(tǒng)要求,PWM控制器應具備以下功能: 3路獨立PWM輸出,每路輸出2個驅動信號,周期、占空比、死區(qū)時間可編程,對應10MHz系統(tǒng)時鐘,周期為1μs-6.5536ms; 精簡地址線,節(jié)省外圍引腳及地址資源占用; 提供與8/16bits單片機的雙向數(shù)據(jù)接口,內置地址/數(shù)據(jù)鎖存器。 PWM結構規(guī)劃 在采用自頂向下(Top_Down)正向設計中,芯片的結構劃分,規(guī)格定制是整個設計中最重要的環(huán)節(jié),合理的結構設計將決定整個設計的成敗。 PWM輸出信號的周期、脈寬、死區(qū)時間等參數(shù)可以通過加載內部的寄存器來實現(xiàn),寫入PWM芯片的數(shù)據(jù)分數(shù)據(jù)字與控制字兩部分。由內部控制邏輯模塊來處理控制字信息,并譯碼產(chǎn)生各內部通道內部信息寄存器的片選信號。數(shù)據(jù)字通過內部數(shù)據(jù)總線在各通道模塊傳遞PWM的特征信息數(shù)據(jù)。 芯片內部的各模塊通過內部片選結合讀寫使能完成數(shù)據(jù)交換。芯片與外圍控制器進行數(shù)據(jù)交換時采用雙模式接口(8/16bits),可通過外置選擇引腳DataWidth來選配。 芯片的核心是由3個完全獨立且相同的通道模塊構成。通道內部的數(shù)據(jù)接口將完成外部讀寫邏輯(RWLogic)傳輸?shù)絻炔繑?shù)據(jù)總線的數(shù)據(jù)收發(fā)工作。PWM周期生成模塊(ClkGen)則依據(jù)寫入的周期信息,輸出PWM的周期控制信號。 PWM輸出由通道狀態(tài)機完成,通道接收到PWM信息數(shù)據(jù)后,進行數(shù)據(jù)校驗,合格的數(shù)據(jù)將在合適的條件下啟動狀態(tài)機,并在不同的狀態(tài)下完成PWM輸出。不合格的數(shù)據(jù)將被忽略。 地址/數(shù)據(jù)鎖存則依據(jù)通用74LS373的邏輯功能,編寫一個完全可替代的L74LS373來實現(xiàn)。 根據(jù)總體構建思路,最終的芯片總體結構圖如圖1所示。 PWM電路結構設計 從圖1中開可以看出,PWM主要由模塊片選譯碼、控制邏輯、讀寫邏輯、通道等四個模塊組成,下面簡要介紹各部分功能。 模塊片選譯碼模塊通過地址信號Addr與片選信號Csb通過組合邏輯電路生成內部各子模塊的片選信號。 圖1 PWM整體結構圖 控制邏輯模塊主要產(chǎn)生通道內部Regs(寄存器)片選控制信號、各通道輸出控制信號,并完成精簡地址線的操作。 每個通道都包含各自獨立的4個16bits的Regs—正向信號長度、負向信號長度、死區(qū)長度、周期長度,控制字寄存器為8bits,因此整個芯片至少將占用3×4×2+1=25個地址(每個地址存儲8bits數(shù)據(jù)),傳統(tǒng)做法則至少需要5根地址線譯碼,而采用區(qū)分數(shù)據(jù)信息類型(控制字,數(shù)據(jù)字),則可以精簡地址線到2根。相對單片機緊缺的外面地址資源而已,好處是顯而易見的。具體來說,通過對寫入ControlRegister(控制字寄存器)的值進行分析,結合數(shù)據(jù)傳輸寬度生成內部Regs片選控制信號,這樣就可以通過控制字信息來完成內部Regs的地址譯碼,同時反饋被操作的寄存器的信息到RWLogic模塊完成8/16bits的數(shù)據(jù)讀寫操作。 值得注意的是,由于PWM內部包含3個完全一樣的獨立通道,因此為了更方便的對控制字進行操作,通過對控制字寄存器的分析,控制邏輯電路將自動將當前被操作通道的控制寄存器信息存儲在對應的控制寄存器備份中。這樣既方便在編程中靈活的操作各通道,又可避免在讀寫過程中誤修改非相干通道控制信息。 讀寫邏輯模塊用于處理外部數(shù)據(jù)Data[15:0](包括外部為16位或8位數(shù)據(jù)總線連接方式)到內部DataInternal[15:0]的轉換。 當DataWidth為1,采用16bits的數(shù)據(jù)傳輸、當DataWidth為0,采用8bits數(shù)據(jù)傳輸。PWM能完成對外部8bits或16bits的信息傳輸要求,準確的讀寫內部16bits的Regs,其具體實現(xiàn)方法如下: 采用16bits傳輸時,內部數(shù)據(jù)采用16bits傳輸,因此可以采用每個地址對應16bits數(shù)據(jù),每個數(shù)據(jù)位一一對應的傳輸方式。 采用8bits傳輸時,內部數(shù)據(jù)采用16bits傳輸,因此通過分析地址的奇偶特性可以確定數(shù)據(jù)高低字節(jié)存放,具體來說通過ControlLogic反饋的字節(jié)選擇位,讀寫邏輯電路能夠自適應的把16bits的Regs的數(shù)據(jù)信息分割加載到合適的數(shù)據(jù)通道上,完成數(shù)據(jù)的輸入輸出控制。 為了精簡數(shù)據(jù)線,實現(xiàn)數(shù)據(jù)的雙向流通,本模塊通過由片選,讀寫使能信號控制的雙向的三態(tài)門接口電路隔離讀寫信息。 通道是PWM芯片的核心部分,每個通道模塊都由3個子模塊組成,如圖2所示。 圖2 通道子模塊內部結構圖 數(shù)據(jù)接口模塊通過組合通道片選,內部寄存器片選信號及模塊讀寫使能信號產(chǎn)生各寄存器的讀寫使能信號。讀寫操作通過三態(tài)門與內部數(shù)據(jù)通道進行數(shù)據(jù)交換。 寫入本模塊的寄存器信息將進行數(shù)據(jù)校驗,只有校驗合格的數(shù)據(jù)才能被載入到內部寄存器的一級緩沖器(Buf)中,內部寄存器的一級緩沖器數(shù)據(jù)將輸出到PWMFSM模塊,提供PWM的特征數(shù)據(jù)。 周期信號發(fā)生器生成PWM的周期控制信號,其周期長短由數(shù)據(jù)接口傳過來的周期寄存器值(CycleReg)決定。模塊通過內部計數(shù)器計數(shù)時鐘,并與CycleReg比對,產(chǎn)生PWM的周期控制信號CycleScale。 狀態(tài)機產(chǎn)生PWM的核心功能模塊。通過加載數(shù)據(jù)接口模塊接收到的通道內部寄存器值,狀態(tài)機進行運轉。狀態(tài)機模塊中包含一個自運轉狀態(tài)機。當符合條件的寄存器值寫入通道寄存器后,狀態(tài)機在CycleScale信號的起始信息引導下,在時鐘的上升沿將內部寄存器一級緩沖器寫入到本模塊中的PWM信息寄存器Buf中,以便在下一個運行周期內載入到PWM的狀態(tài)機中。 狀態(tài)機啟動后,根據(jù)當前狀態(tài)輸出脈沖驅動信號。狀態(tài)機的轉換圖如圖3所示。狀態(tài)機的運轉流程如下: 復位或停止工作時進入IDLE狀態(tài)。 在合法的數(shù)據(jù)寫入通道寄存器后,在CycleScale的啟始信號被接收后,狀態(tài)機載入當前的通道內部寄存器緩沖器的值到狀態(tài)機定時器,并進入正向脈沖狀態(tài)。準備輸出正向電機驅動信號。 在正向脈沖狀態(tài)下,定時器開始減計數(shù),直到完成正向驅動所需要的時間。并在結束正向驅動的輸出后進入死區(qū)狀態(tài)死區(qū)。 在死區(qū)狀態(tài),關閉正向,負向電機驅動信號,并通過定時器等待死區(qū)時間結束后進入負向電機驅動狀態(tài)負向脈沖。 在負向脈沖狀態(tài)下,定時器開始減計數(shù),直到完成負向驅動所需要的時間。結束負向驅動的輸出后進入死區(qū)狀態(tài)死區(qū)。 圖3 狀態(tài)機轉換圖 在死區(qū)狀態(tài),關閉正向,負向電機驅動信號,并通過定時器等待死區(qū)時間結束,然后進入空閑等待狀態(tài)。等待下一次的啟動信號。 PWM編程方法 PWM芯片輸出使能由PWMh_b設定: 1: 全局使能輸出,為正常工作模式,但各Channel工作模式取決其PWMEN位的值 0: 全局禁止輸出,整個芯片不工作。此時芯片進入低功耗模式,時鐘被禁止輸入到內部通道模塊。 PWM芯片控制字寄存器決定當前芯片工作模式,控制字寄存器ControlReg[7:0]: 地址: [A1,A0] = 00 由于控制字寄存器僅有一個,但實際各通道都有一個備份的控制字寄存器來控制對應的通道。因此并不會由于對控制字的操作而影響到無關的通道。 PWMEN: 當芯片全局使能輸出時,由此位決定各通道PWM輸出使能,當PWMh_b為1時各通道的輸出正常工作,當為0時則通道禁止輸出。 Channel2Cs: 選通Channel2。使能對Channel2模塊的操作,并將控制字信息存儲到通道2的備份控制字。 Channel1Cs: 選通Channel1。使能對Channel1模塊的操作,并將控制字信息存儲到通道1的備份控制字。 Channel0Cs: 選通Channel0。使能對Channel0模塊的操作,并將控制字信息存儲到通道0的備份控制字。 [B2,B1,B0] : 內部寄存器片選譯碼。每個通道的PWM內部有8個寄存器地址。通過ChannelX的選通結合[B2,B1,B0]的譯碼產(chǎn)生內部通道Regs的片選信號。 PWM芯片在上電后,加載時鐘,所有通道禁止輸出。采樣DataWidth來確定外圍數(shù)據(jù)接口的寬度,如果采用16bits傳輸(DataWidth=1)則Data[15:0]都使用;如果采用8bits傳輸(DataWidth=0),則僅使用Data[7:0],高8bits需要外接地。 在復位(Reset_b)結束后,片選(Cs_b)有效的情況下,可以對芯片進行讀寫操作。對通道的一次完整的讀寫包括寫控制字與讀寫通道寄存器兩個過程,寫控制字選中通道內寄存器,讀寫通道寄存器獲取通道寄存器信息。僅當合理的數(shù)據(jù)寫入后,在PWMH_b有效(PWMH_b=1)時,PWM內部通道使能輸出信號。各通道的輸出使能由各通道的控制字寄存器的PWM_EN位決定。 由于采用了控制字自動備份的方式,控制字的編程非常靈活。既可以采用同一個類型的寄存器(不同通道),一起寫控制字,亦可同一個通道一塊操作。(所有控制字命令都可以在PWM的控制字命令列表查詢) PWM的仿真及驗證 PWM的仿真是PWM功能驗證的必要環(huán)節(jié)。利用Modelsim[3]結合腳本文件進行了仿真,并采用89c51結合FPGA驗證板對整個設計進行了驗證。 ModeslSim仿真需要解決PWM的雙向IO端口,PWM的Regs的讀寫控制時序。 對于雙向端口的數(shù)據(jù)交換,采用讀寫控制結合三態(tài)門可以比較完好的解決。對于大量的Regs讀寫操作,通過模擬單片機對外圍器件的操作。利用Task調用的方式實現(xiàn)。 模擬仿真的結果如圖4。 圖4 讀寫操作過程 從圖4中,可以看到當采用16bits讀寫時,各寄存器通過內部DataInternal數(shù)據(jù)總線的傳輸過程與電路設計要求完全一致。RWLogic與DataInterface模塊的功能完全符合設計預想。 圖5 輸出結果與程序設定的周期和PWM波形完全一致 從圖5中,可以看到PWM輸出信號,在ClkGen的CycleScale信號的控制下周期輸出編程設定的PWM波形,并能異步響應ChannelHold_b信號的輸出控制。 PWM的fpga驗證,采用8bits數(shù)據(jù)接口,89c51[4]做外圍控制器(12MHz),對PWM進行操作。為了方便與單片機接口,將74LS373鎖存器內置到PWM中。整個數(shù)字設計部分見圖6。 圖6 PWM+L74LS373電路圖(與51單片機驗證) 通過Synplify Pro編譯后的結果顯示: ProjectTopModule : PWMTopFor8051 Estimated Frequency: 72.9 MHz Total LUTs: 1478 of 4160 (35%) 占用FPGA資源35%。針對51系列的單片機而言,PWM可運行的頻率遠超過系統(tǒng)頻率。因此在讀寫時序上可以完全保證整個設計的可靠性。 將編譯后的pof文件下載到APEX20KE EP20K100E TQ144-2X(Altera) fpga[5]驗證板。采用40MHz的FPGA時鐘。根據(jù)先前軟件仿真的步驟,將讀寫操作轉換為單片機程序燒錄到單片機。最后的結果通過示波器我們可以清楚的看到實際輸出與設計完全一致。芯片采用.35工藝,一次流片成功后,測試結果顯示結果非常理想,實現(xiàn)了當初的設計要求。 |