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