当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]基于ARM9的交通违章抓拍系统的开发

摘要介绍了基于ARM9 系列芯片S3C2410, 采用可裁减的Linux 操作系统, 构建交通违章抓拍系统的方法, 详细介绍了USB 接口和以太网接口的电路设计, 最后介绍了应用程序的结构和运行流程。

1 引言

智能交通系统( ITS) 将先进的信息技术、数据通讯传输技术、电子控制技术、计算机处理技术等应用于交通运输行业, 从而实现各种运输方式发展规划的现代化、决策的科学化和管理的智能化。数码电子警察是现在应用比较广泛的一种智能交通产品, 利用数码相机技术和相应的车辆检测与控制技术, 自动抓拍闯红灯的车辆。数字化、网络化、小型化和智能化已经成为当前电子警察的主要发展趋势。目前国内的产品多以Windows操作系统和x86 硬件体系为核心构建, 有成本高、体积大、稳定性欠缺的不足之处。

以Linux 操作系统和RAM7 或RAM9 系列芯片为核心构建嵌入式系统是目前最流行的嵌入式开发策略。Linux 是典型的嵌入式操作系统, 发展最快, 应用最广泛。Linux 是开源的、免费的, 从技术和经济的角度来看都是最佳选择。S3C2410 是韩国三星( Samsung) 公司设计的32 位RISC 嵌入式处理器。该处理器为手持设备和一般性应用提供了一个高性价比、低功耗、高性能的解决方案。该芯片基于ARM920T 内核, 采用五级流水线和哈佛结构, 提供1.1MIPS/MHz 的性能。ARM920T 具有全性能的内存管理单元MMU(Memory Management Unit) 、独立的16KB 指令和数据Cache 以及高速AMBA 总线接口。为了减少应用系统设计的成本, S3C2410 集成了众多的常用资源, 例如: LCD 控制器、NAND Flash 控制器、SDRAM控制器、系统片选逻辑以及一些常用的通讯接口等资源。

本文针对交通违章抓拍系统的特点, 以S3C2410 为核心合理设计硬件电路, 并提供必须的USB 接口、串口、网络接口和JTAG 口; 充分考虑抓拍的实时性和准确性, 采用裁减的实用的Linux2.6.12 内核, 制作根文件系统, 开发应用程序, 构建软硬件协作的嵌入式系统。

2 硬件设计


图1 硬件总体结构图

2.1 基于S3C2410 的电路设计

电路设计如图2 所示。

通讯接口部分包括USB 接口、以太网接口、串口。其中串口为常见的接口形式。这里主要说明USB 接口和以太网接口。

S3C2410 集成了USB 控制器, 支持两路USB Host 和一路USB Device.与USB Rev1.1 兼容, 支持低速和全速USB 设备。

[!--empirenews.page--]

本系统中设计两路USB, 都作为Host 使用。USB 接口接线图如图3 所示。

网络接口芯片选用台湾DAVICOM 公司的DM9000,DM9000 是带有通用处理器接口的单片快速以太网MAC 控制器, 并带有10/100M物理层接口, 内部集成4K 字SRAM, 接口支持8 位、16 位、32 位处理器。接口设计电路设计如图4 所示。


图4 Ethernet接口电路设计

[!--empirenews.page--]

2.2 检测电路设计

通常从交通指挥灯信号机中输出的红灯信号是220V/50Hz 的工频交流电, 需要设计一个整流滤波电路将从信号机输出的交通指挥灯信号变换为TTL 电平。交通指挥灯信号检测部分采用一个光隔隔离内外电路, 从交通指挥灯信号机输入至检测板的是220V/50Hz 的交流电, 通过二级管全波整流后, 得到大约200V 的直流信号, 再经过电阻分压, 接着使用100uF 的电容平波, 获得5V 左右的直流电, 加到4N25 光隔输入端, 输出经过一个反向器获得5VTTL 电平输出, 转换电路如图5 所示。

本系统采用环形线圈检测系统, 环形线圈检测系统目前国内外使用最广泛的车辆检测系统, 它由3 部分组成: 埋设在路面下的环形线圈传感器、信号检测处理单元( 包括检测信号放大单元、数据处理单元和通信接口) 及馈线。检测单元、环形线圈与馈线线路共同组成一个LC 调谐电路。此电路中的电感主要决定于环形线圈的匝数, 环形线圈是此电路的电感元件; 电容则决定于检测单元中的电容的大小。当电流通过环形线圈时, 在其周围形成一个电磁场, 当车辆行至线圈上方时, 在金属车体中感应出涡流电流, 涡流电流产生与环路耦合、但方向相反电磁场, 即互感, 使环形线圈电感量随之降低, 因而引起电路谐振频率的上升。只要检测到此频率随时间变化的信号, 就可检测出是否有车辆通过。振荡电路设计如图6 所示。

