<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ARM9的交通違章抓拍設(shè)計(jì)與實(shí)現(xiàn)

          基于ARM9的交通違章抓拍設(shè)計(jì)與實(shí)現(xiàn)

          作者: 時(shí)間:2013-04-07 來(lái)源:網(wǎng)絡(luò) 收藏

          2.2 檢測(cè)電路

          通常從指揮燈信號(hào)機(jī)中輸出的紅燈信號(hào)是220V/50Hz 的工頻交流電, 需要一個(gè)整流濾波電路將從信號(hào)機(jī)輸出的指揮燈信號(hào)變換為T(mén)TL 電平。指揮燈信號(hào)檢測(cè)部分采用一個(gè)光隔隔離內(nèi)外電路, 從交通指揮燈信號(hào)機(jī)輸入至檢測(cè)板的是220V/50Hz 的交流電, 通過(guò)二級(jí)管全波整流后, 得到大約200V 的直流信號(hào), 再經(jīng)過(guò)電阻分壓, 接著使用100uF 的電容平波, 獲得5V 左右的直流電, 加到4N25 光隔輸入端, 輸出經(jīng)過(guò)一個(gè)反向器獲得5VTTL 電平輸出, 轉(zhuǎn)換電路如圖5 所示。

          本系統(tǒng)采用環(huán)形線(xiàn)圈檢測(cè)系統(tǒng), 環(huán)形線(xiàn)圈檢測(cè)系統(tǒng)目前國(guó)內(nèi)外使用最廣泛的車(chē)輛檢測(cè)系統(tǒng), 它由3 部分組成: 埋設(shè)在路面下的環(huán)形線(xiàn)圈傳感器、信號(hào)檢測(cè)處理單元( 包括檢測(cè)信號(hào)放大單元、數(shù)據(jù)處理單元和通信接口) 及饋線(xiàn)。檢測(cè)單元、環(huán)形線(xiàn)圈與饋線(xiàn)線(xiàn)路共同組成一個(gè)LC 調(diào)諧電路。此電路中的電感主要決定于環(huán)形線(xiàn)圈的匝數(shù), 環(huán)形線(xiàn)圈是此電路的電感元件; 電容則決定于檢測(cè)單元中的電容的大小。當(dāng)電流通過(guò)環(huán)形線(xiàn)圈時(shí), 在其周?chē)纬梢粋€(gè)電磁場(chǎng), 當(dāng)車(chē)輛行至線(xiàn)圈上方時(shí), 在金屬車(chē)體中感應(yīng)出渦流電流, 渦流電流產(chǎn)生與環(huán)路耦合、但方向相反電磁場(chǎng), 即互感, 使環(huán)形線(xiàn)圈電感量隨之降低, 因而引起電路諧振頻率的上升。只要檢測(cè)到此頻率隨時(shí)間變化的信號(hào), 就可檢測(cè)出是否有車(chē)輛通過(guò)。振蕩電路如圖6 所示。

          3 軟件平臺(tái)的構(gòu)建和應(yīng)用程序的開(kāi)發(fā)

          3.1 構(gòu)建軟件平臺(tái)

          系統(tǒng)的引導(dǎo)過(guò)程包括以下步驟:

          ( 1) 處理器重新啟動(dòng)以后, 執(zhí)行ROM啟動(dòng)代碼。

          ( 2)ROM啟動(dòng)代碼初始化CPU、內(nèi)存控制器以及片上設(shè)備,然后配置存儲(chǔ)映射。隨后執(zhí)行bootloader.

          ( 3) bootloader 將內(nèi)核從閃存解壓到RAM中, 然后跳到內(nèi)核的第一條指令處執(zhí)行。

          ( 4) 內(nèi)核初始化各種硬件設(shè)備, 掛載根文件系統(tǒng), 然后執(zhí)行init 進(jìn)程。

          ( 5) Init 進(jìn)程裝載運(yùn)行時(shí)共享庫(kù), 讀取配置文件/etc/inittab,執(zhí)行腳本/etc/rc.d/rcS.

          構(gòu)建嵌入式軟件平臺(tái)需要準(zhǔn)備以下工作: 制作內(nèi)核、創(chuàng)建根文件系統(tǒng)和生成啟動(dòng)代碼bootloader.

          3.1.1 制作Linux 內(nèi)核

          采用Linux2.6.12 的內(nèi)核。在Linux2.6 中, 引入了很多非常有利于嵌入式應(yīng)用的功能。這些新功能包括實(shí)時(shí)性能的增強(qiáng)、更方便的移植性、對(duì)大容量?jī)?nèi)存的支持、支持微控制器和I/O系統(tǒng)的改進(jìn)等。2.6.12 提供了針對(duì)S3C2410 的配置, 使用命令make s3c2410_defconfig, 然后配置內(nèi)核使用命令make menuconfig,配置體系結(jié)構(gòu)( System Type) , 選擇S3C2410 Implementation,配置處理器類(lèi)型, 選擇T, 接著配置通用選項(xiàng), 支持網(wǎng)絡(luò)、SYSVIPC 機(jī)制、支持ELF 文件格式, 選擇根文件系統(tǒng)為JFFS2, 然后再配置網(wǎng)絡(luò), 選擇網(wǎng)絡(luò)設(shè)備支持, 選擇串口支持、選擇文件系統(tǒng)與網(wǎng)絡(luò)文件系統(tǒng), 配置USB 設(shè)備選項(xiàng), 由于數(shù)碼相機(jī)是USB 設(shè)備, 我們使用libusb0.1.10 版本的驅(qū)動(dòng)支持, 所以需要修改內(nèi)核源碼usb.c 文件, 不把數(shù)碼相機(jī)作為USB 存儲(chǔ)設(shè)備。編譯內(nèi)核映像使用命令make zImage, 建立模塊使用命令make modules.

          3.1.2 創(chuàng)建根文件系統(tǒng)

          根文件系統(tǒng)是所有Unix 系統(tǒng)不可或缺的組件, 頂層目錄/bin、/dev、/etc、/lib、/proc、/sbin 和/usr 是必須的。有幾項(xiàng)工作非常重要, 首先是建立安裝GNU C 鏈接庫(kù), glibc 套件包括若干鏈接庫(kù), 比如數(shù)學(xué)鏈接庫(kù)libm- 2.2.3.so, 共享c 鏈接庫(kù)libc- 2.2.3.so.

          除了鏈接庫(kù)文件, 還要復(fù)制動(dòng)態(tài)鏈接庫(kù)及其符號(hào)連接。再就是建立設(shè)備文件, 按照Unix 的傳統(tǒng), 任何對(duì)象都可視為文件, 所有設(shè)備節(jié)點(diǎn)都放在/dev 目錄下, 包括zero、random、tty0、tty1、ttyS0、tty、console、mem、null, 另外還需要建立必要的符號(hào)連接:

          fd- >/proc/self/fd, stdin- >fd/0, stdout- >fd/1, stderr- >fd/2.然后選擇主要的系統(tǒng)命令, BusyBox 無(wú)疑是最方便的套件, 成功安裝后, /bin 目錄下會(huì)出現(xiàn)二進(jìn)制文件busybox, 對(duì)需要的命令建立對(duì)BusyBox 的符號(hào)連接。

          為根文件系統(tǒng)選擇文件系統(tǒng)是很重要的工作。JFFS2 文件系統(tǒng)的特點(diǎn)是可被寫(xiě)入、具有永久性、斷電可靠性而且可以壓縮。JFFS2 會(huì)為垃圾回收功能維護(hù)空間, 提供斷電可靠性和損耗平衡這兩個(gè)對(duì)flash 系統(tǒng)非常重要的特性。由于系統(tǒng)工作在開(kāi)放式的環(huán)境中, 穩(wěn)定性、可靠性是首先要考慮的, 所以選擇JFFS2.用mkfs.jffs2 工具程序建立文件系統(tǒng)的映像: mkfs.

          jffs2- r rootfs/- o images/rootfs- jffs2.image.

          3.1.3 Bootloader 代碼。

          Bootloader 主要負(fù)責(zé)加載內(nèi)核, 盡管它在系統(tǒng)啟動(dòng)期間執(zhí)行的時(shí)間很短, 但是非常重要的系統(tǒng)組件, 對(duì)嵌入式系統(tǒng)來(lái)說(shuō)是一件特別的工作。Bootloader 是嚴(yán)重依賴(lài)于硬件而的, 目前以ARM為基礎(chǔ)的系統(tǒng)還沒(méi)有標(biāo)準(zhǔn)的Bootloader, 針對(duì)本系統(tǒng)的硬件特性, 在ppcboot 的基礎(chǔ)上加以修改, 生成適合本系統(tǒng)的啟動(dòng)代碼。

          3.2 應(yīng)用程序的開(kāi)發(fā)

          程序主要以下功能: 現(xiàn)場(chǎng)紅燈和線(xiàn)圈信號(hào)的采集; 控制相機(jī)拍照、保存參數(shù)、傳輸照片和刪除照片; 處理按鍵信息并送數(shù)碼管顯示; 通過(guò)以太網(wǎng)遠(yuǎn)程下載照片, 也可以用U 盤(pán)本地下載照片。應(yīng)用程序的總體結(jié)構(gòu)如圖7 所示。

          系統(tǒng)軟件的設(shè)計(jì)主要是控制相機(jī)的USB 通訊模塊的編寫(xiě)、網(wǎng)絡(luò)傳輸模塊的編寫(xiě)、信號(hào)采集模塊的編寫(xiě)和串口通訊模塊的編寫(xiě)。其中USB 通訊模塊是關(guān)鍵, 需要嚴(yán)格遵守?cái)?shù)碼相機(jī)的通訊協(xié)議; 網(wǎng)絡(luò)傳輸采用客戶(hù)機(jī)服務(wù)器方式, 本機(jī)作為客戶(hù)機(jī), 工控中心設(shè)置為服務(wù)器。檢測(cè)信號(hào)模塊主要是讀取并口信息, 并口的操作使用端口I/O, 簡(jiǎn)單、操作性強(qiáng), 并且可以清楚說(shuō)明編寫(xiě)設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)所必需的底層硬件控制過(guò)程。在Linux 中有一個(gè)用于輸入的命令inb( address) 和一個(gè)用于輸出的命令outb( value, address) .C 語(yǔ)言的宏擴(kuò)展了這兩個(gè)函數(shù), 而且不涉及任何函數(shù)庫(kù), 但使用這兩個(gè)函數(shù)需要一些額外的函數(shù), 函數(shù)ioperm( ) 從內(nèi)核中申請(qǐng)和釋放端口訪(fǎng)問(wèn)權(quán)。在Linux 下, 串口一般作為一個(gè)終端接口, 即tty 接口, POSIX.1 定義了一個(gè)查詢(xún)和操作終端的標(biāo)準(zhǔn)接口, 該接口被稱(chēng)作termios,在系統(tǒng)的頭文件中定義。termios 是一個(gè)數(shù)據(jù)結(jié)構(gòu)和一系列操作這些數(shù)據(jù)結(jié)構(gòu)的函數(shù), 這些函數(shù)一起構(gòu)成了通用的終端界面, 提供對(duì)終端的有效控制操作, 使得系統(tǒng)具有復(fù)雜的異步串口設(shè)備處理能力。

          程序處理流程如圖8 所示。

          4 結(jié)束語(yǔ)

          該數(shù)碼電子警察系統(tǒng)采用高分辨率的數(shù)碼相機(jī), 清晰度高, 在運(yùn)行的過(guò)程中, 成功率達(dá)到98%, 照片合格率達(dá)到95%, 誤拍率低, 適用于各種惡劣的環(huán)境條件。采用實(shí)時(shí)性高的Linux2.6.12 的內(nèi)核, 提供對(duì)S3C2410 的專(zhuān)門(mén)的支持。該系統(tǒng)穩(wěn)定、可靠、實(shí)時(shí)性強(qiáng), 且完全自主開(kāi)發(fā), 可有效控制成本, 有很強(qiáng)的市場(chǎng)競(jìng)爭(zhēng)力。結(jié)合圖像處理技術(shù), 構(gòu)建數(shù)碼視頻電子警察系統(tǒng)有更廣闊的前景, 這將是下一步開(kāi)發(fā)的重點(diǎn)。


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();