文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2015)05-0025-03
0 引言
隨著視頻監(jiān)控系統(tǒng)中智能高速球型攝像機(jī)的廣泛應(yīng)用,云臺(tái)控制系統(tǒng)的穩(wěn)定性對(duì)其性能起著主導(dǎo)作用。但大部分云臺(tái)控制系統(tǒng)不能實(shí)現(xiàn)快速實(shí)時(shí)性定位,不同品牌攝像機(jī)和云臺(tái)解碼板存在通信協(xié)議互通問題。文獻(xiàn)[1]采用低功耗直流電機(jī),配合旋轉(zhuǎn)編碼器實(shí)現(xiàn)云臺(tái)精確定位。文獻(xiàn)[2]基于ARM和Linux設(shè)計(jì)系統(tǒng),實(shí)現(xiàn)步進(jìn)電機(jī)的控制。文獻(xiàn)[3]以LPC2132為主控制器,μC/OS-II為軟件平臺(tái)實(shí)現(xiàn)球機(jī)控制。文獻(xiàn)[4]介紹了PELCO-D協(xié)議,基于Windows下的VC++,實(shí)現(xiàn)對(duì)云臺(tái)和鏡頭的控制。這些研究實(shí)現(xiàn)了監(jiān)控定位功能,但是,采用Linux開發(fā)難度大,采用μC/OS-II又要考慮版權(quán)成本問題,系統(tǒng)實(shí)時(shí)性需要改進(jìn),支持多種標(biāo)準(zhǔn)通信協(xié)議的云臺(tái)控制系統(tǒng)還有待研究。
FreeRTOS是源碼公開的實(shí)時(shí)操作系統(tǒng)[5],能移植于各種微處理器,提高實(shí)時(shí)性;ARM Cortex-M3處理器具有低功耗、高性能、外設(shè)完善的優(yōu)點(diǎn)。因此,本文設(shè)計(jì)基于FreeRTOS和STM32F103的云臺(tái)控制系統(tǒng),通過STM32處理云臺(tái)控制命令驅(qū)動(dòng)步進(jìn)電機(jī)的轉(zhuǎn)動(dòng),F(xiàn)reeRTOS作為云臺(tái)控制系統(tǒng)軟件平臺(tái),實(shí)現(xiàn)水平垂直方向準(zhǔn)確定位、預(yù)置點(diǎn)巡航、花樣掃描、定時(shí)掃描的功能,支持并自動(dòng)識(shí)別多種通信協(xié)議,確保系統(tǒng)的可靠性和實(shí)時(shí)性[6]。
1 基于STM32F103的云臺(tái)控制系統(tǒng)
高速球機(jī)監(jiān)控系統(tǒng)主要由一體化攝像機(jī)、云臺(tái)驅(qū)動(dòng)解碼裝置組成。云臺(tái)控制系統(tǒng)是高速球機(jī)的核心,兼容PELCO-D、PECLO-P、SAMSUNG、DAHUA、YAAN等云臺(tái)協(xié)議,通信方式為RS485,將控制器發(fā)送過來的碼源信號(hào)解碼處理,完成碼源信號(hào)中定義的操作,包括電機(jī)、機(jī)芯控制以及大量數(shù)據(jù)存儲(chǔ)、調(diào)用。STM32F103基于ARM Cortex-M3內(nèi)核,主頻高達(dá) 72 MHz,通過定時(shí)器產(chǎn)生PWM輸出控制電機(jī)轉(zhuǎn)動(dòng)[7]。主控板硬件電路包括以下部分:步進(jìn)電機(jī)控制驅(qū)動(dòng)、數(shù)據(jù)存儲(chǔ)、球機(jī)參數(shù)配置模塊、OSD字符顯示及電源模塊電路等,如圖1所示。
STM32F103控制其他模塊電路完成各自的功能。由于STM32的GPIO口數(shù)量有限,采用兩片74HC165AD對(duì)GPIO口擴(kuò)展,將撥碼開關(guān)等并行數(shù)據(jù)轉(zhuǎn)成串行數(shù)據(jù)送給STM32;STM32自帶獨(dú)立看門狗IWDG和窗口看門狗WWDG模塊,檢測(cè)和解決由系統(tǒng)軟件錯(cuò)誤引起的故障,保證系統(tǒng)可靠性;PWM脈沖信號(hào)和L6219電機(jī)驅(qū)動(dòng)芯片構(gòu)成電機(jī)控制模塊主要電路,控制器發(fā)出PWM脈沖信號(hào),脈沖個(gè)數(shù)決定電機(jī)角度位移量,脈沖頻率決定電機(jī)轉(zhuǎn)動(dòng)速度;L6219驅(qū)動(dòng)兩相步進(jìn)電機(jī)繞組,內(nèi)部具有二極管及PWM電流控制,實(shí)現(xiàn)球機(jī)在水平360°和垂直180°的旋轉(zhuǎn);N2553和25Q80 Flash芯片實(shí)現(xiàn)字庫存儲(chǔ)OSD菜單功能,使球機(jī)配置更靈活簡(jiǎn)便;數(shù)據(jù)存儲(chǔ)電路使用EEPROM實(shí)現(xiàn)預(yù)置位、參數(shù)、運(yùn)行狀態(tài)等數(shù)據(jù)的掉電存儲(chǔ)。
2 FreeRTOS在STM32上的移植
FreeRTOS提供任務(wù)、時(shí)間和內(nèi)存管理以及信號(hào)量、消息隊(duì)列等功能,具有多任務(wù)調(diào)度策略、占用空間和內(nèi)存小、可移植裁剪的特點(diǎn); FreeRTOS的移植主要包含編譯器相關(guān)的數(shù)據(jù)類型和堆棧類型定義、任務(wù)調(diào)度器啟動(dòng)函數(shù)、臨界區(qū)進(jìn)入與退出、時(shí)鐘中斷嵌套服務(wù)程序等。
2.1 FreeRTOS移植原理
云臺(tái)控制系統(tǒng)軟件在STM32上移植,需要修改startup_stm32f10x_ha.s啟動(dòng)文件,F(xiàn)reeRTOS采用中斷完成任務(wù)處理[8],修改STM32固件庫默認(rèn)的中斷服務(wù)函數(shù)名稱,這樣中斷發(fā)生后跳轉(zhuǎn)到FreeRTOS代碼里定義的中斷服務(wù)函數(shù),改SVC_Handler、PendSV_Handler、SysTick_Handler為vPortSVHandle、xPortPendSVHandler、xPortSysTickHandler。為了保證系統(tǒng)軟件可移植性,F(xiàn)reeRTOS中代碼不直接使用和編譯器相關(guān)的C語言 long、short、int等數(shù)據(jù)類型,所以在portmacro.h中根據(jù)使用編譯器IAR的字節(jié)長(zhǎng)度定義對(duì)這些數(shù)據(jù)類型進(jìn)行定義。
2.2 移植的關(guān)鍵點(diǎn)
任務(wù)切換是FreeRTOS移植的關(guān)鍵點(diǎn),任務(wù)切換指中止當(dāng)前運(yùn)行任務(wù),轉(zhuǎn)而運(yùn)行就緒任務(wù)中優(yōu)先級(jí)最高的任務(wù)或優(yōu)先級(jí)相同的就緒任務(wù)中等待時(shí)間最長(zhǎng)的。云臺(tái)控制系統(tǒng)利用STM32的PendSV軟中斷完成任務(wù)切換部分?jǐn)帱c(diǎn)數(shù)據(jù)保存,提高了云臺(tái)控制系統(tǒng)實(shí)時(shí)性。
系統(tǒng)時(shí)鐘是移植的主要部分,時(shí)鐘節(jié)拍是系統(tǒng)調(diào)度運(yùn)行的關(guān)鍵。STM32主頻最高72 MHz,操作系統(tǒng)心跳定義為1 000 Hz,足以掃描系統(tǒng)任務(wù)指令的實(shí)時(shí)性要求。FreeRTOS在STM32中的移植與中斷處理有關(guān),當(dāng)時(shí)鐘中斷發(fā)生時(shí),處理器引起一次PendSV中斷,判斷是否有任務(wù)需要切換,然后關(guān)閉中斷,通過中斷向量表跳轉(zhuǎn)至相應(yīng)的中斷服務(wù)程序vTaskIncrementTick()中將增加時(shí)鐘節(jié)拍計(jì)數(shù)值,延時(shí)任務(wù)處理,使能全部中斷。
3 云臺(tái)控制系統(tǒng)軟件設(shè)計(jì)
云臺(tái)控制系統(tǒng)中控制命令解析及狀態(tài)顯示由STM32完成,軟件環(huán)境選用IAR,代碼編輯工具選用Source Insight3.5。軟件結(jié)構(gòu)總體分為通信協(xié)議處理、攝像機(jī)機(jī)芯控制、電機(jī)控制、數(shù)據(jù)存儲(chǔ)等模塊;在移植過程中,需要進(jìn)行FreeRTOS內(nèi)存分配、中斷事件處理等。
3.1 系統(tǒng)軟件
云臺(tái)解碼板軟件在FreeRTOS下劃分為五個(gè)任務(wù):系統(tǒng)控制、菜單、輔助功能、數(shù)據(jù)轉(zhuǎn)發(fā)和老化測(cè)試任務(wù)。FreeRTOS操作系統(tǒng)實(shí)現(xiàn)實(shí)時(shí)多任務(wù)操作,對(duì)于單核微控制器STM32來說,任意時(shí)刻只有一個(gè)任務(wù)被執(zhí)行,其他任務(wù)處于非運(yùn)行狀態(tài),F(xiàn)reeRTOS采用xTaskCreate()API函數(shù)的參數(shù)uxPriority為創(chuàng)建的任務(wù)賦予初始優(yōu)先級(jí),保證調(diào)度器按順序有效地進(jìn)入運(yùn)行狀態(tài)。啟功調(diào)度器之前,初始化系統(tǒng)平臺(tái),包括LED、EEPROM、I2C、SPI、電機(jī)驅(qū)動(dòng)、485通信接口、球機(jī)波特率、地址碼、協(xié)議撥碼配置信息等的初始化,系統(tǒng)的啟動(dòng)流程如圖2所示。
云臺(tái)控制系統(tǒng)軟件集成固件升級(jí)功能,首先進(jìn)入升級(jí)模式,通過串口把升級(jí)程序?qū)胄酒現(xiàn)lash的備用區(qū)域,然后重啟系統(tǒng),進(jìn)入維護(hù)模式將備用區(qū)域的升級(jí)程序拷貝到系統(tǒng)真實(shí)區(qū)域。
3.2 系統(tǒng)內(nèi)存管理模塊
為了解決STM32內(nèi)部RAM資源緊張問題,將若干小功能任務(wù)合并成一個(gè)復(fù)合任務(wù),這些任務(wù)的特點(diǎn)是在運(yùn)行時(shí)間上不重合,共用一塊內(nèi)存從而達(dá)到節(jié)省內(nèi)存的目的。通過創(chuàng)建消息隊(duì)列xQueueCreate()的方式在復(fù)合任務(wù)每次運(yùn)行時(shí)判斷執(zhí)行哪一項(xiàng)操作,其他系統(tǒng)任務(wù)要調(diào)用復(fù)合任務(wù)的功能,就向該任務(wù)發(fā)送消息,消息中含有需要執(zhí)行操作的編碼,復(fù)合任務(wù)收到消息后通過判斷操作編碼執(zhí)行相應(yīng)任務(wù)。通過創(chuàng)建組合任務(wù)來實(shí)現(xiàn)內(nèi)存管理,將云臺(tái)控制系統(tǒng)中的線掃、巡航、預(yù)置點(diǎn)掃描、花樣掃描定位等任務(wù)組合起來。
3.3 機(jī)芯控制模塊
云臺(tái)控制系統(tǒng)集成PELCO-D\P、SAMSUNG、DAHUA、YANAN等控制協(xié)議與攝像機(jī)機(jī)芯進(jìn)行通信,通過軟件實(shí)現(xiàn)自動(dòng)識(shí)別控制協(xié)議,解決不同品牌攝像機(jī)和云臺(tái)解碼板互通問題。通過STM32的串口接收上位機(jī)控制命令,系統(tǒng)收到指令后進(jìn)行解析,通信處理模塊服務(wù)程序根據(jù)協(xié)議轉(zhuǎn)換標(biāo)準(zhǔn)、數(shù)據(jù)格式、包頭信息、特征字符等分析識(shí)別機(jī)芯控制協(xié)議,最后通過STM32的串口向機(jī)芯的串口發(fā)送控制協(xié)議指令,并等待機(jī)芯的處理。自動(dòng)識(shí)別協(xié)議流程圖如圖3所示。
3.4 電機(jī)控制模塊
電機(jī)控制模塊實(shí)現(xiàn)云臺(tái)穩(wěn)定旋轉(zhuǎn)和精確定位,STM32定時(shí)器0提供步進(jìn)電機(jī)不同速度運(yùn)行所需脈沖頻率,定時(shí)器2和4分別用于水平垂直電機(jī)定時(shí)改變速度,保證電機(jī)運(yùn)行速度與預(yù)置速度保持一致。云臺(tái)控制系統(tǒng)上電的瞬間進(jìn)行自檢,驅(qū)動(dòng)解碼板采用光電開關(guān)中斷的方式記錄電機(jī)轉(zhuǎn)一圈的步數(shù),把步數(shù)保存在STM32內(nèi)存中作為將來設(shè)置預(yù)置位和調(diào)用預(yù)置位的原始數(shù)據(jù)。
為了減小電機(jī)機(jī)械震蕩,系統(tǒng)采用電流細(xì)分查表法驅(qū)動(dòng)步進(jìn)電機(jī),電流引起磁場(chǎng)決定電機(jī)角度,其中細(xì)分表采用128倍細(xì)分,A相=255cosα,B相=255sinα,通過STM32通用定時(shí)器產(chǎn)生PWM輸出,控制方波占空比模擬電流信號(hào)電平進(jìn)行編碼,用控制電機(jī)電流方式代替電壓,既保證了電機(jī)平滑轉(zhuǎn)動(dòng),又降低系統(tǒng)功耗。電機(jī)運(yùn)行是通過串口中斷服務(wù)程序解析云臺(tái)控制命令后,調(diào)用步進(jìn)電機(jī)運(yùn)行處理函數(shù)實(shí)現(xiàn),這些函數(shù)可以實(shí)現(xiàn)水平垂直電機(jī)自檢、根據(jù)控制命令正常轉(zhuǎn)動(dòng)或按照預(yù)置位巡航功能。電機(jī)控制模塊流程如圖4所示。
4 云臺(tái)控制系統(tǒng)的測(cè)試
4.1 FreeRTOS系統(tǒng)實(shí)時(shí)性測(cè)試
任務(wù)切換時(shí)間評(píng)估:使用定時(shí)器和多次任務(wù)切換求平均數(shù)完成測(cè)試,創(chuàng)建測(cè)試程序,n個(gè)任務(wù)連續(xù)切換,最后統(tǒng)計(jì)n個(gè)任務(wù)切換總時(shí)間求出平均切換時(shí)間。經(jīng)測(cè)試,F(xiàn)reeRTOS約510個(gè)時(shí)鐘周期,7 μs完成一次任務(wù)切換,滿足系統(tǒng)實(shí)時(shí)性要求。
處理器負(fù)載情況統(tǒng)計(jì):該統(tǒng)計(jì)類似于Linux的top命令、Windows的任務(wù)管理器,F(xiàn)reeRTOS需要統(tǒng)計(jì)空閑任務(wù)運(yùn)行時(shí)間,通過該時(shí)間計(jì)算出處理器負(fù)載情況,一個(gè)穩(wěn)定的云臺(tái)系統(tǒng)要求及時(shí)響應(yīng)事件,也要有充足的空閑時(shí)間用來快速響應(yīng)特殊任務(wù)。經(jīng)測(cè)試,處理器負(fù)載25%,滿足系統(tǒng)穩(wěn)定性要求。
4.2 云臺(tái)控制系統(tǒng)測(cè)試
云臺(tái)控制系統(tǒng)采用上位機(jī)軟件進(jìn)行測(cè)試,該軟件在vs2008集成環(huán)境下編寫,使用mscomm控件完成串口通信編程,主要包括電機(jī)方向控制、電機(jī)轉(zhuǎn)速設(shè)置、攝像機(jī)機(jī)芯控制、球機(jī)通信參數(shù)設(shè)置、預(yù)置點(diǎn)巡航設(shè)置等。
云臺(tái)控制系統(tǒng)采用RS485方式與上位機(jī)進(jìn)行通信。處理器將預(yù)置位信息通過串口發(fā)送給上位機(jī)進(jìn)行存儲(chǔ),上位機(jī)通過串口發(fā)送命令給云臺(tái)解碼板,驅(qū)動(dòng)步進(jìn)電機(jī)的轉(zhuǎn)動(dòng),讓云臺(tái)執(zhí)行不同操作,測(cè)試預(yù)置位巡航、線掃、花樣掃描、定時(shí)掃描等功能。系統(tǒng)各項(xiàng)功能滿足設(shè)計(jì)要求,電機(jī)運(yùn)行穩(wěn)定,加減速過程處理平滑,保證了云臺(tái)監(jiān)控系統(tǒng)的實(shí)時(shí)性。
5 結(jié)論
本文研究設(shè)計(jì)了基于FreeRTOS的云臺(tái)控制系統(tǒng),支持并自動(dòng)識(shí)別不同攝像機(jī)云臺(tái)控制協(xié)議。采用先進(jìn)的ARM Cortex-M3處理器完成水平垂直步進(jìn)電機(jī)的細(xì)分控制,實(shí)現(xiàn)低功耗的同時(shí)簡(jiǎn)化硬件電路設(shè)計(jì);嵌入式系統(tǒng)軟件采用FreeRTOS實(shí)時(shí)操作系統(tǒng),實(shí)現(xiàn)實(shí)時(shí)多任務(wù)操作的同時(shí)縮短開發(fā)周期,保證了系統(tǒng)實(shí)時(shí)定位、迅速掃描監(jiān)控的功能。經(jīng)測(cè)試,云臺(tái)控制系統(tǒng)運(yùn)行穩(wěn)定,控制精度高,響應(yīng)速度快,系統(tǒng)穩(wěn)定性、擴(kuò)展性和可維護(hù)性得到顯著提高,具有較好的應(yīng)用前景。
參考文獻(xiàn)
[1] 周官喜.基于STM32低功耗云臺(tái)控制系統(tǒng)設(shè)計(jì)[D].青島:青島理工大學(xué),2012.
[2] 秦鐘凱.基于ARM的云臺(tái)控制網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)[D].太原:太原科技大學(xué),2012.
[3] 莊志紅,伍峰.基于ARM微控制器LPC213嵌入式球機(jī)控制系統(tǒng)設(shè)計(jì)[J].制造業(yè)自動(dòng)化,2010,10(32):92-95.
[4] 魏崇毓,韓永亮.云臺(tái)控制系統(tǒng)的研究與設(shè)計(jì)[J].科技信息,2011(3):503-504.
[5] MISTRY J,NAYLOR M,WOODOCOCK J.Adapting FreeRTOS for multicores:an experience report[J].Softw.Pract.Exper,2014,44(9):1129-1154.
[6] Richard Barry.Using the FreeRTOS real time kernel[M].Washington State.USA:Amazo,2010:10-50.
[7] 鐘銳,徐宇拓,陸生禮.基于Cortex M3處理器的開關(guān)磁阻電機(jī)控制器設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2011,37(3):32-34.
[8] 張龍彪,張果,王劍平.嵌入式操作系統(tǒng)FreeRTOS的原理與移植實(shí)現(xiàn)[J].信息技術(shù),2012(12):31-34.