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