基于CAN总线的重型卡车嵌入式车载仪表系统设计
80C51单片机的外部存储器时序才能使用。图3电路中,使用了一个“或”门74LS32和一个“或非”门74LS02的组合,配合地址总线,首先模拟出一个ALE(地址锁存信号),把SJA1000的内部寄存器地址写入锁存器,然后再向SJA1000内部寄存器写入数据。这样,使用ARM的两条外部存储器访问指令,就可以模拟出SJA1000所需要的时序了。利用S3C2410A的片选信号nGCS4和地址总线LADDR2,经过“或非”门模拟出的SJA1000的物理端口地址为0x20000008,片选信号nGCS4和地址总线LADDR3,经过 “或”门,模拟出的SJA1000的数据端口地址为0x20000004。 3 嵌入式车载仪表软件设计 3.2 基于MiniGUI的车载仪表显示程序设计 本系统的图形用户界面主要显示车速、转速、水温、油压、燃油量、车内温度,冷却水温度过低、油压过低、燃油过低报警信号和大灯、尾灯、左右转向灯、制动灯等灯光信号。使用MiniGUI的按钮通知消息MSG_COMMOND,该消息是在状态监测按钮按下后发送到窗口过程函数,执行CAN通信子程序,接收各电子控制单元ECU上传的卡车运行状态信息,实时地显示在液晶屏上,并以不同的颜色表示报警信号和车灯信号,使驾驶员能够随时全面地监测卡车的运行状态,提高卡车运行的安全性。
3.1 嵌入式Linux下CAN设备驱动程序开发
网络互连ECU在Linux系统下使用CAN通信技术,因此需设计基于Linux的CAN设备驱动程序。
设备驱动程序是操作系统内核和机器硬件之间的接口。Linux内核有三种类型的设备驱动程序:字符设备驱动程序、块设备驱动程序和网络设备驱动程序[4]。SJA1000控制器属于字符型设备,CAN设备驱动程序实际上是Linux内核直接对SJA1000器件的初始化与读写操作。而这些操作方式其实就是一些标准的系统调用,如open()、read()、write()、close()等。定义把系统调用和驱动程序关联起来的关键数据结构file_operations,结构体中的每一个成员都是一个函数指针,实现了对于不同操作的函数跳转功能。具体的声明如下:
struct file_operations sja1000_can_fops =
{
owner: THIS_MODULE,
ioctl: can_ioctl, //设置通信参数
open: can_open, //完成SJA1000初始化,中断申请,
增加次数计数器的使用次数
write: can_write, //发送数据
read: can_read, //接收数据
release : can_release, //关闭CAN设备,关闭中断,
减少次数计数器的使用次数
};
驱动程序加载到内核中时,首先运行驱动程序的初始化函数,然后等待系统调用在file_operations结构中定义的相关函数,实现对设备的操作。CAN设备的初始化函数负责创建CAN设备文件,注册CAN设备驱动程序。
对于字符设备,Linux通过调用register_chrdev()向系统注册;卸载驱动时,注销设备函数为unregister_chrdev()。设备驱动程序一般以模块形式加入内核,使用module_init和module_exit宏对模块初始化函数can_init()和模块清除函数can_cleanup()进行标记(通常在文件末尾)。程序如下:
module_init(can_init);
module_exit(can_cleanup);
驱动程序编写完成并编译通过后,可使用命令:#insmod can_sja1000_dev.ko进行动态加载。加载后,用户程序就可以通过文件直接操作CAN控制器,实现CAN总线通信。使用驱动程序完成CAN总线数据收发的原理如图4所示。在系统初始化完毕后,发送命令帧给监测系统的电子控制单元ECU,通过系统调用将命令帧从用户空间拷贝到内核空间,发送数据处理函数将内核层的命令帧写入SJA1000控制器;当电子控制单元ECU采集的卡车运行状态数据到来时,中断被触发,唤醒处于睡眠状态的进程,接收数据处理函数将从SJA1000控制器读取数据到接收缓冲区,用户通过系统调用读取到完整的数据。
MiniGUI是嵌入式图形用户界面系统,它通过窗口系统来管理应用程序在屏幕上的显示[5]。本系统的人机界面包含的窗口类型有:对话框、按钮、静态框、位图和填充条,使用对话框作为主窗口,基于MiniGUI人机界面的程序流程图如图5所示。
本文针对我国重型卡车的发展现状,在完成重型卡车车载网络系统总体结构设计的基础上,对基于CAN总线的嵌入式车载仪表系统的软硬件设计方法进行了详细阐述。该系统能对重型卡车的车速、发动机转速、水温、油温、油压、燃油量以及车灯开关量等状态信息进行实时监测,及时有效地发现和识别卡车运行过程中发生的各种故障,对于保证卡车安全运行起到了重要作用。测试表明,本文所设计的重型卡车车载仪表系统工作性能稳定、可靠,具有较好的人机界面。
参考文献
[1] 位堂杰,刘金朝.HOWO重型载货汽车的车载网络系统[J]. 汽车电器,2009(1):1-3.
[2] FELLMETH P, L?魻FFLER T.Networking heavy-duty vehicles based on SAE J1939[J]. Vector Corporation,2008.
[3] 阳宪惠. 现场总线技术及其应用(第2版)[M].北京:清华大学出版社,2008.
[4] 李俊.嵌入式Linux设备驱动开发详解[M].北京:人民邮电出版社,2008.
[5] 周立功.ARM嵌入式MiniGUI初步与应用开发范例[M]. 北京:北京航空航天大学出版社,2005.
嵌入式新闻 嵌入式资料 嵌入式培训 嵌入式linux 嵌入式系统 嵌入式开发 嵌入式 相关文章:
- 煤矿井下综合自动化系统中的应用(04-06)
- 软件Overlay:程序编写与调试(01-20)
- USB数据通信接□模块的程序设计(10-17)
- 东江产业园:力争2017年产值达千亿(09-30)
- 硅谷数模的SlimPort扩大了Nexus7的显示屏选择(08-01)
- Lonworks控制网络技术在城市排水泵站自动化中的应用(06-06)