基于嵌入式系统的机械车载监控终端研究
1 引言
近年来,随着土地资源不断的被开发利用,我国基础建设的规模也进一步扩大,工程机械市场呈现持续增长态势,但是国内的工程机械行业仍处于一种相对落后的生产方式,所以工程机械行业需要适合本行业要求的,智能的,性能优越的监控产品。嵌入式技术、总线技术和网络技术等高新技术融入到工程机械行业的监控系统中来,是十分必要的。为此,本文设计了一种基于嵌入式系统和总线技术的工程机械监控系统终端,详细讨论了监控系统终端的构成和CAN总线的设计。
2 监控系统终端的总体构成
监控终端负责前端控制系统所有单元的监控,包括安全监控、电液比例等单元并通过液晶显示器和键盘进行人机交互,同时,连接视频监控设备,随时监控现场的情况。
如图1所示,监控系统终端包括:车载监控系统控制模块、人机交互模块、存储模块、视频监控模块、CAN总线控制模块。
图1监控系统终端的总体构成
各部分的功能如下:
1.载监控系统控制模块是整个终端的核心部件,采用ARM720TDMA内核的嵌入式处理器ARM7202,完成整个系统的控制功能。
2.储模块用来进行操作系统内核、引导程序和应用程序、以及驱动程序的存储,并缓存执行过程中产生的各种数据,使系统能稳定的运行。
3.机交互模块包括液晶显示器和键盘输入,用户通过人机交互模块进行直观的监测和控制。
4.为了对现场工作状况进行直接监控,系统集成了视频监控模块,通过视频采集卡连接摄像机,将采集到的图像转换成数字信号并压缩成JPEG格式文件,输入到处理器中,供用户进行监测。
5.系统通过CAN总线实现前端各个单元控制系统的监测。
3 硬件设计
3.1 硬件总体结构
如图2 所示,监控终端分成包括:嵌入式处理器7202、存储系统、复位电路和晶振电路, JTAG调试接口、LCD显示接口、RS-232串行接口、CAN总线接口。
图2载监控终端硬件结构图
各部分的功能如下:
1.晶振电路为系统提供工作时钟。
2.复位电路用于完成系统上电复位和在系统工作时用户按键复位。
3.存储系统由FLASH存储器、SDRAM存储器组成。FLASH存储器用于存放己调试好的用户应用程序、嵌入式操作系统和其他在系统掉电后需要保存的用户数据等。SDRAM存储器作为系统运行时的主要区域。
4.JTAG接口可对芯片内部的所有部件进行访问,通过该接口可对系统进行调试、编程等。
5.LCD接口用于连接人机交互所需要的显示装置。
6.CAN控制器为系统提供CAN总线接口,与前端各单元控制系统进行数据和指令的传递。
7.RS-232串行通信接口用于视频压缩卡的连接,传输视频图像。
3.2 CAN模块的硬件设计
通过CAN模块接口,ARM处理器可以直接访问CAN寄存器组,这些寄存器可以配置CAN核心模块、CAN信息处理模块以及访问信息RAM的方式。本系统采用飞利浦公司的TJA1050作为收发器,在CAN接口和CAN总线之间的收发器,作用是将3.3V的逻辑电平转换为CAN的逻辑电平,也就是将发送和接收到的信号转换成CAN总线和ARM可以识别的信号。
图3 CAN模块的电路设计
4 ARM中CAN模块的软件设计
在构造和特性上,7202的CAN控制器与标准的CAN模块基本没有区别,只是在寄存器的个数与基地址的偏移上有些不同。
如图4,在开始进行总线操作前需要做好4步工作。首先要使能CAN模块,向CAN Enable Register写入0X01,由于ARM的引脚是复用的,所以在使能CAN模块以前,先要将CAN模块占用的引脚切换到特殊模式。然后要初始化CAN模块,主要是正确的配置Command Mask Register,这个寄存器的作用是用来配置CAN模块收发的信息体。接着,配置波特率,通过所想达到的CAN总线波特率,计算出计算公式各个变量的值,而CAN的波特率计算公式如下:(Tseg2+Tseg1+SJW+3)* BRP = CAN_CLK/Fbps。左边的4个变量在BRP寄存器中,而等式右边的CAN_CLK是一个固定值,在这里是48MHz。最后,配置信息存储器,信息体的配置是与具体的应用信息相关的,具体到信息缓冲寄存器组中的每一个寄存器的设置。需要提出的是,前面三步都是在初始化模式下完成的,而最后一步则是在正常模式下进行。在进行完这四部以后,就可以对CAN模块进行操作了。
图4 CAN模块操作顺序
linux操作系统把对CAN的操作看成是对文件的操作,对于文件,最基本的操作是打开、关闭、读和写。对于CAN模块,读与写操作分别实现接收数据的读取和发送,打开和关闭文件则分别实现CAN模块的一些硬件资源的初始化和释放先前所占有的资源,配置波特率、配置信息模式等配置特性的操作,则由ioctl函数完成的。
static int _int can_init(void)
{
初始化默认波特率、注册驱动程序
}
int can_open(struct inode *inode, struct file *filp)
{
设置CAN工作寄存器、初始化读操作队列、注册CAN模块中断
}
static int can_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{
根据cmd参数选择相应的操作
}
上面列举出了对CAN操作的初始化、打开、和配置函数,其他的还有读、写、关闭等函数,最后所要实现的功能就是CAN模块中断,在中断中主要完成对于读写位置标志的改变,以实现阻塞型I/O操作,这样,用户通过应用这些操作函数就完成了CAN总线的使用了。
- 嵌入式系统的定义与发展历史(11-15)
- 嵌入式系统亲密接触(11-22)
- 嵌入式系统设计中的USB OTG方案(02-01)
- 一个典型的嵌入式系统设计和实现 (02-02)
- DDR SDRAM在嵌入式系统中的应用(02-07)
- 嵌入式实时系统开发的正确选择 (02-13)