嵌入式整流模塊控制器設計
基于AVR+μC/OS-II的嵌入式整流模塊控制器設計
Design of Embedded Rectifier Module Controller Based on AVR + μC/OS-II
張嶼 毛征 劉瑞東
北京工業大學電子信息與控制工程學院
北京動力源科技股份有限公司
摘要:針對通信電源產品中嵌入式控制系統設計的兼容性與擴展性問題,本文介紹了采用AVR單片機+μC/OS-II嵌入式實時操作系統作為軟硬件開發平臺的嵌入式整流模塊控制器的統一化設計方法。
關鍵詞:AVR單片機;μC/OS-II;嵌入式控制器
引言
雖然目前通信電源產品中嵌入式控制系統的研發技術比較成熟,但是同一系列(如DUM系列)不同功率型號的產品具有不同的性能參數,以致控制系統采用不同的控制方法;同時,在以往的產品研發過程中,不同的嵌入式系統工程師具有不同的軟硬件設計思想,帶來了芯片應用、電路體系、軟件結構的差異。這兩方面問題造成產品的統一管理、統一維護與升級困難,成本提高。
針對上述嵌入式控制系統兼容性和擴展性考慮不周的問題,結合8位AVR單片機的資源優勢以及源代碼開放的μC/OS-II實時操作系統內核的強健性和移植性,本文提出了嵌入式控制系統中基于AVR+μC/OS-II的整流模塊控制器設計方法。利用AVR資源豐富、運行速度快、編程靈活、調試方便的特點來滿足該控制器的功能與可靠性要求。采用C語言和匯編語言相結合的方法,將μC/OS-II實時操作系統移植入AVR,在保證系統性能的同時,將軟件開發統一化、規范化,縮短了產品研發周期,易于產品維護升級,降低了成本。
1.組成及工作原理
DUM系列通信電源的嵌入式控制系統由主控制器、整流模塊控制器(簡稱“模塊控制器”)等組成。主控制器是中央處理子系統。模塊控制器是聯結主控制器與整流模塊(簡稱“模塊”)之間的數據通信、信號采集與指令控制的子系統,其功能由硬件和軟件兩部分協調完成。硬件上不同功率型號通信電源產品的模塊控制器架構完全一致;軟件上使用μC/OS-II完成數據處理及任務調度。具體的工作原理是:AVR依次采集并轉換模塊的狀態信號,檢測在位和模塊告警信號,以此構造狀態幀,通過RS485串行總線發送到主控制器,同時接收并解析主控制器發來的模塊調壓、限流和開關機控制信號幀,最后向模塊發送和執行這些控制信號。下面結合圖1,具體說明主控部分的特點,其余部分詳見文獻[1]。
主控部分MCU芯片采用ATMEL公司的ATmega16L。它具有如下特點[2]:
(1) 豐富片內資源:片內配置16KB Flash ROM、512B EEPROM、1KB RAM,8通道10-bit ADC,16-bit Counter/Timer(可作PWM通道),有USART、SPI等接口。為μC/OS-II提供充足的程序空間;豐富的片內外設減少了AVR外圍電路,使控制器組態簡單,穩定可靠。
(2) 高速、低輻射、低功耗:采用8-bit增強的RISC結構和Harvard結構,具有1MIPS/MHz性能,晶振頻率低(最大工作頻率為8MHz)。
(3) 強大的C語言支持能力:結合1KB片內RAM、硬件乘法器,以及優秀的C編譯器,有助于生成快速、高效代碼。為μC/OS-II的運行提供充足的堆棧空間,程序可讀性和兼容性得到保證。
(4) 支持JTAG在線下載調試,從而縮短開發周期,降低產品成本。
2.軟件設計
模塊控制器的軟件設計步驟為:第一,將所實現的功能劃分成若干用戶任務;第二,以μC/OS-II為操作系統,將它移植入ATmega16L并進行配置;第三,編寫用戶任務和中斷程序;第四,在系統上編譯、調試程序。
2.1 μC/OS-II的移植和配置
μC/OS-II是一個實時性強的操作系統內核,其軟硬件體系結構如圖2所示。應用程序處于頂層,每個任務都可以獨占處理器,因此設計成無限循環。μC/OS-II處理器無關代碼提供操作系統服務,應用程序可以使用這些服務函數進行創建和刪除任務、任務間通信以及內存管理等操作。μC/OS-II的大部分代碼使用C語言編寫,與處理器相關的實時操作使用匯編語言編寫。用戶可將μC/OS-II內核裁減為滿足功能的最小系統。
將μC/OS-II移植入AVR,需要修改OS_CPU.H、OS_CPU_C.C和OS_CPU_A.S這三個與MCU相關的文件,并根據控制器功能需求配置μC/OS-II,即修改OS_CFG.H文件[3]。
2.2 任務功能
將控制器的功能劃分成5個用戶任務,指定任務優先級,優先級的制定原則是任務的重要性和實時性。μC/OS-II最多支持64個優先級,每個任務賦予1個優先級,其中用戶優先級為4~OS_LOWEST_PRIO-3。本控制器的用戶優先級選擇范圍是4~8。各用戶任務分別為:
(1) 創建用戶任務的任務AppTaskStart():初始化操作系統時鐘節拍、初始化硬件、創建用戶任務。這是開啟多任務調度OSStart()之后第一個被執行的任務,優先級為4。
(2) 產生PWM波的任務SetPWMOutTask():產生PWM調壓、限流波輸出值,優先級為5。
(3) 處理模塊在位和告警信號的任務GetWarnStatusTask():采集模塊的在位信號和告警信號,優先級為6。
(4) 模塊狀態采集的任務RctMeasureTask():片內ADC采集并量化模塊電流狀態信號,優先級為7。
(5) 處理模塊開關機的任務PowProcessTask():解析并向模塊執行主控制器發來的開關機信令,優先級為8。
這里以創建用戶任務的任務為例,介紹用戶任務程序編寫方法。其主要代碼如下:
static void AppTaskStart(void *pdata)
{
(void)pdata; // 防止編譯器告警
OSTickISR_Init(); // 初始化操作系統時鐘節拍
AppIOInit(); // 硬件初始化
AppTaskCreate(); // 創建用戶任務
while (1) // 任務體(無限循環體)
{
OSTimeDly(10); // 本任務延時100ms,同時讓下一個最高優先級的就緒態任務執行
}
}
2.3 中斷程序
時鐘節拍中斷:操作系統通過時鐘節拍來實現計時以及延時操作,AVR工作頻率為8MHz,取一個時鐘節拍為10ms。必須創建一個用戶任務并開啟多任務調度OSStart()之后才能開啟時鐘節拍中斷,否則系統可能崩潰。
USART接收完成中斷:接收并解析主控制器發來的命令數據幀。USART發送完成中斷:構造模塊狀態信息幀,發送到主控制器。這2個中斷通過全局變量與用戶任務通信。
2.4 兼容與擴展
如果本控制器的某個功能需要改進,則直接修改相應的任務函數即可;如果要為本控制器添加新功能,則直接創建新任務,賦予優先級,在新任務函數中加入新功能的源代碼即可。這就為系統軟件的維護與升級提供了方便快捷的途徑。
本控制器采用統一的數據結構,采用統一的適用于不同型號模塊的控制處理過程。另外,按照通信協議,本控制器向主控制器發送請求模塊配置幀,然后接收主控制器發回的配置信息來配置被控模塊參數。
3.結論
本文結合AVR單片機和μC/OS-II實時操作系統的優點,設計出基于AVR+μC/OS-II的嵌入式模塊控制器,它具有軟硬件設計的兼容性強和易于擴展等突出特點,為DUM系列不同功率型號通信電源產品的開發、維護和升級節省了時間和費用。自2005年6月至今試用于DUM48-15B、25D、30D等通信電源產品中,其性能穩定,采樣精度高,告警、控制準確度100%,通信誤碼率低,取得了很好的應用效果。
參考文獻:
[1] 張嶼, 毛征, 劉瑞東. 基于AVR單片機的整流模塊控制器設計與實現. 中國電子學會第十一屆青年學術年會論文集, 2005.
[2] Atmel Corporation. ATmega16(L) Datasheet.
[3] Jean J. Labrosse 著, 邵貝貝 等 譯. 嵌入式實時操作系統μC/OS-II (第2版). 北京: 北京航空航天大學出版社, 2003.
張嶼:碩士,研究方向為嵌入式系統。
評論