《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > 基于uC/OS-II的變頻器變結(jié)構(gòu)控制系統(tǒng)設(shè)計(jì)

基于uC/OS-II的變頻器變結(jié)構(gòu)控制系統(tǒng)設(shè)計(jì)

2008-08-26
作者:繆青海 陳模江 白連平

??? 摘 要: 介紹了抽油電機(jī)變頻器變結(jié)構(gòu)控制系統(tǒng)功能原理,,如何利用μC/OS-II" title="C/OS-II">C/OS-II的多任務(wù)" title="多任務(wù)">多任務(wù)功能實(shí)現(xiàn)控制系統(tǒng)的算法結(jié)構(gòu)變換,,操作系統(tǒng)的移植、多任務(wù)的建立和SDK下的軟件設(shè)計(jì);最后總結(jié)了在應(yīng)用中需注意的問(wèn)題,。
??? 關(guān)鍵詞: μC/OS-II? 多任務(wù)? DSP56F803? 變結(jié)構(gòu)控制

?

??? 在油田生產(chǎn)中為了節(jié)省電能并減小故障率,,變頻器得到越來(lái)越多的應(yīng)用。但由于油井負(fù)載的非周期大脈動(dòng)性質(zhì),,從能量的流向來(lái)看,,變頻器有兩種運(yùn)行狀態(tài)——電動(dòng)運(yùn)行和回饋制動(dòng)。不同運(yùn)行狀態(tài)的控制變量和控制方法是不同的,,這就要采用所謂的變結(jié)構(gòu)控制,。本應(yīng)用是實(shí)現(xiàn)抽油電機(jī)變頻驅(qū)動(dòng)中的變結(jié)構(gòu)控制,不同的控制結(jié)構(gòu)" title="控制結(jié)構(gòu)">控制結(jié)構(gòu)通過(guò)任務(wù)間的切換實(shí)現(xiàn)。
??? 系統(tǒng)控制核心采用DSP56F803,,它是Motorola公司推出的16位DSP型微控制器,,運(yùn)算速度可達(dá)40MIPS,片內(nèi)資源豐富,,有強(qiáng)大的軟件支持,,是嵌入式應(yīng)用的理想選擇。本系統(tǒng)應(yīng)用了其SPI、SCI,、PWM,、鍵盤(pán)中斷及通用I/O口等功能模塊。
1 系統(tǒng)設(shè)計(jì)
1.1?μC/OS-II的移植與配置

??? Motorola公司提供的軟件開(kāi)發(fā)工具包SDK為使用μC/OS-II做好了鋪墊工作,,與硬件相關(guān)的文件OS_CPU.H,、OS_CPU_A.ASM和OS_CPU_C.C已經(jīng)給出,只需購(gòu)得系統(tǒng)源代碼,,然后將其考入指定的文件目錄,,系統(tǒng)的移植就完成了。本文采用最新版本μC/OS-II V2.51,。
??? 系統(tǒng)移植成功后,,需要對(duì)操作系統(tǒng)進(jìn)行配置(裁剪),把用不到的功能去掉,,以最大限度地節(jié)省存儲(chǔ)空間,。這項(xiàng)工作是通過(guò)os_cfg.h中的宏定義進(jìn)行的,本文只用到了多任務(wù)管理,、信號(hào)量" title="信號(hào)量">信號(hào)量,、互斥量等功能。在本應(yīng)用中,,μC/OS-II內(nèi)核經(jīng)過(guò)剪裁后只有3KB左右,,相對(duì)DSP56F803的32KB內(nèi)部程序Flash只用了不到十分之一。需注意的另一個(gè)關(guān)鍵設(shè)置是時(shí)鐘節(jié)拍中斷頻率OS_TICKS_PER_SEC,,它是系統(tǒng)多任務(wù)運(yùn)行所依賴(lài)的時(shí)間基準(zhǔn),,也決定了任務(wù)重復(fù)調(diào)用的最快頻率。這里缺省設(shè)為1000,,要比文獻(xiàn)[3]中的推薦值高出一個(gè)數(shù)量級(jí),。但實(shí)際應(yīng)用表明,DSP56F803以其高運(yùn)算速度在這個(gè)設(shè)置下是完全勝任的,。
1.2 系統(tǒng)功能
??? 根據(jù)油田生產(chǎn)的要求,,系統(tǒng)要實(shí)現(xiàn)以下功能:鍵盤(pán)輸入、參數(shù)顯示,、三相電流采集,、直流側(cè)電壓采集、溫度采集,、變頻指令輸出以及保護(hù)等,。系統(tǒng)對(duì)電流、電壓,、溫度進(jìn)行周期性采樣,,采樣值經(jīng)過(guò)數(shù)字信號(hào)處理,作為控制器的參數(shù),最后由控制算法得出控制量,,經(jīng)PWM和D/A轉(zhuǎn)換器發(fā)送給變頻器,,形成反饋閉環(huán)控制。系統(tǒng)運(yùn)行過(guò)程中實(shí)時(shí)顯示電流,、溫度等參數(shù),,并可以通過(guò)鍵盤(pán)對(duì)控制器進(jìn)行參數(shù)在線設(shè)定,。另外,,高溫、過(guò)流等保護(hù)功能必不可少,。系統(tǒng)原理如圖1,。控制器根據(jù)直流側(cè)電容C上電壓的大小來(lái)確定以哪一種控制結(jié)構(gòu)運(yùn)行,。當(dāng)直流側(cè)電壓不超過(guò)設(shè)定值時(shí),,系統(tǒng)以電動(dòng)狀態(tài)運(yùn)行。超過(guò)設(shè)定值時(shí)要以回饋制動(dòng)方式運(yùn)行,,要求兩種工作狀態(tài)要互鎖,,切換要準(zhǔn)確、及時(shí),。

