μCOS-Ⅱ在無(wú)刷直流電機(jī)位置伺服系統(tǒng)中的應(yīng)用
μCOS-Ⅱ在無(wú)刷直流電機(jī)位置伺服系統(tǒng)中的應(yīng)用
綜MC/OS-在無(wú)刷直流電機(jī)位置伺服系統(tǒng)中的應(yīng)用劉衛(wèi)國(guó)胡亞山劉朝芳西北工業(yè)大學(xué)稀土永磁電機(jī)及控制技術(shù)研究所,西安710072)刷直流電機(jī)位置伺服系統(tǒng)該系統(tǒng)充分利用了DSP周邊外設(shè)豐富既運(yùn)算速度快的簡(jiǎn)化硬件系統(tǒng),而PC/OS-I,能最大限度地縮短軟件開(kāi)發(fā)周期。
0概述TMS320F240(以下簡(jiǎn)稱F240)是T1公司的一款應(yīng)用于運(yùn)動(dòng)控制領(lǐng)域的定點(diǎn)DSP,運(yùn)算速度快,外圍設(shè)備豐富,功能強(qiáng)大,價(jià)格便宜,成為應(yīng)用于電機(jī)控制領(lǐng)域的理想微處理器,為高性能數(shù)字伺服系統(tǒng)提供了實(shí)現(xiàn)手段。但是當(dāng)應(yīng)用于較復(fù)雜的系統(tǒng)中時(shí),它要同時(shí)完成采樣計(jì)算、控制、通訊等任務(wù),沒(méi)有一個(gè)實(shí)時(shí)多任務(wù)操作系統(tǒng)是不行的。PC/OS-是一種源碼公開(kāi)的占先式實(shí)時(shí)多任務(wù)操作系統(tǒng)絕大部分的源代碼是用移植性很強(qiáng)的ANSIC寫(xiě)的,和微處理器相關(guān)的部分是用匯編語(yǔ)言寫(xiě)的。匯編語(yǔ)言寫(xiě)的部分已經(jīng)壓到最低程度由于與硬件相關(guān)的代碼僅200行左右,且注解很清楚,使得PC/OS-能很方便地移植到微處理器上,包括F240處理器。F240與PC/OS-的結(jié)合,使得位置伺服系統(tǒng)的硬件設(shè)計(jì)和軟件設(shè)計(jì)都變得非常簡(jiǎn)單,能極大限度地降低開(kāi)發(fā)難度和縮短軟件開(kāi)發(fā)周期1系統(tǒng)硬件構(gòu)成本硬件系統(tǒng)主要由功率驅(qū)動(dòng)*MOSFET逆變電路和邏輯控制電路及必要的保護(hù)電路構(gòu)成,還包括完成位置伺服功能所必需的電流、轉(zhuǎn)速和位移檢測(cè)功能其系統(tǒng)硬件構(gòu)成如所示本系統(tǒng)采用F240為主要控制單元轉(zhuǎn)子位置傳感器采用霍爾傳感器,其輸出送入F240的快速捕獲單元(CAP模塊),采用查詢的方式或中斷的方式,F(xiàn)240將獲知當(dāng)前轉(zhuǎn)子所處的位置,改變控制PWM波形的方式控制ACTR內(nèi)部的事理管理器模塊(EV)將產(chǎn)生無(wú)刷直流電機(jī)所需要的6路PWM波形,以便進(jìn)行正確地?fù)Q相,從而完成電機(jī)的控制與驅(qū)動(dòng)DSP除了完成無(wú)刷直流電機(jī)的控制驅(qū)動(dòng)這一基本功能之外,還要進(jìn)行系統(tǒng)的故障檢測(cè)與系統(tǒng)保護(hù)以及位置環(huán)速度環(huán)電流環(huán)三環(huán)控制。三環(huán)控制規(guī)律和算法的實(shí)現(xiàn),都是在F240內(nèi)部實(shí)現(xiàn)的。為了提高系統(tǒng)的快速特性,必須加入電流環(huán)。電流檢測(cè)電路檢測(cè)流過(guò)無(wú)刷直流電機(jī)的電流大小,送到F240的A/D轉(zhuǎn)換模塊,以便進(jìn)行處理。F240獲得從外界給定一個(gè)位置信號(hào)后0g和從位置傳感器獲得反饋回來(lái)的當(dāng)前的位置信號(hào)0f,通過(guò)一定的控制算法,驅(qū)/模2伺服系統(tǒng)軟件軟件是基于上述硬件的基礎(chǔ)上設(shè)計(jì)的。正確的硬件系統(tǒng)是軟件設(shè)計(jì)的前提。本系統(tǒng)采用MC/OS-實(shí)時(shí)多任務(wù)操件系統(tǒng)編程,這與平時(shí)用到的前后臺(tái)系統(tǒng)編程思想不同不太復(fù)雜的的小系統(tǒng)一般設(shè)計(jì)成前后臺(tái)系統(tǒng)應(yīng)用程序是一個(gè)無(wú)限循環(huán),在循環(huán)中調(diào)用相應(yīng)的函數(shù)完成相應(yīng)操作,這部分稱為后臺(tái)行為,而中斷服務(wù)程序處理異步事件,這部分稱為前臺(tái)行為。但是當(dāng)情況比較復(fù)雜時(shí),一般用一個(gè)適當(dāng)?shù)牟僮飨到y(tǒng)降低系統(tǒng)開(kāi)發(fā)的難度,使得應(yīng)用程序的開(kāi)發(fā)比較容易。而MC/OS-就是一個(gè)開(kāi)發(fā)中小型項(xiàng)目比較合適的嵌入式實(shí)時(shí)操作系統(tǒng)MC/OS-是源碼公開(kāi)的嵌入式實(shí)時(shí)多任務(wù)操作系統(tǒng),它可移植到很多處理器上,包括我們用到的F240它的源代碼可裁剪,可以減少M(fèi)C/OS-所需的存儲(chǔ)器空間(RAM和ROM),穩(wěn)定性和可靠性都很高。自1992年以來(lái),世界上已有很多人在各個(gè)領(lǐng)域使用MC/OS-I例如,照相機(jī)行業(yè)醫(yī)療器械、音響設(shè)施、發(fā)動(dòng)機(jī)控制1丨網(wǎng)絡(luò)設(shè)備、高速公路電話系統(tǒng)、自動(dòng)提款機(jī)、工業(yè)機(jī)器人等等。
為了實(shí)現(xiàn)在多任務(wù)操作系統(tǒng)MC/OS-在基于F240位置伺服系統(tǒng)中的應(yīng)用,首要的任務(wù)就是要實(shí)現(xiàn)MC/OS-在F240上的移植,使得實(shí)時(shí)內(nèi)核能在F240上運(yùn)行。MC/OS-的移植相對(duì)來(lái)說(shuō)比較簡(jiǎn)單移植MC/OS-,主要是修改它與處理器有關(guān)的3個(gè)文件OSCPU.HOSCPU內(nèi)部機(jī)理,掌握如何實(shí)現(xiàn)任務(wù)之間的調(diào)度以及系統(tǒng)堆棧數(shù)據(jù)的壓入壓出對(duì)成功地移植極為重要。
在F240中,可采用定時(shí)器1周期中斷T1PNT或?qū)崟r(shí)中斷RTI作為時(shí)鐘節(jié)拍源,時(shí)鐘節(jié)拍的頻率一般在10Hzr 100Hz左右采用軟件中斷作為任務(wù)切換的中斷服務(wù)例程。
代碼移植結(jié)束后,下一步就是測(cè)試可以讓內(nèi)核自己測(cè)試自己,也可以運(yùn)行一些簡(jiǎn)單的任務(wù)和時(shí)鐘節(jié)拍中斷服務(wù)程序一旦多任務(wù)調(diào)度成功地運(yùn)行起來(lái)了,一個(gè)實(shí)時(shí)多任務(wù)操作系統(tǒng)平臺(tái)就建立起來(lái)了。
2.2多任務(wù)操作系統(tǒng)流程整個(gè)軟件的流程如所示其中OSInU()函數(shù)用于初始化MC/OS-所有的變量和數(shù)據(jù)結(jié)構(gòu)。OSInit()同時(shí)還建立空閑任務(wù),這個(gè)任務(wù)總是處于就緒態(tài)的。空閑任務(wù)OSTaskidle()的優(yōu)先級(jí)最低,即OSLOWESTPRIO若有統(tǒng)計(jì)任務(wù),還得建立統(tǒng)計(jì)任務(wù)OSTaskST(),并讓其進(jìn)入就緒態(tài),其1同時(shí),根據(jù)系統(tǒng)的配置初始化4個(gè)數(shù)據(jù)結(jié)構(gòu)緩沖區(qū),包括任務(wù)控制塊緩沖區(qū)、事件緩沖區(qū)、隊(duì)列緩沖區(qū)和存儲(chǔ)器緩沖區(qū)。創(chuàng)建任務(wù)進(jìn)程部分主要用于創(chuàng)建用戶的任務(wù)。OSStart()用于啟動(dòng)多任務(wù),在啟動(dòng)MC/OS-之前,用戶至少要建立一個(gè)應(yīng)用任務(wù)。當(dāng)調(diào)用OSStarL()時(shí),OSStart()從任務(wù)就緒表中找出用戶建立的優(yōu)先級(jí)最高任務(wù)的控制塊,然后調(diào)用高優(yōu)先級(jí)就緒任務(wù)啟動(dòng)函數(shù)OSSLarLHighRdy()函數(shù)OS-SLarLHighRdy()將最高優(yōu)先級(jí)任務(wù)中任務(wù)堆棧中保存的值彈回到CPU寄存器中,然后執(zhí)行一條中斷返回指令。中斷返回指令強(qiáng)制執(zhí)行該任務(wù)代碼,然后在最高優(yōu)先級(jí)任務(wù)中初始化時(shí)鐘節(jié)拍中斷函數(shù),以后就可以進(jìn)行任務(wù)調(diào)度了。
主要的工作就是將F240要完成的任務(wù)合理地服系統(tǒng)要完成如下的任務(wù):產(chǎn)生驅(qū)動(dòng)無(wú)刷直流電機(jī)的6路PWM波形;對(duì)給定的位置信號(hào)及反饋回來(lái)的位置信號(hào)進(jìn)行采樣并進(jìn)行位置閉環(huán)調(diào)節(jié);計(jì)算轉(zhuǎn)速值并進(jìn)行速度閉環(huán)的調(diào)節(jié);對(duì)流過(guò)無(wú)刷直流電機(jī)的電流進(jìn)行采樣并進(jìn)行電流環(huán)調(diào)節(jié)。
2.3.1故障檢測(cè)及保護(hù)這里的保護(hù)主要是指過(guò)流保護(hù)。當(dāng)流過(guò)無(wú)刷直流電機(jī)的電流過(guò)大時(shí),故障信號(hào)低有效將發(fā)送到F240的功率中斷PDPINT端,定時(shí)器比較輸出信號(hào)將立即變?yōu)楦咦钁B(tài),封鎖6路PWM輸出,從而關(guān)斷逆變電路的所有開(kāi)關(guān)管,起到保護(hù)的作用。
2.3.2無(wú)刷直流電機(jī)的驅(qū)動(dòng)產(chǎn)生驅(qū)動(dòng)無(wú)刷直流電機(jī)的6路PWM波形有兩種方法,一種是采用查詢方法,另一種是采用中斷方法。若采用查詢方法,CPU的大部分時(shí)間都浪費(fèi)在查詢當(dāng)前的轉(zhuǎn)子位置信號(hào)上,顯得不合理因此,本系統(tǒng)采用中斷方式。首先在主程序的開(kāi)頭,啟動(dòng)無(wú)刷直流電機(jī),然后在捕獲中斷中實(shí)現(xiàn)電機(jī)的換柜在捕獲中斷程序中,首先將CAP對(duì)應(yīng)的引腳設(shè)置為普通的IO口功能并設(shè)置為輸入模式,讀取當(dāng)前的轉(zhuǎn)子位置信號(hào)。根據(jù)當(dāng)前的轉(zhuǎn)子位置信號(hào),決定要開(kāi)通哪兩個(gè)功率管,從而決定PWM輸出方式控制字ACTR的值。事件管理器(EV)輸出滿足要求的PWM波形,完成無(wú)刷直流電機(jī)的電子換相,然后恢復(fù)CAP對(duì)應(yīng)引腳的捕獲功能,最后清除中斷標(biāo)志位,捕獲中斷程序結(jié)束。
2.3.3位置環(huán)速度環(huán)和電流環(huán)的實(shí)現(xiàn)過(guò)流保護(hù)及無(wú)刷直流電機(jī)的驅(qū)動(dòng)都是用中斷來(lái)實(shí)現(xiàn)的。與它們不同,位置環(huán)、速度環(huán)、電流環(huán)均采用任務(wù)調(diào)度方式來(lái)實(shí)現(xiàn)在此任務(wù)中,位置環(huán)的優(yōu)先級(jí)最高,速度環(huán)的優(yōu)先級(jí)次之,電流的優(yōu)先級(jí)最低。在三環(huán)控制系統(tǒng)中,一般電流環(huán)速度環(huán)、位置環(huán)的周期相差一個(gè)數(shù)量級(jí)。在此系統(tǒng)中,假設(shè)進(jìn)行了30個(gè)電流環(huán)調(diào)節(jié)后進(jìn)行一次速度環(huán)調(diào)節(jié),進(jìn)行10次速度環(huán)之后進(jìn)行一次位置環(huán)調(diào)節(jié)。
位置環(huán)的實(shí)現(xiàn)位置環(huán)的主要任務(wù)是采集給定的位置信號(hào)與反饋回來(lái)的位置信號(hào),然后經(jīng)過(guò)一定的算法,如傳統(tǒng)的PI算法,模糊控制算法等,給出中間環(huán)速度環(huán)的速度值。在此系統(tǒng)中,給定的位置信號(hào)和反饋回來(lái)的信號(hào)均為模擬量,它們經(jīng)過(guò)信號(hào)處理電路后送入F240中A/D轉(zhuǎn)換器的引腳上由于位置環(huán)是所有任務(wù)中優(yōu)先級(jí)最高的任務(wù),故系統(tǒng)在開(kāi)始進(jìn)行多任務(wù)調(diào)度時(shí),調(diào)度的第一個(gè)任務(wù)即是PositionTask()器中斷放在系統(tǒng)初始化函數(shù)OSInit()之后,調(diào)用多任務(wù)系統(tǒng)啟動(dòng)函數(shù)OSStart()之前。這里潛在的危險(xiǎn)是,時(shí)鐘節(jié)拍中斷有可能在MC/OS-n啟動(dòng)第一個(gè)任務(wù)之前發(fā)生,此時(shí)MC/OS-處于一種不確定的狀態(tài),用戶應(yīng)用程序有可能會(huì)崩潰在本系統(tǒng)中,我們?cè)赑ositionTask()程序中for(;)語(yǔ)句之前,也即死循環(huán)之前,啟動(dòng)時(shí)鐘節(jié)拍中斷采用F240的實(shí)時(shí)中斷RTI中斷時(shí)鐘節(jié)拍中斷。
與RTI中斷有關(guān)的只有兩個(gè)寄存器,為實(shí)時(shí)中斷計(jì)數(shù)寄存器RTICNT和實(shí)時(shí)中斷控制寄存器RTI-CR配置RTI十分簡(jiǎn)單,只要將RTICR中的中斷允許位RTIENA置1,同時(shí),設(shè)置實(shí)時(shí)中斷預(yù)分頻位RTIPS2-RTIPS()確定實(shí)時(shí)中斷的頻率我們把位置環(huán)作為一個(gè)任務(wù)進(jìn)行調(diào)度下面為此任務(wù)程序清單。
務(wù)初始化時(shí)鐘節(jié)拍中斷函數(shù);速度環(huán)完成后發(fā)送的信號(hào)量獲得ADC資源;發(fā)送A/D采樣開(kāi)始命令,采樣給定的位置信號(hào)和反饋的位置信號(hào);進(jìn)行位置閉環(huán)算法,給出速度值;同時(shí),在主程序創(chuàng)建任務(wù)的代碼區(qū)中添加如下代碼;//W創(chuàng)建位置環(huán)任務(wù)建立任務(wù)的一個(gè)函數(shù)。其中傳遞的第一個(gè)參數(shù)為任務(wù)的名字,即任務(wù)的入口地址第二個(gè)參數(shù)為任務(wù)開(kāi)始執(zhí)行時(shí)傳遞給任務(wù)的參數(shù)的指針,第三個(gè)參數(shù)為分配給任務(wù)的堆棧頂指針,第四個(gè)參數(shù)為分配給任務(wù)的優(yōu)先級(jí)。
添加完上述代碼后,就將位置環(huán)任務(wù)添加到操作系統(tǒng)中去了。
在此任務(wù)中代碼中,在等待獲得ADC資源和等待速度環(huán)給出的信號(hào)量時(shí),PositionTask()這個(gè)任務(wù)將被掛起,這時(shí)將會(huì)切換到別的優(yōu)先級(jí)最高的就緒態(tài)任務(wù)運(yùn)行速度環(huán)的實(shí)現(xiàn)速度環(huán)為三環(huán)控制系統(tǒng)中的中間環(huán),它的給定值為位置的輸出,反饋值為當(dāng)前無(wú)刷直流電機(jī)的轉(zhuǎn)速,輸出為內(nèi)環(huán)電流環(huán)的給定值。為此必須測(cè)出電機(jī)的轉(zhuǎn)速可以從轉(zhuǎn)子位置傳感器的信號(hào)通過(guò)計(jì)算來(lái)獲得轉(zhuǎn)速如果無(wú)刷直流電機(jī)是2對(duì)極的,則必須經(jīng)過(guò)12次電子換相,電機(jī)才轉(zhuǎn)動(dòng)一凰可以在固定的時(shí)間內(nèi)統(tǒng)計(jì)無(wú)刷直流電機(jī)換了多少次相,從而計(jì)算得出電機(jī)的轉(zhuǎn)速也可以統(tǒng)計(jì)在換固定值次相后統(tǒng)計(jì)經(jīng)過(guò)了多少時(shí)間的方法來(lái)獲得轉(zhuǎn)速當(dāng)然,也可采用計(jì)算位移傳感器的在單位時(shí)內(nèi)的變化量求轉(zhuǎn)速下面為速度環(huán)任務(wù)的程序清單:voidpositionTask(void*pdata)//速度環(huán)任務(wù)/防止出現(xiàn)編譯錯(cuò)誤for(;)內(nèi)環(huán)電流環(huán)的電流值;(SpeedLoop);//給位置環(huán)發(fā)送信號(hào)量,調(diào)度位置任務(wù)同時(shí),在主程序創(chuàng)建任務(wù)的代碼區(qū)中添加如下代碼:/創(chuàng)建速度環(huán)任務(wù)添加完上述代碼后,就將速度環(huán)任務(wù)添加到操作系統(tǒng)中去了電流環(huán)的實(shí)現(xiàn)電流環(huán)為三環(huán)控制系統(tǒng)中的內(nèi)環(huán)它的調(diào)節(jié)周期一般很短,假設(shè)周期為15(Ps為了避免產(chǎn)生電磁噪聲,選擇PWM波形的開(kāi)關(guān)頻率為20kHz,即定時(shí)周期為5(Ps當(dāng)定時(shí)器中斷三次時(shí),進(jìn)行電流閉環(huán),改變定時(shí)器比較寄存器的值,即改變PWM波形的占空比,從而達(dá)到改變通過(guò)電機(jī)電流的目的下面為電流環(huán)任務(wù)的程序清單:/防止出現(xiàn)編譯錯(cuò)誤for(;)獲得ADC資源;發(fā)送A/D采樣開(kāi)始命令,采樣給定的位置信號(hào)和反饋的位置信號(hào);等待A/D采樣結(jié)束;讀取A/D轉(zhuǎn)換結(jié)果;釋放ADC資源;進(jìn)行電流閉環(huán)算法,給出占空比大小,改變PWM方式控制字ACTR的值;電流環(huán)次數(shù)加1;(CurrentLoop);/給速度環(huán)發(fā)送信號(hào)時(shí),調(diào)度速度環(huán)任務(wù);同時(shí),在主程序創(chuàng)建任務(wù)的代碼區(qū)中添加如下代碼:/創(chuàng)建電流環(huán)任務(wù)添加完上述代碼后,就將電流環(huán)任務(wù)添加到操作系統(tǒng)中去了。