資源描述:
《利用dsp控制直流無刷電機(jī)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、利用DSP控制直流無刷電機(jī)摘要:介紹了一種利用雙口RAM實(shí)現(xiàn)DSP與單片機(jī)高速數(shù)據(jù)通信的方法,給出了它們之間的接口電路以及軟件實(shí)現(xiàn)方案。 狀態(tài)之間轉(zhuǎn)換的各種條件均標(biāo)在圖4的各個(gè)箭頭上。硬件上的其他事件:定時(shí)器A0、A1、A2的輸入捕捉,A3的輸入捕捉和溢出,D0的輸出比較以及加減速按鍵都是通過中斷的方式打入。所以整個(gè)軟件的結(jié)構(gòu)如圖5所示?! ∠到y(tǒng)一加電,程序進(jìn)入初始化函數(shù)Initialize(),在這個(gè)函數(shù)中,做了以下工作: ◆啟動(dòng)直流電壓ADC; ◆初始化Led,開始20ms的周期時(shí)鐘中斷D0; ◆開關(guān)狀態(tài)初始化; ◆P參數(shù)初始化;
2、◆捕捉積分編碼器跳變沿的定時(shí)器A0、A1、A2初始化; ◆相位檢測器初始化; ◆ApplicationMode=Init; ◆取得轉(zhuǎn)子位置,設(shè)好初始的導(dǎo)通相; ◆PI控制器初始化; ◆用于測量轉(zhuǎn)速的定時(shí)器A3的初始化?! 腎nitialize()返回后,立刻進(jìn)入前臺死循環(huán)。在轉(zhuǎn)子運(yùn)行過程中,定時(shí)器A0、A1、A2輸入捕捉的發(fā)生,標(biāo)志著轉(zhuǎn)子運(yùn)行到了一個(gè)需要換相的位置。輸入捕捉事件觸發(fā)中斷ISRQTimer(),在這個(gè)中斷服務(wù)程序中,完成以下的工作: ◆從相位檢測器取得當(dāng)前積分編碼器的三路輸出狀態(tài); ◆根據(jù)當(dāng)前積分編碼器輸出狀態(tài),判斷轉(zhuǎn)
3、子運(yùn)轉(zhuǎn)方向; ◆并調(diào)整P模塊的交換和屏蔽,即定子電流換相?! ∷哉f,定子電流的換相,是在緊隨著積分編碼器輸出跳變沿的中斷服務(wù)子程序中完成的。在判斷轉(zhuǎn)子運(yùn)轉(zhuǎn)方向的時(shí)候,使用了一個(gè)常數(shù)組:DIRECTION_TABLE[8]={0,5,3,1,6,4,2,0}。這個(gè)數(shù)組元素的下標(biāo)和元素的值對應(yīng)轉(zhuǎn)子在順時(shí)針運(yùn)轉(zhuǎn)情況下,當(dāng)前編碼器狀態(tài)和下一個(gè)編碼器狀態(tài)(見圖1)。比如,當(dāng)前編碼器輸出011,轉(zhuǎn)子磁場位于I區(qū),那么順時(shí)針運(yùn)轉(zhuǎn)時(shí),下一個(gè)編碼器狀態(tài)應(yīng)為001,這正好對應(yīng)于上述數(shù)組中,下標(biāo)為011的元素值為001。這樣,通過比較以編碼器上一個(gè)狀態(tài)作為下標(biāo)的數(shù)組
4、元素值與當(dāng)前狀態(tài)是否相同,就可以判斷轉(zhuǎn)子運(yùn)轉(zhuǎn)方向。在實(shí)現(xiàn)定子電流換相時(shí),也以當(dāng)前狀態(tài)為下標(biāo),從專門數(shù)組中取得P模塊通道交換與屏蔽所需的參數(shù)。在本應(yīng)用中,將三對P互補(bǔ)通道對的參數(shù)設(shè)成一致,通過屏蔽某一相,交換另外一相,實(shí)現(xiàn)定子繞組電流狀態(tài)的控制,如在圖2中,A相被屏蔽,B相頂功率管開關(guān)占空比為70%,而將C相兩個(gè)P通道交換,C相的底功率管開關(guān)占空比就由原來的30%成為70%,從而使電流由B相流入定子繞組而從C相流出,確定定子繞組B->C的電流狀態(tài)?! 》e分編碼器的某一路輸出,比如PHASEC的跳變,還觸發(fā)了定時(shí)器A3的輸入捕捉中斷。在輸入捕捉中
5、斷中,取得各個(gè)跳變沿之間的時(shí)間間隔,用來計(jì)算轉(zhuǎn)子速度。定時(shí)器A3的溢出中斷,也是為取得各個(gè)跳變沿之間的時(shí)間間隔服務(wù)。 在Initialize()函數(shù)中調(diào)用的LedInit()函數(shù)內(nèi)部已經(jīng)將定時(shí)器D0進(jìn)行了初始化,所以從那時(shí)開始,定時(shí)器D0開始運(yùn)行,每20ms產(chǎn)生一個(gè)中斷,觸發(fā)中斷服務(wù)子程序LedISR()的運(yùn)行。在LedISR()中,只是設(shè)了一個(gè)標(biāo)志位bLedISROccurred為真。但這會使得死循環(huán)內(nèi)ServiceLedISR()函數(shù)的具體內(nèi)容被執(zhí)行,而不是直接返回。ServiceLedISR()函數(shù)的具體代碼完成以下工作: ◆Led閃爍周
6、期計(jì)算和控制; ◆UpButton、Dos周期的ServiceLedISR()內(nèi)完成?! 〖訙p速按鍵也觸發(fā)中斷,在中斷服務(wù)子程序內(nèi),調(diào)用相應(yīng)函數(shù),實(shí)現(xiàn)系統(tǒng)設(shè)定速度的改變。