微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 工业电子 > 基于ARM和FPGA的智能小车监控系统

基于ARM和FPGA的智能小车监控系统

时间:11-24 来源:互联网 点击:
3 系统软件设计

3.1 图像采集驱动开发

该系统图像采集模块硬件电路由CMOS图像传感器芯片和S3C2440A的CAMIF单元组成。为此在编写图像采集驱动程序时,就需要对图像传感器芯片的寄存器和S3C2440A的CAMIF单元的寄存器同时配置,否则就得不到正常图像。S3C2440A以I2C总线的方式对CMOS图像传感器芯片的寄存器进行配置。

在WinCE下,图像采集驱动是基于流接口设计的。首先在CIS_Init函数下对相机接口的寄存器进行配置,主要配置功能包括:设置相机接口输出时钟;设置图像输入输出格式;设置裁剪图像偏移量;设置帧缓冲区中图像像素大小;设置编码通道和预览通道帧缓冲区起始地址。然后S3C2440A以I2C总线方式对OV9650的寄存器进行配置,需要注意的是相机接口的配置功能要和OV9650的配置功能完全一致,否则采集不到图像,两者之间通信协议如图6所示。最后利用API函数CreateThread()创建中断服务线程。



中断服务线程函数负责具体的中断操作,在该线程函数内利用CreateEent()函数创建CAMIF单元的中断事件。然后调用InterruptInitia-lize()函数将该中断事件与CAMIF单元的逻辑中断相关联。最后调用Wait For SingleObject()等待中断事件的到来,当中断到来时,将读取事件置位,在应用程序中即可利用ReadFile()函数读取YCbCr数据,为图像压缩提供数据源。

3.2 速度采集程序设计

速度传感器由红外反射式传感器和施密特触发器组成,经过施密特触发器整形后信号的频率与速度相关,通过测量该信号频率计算车模行驶速度。在Windows CE中,API函数SetTimer()可以设置定时器编号和定时时间,当定时时间到达时,执行消息响应函数OnTimer。速度采集流程如图7所示。调用SetTimer函数设置定时器初值,当外部中断EINT_19产生时,即一个脉冲信号到来,计数变量CNT加1,当SetTimer()函数设置的时间到来时,执行OnTimer()函数,该函数负责计算车模速度并将计数变量CNT清0。



计数变量CNT虽然与速度成正比关系,但它并不是真正的行驶速度,需要经过一定的数学转换,才能传送到远程监控端并显示。假设车模后轮直径为D,光栅编码盘黑白相间的个数为M,在定时时间T秒内记得脉冲个数为N,则车模行驶速度:



3.3 网络传输程序设计

该系统网络传输程序是基于TCP协议来实现的。S3C2440A组成的嵌入式设备作为服务器负责图像采集、速度采集、车模控制。服务器调用accept()函数等待客户端的连接请求,服务器端接收该连接请求后,双方就此建立了连接。客户端通过send()发送请求命令,服务器调用recv()函数接收该请求命令,通过命令解析来执行具体的操作,若收到图像采集命令,服务器端打开摄像头驱动,设置图像像素大小后,将采集到YCbCr数据进行JPEG的压缩并保存为.jpg格式的图片。然后将该图片发送到客户端,客户端将该图片在图像显示区域显示;若收到速度采集命令,服务器端打开定时器,打开外部中断EINT19,用于计数,当定时时间到后,将计数脉冲转换为以cm/s为单位的速度发送到客户端,客户端将采集到速度在速度显示区显示;若收到控制车模运行状态,如前进、后退、左转、右转,服务器端打开GPIO驱动,通过GPIO端口输出控制信号,控制FPGA输出占空比可调的PWM信号,即可控制车模的运行状态。

客户端负责发送控制车模、图像采集、速度采集的命令,然后将服务器端发送过来的图像、速度信息进行显示。客户端的监控界面如图8所示。



远程地址栏输入服务端IP地址,点击“创建连接”按钮即可和服务器端进行连接,连接成功后,就可以进行一系列的命令发送。

4 结语

该设计在自制电路板板上进行了软、硬件的系统集成及测试。测试结果为:图像采集时钟24 MHz;图像采集速度为30 f/s;行同步频率为14.5 kHz,图像采集像素为640×480;JPEG压缩比达到10:1;运动控制命令响应时间为5μs,网络传输速率达10 Mb/s。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top