?


1.3 任務(wù)的創(chuàng)建及變結(jié)構(gòu)控制的實(shí)現(xiàn)
??? 根據(jù)功能要求,,本著盡量減少任務(wù)數(shù)以減輕CPU運(yùn)行負(fù)擔(dān)的原則,本文設(shè)計(jì)了AD采集,、電動(dòng)運(yùn)行,、回饋制動(dòng)和顯示四個(gè)任務(wù)。另外還設(shè)計(jì)了兩個(gè)中斷服務(wù)子程序:用PortA口的中斷功能實(shí)現(xiàn)8個(gè)鍵盤(pán)輸入,,用外部中斷IrqA實(shí)現(xiàn)短路,、過(guò)流、缺相保護(hù)功能,。
??? 每個(gè)任務(wù)都有自己的名稱(chēng),、內(nèi)存空間和優(yōu)先級(jí)。不同的任務(wù)必須有不同的優(yōu)先級(jí),,它們可以是0~62之間的任意值,,數(shù)值越小優(yōu)先級(jí)越高。優(yōu)先級(jí)的設(shè)置有不同的依據(jù),,以本文為例,,回饋運(yùn)行任務(wù)對(duì)時(shí)間要求最苛刻,如果不能及時(shí)啟動(dòng)或過(guò)早結(jié)束都會(huì)對(duì)變頻器造成危害,,所以其優(yōu)先級(jí)設(shè)為最高,;AD采集任務(wù)運(yùn)行最頻繁,必須為其它任務(wù)提供可靠的參數(shù),優(yōu)先級(jí)設(shè)為次高,;電動(dòng)運(yùn)行任務(wù)是常規(guī)運(yùn)行狀態(tài),,優(yōu)先級(jí)低于AD采集任務(wù);顯示任務(wù)只實(shí)現(xiàn)人機(jī)交互,,顯示狀態(tài)和參數(shù)對(duì)控制器性能沒(méi)有直接影響,,優(yōu)先級(jí)設(shè)為最低。μC/OS-II要求為每個(gè)任務(wù)分配OS_STK類(lèi)型的堆??臻g,,并且它們占用的RAM存儲(chǔ)空間必須是連續(xù)的。
??? 任務(wù)延時(shí)是指任務(wù)執(zhí)行完畢處于掛起等待狀態(tài)到下一次重新運(yùn)行之間的時(shí)間間隔,,它的單位是時(shí)鐘中斷節(jié)拍,。由于OS_TICKS_PER_SEC為1000,每一拍為1ms,。每個(gè)任務(wù)的調(diào)用間隔不能小于一個(gè)節(jié)拍,,它將影響模擬量的采樣頻率。
??? 各個(gè)任務(wù)的屬性定義如表1所示,。

