基于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 的专门的支持。该系统稳定、可靠、实时性强, 且完全自主开发, 可有效控制成本, 有很强的市场竞争力。结合图像处理技术, 构建数码视频电子警察系统有更广阔的前景, 这将是下一步开发的重点。