《電子技術應用》
您所在的位置:首頁 > 電源技術 > 設計應用 > 基于uC/OS-II的變頻器結構控制系統(tǒng)設計
基于uC/OS-II的變頻器結構控制系統(tǒng)設計
摘要: 本文介紹了抽油電機變頻器變結構控制系統(tǒng)功能原理,,如何利用uC/OS-II的多任務功能實現(xiàn)控制系統(tǒng)的算法結構變換,,操作系統(tǒng)的移植,、多任務的建立和SDK下的軟件設計;最后總結了在應用中需注意的問題。
Abstract:
Key words :

  本文介紹了抽油電機變頻器結構控制系統(tǒng)功能原理,,如何利用uC/OS-II的多任務功能實現(xiàn)控制系統(tǒng)的算法結構變換,,操作系統(tǒng)的移植、多任務的建立和SDK下的軟件設計;最后總結了在應用中需注意的問題,。

  在油田生產中為了節(jié)省電能并減小故障率,,變頻器得到越來越多的應用。但由于油井負載的非周期大脈動性質,,從能量的流向來看,,變頻器有兩種運行狀態(tài)——電動運行和回饋制動。不同運行狀態(tài)的控制變量和控制方法是不同的,,這就要采用所謂的變結構控制,。本應用是實現(xiàn)抽油電機變頻驅動中的變結構控制,不同的控制結構通過任務間的切換實現(xiàn),。

  系統(tǒng)控制核心采用DSP56F803,,它是Motorola公司推出的16位DSP型微控制器,運算速度可達40MIPS,,片內資源豐富,,有強大的軟件支持,是嵌入式應用的理想選擇,。本系統(tǒng)應用了其SPI,、SCI、PWM,、鍵盤中斷及通用I/O口等功能模塊,。

  1 系統(tǒng)設計

  1.1 uC/OS-II的移植與配置

  Motorola公司提供的軟件開發(fā)工具包SDK為使用uCC/OS-II做好了鋪墊工作,與硬件相關的文件OS_CPU.H,、OS_CPU_A.ASM和OS_CPU_C.C已經給出,,只需購得系統(tǒng)源代碼,然后將其考入指定的文件目錄,,系統(tǒng)的移植就完成了,。本文采用最新版本uCC/OS-II V2.51。

  系統(tǒng)移植成功后,,需要對操作系統(tǒng)進行配置(裁剪),,把用不到的功能去掉,以最大限度地節(jié)省存儲空間,。這項工作是通過os_cfg.h中的宏定義進行的,,本文只用到了多任務管理、信號量,、互斥量等功能,。在本應用中,uCC/OS-II內核經過剪裁后只有3KB左右,,相對DSP56F803的32KB內部程序Flash只用了不到十分之一,。需注意的另一個關鍵設置是時鐘節(jié)拍中斷頻率OS_TICKS_PER_SEC,它是系統(tǒng)多任務運行所依賴的時間基準,,也決定了任務重復調用的最快頻率,。這里缺省設為1000,,要比文獻[3]中的推薦值高出一個數量級。但實際應用表明,,DSP56F803以其高運算速度在這個設置下是完全勝任的,。

  1.2 系統(tǒng)功能

  根據油田生產的要求,系統(tǒng)要實現(xiàn)以下功能:鍵盤輸入,、參數顯示,、三相電流采集、直流側電壓采集,、溫度采集,、變頻指令輸出以及保護等。系統(tǒng)對電流,、電壓,、溫度進行周期性采樣,采樣值經過數字信號處理,,作為控制器的參數,,最后由控制算法得出控制量,經PWM和D/A轉換器發(fā)送給變頻器,,形成反饋閉環(huán)控制,。系統(tǒng)運行過程中實時顯示電流、溫度等參數,,并可以通過鍵盤對控制器進行參數在線設定,。另外,高溫,、過流等保護功能必不可少,。系統(tǒng)原理如圖1??刂破鞲鶕绷鱾入娙軨上電壓的大小來確定以哪一種控制結構運行,。當直流側電壓不超過設定值時,系統(tǒng)以電動狀態(tài)運行,。超過設定值時要以回饋制動方式運行,,要求兩種工作狀態(tài)要互鎖,切換要準確,、及時,。

  

  1.3 任務的創(chuàng)建及變結構控制的實現(xiàn)

  根據功能要求,本著盡量減少任務數以減輕CPU運行負擔的原則,,本文設計了AD采集,、電動運行、回饋制動和顯示四個任務,。另外還設計了兩個中斷服務子程序:用PortA口的中斷功能實現(xiàn)8個鍵盤輸入,,用外部中斷IrqA實現(xiàn)短路,、過流、缺相保護功能,。

  每個任務都有自己的名稱,、內存空間和優(yōu)先級,。不同的任務必須有不同的優(yōu)先級,,它們可以是0~62之間的任意值,數值越小優(yōu)先級越高,。優(yōu)先級的設置有不同的依據,,以本文為例,回饋運行任務對時間要求最苛刻,,如果不能及時啟動或過早結束都會對變頻器造成危害,,所以其優(yōu)先級設為最高;AD采集任務運行最頻繁,必須為其它任務提供可靠的參數,,優(yōu)先級設為次高;電動運行任務是常規(guī)運行狀態(tài),,優(yōu)先級低于AD采集任務;顯示任務只實現(xiàn)人機交互,顯示狀態(tài)和參數對控制器性能沒有直接影響,,優(yōu)先級設為最低,。uCC/OS-II要求為每個任務分配OS_STK類型的堆??臻g,,并且它們占用的RAM存儲空間必須是連續(xù)的。

  任務延時是指任務執(zhí)行完畢處于掛起等待狀態(tài)到下一次重新運行之間的時間間隔,,它的單位是時鐘中斷節(jié)拍,。由于OS_TICKS_PER_SEC為1000,,每一拍為1ms。每個任務的調用間隔不能小于一個節(jié)拍,,它將影響模擬量的采樣頻率,。各個任務的屬性定義如表1所示。

  

  本文介紹了抽油電機變頻器變結構控制系統(tǒng)功能原理,,如何利用uC/OS-II的多任務功能實現(xiàn)控制系統(tǒng)的算法結構變換,,操作系統(tǒng)的移植、多任務的建立和SDK下的軟件設計;最后總結了在應用中需注意的問題,。

  在油田生產中為了節(jié)省電能并減小故障率,,變頻器得到越來越多的應用。但由于油井負載的非周期大脈動性質,,從能量的流向來看,,變頻器有兩種運行狀態(tài)——電動運行和回饋制動。不同運行狀態(tài)的控制變量和控制方法是不同的,,這就要采用所謂的變結構控制,。本應用是實現(xiàn)抽油電機變頻驅動中的變結構控制,,不同的控制結構通過任務間的切換實現(xiàn)。

  系統(tǒng)控制核心采用DSP56F803,,它是Motorola公司推出的16位DSP型微控制器,,運算速度可達40MIPS,片內資源豐富,,有強大的軟件支持,,是嵌入式應用的理想選擇。本系統(tǒng)應用了其SPI,、SCI,、PWM、鍵盤中斷及通用I/O口等功能模塊,。

  1 系統(tǒng)設計

  1.1 uC/OS-II的移植與配置

  Motorola公司提供的軟件開發(fā)工具包SDK為使用uCC/OS-II做好了鋪墊工作,,與硬件相關的文件OS_CPU.H、OS_CPU_A.ASM和OS_CPU_C.C已經給出,,只需購得系統(tǒng)源代碼,,然后將其考入指定的文件目錄,系統(tǒng)的移植就完成了,。本文采用最新版本uCC/OS-II V2.51,。

  系統(tǒng)移植成功后,需要對操作系統(tǒng)進行配置(裁剪),,把用不到的功能去掉,,以最大限度地節(jié)省存儲空間。這項工作是通過os_cfg.h中的宏定義進行的,,本文只用到了多任務管理,、信號量、互斥量等功能,。在本應用中,,uCC/OS-II內核經過剪裁后只有3KB左右,相對DSP56F803的32KB內部程序Flash只用了不到十分之一,。需注意的另一個關鍵設置是時鐘節(jié)拍中斷頻率OS_TICKS_PER_SEC,,它是系統(tǒng)多任務運行所依賴的時間基準,也決定了任務重復調用的最快頻率,。這里缺省設為1000,,要比文獻[3]中的推薦值高出一個數量級。但實際應用表明,,DSP56F803以其高運算速度在這個設置下是完全勝任的,。

  1.2 系統(tǒng)功能

  根據油田生產的要求,系統(tǒng)要實現(xiàn)以下功能:鍵盤輸入、參數顯示,、三相電流采集,、直流側電壓采集、溫度采集,、變頻指令輸出以及保護等,。系統(tǒng)對電流、電壓,、溫度進行周期性采樣,,采樣值經過數字信號處理,作為控制器的參數,,最后由控制算法得出控制量,,經PWM和D/A轉換器發(fā)送給變頻器,,形成反饋閉環(huán)控制,。系統(tǒng)運行過程中實時顯示電流、溫度等參數,,并可以通過鍵盤對控制器進行參數在線設定,。另外,高溫,、過流等保護功能必不可少,。系統(tǒng)原理如圖1??刂破鞲鶕绷鱾入娙軨上電壓的大小來確定以哪一種控制結構運行,。當直流側電壓不超過設定值時,系統(tǒng)以電動狀態(tài)運行,。超過設定值時要以回饋制動方式運行,,要求兩種工作狀態(tài)要互鎖,切換要準確,、及時,。

  

  1.3 任務的創(chuàng)建及變結構控制的實現(xiàn)

  根據功能要求,本著盡量減少任務數以減輕CPU運行負擔的原則,,本文設計了AD采集,、電動運行、回饋制動和顯示四個任務,。另外還設計了兩個中斷服務子程序:用PortA口的中斷功能實現(xiàn)8個鍵盤輸入,,用外部中斷IrqA實現(xiàn)短路、過流,、缺相保護功能,。

  每個任務都有自己的名稱、內存空間和優(yōu)先級。不同的任務必須有不同的優(yōu)先級,,它們可以是0~62之間的任意值,,數值越小優(yōu)先級越高。優(yōu)先級的設置有不同的依據,,以本文為例,,回饋運行任務對時間要求最苛刻,如果不能及時啟動或過早結束都會對變頻器造成危害,,所以其優(yōu)先級設為最高;AD采集任務運行最頻繁,,必須為其它任務提供可靠的參數,優(yōu)先級設為次高;電動運行任務是常規(guī)運行狀態(tài),,優(yōu)先級低于AD采集任務;顯示任務只實現(xiàn)人機交互,,顯示狀態(tài)和參數對控制器性能沒有直接影響,優(yōu)先級設為最低,。uCC/OS-II要求為每個任務分配OS_STK類型的堆??臻g,并且它們占用的RAM存儲空間必須是連續(xù)的,。

  任務延時是指任務執(zhí)行完畢處于掛起等待狀態(tài)到下一次重新運行之間的時間間隔,,它的單位是時鐘中斷節(jié)拍。由于OS_TICKS_PER_SEC為1000,,每一拍為1ms,。每個任務的調用間隔不能小于一個節(jié)拍,它將影響模擬量的采樣頻率,。各個任務的屬性定義如表1所示,。

  

  1.4 任務間的通信

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

  

  操作系統(tǒng)為任務間通信提供了多種途徑,,但最簡單有效的方法是共享全局變量。本文使用共享全局變量的方法實現(xiàn)了顯示任務與鍵盤中斷服務之間的通信,,代碼如下:

  鍵盤中斷:

  static void KeyboardISR(void)

  {

  UWord16 cpu_sr;

  OS_ENTER_CRITICAL(); //臨界區(qū)代碼保護

  asm{

  move X:$0FB7,,A1 //讀鍵盤中斷狀態(tài)表

  move A1,state1 //將中斷狀態(tài)放入全局變量

  };

  OS_EXIT_CRITICAL(); //臨界區(qū)代碼保護結束

  }

  這里state1是全局變量,,鍵盤中斷的工作僅僅是將PORTA口中斷狀態(tài)寄存器(IESR,,地址$0FB8)讀入state1中。為防止其他任務在此期間對state1的修改,,使用了臨界區(qū)代碼保護。

  顯示任務的部分代碼:

  switch(state1)

  {case 1: //PTA_0對應的鍵被按下

  …… //相應的服務程序,,略

  case 128: //PTA_7對應的鍵被按下

  break; }

  asm{move $00,,X:$0FB8}; //清鍵盤中斷狀態(tài), 以備下次中斷

  顯示任務中采用多分支結構,,根據statel=2n,,(n=0,1,,2,,3,,,4,,5,6,,7),,不同的值代表不同的鍵被按下,程序進行相應的處理;最后將IESR寄存器清零,。用同樣的方法,,兩位之間互相組合可擴展形成16個按鍵。這樣只用一個全局變量就完成了中斷與任務間的通信,程序用內嵌匯編的C來寫,,簡捷高效,。

  2 系統(tǒng)設計中需注意的問題

  首先是存儲器分配問題。多任務,、郵箱等功能的使用會增加RAM的額外開銷,,在不擴展外部RAM的情況下,可用的只有片內2KB數據RAM和512字的程序RAM,,資源相對有限,,存儲空間的合理分配就顯得很重要。任務堆棧所占用的RAM空間要根據實際應用來確定,,必須考慮任務調用的嵌套情況,、任務中函數為局部變量所分配的內存數目。另外,,它必須能保存DSP的所有22個寄存器和16個存儲器字,。如果為任務分配的存儲空間富余過多則造成資源緊張,甚至會因內存溢出導致系統(tǒng)崩潰,。解決方法是調用系統(tǒng)函數OSTaskStkChk(),,它可以檢測每個任務運行時使用的內存大小,為合理分配內存空間提供了依據,。另外,,可采用一些簡化方法節(jié)省RAM空間。例如SDK為AD采集的每個通道都定義一個結構體,,它包括三個元素:句柄,、數值長度和采樣值;如果使用五路AD采集,就得定義五個結構體,。通常不進行初始化,,DSP內核在運行時將它們放入RAM空間,占用RAM較多,。通常關心的只是采樣值一個元素,,其他兩個只完成輔助功能。如果使用一個存放采樣值的變量代替這個結構體,,或直接采用匯編語言寫這段代碼,,就可大幅度地節(jié)省RAM空間。本文的AD采集程序就是用匯編完成,。

  SDK沒有提供在DSP56F803下使用SPI函數的例程,。

  仿照在807中的成功應用,筆者調用spiWrite()函數,,通過SPI驅動D/A轉換芯片,。但在編譯連接時出現(xiàn)系統(tǒng)錯誤,,數據類型unsigned short與const void不匹配,在const.c中將spiWrite做強制類型轉換(void*)(&spiWrite),,解決了這一問題,。

  利用SDK與uC/OS-II相配合,充分發(fā)揮了DSP型控制器DSP56F803的功能,,采用內嵌匯編的C語言編程,,大大提高了代碼的可讀性和可移植性,縮短了系統(tǒng)開發(fā)周期,,成功實現(xiàn)了系統(tǒng)的變結構控制功能,,也體現(xiàn)了操作系統(tǒng)的多任務功能在實現(xiàn)多算法結構上的優(yōu)越性。

此內容為AET網站原創(chuàng),,未經授權禁止轉載,。