?


1.4 任務(wù)間的通信
??? 各個(gè)任務(wù)是通過(guò)搶占CPU的使用權(quán)來(lái)運(yùn)行的,,它們之間存在一定的邏輯關(guān)系,彼此互相聯(lián)系又互相制約,。信號(hào)量,、郵箱、消息隊(duì)列等功能為實(shí)現(xiàn)任務(wù)間通信提供了有力工具,,它們的使用方法靈活多變,,如用信號(hào)量設(shè)置事件標(biāo)志,喚醒任務(wù),、用郵箱在任務(wù)間傳遞參數(shù),、用消息隊(duì)列的循環(huán)尋址功能進(jìn)行模擬通道的數(shù)據(jù)采集等。本文設(shè)計(jì)了兩個(gè)信號(hào)量,,在系統(tǒng)運(yùn)行開(kāi)始后,,任務(wù)TASK_AD檢測(cè)直流側(cè)電壓的大小。當(dāng)電壓未超過(guò)設(shè)定值時(shí),,發(fā)出信號(hào)DC_NORM喚醒任務(wù)Task_NORMAL,;當(dāng)電壓高出設(shè)定值時(shí),發(fā)出信號(hào)DC_OVER喚醒任務(wù)Task_FEBACK,。雖然這兩個(gè)任務(wù)基于不同的控制結(jié)構(gòu),,采用不同的算法,但都要使用PWM輸出和SPI通信口,,所以在喚醒一個(gè)任務(wù)的同時(shí)必須讓另外一個(gè)任務(wù)掛起,。這里引入了互斥型信號(hào)量T_MUTEX實(shí)現(xiàn)這個(gè)功能,。得到T_MUTEX信號(hào)的任務(wù)將獨(dú)自占有共享資源的使用權(quán),兩個(gè)任務(wù)不會(huì)因資源沖突而同時(shí)掛起,,解決了任務(wù)間優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題,,避免了系統(tǒng)功能失效。任務(wù)間邏輯關(guān)系如圖2所示,。

?


