微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于CAN总线的嵌入式车灯监控系统设计

基于CAN总线的嵌入式车灯监控系统设计

时间:08-30 来源:互联网 点击:

操作系统μCOS-II是系统运行的核心部分,完成任务的调度、时间管理和资源管理,在操作系统源码中通过对OS_CPU_C.C、OS_CPU_ A.ASM和OS_CPU.H 3个文件中与微处理器相关的数据类型和处理函数进行修改和重新编写后,便可将μCOS-II植入LM3S2965。初始化代码完成对MCU外设、μCOS-II操作系统以及CAN节点的初始化。应用程序在操作系统的基础上,分配任务堆栈空间,然后建立任务间通讯的信号量以及消息邮箱等,进而创建任务,并分配不同的优先级,此系统的任务划分如表1所示。


3.1.1 CAN节点初始化
系统的主要任务是实现上位机与下位机之间的通讯,将下位机节点采集到的电压电流参数上传至上位机并显示给用户,实时反映车灯的工作状况。因此CAN通讯任务具有最高级别的优先级。在任务taskican中,首先完成CAN节点的初始化,包括端口初始化、设定波特率、设置验收滤波等,初始化通过调用Stellaris外设驱动库中的相应函数来完成。函数SysCtlPeripheralEnable()和GPIOPinTvpeCAN()可完成CAN模块外设的端口初始化,CANSetBitTiming()可以设定波特率,本设计中的通讯波特率设定为1 MB/s,并且总线上的节点都设置成相同的波特率,canAcceptFilterSet()可完成验收滤波设置。完成CAN节点的初始化之后,在任务taskican中每10 ms调用一次iCAN调度函数ICAN_Sche dul(),完成一次数据收发工作,同时将下位机节点采集的电压电流值上传至上位机并刷新显示。
3.1.2 基于iCAN协议的消息处理
iCAN协议,即工业CAN-bus应用层协议。是由我国自主研发的基于CAN总线的高层应用协议,详细的定义了CAN报文中ID以及数据的分配和应用,建立了一个统一的设备模型,定义了设备的I/O资源和访问规则,采用“基于连接,面向节点”的通讯方式,既支持主从方式通讯模式,又支持事件触发通讯模式。系统中,上位机主节点的ID为0x01,下位机各节点的ID可以根据具体情况设定,范围为0x00-0x3F。
节点中,数据的发送和接收是由微处理器集成的CAN控制器自动完成。为满足实时性的要求,数据的接收操作采用中断方式。由于下位机节点数量较多,数据的发送接收量比较大,为了保证不丢失数据,这里设计了两个深度为40字节的CAN报文缓冲区,分别用作发送和接收缓存。对缓冲区的操作,由函数canCirBufRead和函数canCirBufWrite来完成。而对于CAN消息的发送和接收由函数ICANTxMsgObjSend、canFr ameSend和ICANRxMsgObjExplain来完成。
CAN消息的发送接收流程图如图5所示。数据的发送调用函数ICANTxMsgObiSend,其中先按照iCAN协议规定的格式填写报文的ID和数据段,然后查询缓冲区的状态,如果发送缓冲区未满,则调用canCirBufWrite将整合后的数据写入发送缓冲区,最后调用函数canFrameSend将数据发送到CAN总线上。

接收采用中断方式,当有中断产生,即收到一帧数据,此时首先查询接收缓冲区的状态,如果未满,则调用函数canCirBufWrite将接收到的数据写入接收缓冲区。
通过调用函数ICANRxMsgObiExplain对接收到的数据进行处理。其中,首先调用函数canCirBufRead从接收缓冲区读取一帧报文,然后解析出报文的功能码FuncID和数据段内容,根据不同的功能码,按照iCAN协议填写不同的响应报文,最后调用数据发送函数ICANTxMsgObjSend返回响应帧。
3.2 上位机软件设计
上位机软件的编写利用开发工具VC,利用MFC结合PCI-CAN卡的VCI库函数完成,软件界面如图6所示。

其中,利用VCI库中的函数,可以实现数据的发送、接收以及设备的初始化。VC自带标准控件和模态对话框的使用,可以完成对下位机控制节点工作参数的设定,同时显示并保存各车灯的电乐电流及工作情况,当电压或电流超出量程时,会有相应的报警提示。电压电流监测界面如图7所示。

4 结论
结果表明,系统可以同时对多组车灯进行功能控制,并且对车灯工作时的电压电流进行实时可靠的监测。该系统可以用于对新出厂的车灯进行测试,对其质量以及性能加以评定。这样,对保证日后车灯的质量有着重要的意义。

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

网站地图

Top