采用Atmega128單片機設計的嵌入式控制器,模擬量輸入通道用Atmega128片內A/D轉換器,輸出用AD421?D/A轉換器,數字量I/O通道配置高速先耦器件.用LCCavr編譯器修改OSTaskStklnit()函數及其相關文件,定義數據類型等以實現MICroC/OS-Ⅱ的移植.
1 引言
嵌入式控制器是機電設備實現自動化的核心部件。故以大型機電設備為控制對象,利用高性能Atmega 128微處理器, 設計了具有現場總線(CANBUS)網絡通信和一定通用性的多功能嵌入式智能控制器。
2 硬件設計
系統的硬件結構如圖1。
本控制器的核心采用64管腳TQFP封裝的Atmega128芯片,具有53個可編程的I/O引腳,片內集成有128KB閃存、4KB EEPROM 和4KBSRAM,適合I/O通道和存儲空間的需求。
(1)模擬量輸入通道
模擬量輸入通道采用Atmega128片內的8通道1O位A/D轉換器。其信號輸入部分可以根據具體的信號情況選擇使用圖2所示的多功能輸入信號調理電路。在電壓信號輸入時可以由R1和C構成低通濾器(R2開路);R1和R2可以構成輸入信號分壓電路(電容c開路);對于4-20mA電流輸入信號,R2使用250Q的精密電阻即可變換為1~5V的信號(R1短路、C開路)。在電路版上設計有對應多功能信號調理電路焊位元件的位置,可根據需要白行選擇使用。8路模擬量輸入部分占用的是ATMEGA128的PF0~PF7。
(2)模擬量輸出通道
模擬量輸出通道單元電路設計方案如圖3。D/A轉換器采用AD公司的AD421,它是一種單片低功耗、高精度的電流輸出型DAC芯片,4~20mA 的輸出可以驅動標準的執行元件。該芯片的數字接口為標準HART?(三線)或其它FSK協議,DAC為16位分辨率,單調性輸出。采用回路供電方式,內含電源調整器為本身和外圍器件供電。在工業控制中,通常輸入量要多于輸出量,所以只設計Atmega128的PAO~PA7,PE2、PE3、PE6、PG4引腳通過4個光電隔離器(6N137)與4個AD421相連,構成4路模擬量輸出。
(3)數字量輸入/輸出通道
數字量I/O通道各配置8路高速光耦隔離通道。光耦器件選6N137,其開關延遲tpd僅75ns,而普通光耦器件開關延遲有3~6μs。I/O通道接口安排在Atmega128的PB0~PB7、PD0~PD7。
(4)CAN總線接口
選擇獨立的CAN通信控制器SJA1000、CAN總線驅動器82C250和高速光電耦合器6N137與微控制器Atmega128進行設計。微處理器Atmega128負責SJA1000的初始化,通過控制SJA1000實現數據的接收和發送等通信任務。
CAN總線接口如圖4。SJA1000的AD0~AD7連接到Atmega128的PC 口,CS連接到Atmega128的PG3。PG3為0時CPU片外存儲器地址選中SJA1000,CPU通過地址可對SJA1000執行讀/寫操作。SJA1000的RD、WE、ALE與Atmega128的引腳相連,INT 接Atmega128的PE7,Atmega128可通過中斷方式訪問SJA1000。
(5)與PC機的串行通信
考慮到智能控制節點要接收從RS232串口來的數據,因而采用了Atmega128的串行口進行中斷接收,所用的引腳是PE0、PE1。通過MAX232進行數據傳輸。
(6)脈沖輸入脈沖輸出
由于輸入信號的多樣性,增加了PI/PO部分。
3 Micro C/OS—II的移植
Micro C/OS—II移植到Atmega128上,需要修改OS_CPU.H,OS_CPU_A.S和OS_CPU_C.C三個與其相關的文件。其中OS—CPU.H主要完成的是數據類型、堆棧單位、堆棧增長方向的定義。相關的數據類型定義:
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U; //無符號8位數
typedef signed char INT8S; //帶符號8位數
typedef unsigned int INTI6U; //無符號l6位數
typedef signed int INTl6S; //帶符號l6位數
typedef unsigned long INT32U; //無符號32位數
typedef signed long INT32S; //帶符號32位數
typedef float?FP32; //單精度浮點數
堆棧單位的定義:
typedef unsigned char OS_STK;//堆棧入口寬度為8位
狀態寄存器的定義:
typedef unsigned char OS_ CPU_SR;//定義狀態寄存器為8位
堆棧增長方向的定義:
#define OS_STK_GROW TH 1;//AVR堆棧由高地址向低地址增長
0S_CPU_C.C 文件主要包括任務堆棧初始化和實現操作系統規定的幾個Hook函數。其中移植需要的Hook函數如下:
OSTaskCreateHook();OSTaskDelHook()
OSTaskldleHook();OSTaskStateHook()
OSTaskSwHook();oSTCBInitHook()
OSTimeTickHook()
移植所需的OS— CPU-A.s中的函數有:
OS_CPU_SR_SAVE();OS_CPU_SR_RESTORE()
OSStartHightRdy();OSCtxSw0
OSINTCtxSw();OSTicklSR0
應用移植后的嵌入式操作系統對控制器進行驗證,選取PB0~PB7作為輸入,PD0~PD7作為輸出,實現了二極管的發光演示。
部分源代碼如下:
static void?LED_Toggle(INT8U led)
{
#if OS_CRITICAL_M ETHOD = = 3
//AlLOCate storage for CPU status register
OS_CPU_SR cpu_sr;
#endif
OS_ENTER_CRITICAI ():
switck(1ed)
{casc 1:PORTD⌒=0x01;break;
case 2:PORTD⌒= 0x02;break;
case 3:PORTD⌒= 0x04;break;
case 4:PORTD⌒= 0x08;break;
}
OS_EXIT_CRITICAl ();
}
4 結語
應用Atmega128設計的嵌入式控制器能完成多功能數據采集與控制,CAN總線和RS232通信,移植的嵌入式實時操作系統可增強實時多任務信息處理的能力。并通過實驗對本設計進行了驗證。
評論