基于A(yíng)RM單片機的裝載機障礙物監測預警系統設計
距離值通過(guò)PIC16C57的10腳進(jìn)行串行輸出,經(jīng)MAX232芯片后與ARM的串口相連。芯片MAX232是為RS232標準串口設計的接口電路,它完成TTL電平和RS232電平的轉換[8]。
2.2 聲光報警電路設計
本系統要求根據影響裝載機穩定性的障礙物距離的臨界值對危險狀況進(jìn)行三級報警。當處于低危險狀況時(shí),只有指示燈綠燈被點(diǎn)亮,提醒駕駛者注意;當危險級別增高時(shí),指示燈黃燈點(diǎn)亮,同時(shí)伴隨有舒緩的蜂鳴聲,提醒駕駛者采取措施;當達到最高危險級別時(shí),指示燈紅燈被點(diǎn)亮,同時(shí)蜂鳴聲由舒緩轉為急促,提醒駕駛者趕緊制動(dòng)。
設計中,分別采用了LPC2290的P2.20(GPIOA4)驅動(dòng)綠色LED,P2.21(GPIOA5)驅動(dòng)黃色LED, P2.22(GPIOA6)驅動(dòng)紅色LED,P2.23(GPIOA7)驅動(dòng)蜂鳴器。所設計的報警電路如圖3所示。
圖3 報警電路圖
3 系統軟件設計
常用的嵌入式操作系統有VxWorks、Windows CE、嵌入式Linux和μC/OS-Ⅱ等,由于μC/OS-Ⅱ嵌入式系統具有公開(kāi)源代碼,具有實(shí)時(shí)多任務(wù)內核來(lái)進(jìn)行多任務(wù)調度等優(yōu)點(diǎn)[9],所以本系統選用μC/OS-Ⅱ嵌入式操作系統。
由于采用模塊化編程,所以μC/OS-II下系統任務(wù)的劃分也是基于不同的功能模塊,每一個(gè)模塊被分解成一個(gè)或者多個(gè)任務(wù),每個(gè)任務(wù)被安排一個(gè)優(yōu)先級。這樣,一旦這些任務(wù)被建立起來(lái),它們之間的調度情況就完全由μC/OS-II來(lái)完成。結合本系統的設計需求,程序中創(chuàng )建串口通信任務(wù)、報警任務(wù)、LCD顯示任務(wù)。其軟件流程框圖如圖4所示。
圖4 軟件流程框圖
上電后,首先進(jìn)行硬件的初始化,然后對μC/OS-II操作系統進(jìn)行初始化,建立任務(wù),進(jìn)行多任務(wù)調度。μC /OS - II的任務(wù)調度是搶占式的,所以在設置任務(wù)優(yōu)先級的時(shí)候應該盡量考慮任務(wù)對實(shí)時(shí)性的要求。即使兩個(gè)任務(wù)的重要性是相同的,它們也必須有優(yōu)先級上的差異,這也就意味著(zhù)高優(yōu)先級的任務(wù)在處理完成后必須進(jìn)入等待或掛起狀態(tài),否則低優(yōu)先級的任務(wù)永遠也不可能執行。本系統中設置串口通信任務(wù)的優(yōu)先級高于液晶顯示任務(wù),液晶顯示任務(wù)的優(yōu)先級又高于報警任務(wù)。
1.串口通信任務(wù)完成超聲波測距部分與ARM處理器之間的數據傳輸。串口通信部分主要包括兩部分內容:用戶(hù)接口函數和任務(wù)函數。串口共有5個(gè)用戶(hù)接口函數,分別為deopen()、dclose()、dread()、dwrite()和diocontrol()。
超聲波測距裝置和LPC2290進(jìn)行通信的部分程序代碼如下:
diocontrol(Uart0_Handles,UART0_SET_MODE, (void *)Mode0); // 設置UART 模式
diocontrol(Uart0_Handles,UART0_SET_TIMEROUT,(void *)5); // 設置接收超時(shí)因子, 參數 =0 則關(guān)閉超時(shí)
diocontrol(Uart0_Handles, UART0_CLR_FIFO, (void *)0); // 清空接收軟FIFO
while (1)
{Rece_Count=dread(Uart0_Handles, UART_Rece
_Buff,1); //讀取超聲波發(fā)送過(guò)來(lái)的第一個(gè)起始字節,放入緩沖區
if((Rece_Count>0)(UART_Rece_Buff[0]== ’@’)) //如果讀取成功且第一個(gè)字節為‘@’
{dread(Uart0_Handles,UART_Rece_Buff[1],3); //接收后三位字節,分別為百位數、十位數、個(gè)位數
for(i=1;i4;i++)
UART_Rece_Buff[i]=UART_Rece_Buff[i]+48; //將十六進(jìn)制數轉換為ASCII碼值
for(i=0;i3;i++)
sbuff[i]=UART_Rece_Buff[i+1]; //接收的數據緩存到數組中,供LCD顯示部分調用
}
}
評論