关键词:虚拟仪表 CAN总线 数据采集系统 F/V转换
Abstract: This paper introduces the design of multi-channel data acquisition system for vehicle Virtual Instrument based on CAN Bus , and offers system structure diagram and key schematic. It analyzes the subprogram of CAN communication in detail, and presents program flow chart for CAN initialization, data transmit and interrupt servicing.
Key words: Virtual Instrument CAN BUS Data Acquisition System F/V conversion
1 前言
车辆是一个特殊的应用环境,车辆自动化程度的不断提高给车辆仪表提出了更高的要求,传统的动磁式仪表已经越来越不适应现代智能交通工具发展的需要,而虚拟仪表因其具有交互、智能和便于扩展等特点而受到广泛重视。本课题要求为某车设计一套虚拟仪表,上位机采用基于RTOS开发环境的PC104嵌入式微机。车辆环境数据采集系统作为虚拟仪表的一个最重要的子系统,要求完成数据的采集和通信功能,而且具有较高的适时性和可靠性。本文根据作者体会介绍了用Philips公司的高性能单片机P80C592设计车辆数据采集系统的方法,重点介绍了系统设计和CAN通信编程。
2 系统简介
根据设计要求,本系统主要完成传感信号的处理以及车辆的工况数据采集并将数据通过CAN总线送上位机,要求处理16路模拟信号、4路频率信号和32路扩展IO信号,采集参数主要有:发动机机油压力、水温、油温、转速、车速、变速箱油压、油箱油量以及电网电压、车门状态、转向灯指示、车体超宽指示以及车内环境示警等,信号的形式有电压、频率、以及开关量信号,信号频率范围为0~ 6KHZ。
2.1 系统硬件结构设计
图1给出了系统硬件结构图。系统采用的核心器件为Philips公司的8位高性能微控制器P80C592,它与标准80C51完全兼容,其主要特性有:内建能与内部RAM进行DMA数据传送的CAN控制器;4个捕获端口和2个标准的16位定时/计数器;8路模拟量输入的10位ADC变换器;2×256字节在片RAM和一个Watch Dog。P80C592的在片CAN控制器可以完全实现CAN协议,因此减少了系统连线,增强了诊断功能和监控能力。数模转换器件选用12位的AD1674A,分辨率为0.02%,转换时间为25uS。为了提高系统抗干扰能力,在模-数电路之间和系统到CAN总线之间采用了光电隔离,并且将模拟电路和数字电路分别设计成两块独立的PCB板,两板通过栈接组成一个完整的系统。
硬件工作过程:温度、压力以及电压信号,经相关处理电路送至16路模拟开关MAX306EP,经电压跟随电路输入AD1674A进行A/D转换,为了提高可靠性和稳定性,系统没有采用微控制器的在片ADC变换器。在程序控制下对16路信号顺序选通,采集得到的数据在CAN控制器内完成CAN协议包的封装,由发送端口经光电隔离和发送器传送到CAN总线上。油量信号经光电隔离、整形和分频后送P80C592的捕获端口进行频率测量,转速车速信号经整形后被分为两路,一路经分频电路去单片机捕获端口,另一路经F/V转换后送ADC采样。对ADC和I/O扩展端口的访问通过GAL译码器的编程逻辑输出来控制。
图1
2.2 频率信号测量
频率信号测量是本系统的一个设计难点,在本课题中,对于不同的车型所选用的传感器不同,因此对转速和车速频率信号的处理可以有两种方法:一是当选用输出频率范围为0-100HZ的接触式传感器时,采用CS289频压转换芯片,将频率信号转换成2.2~7.2V的电压信号然后送ADC采集;二是当选用输出信号频率范围为0~3000HZ的非接触式传感器时,通过单片机捕获端口用脉冲计数的方法进行频率测量。为提高系统的通用性,可以同时采用了这两种方法,具体采用哪一种方法得到的数据通过上微机软件设定。图2为F/V转换电路图;
图2
CS289是美国Cherry公司生产的单片高精度专用转速测量芯片,在-400至+850温度范围内都能有很好的线性输出。它不仅可以用于F/V、V/F转换,还可以用作函数发生器以及动磁式仪表驱动。由其构成的F/V转换电路外围元件少,调试容易,工作稳定可靠。图2所示,整形后的转速脉冲信号经滤波网络和限幅输入CS289第10脚,电压信号由第8脚输出,经滤波消除可能的工频干扰后送采样电路。本电路中,输出电压和输入频率的关系由下式决定:上位机据此线性关系解算出频率值。为保证F/V变换具有足够高的线性度,应合理选取的值。
3 系统软件设计
系统软件主要完成三项任务:1、传感器信号的采样与解算;2、上位机请求数据时将采集的数据传送给上位机;3、接收到上位机自检命令时,上传数据完成传感器信号到标准信号的切换。程序流程如图3所示:
图3
. 主程序采用模块化编程。具有故障自诊断功能是虚拟仪表的重要特征之一,为此数据采集系统中设计了3组标准信号,分别是频率信号、电压信号和电阻信号,自检模块的主要功能是:当接收到上位机发出的自检命令后,微控制器断开传感器输入,标准信号被接入数据采集系统,将得到的数据上传到上位机与标准值进行比较,以确定故障点是传感器系统还是数据采集系统,若自检通过则表示数据采集系统工作正常。数据发送模块主要实现对上位机的数据通信,本系统设计为每隔20毫秒将数据分组发送到上位机。数据转存模块完成各种数据写入在片主RAM的操作,为了区分数据类型,需要在数据块中添加相应的类型标识码,该码由用户层协议自行定义。A/D采样模块控制系统采样过程,并将每一路12位采样数据分两次读入指定的RAM单元中。
频率信号处理模块完成对捕获端口频率的测量,其基本思想是:在被测信号的一个周期时间内,2次脉冲下降沿分别启动和停止定时器T2计数,两次计数值之差的倒数即为频率值,本模块只需计算差值,频率值由上位机解算。
3.1 CAN控制器编程
本系统软件设计的一个难点在于关于CAN的编程。本系统处理的CAN程序模块有:CAN初始化子程序、CAN中断程序和CAN数据收发子程序。
CAN控制器是以CPU存储器映像外围设备出现的。P80C592的CPU与CAN控制器之间的数据传输通过4个特殊功能寄存器来实现,即: CANADR、CANCON、CANSTA和CANDAT,通过这四个特殊功能寄存器,CPU可以访问CAN控制器内部的任一寄存器(地址为0~29)和DMA逻辑。表2给出了这四个SFR的功能简述,其中CANCON和CANSTA的读写操作含义不同。CAN控制器内部所有寄存器详细介绍请参阅参考文献[1]。
表1
CAN控制器初始化(图4)是CAN通信中一个非常重要的子程序,程序是否合理将直接影响整个通信过程。CAN控制器的初始化首先必须通过置位CAN控制寄存器的“复位请求”位,置位“复位请求”并不影响正在进行的一个收发作业,特别需要注意的是,只有当复位请求被置位时,CAN内部地址为4-8的寄存器方可被访问,在复位操作结束后必须将该位置0以保持所进行的设置并使CAN返回工作状态。
图4
P80C592和其在片CAN控制器都具有中断寄存器,必须注意两者的区别。CAN中断子程序(图5)首先读CAN中断寄存器(IR)以判断中断类型,据此转入相应的操作。如果接收缓存器满而另一个报文的首字节又需要被存储时,数据超限位被置位,此时应清除超限并释放接收缓存,然后重新发送数据请求。在数据接受子程序中当数据被转入RAM区后,应及时释放接受缓存器,以便为接收下一帧数据做好准备。
图5
图6
数据发送子程序见图6。CAN控制器向总线发送数据时,首先将在片主RAM中数据存放的首地址写入CANSTA,然后读取CANSTA.6的值(读CANSTA的操作其实是对CAN控制器内部状态寄存器的读操作,CANSTA.6是错误显示位,当至少有一个总线错误计数器计数达到CPU告警极限时,该位将被CAN控制器置位。),若检测出错,则执行CAN初始化子程序,若正常,则继续检测接收状态和发送缓冲器状态,若发送条件满足则在CANADR中写入发送缓存器地址并置位DMA控制位(MOV CANADR , 8AH),DMA传送随即被启动,数据场由RAM拷贝到发送缓存器,置发送请求位(CANCON.0)后数据开始发送。
4 结束语
用高性能的P80C592和AD1674A数据采集模块组成车辆环境数据采集系统具有较高的性价比,目前该系统已投入试用阶段,运行状况良好。CAN总线非常适合分布式控制或适时控制的串行通信网络,本课题只涉及了数据采集,如果在此基础上扩展车辆辅助控制和重要数据备份功能,系统将会有更广阔的应用前景。
参考文献:
[1] 邬宽明. CAN总线原理和应用系统设计. 北京航空航天大学出版社. 1996