基于A(yíng)RM開(kāi)發(fā)板的車(chē)輛檢測系統控制單元設計
摘 要:本文介紹了利用ARM7內核微處理器LPC2114設計的高速公路車(chē)輛檢測系統控制單元,著(zhù)重分析了大容量Flash存儲單元的設計和ARM開(kāi)發(fā)相關(guān)注意事項,給出了系統原理框圖、單元電路設計和軟件設計思想。
本文引用地址:http://dyxdggzs.com/article/196599.htm引言
由于交通需求的不斷增加,有越來(lái)越多的環(huán)形感應線(xiàn)圈檢測器用于交通檢測。這些埋設在道路表面下的線(xiàn)圈可以檢測到車(chē)輛通過(guò)時(shí)的電磁變化進(jìn)而精確地算出交通流量。交通流量是交通統計和交通規劃的基本數據,通過(guò)這些檢測結果可以用來(lái)計算占用率(表征交通密度),在使用雙線(xiàn)圈模式時(shí)還可以提供速度、車(chē)輛行駛方向、車(chē)型分類(lèi)等數據,這些數據對于交通管理和統計是極為重要的。通常高速公路車(chē)輛檢測系統由多通道環(huán)形檢測單元LD4和控制單元CCU組成,本文采用PHILIPS公司最新推出的ARM7內核微處理器LPC2114設計實(shí)現了車(chē)輛檢測系統控制單元部分,并且和5個(gè)LD4環(huán)形檢測器一起構成10通道高速公路車(chē)輛檢測系統。
LPC2114和電子硬盤(pán)連線(xiàn)示意圖
主程序流程圖
總體方案設計
本文設計的控制板系統原理框圖如圖2所示,以L(fǎng)PC2114為核心控制單元,該芯片是一種支持實(shí)時(shí)仿真和跟蹤的16/32位基于A(yíng)RM7TDMI-S 內核的CPU。內部集成了4路10 位A/D轉換器,兩個(gè)32位定時(shí)器、一個(gè)實(shí)時(shí)時(shí)鐘和看門(mén)狗,多個(gè)串行接口,包括兩個(gè)工業(yè)標準的UART、高速和兩個(gè)SPI總線(xiàn)接口,外部多達46個(gè)與TTL電平兼容的通用I/O口,非常適用于作為主控單元。CPLD EPM7128作為微處理器的擴展輸入/輸出,通過(guò)光電耦合和LD4標準定義總線(xiàn)相連,該標準定義的總線(xiàn)基于RS-485總線(xiàn)通信協(xié)議。LD4和控制板通過(guò)標準總線(xiàn)進(jìn)行數據交換,控制板每隔10秒掃描并發(fā)送一次請求數據的命令,相應LD4通道返回請求數據或者無(wú)效信息,ARM處理器對獲得的各通道數據進(jìn)行相應的統計運算處理。每隔用戶(hù)設定的間隔時(shí)間就將統計數據存儲于靜態(tài)RAM,供中心站定時(shí)獲取,同時(shí),以分鐘為單位將統計的數據備份至Flash電子硬盤(pán)中。中心站可以通過(guò)請求備份數據命令獲取相應時(shí)間段的數據,并存入數據庫。中心站和控制板采用RS-232串口方式通信,利用調制解調器實(shí)現遠程數據傳輸。為了解決大容量存儲問(wèn)題,系統使用了三星公司提供的K9F2808來(lái)作為電子硬盤(pán),16MB的容量能夠存儲11天備份數據,并且該電子硬盤(pán)能夠靈活升級。
LPC2114與電子硬盤(pán)的接口實(shí)現
為了防止傳輸及中心站故障等問(wèn)題而導致數據丟失,系統要求對一段時(shí)間內的數據進(jìn)行備份,因此在系統設計的過(guò)程中需要考慮大容量存儲問(wèn)題。
設定本系統每分鐘需要備份一次統計數據,根據環(huán)形檢測器LD4的數據格式,一次數據量為1026B,若采用靜態(tài)RAM作為存儲單元,需要多片大容量RAM級聯(lián)使用,價(jià)格昂貴,且存儲容量擴展困難。若使用動(dòng)態(tài)RAM作為存儲單元,缺點(diǎn)在于控制困難,需要動(dòng)態(tài)RAM控制器輔助操作。Flash作為存儲器使用簡(jiǎn)單,容量大,盡管使用壽命有限,考慮到系統每1分鐘存儲1026B,就16MB容量而言,11天左右寫(xiě)滿(mǎn)一次,那么一個(gè)月擦寫(xiě)約3次,以此計算,一年擦寫(xiě)約36次,而Flash壽命一般為擦寫(xiě)10萬(wàn)余次,所以本系統完全可以采用Flash作為電子硬盤(pán)用在車(chē)輛檢測系統中。另外,Flash還具有掉電非易失特性,更適合應用于本系統。
為了便于存儲容量的升級擴展,本系統選用K9F2808作為存儲器。K9F2808為48腳表面封裝器件,芯片內部有(16M+512K)×8 bit的存儲空間,可組成32768行,528列,其中后備的16列的列地址編碼為513~527,可進(jìn)行528字節為一頁(yè)的讀、寫(xiě)和32頁(yè)為一塊的擦除操作。此外,K9F2808的特點(diǎn)還在于其命令、地址和數據信息均通過(guò)8條I/O總線(xiàn)傳輸,接口標準統一,易于存儲容量升級。
LPC2114和Flash電子硬盤(pán)之間的連線(xiàn)如示意圖,由于LPC2114沒(méi)有外部總線(xiàn),所以對Flash操作只能采用I/O操作方式。K9F2808各種操作具有共同特點(diǎn),即在I/O端口首先發(fā)送操作命令字到命令寄存器,其后的連續3個(gè)周期發(fā)送需要操作單元的地址,順序為:A0~A7,A9~A16,A17~A23,其中A8由命令字確定。
下面以頁(yè)編程操作為例,給出K9F2808的ARM驅動(dòng)程序(基于A(yíng)DS1.2開(kāi)發(fā)環(huán)境),而頁(yè)讀以及塊擦除等方法與頁(yè)編程類(lèi)似,只是讀是由#RE信號來(lái)鎖存數據,而擦除時(shí)只須送兩個(gè)周期的地址。
row_add為頁(yè)號,需要左移9位得到行地址。erase_flash( )DD擦除Flash函數
write_command( )DD寫(xiě)命令函數
write_address( )DD寫(xiě)地址函數
write_data( )DD寫(xiě)數據函數
read_data( )DD讀數據函數
void flash_store(uint32 row_add, uint8 *buffer )
{ uint16 i;
uint32 statue,address;
//變量定義
IO0DIR |= 0x00ff0000;
//設定IO方向
if((row_add== 0)|| ((row_add%32)==0))
{address = row_add9;
address = 0x00fffe00;
erase_flash(address);}
//擦除Flash
write_command(0x80);
//寫(xiě)命令80H
address = row_add9;
address = 0x00fffe00;
write_address(address);
//寫(xiě)地址
statue = IO0PIN;
//獲取狀態(tài)
while((statuefr_b)==0)
{statue = IO0PIN;}
//忙,等待
for(i=0;i528;i++)
//寫(xiě)528字節
{write_data(*(buffer+i));}
//寫(xiě)入數據
write_command(0x10);
//寫(xiě)命令10H
statue = IO0PIN;
//獲取狀態(tài)
while((statuefr_b)==0)
{statue = IO0PIN;}
//忙,等待
write_command(0x70);
//寫(xiě)命令70H
statue = read_data();
//獲取狀態(tài)
評論