3 软件平台的构建和应用程序的开发

3.1 构建软件平台

系统的引导过程包括以下步骤:

( 1) 处理器重新启动以后, 执行ROM启动代码。

( 2)ROM启动代码初始化CPU、内存控制器以及片上设备,然后配置存储映射。随后执行bootloader.

( 3) bootloader 将内核从闪存解压到RAM中, 然后跳到内核的第一条指令处执行。

( 4) 内核初始化各种硬件设备, 挂载根文件系统, 然后执行init 进程。

( 5) Init 进程装载运行时共享库, 读取配置文件/etc/inittab,执行脚本/etc/rc.d/rcS.

构建嵌入式软件平台需要准备以下工作: 制作内核、创建根文件系统和生成启动代码bootloader.

3.1.1 制作Linux 内核

采用Linux2.6.12 的内核。在Linux2.6 中, 引入了很多非常有利于嵌入式应用的功能。这些新功能包括实时性能的增强、更方便的移植性、对大容量内存的支持、支持微控制器和I/O系统的改进等。2.6.12 提供了针对S3C2410 的配置, 使用命令make s3c2410_defconfig, 然后配置内核使用命令make menuconfig,配置体系结构( System Type) , 选择S3C2410 Implementation,配置处理器类型, 选择ARM9T, 接着配置通用选项, 支持网络、SYSVIPC 机制、支持ELF 文件格式, 选择根文件系统为JFFS2, 然后再配置网络, 选择网络设备支持, 选择串口支持、选择文件系统与网络文件系统, 配置USB 设备选项, 由于数码相机是USB 设备, 我们使用libusb0.1.10 版本的驱动支持, 所以需要修改内核源码usb.c 文件, 不把数码相机作为USB 存储设备。编译内核映像使用命令make zImage, 建立模块使用命令make modules.

3.1.2 创建根文件系统

根文件系统是所有Unix 系统不可或缺的组件, 顶层目录/bin、/dev、/etc、/lib、/proc、/sbin 和/usr 是必须的。有几项工作非常重要, 首先是建立安装GNU C 链接库, glibc 套件包括若干链接库, 比如数学链接库libm- 2.2.3.so, 共享c 链接库libc- 2.2.3.so.

除了链接库文件, 还要复制动态链接库及其符号连接。再就是建立设备文件, 按照Unix 的传统, 任何对象都可视为文件, 所有设备节点都放在/dev 目录下, 包括zero、random、tty0、tty1、ttyS0、tty、console、mem、null, 另外还需要建立必要的符号连接:

fd- >/proc/self/fd, stdin- >fd/0, stdout- >fd/1, stderr- >fd/2.然后选择主要的系统命令, BusyBox 无疑是最方便的套件, 成功安装后, /bin 目录下会出现二进制文件busybox, 对需要的命令建立对BusyBox 的符号连接。

为根文件系统选择文件系统是很重要的工作。JFFS2 文件系统的特点是可被写入、具有永久性、断电可靠性而且可以压缩。JFFS2 会为垃圾回收功能维护空间, 提供断电可靠性和损耗平衡这两个对flash 系统非常重要的特性。由于抓拍系统工作在开放式的环境中, 稳定性、可靠性是首先要考虑的, 所以选择JFFS2.用mkfs.jffs2 工具程序建立文件系统的映像: mkfs.

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

[!--empirenews.page--]

3.1.3 Bootloader 代码。

Bootloader 主要负责加载内核, 尽管它在系统启动期间执行的时间很短, 但是非常重要的系统组件, 对嵌入式系统来说是一件特别的工作。Bootloader 是严重依赖于硬件而实现的, 目前以ARM为基础的系统还没有标准的Bootloader, 针对本系统的硬件特性, 在ppcboot 的基础上加以修改, 生成适合本系统的启动代码。

3.2 应用程序的开发

程序主要实现以下功能: 现场红灯和线圈信号的采集; 控制相机拍照、保存参数、传输照片和删除照片; 处理按键信息并送数码管显示; 通过以太网远程下载照片, 也可以用U 盘本地下载照片。应用程序的总体结构如图7 所示。