??? 操作系統(tǒng)為任務(wù)間通信提供了多種途徑,,但最簡(jiǎn)單有效的方法是共享全局變量。本文使用共享全局變量的方法實(shí)現(xiàn)了顯示任務(wù)與鍵盤(pán)中斷服務(wù)之間的通信,,代碼如下:
??? 鍵盤(pán)中斷:
??? static void KeyboardISR(void)
??? {
??? ??UWord16?? cpu_sr;
???? ?OS_ENTER_CRITICAL(); //臨界區(qū)代碼保護(hù)
??? ??asm{
??? ??move X:$0FB7,A1??//讀鍵盤(pán)中斷狀態(tài)表
??? ??move A1,state1??//將中斷狀態(tài)放入全局變量
??? ??};
??? ??OS_EXIT_CRITICAL();?//臨界區(qū)代碼保護(hù)結(jié)束
??? ??}
??? 這里state1是全局變量,,鍵盤(pán)中斷的工作僅僅是將PORTA口中斷狀態(tài)寄存器(IESR,地址$0FB8)讀入state1中,。為防止其他任務(wù)在此期間對(duì)state1的修改,,使用了臨界區(qū)代碼保護(hù),。
??? 顯示任務(wù)的部分代碼:
????switch(state1)
???????{case 1:??//PTA_0對(duì)應(yīng)的鍵被按下
???????……???//相應(yīng)的服務(wù)程序,,略
?? ?? ?case 128:??//PTA_7對(duì)應(yīng)的鍵被按下
?? ????break; }
? ??asm{move $00,X:$0FB8};??????? //清鍵盤(pán)中斷狀態(tài),以備下次中斷
??? 顯示任務(wù)中采用多分支結(jié)構(gòu),,根據(jù)statel=2n,(n=0,1,2,3,,4,5,6,7),,不同的值代表不同的鍵被按下,程序進(jìn)行相應(yīng)的處理;最后將IESR寄存器清零,。用同樣的方法,,兩位之間互相組合可擴(kuò)展形成16個(gè)按鍵。這樣只用一個(gè)全局變量就完成了中斷與任務(wù)間的通信,,程序用內(nèi)嵌匯編的C來(lái)寫(xiě),,簡(jiǎn)捷高效。
2 系統(tǒng)設(shè)計(jì)中需注意的問(wèn)題
??? 首先是存儲(chǔ)器分配問(wèn)題,。多任務(wù),、郵箱等功能的使用會(huì)增加RAM的額外開(kāi)銷(xiāo),在不擴(kuò)展外部RAM的情況下,,可用的只有片內(nèi)2KB數(shù)據(jù)RAM和512字的程序RAM,,資源相對(duì)有限,存儲(chǔ)空間的合理分配就顯得很重要,。任務(wù)堆棧所占用的RAM空間要根據(jù)實(shí)際應(yīng)用來(lái)確定,,必須考慮任務(wù)調(diào)用的嵌套情況、任務(wù)中函數(shù)為局部變量所分配的內(nèi)存數(shù)目,。另外,,它必須能保存DSP的所有22個(gè)寄存器和16個(gè)存儲(chǔ)器字。如果為任務(wù)分配的存儲(chǔ)空間富余過(guò)多則造成資源緊張,,甚至?xí)騼?nèi)存溢出導(dǎo)致系統(tǒng)崩潰,。解決方法是調(diào)用系統(tǒng)函數(shù)OSTaskStkChk(),,它可以檢測(cè)每個(gè)任務(wù)運(yùn)行時(shí)使用的內(nèi)存大小,為合理分配內(nèi)存空間提供了依據(jù),。另外,,可采用一些簡(jiǎn)化方法節(jié)省RAM空間。例如SDK為AD采集的每個(gè)通道都定義一個(gè)結(jié)構(gòu)體" title="結(jié)構(gòu)體">結(jié)構(gòu)體,,它包括三個(gè)元素:句柄,、數(shù)值長(zhǎng)度和采樣值;如果使用五路AD采集,,就得定義五個(gè)結(jié)構(gòu)體,。通常不進(jìn)行初始化,DSP內(nèi)核在運(yùn)行時(shí)將它們放入RAM空間,,占用RAM較多,。通常關(guān)心的只是采樣值一個(gè)元素,其他兩個(gè)只完成輔助功能,。如果使用一個(gè)存放采樣值的變量代替這個(gè)結(jié)構(gòu)體,,或直接采用匯編語(yǔ)言寫(xiě)這段代碼,就可大幅度地節(jié)省RAM空間,。本文的AD采集程序就是用匯編完成,。
??? SDK沒(méi)有提供在DSP56F803下使用SPI函數(shù)的例程。仿照在807中的成功應(yīng)用,,筆者調(diào)用spiWrite()函數(shù),,通過(guò)SPI驅(qū)動(dòng)D/A轉(zhuǎn)換芯片。但在編譯連接時(shí)出現(xiàn)系統(tǒng)錯(cuò)誤,,數(shù)據(jù)類(lèi)型unsigned short與const void不匹配,,在const.c中將spiWrite做強(qiáng)制類(lèi)型轉(zhuǎn)換(void*)(&spiWrite),解決了這一問(wèn)題,。
??? 利用SDK與μC/OS-II相配合,,充分發(fā)揮了DSP型控制器DSP56F803的功能,采用內(nèi)嵌匯編的C語(yǔ)言編程,,大大提高了代碼的可讀性和可移植性,,縮短了系統(tǒng)開(kāi)發(fā)周期,成功實(shí)現(xiàn)了系統(tǒng)的變結(jié)構(gòu)控制功能,,也體現(xiàn)了操作系統(tǒng)的多任務(wù)功能在實(shí)現(xiàn)多算法結(jié)構(gòu)上的優(yōu)越性,。
參考文獻(xiàn)
1 Motolora DSP56F80X User's Manual.? 2000
2 Motolora SDK Programmer's Guide. 2001
3 Labrosse Jean J.,邵貝貝譯.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II.北京:北京航空航天大學(xué)出版社,,2003
4 邵貝貝.Motolora DSP型16位單片機(jī)原理與實(shí)踐. 北京:北京航空航天大學(xué)出版社,,2003

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章,、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]