基于CAN总线的嵌入式车灯监控系统设计
扫描二维码
随时随地手机看文章
摘要:为了确保车灯的质量可靠性,提出了一种嵌入式车灯控制及电气参数检测系统的设计方案。系统包括上位机监控终端和下位机控制节点,监控终端负责设置各车灯的工作参数和显示车灯的工作状态;控制节点采用基于Cortex—M3内核的嵌入式微处理器LM3S2965为核心,将实时操作系统μCOS-II植入其中,提高系统的实时性和稳定性,同时将我国自主研发的iCAN协议应用到系统中,从而实现对车灯的网络化监控。结果表明,系统最多可对63个车灯进行实时的电气参数检测与控制,具有较高的可靠性。
关键词:车灯监控系统;μCOS-II;iCAN协议;LM3S2965
当前我国的汽车总数呈现爆发式增长,由于汽车照明与交通安全有着密不可分的关系,因此对车灯产品进行可靠性检测是很有必要的。针对这种情况,提出了基于CAN总线的嵌入式车灯监控系统的设计思想,结合总线技术和单片机嵌入式技术,实现对车灯进行功能控制以及电压电流参数检测。其中,iCAN协议在CAN总线网络中的使用,可以实现对多个车灯同时进行网络化监控,进而可以实时准确地掌握各个车灯的工作情况,确保车灯产品的质量可靠性。
1 系统整体结构
系统主要由上位机和多个下位机节点组成。上位机是由VC编成的监测软件,PC机通过PCI-CAN卡与CAN总线相连,完成与下位机节点的通信,显示各车灯的电流电压及工作情况,并完成功能的设置。下位机节点以LM3S2965为主体,采样车灯工作时的电压电流,并对车灯进行控制。系统整体结构框图如图1所示。
2 节点的硬件设计
下位机节点的硬件结构设计框图如图2所示。节点主要完成以下工作:1)定期对车灯工作时的电压电流进行AD采样,并将结果发送到CAN总线上,供上位机接收;2)接收上位机发送到CAN总线上的命令,并控制车灯实现相应的功能。因此,节点主要包括微处理器部分、CAN通讯模块、电源模块。
2.1 微处理器选型
为了确保系统对车灯进行实时、可靠地控制及检测,这里选用可植入实时操作系统的Cortex-M3内核芯片LM3S2965。LM3S2965是南TI公司Stellaris所提供的首款基于ARM Cortex-M3的控制器对CAN总线应用方案而设计的芯片,具有较高的代码密度和指令执行效率。片内有256 kB的单周期访问的Flash,64KB的单周期SRAM,为操作系统的植入和运行提供了足够的容量;内部集成了兼容CAN2.0A/B的CAN控制器和ADC模数转换器,可以简化节点中CAN通讯电路和AD采样的电路的设计,同时也降低了软件开发的难度。[!--empirenews.page--]
2.2 CAN通讯模块设计
CAN通讯接口可实现各个节点与上位机之间的通讯,从而完成数据的共享和命令的收发[1]。LM3S2965有两个兼容CAN2.0A/B的CAN控制器,可以实现数据链路层的功能,为实现物理层,这里只需要增加一个CAN收发器。Philips公司的TJA1040是一款通用的高速CAN收发器,它可将CAN控制器的逻辑电平与CAN总线上的差分电平进行相互的转化,同时具有优秀的EMC性能,可靠性高。本节点中,CAN接口电路如图3所示,微处理器内置的两个CAN控制器分别与TJA1040连接,一路与CAN总线相连,完成与上位机的通讯;另一路与车灯相连,完成与车灯之间的通讯,实现对车灯的控制。
2.3 电源模块设计
电源模块可对供电电源进行净化处理,滤除高次谐波,避免供电电源对主控单元形成干扰。嵌入式系统的性能在很大程度上取决于电源电路的稳定性和可靠性,因此设计稳定可靠的电源模块非常重要。本节点中,LM3S2965的电源输入分为模拟输入和数字输入两种,电压为+3.3 V;CAN收发器TJA1040采用+5 V的供电电压。首先采用稳压器将外部直流输入电压稳压成5 V供给CAN收发器工作,然后用LT1086CM-3.3将5 V电压转换成+3.3 V供给微处理器工作。由于模拟电源和数字电源本身的性质差异,为保证这两种电源不会相互影响,这里在模拟电源和数字电源间用电感进行隔离。
3 系统软件设计
系统的软件部分由上位机软件和下位机软件组成。上位机完成对系统功能参数的设置以及显示各车灯的电压电流;下位机软件主要完成基于iCAN协议的总线通讯,实时传递车灯的工作情况。
3.1 下位机软件设计
下位机软件设计流程图如图3所示,包括操作系统μCOS-II、节点初始化、外设驱动程序以及应用程序。
操作系统μCOS-II是系统运行的核心部分,完成任务的调度、时间管理和资源管理,在操作系统源码中通过对OS_CPU_C.C、OS_CPU_ A.ASM和OS_CPU.H 3个文件中与微处理器相关的数据类型和处理函数进行修改和重新编写后,便可将μCOS-II植入LM3S2965。初始化代码完成对MCU外设、μCOS-II操作系统以及CAN节点的初始化。应用程序在操作系统的基础上,分配任务堆栈空间,然后建立任务间通讯的信号量以及消息邮箱等,进而创建任务,并分配不同的优先级,此系统的任务划分如表1所示。
[!--empirenews.page--]
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将接收到的数据写入接收缓冲区。[!--empirenews.page--]
通过调用函数ICANRxMsgObiExplain对接收到的数据进行处理。其中,首先调用函数canCirBufRead从接收缓冲区读取一帧报文,然后解析出报文的功能码FuncID和数据段内容,根据不同的功能码,按照iCAN协议填写不同的响应报文,最后调用数据发送函数ICANTxMsgObjSend返回响应帧。
3.2 上位机软件设计
上位机软件的编写利用开发工具VC,利用MFC结合PCI-CAN卡的VCI库函数完成,软件界面如图6所示。
其中,利用VCI库中的函数,可以实现数据的发送、接收以及设备的初始化。VC自带标准控件和模态对话框的使用,可以完成对下位机控制节点工作参数的设定,同时显示并保存各车灯的电乐电流及工作情况,当电压或电流超出量程时,会有相应的报警提示。电压电流监测界面如图7所示。
4 结论
结果表明,系统可以同时对多组车灯进行功能控制,并且对车灯工作时的电压电流进行实时可靠的监测。该系统可以用于对新出厂的车灯进行测试,对其质量以及性能加以评定。这样,对保证日后车灯的质量有着重要的意义。