系统软件的设计主要是控制相机的USB 通讯模块的编写、网络传输模块的编写、信号采集模块的编写和串口通讯模块的编写。其中USB 通讯模块是关键, 需要严格遵守数码相机的通讯协议; 网络传输采用客户机服务器方式, 本机作为客户机, 工控中心设置为服务器。检测信号模块主要是读取并口信息, 并口的操作使用端口I/O, 简单、操作性强, 并且可以清楚说明编写设备驱动程序开发所必需的底层硬件控制过程。在Linux 中有一个用于输入的命令inb( address) 和一个用于输出的命令outb( value, address) .C 语言的宏扩展实现了这两个函数, 而且不涉及任何函数库, 但使用这两个函数需要一些额外的函数, 函数ioperm( ) 从内核中申请和释放端口访问权。在Linux 下, 串口一般作为一个终端接口, 即tty 接口, POSIX.1 定义了一个查询和操作终端的标准接口, 该接口被称作termios,在系统的头文件<termios.h>中定义。termios 是一个数据结构和一系列操作这些数据结构的函数, 这些函数一起构成了通用的终端界面, 提供对终端的有效控制操作, 使得系统具有复杂的异步串口设备处理能力。

程序处理流程如图8 所示。

4 结束语

该数码电子警察系统采用高分辨率的数码相机, 清晰度高, 在运行的过程中, 抓拍成功率达到98%, 照片合格率达到95%, 误拍率低, 适用于各种恶劣的环境条件。采用实时性高的Linux2.6.12 的内核, 提供对S3C2410 的专门的支持。该系统稳定、可靠、实时性强, 且完全自主开发, 可有效控制成本, 有很强的市场竞争力。结合图像处理技术, 构建数码视频电子警察系统有更广阔的前景, 这将是下一步开发的重点。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

电流表是电学实验中常用的一种测量电流的仪表,它主要由永久磁铁、线圈和刻度盘等构成。电流表的使用在电学实验中具有至关重要的地位,正确的使用方法不仅能确保实验结果的准确性,还能保障实验人员的安全。本文将详细介绍电流表的使用方...

关键字: 电流表 磁铁 线圈

自耦变压器是一种常见的变压器类型,它只有一个线圈,同时起到了升压和降压的作用。在实际应用中,自耦变压器广泛应用于电力系统、工业生产等领域。对于自耦变压器的接线方法,我们需要进行详细的介绍。

关键字: 自耦变压器 线圈 绕组

变压器的线圈是不断地进行绕制的,线圈是变压器的基本的单位,它对于变压器进行传输电流和电压有着巨大的帮助的,对于变压器的绕制的线圈要注意绕制的方法,对于变压器的线圈的绕制要做到绕制的方式和绕制的步骤,这样的话变压器的线圈就...

关键字: 变压器 线圈 绕制

常见的变压器绕组有二种接法,即“三角形接线”和“星形接线”;在变压器的联接组别中“D表示为三角形接线,“Yn”表示为星形带中性线的接线,Y表示星形,n表示带中性线;“11”表示变压器二次侧的线电压Uab滞后一次侧线电压U...

关键字: 变压器 联接 线圈

变压器的工作原理是利用电磁感应原理,通过给初级线圈通电,使变压器中铁芯产生交变磁场,然后让次级线圈产生感应电动势,从而实现电压的变化。其中初级线圈是在次级线圈的里面。变压器在我们日常生活中是一种比较常见的器件。下面就一起...

关键字: 变压器 线圈 绕组

变压器是利用电磁感应的原理来改变交流电压的装置,主要构件是初级线圈、次级线圈和铁心(磁芯)。在电器设备和无 线电路中,常用作升降电压、匹配阻抗,安全隔离等。变压器按用途可以分为配电变压器、电力变压器、全密封变压器、组合...

关键字: 变压器 线圈 高功率

无线充电系统主要采用电磁感应原理,通过线圈进行能量耦合实现能量的传递。如图所示,系统工作时输入端将交流市电经全桥整流电路变换成直流电,或用24V直流电端直接为系统供电。经过电源管理模块后输出的直流电通过2M有源晶振逆变转...

关键字: 无线充电 线圈 手机

无线充电器中线圈的作用无线充电器是指利用电磁波感应原理进行充电的设备,其原理与变压器相似。发送端和接收端各有一个线圈。发送端线圈连接有线电源,产生电磁信号,接收端线圈感应发送端电磁信号,产生电流给电池充电。系统工作时,输...

关键字: 无线充电 耦合 线圈

无线充电器是指采用了最新的无线充电技术,不用传统的充电电源线连接到需要充电的终端设备上的充电器。有些数码爱好者想要自制无线充电器,那么如何自制无线充电器?到目前为止,虽然无线充电技术已经开始逐渐被大家所熟悉,但是市面上大...

关键字: 无线充电器 手机 线圈

随着无线充电技术的普及,支持无线充电的设备越来越多,看看新出的手机,不带个无线充电功能,都不好意思说自己是旗舰机。正常的形态下,它跟普通的无线充电器一样,只要把手机平摊在上面,就可以开始无线充电,但是只要按下一个开关,它...

关键字: 无线充电 线圈 高功率
关闭
关闭