DIY编程器网

标题: 基于串行通信的车载信息采集系统的设计 [打印本页]

作者: admin    时间: 2015-4-27 19:47
标题: 基于串行通信的车载信息采集系统的设计
1引言
       
        串行通信作为一种重要的通信技术已经在PC机通信及工业现场控制在线检测等领域得到了广泛的应用[1].本文所设计的车载信息采集系统是包含数据采集,数据传输和数据显示的结构系统,是对一款新型电动汽车的车载信息进行采集,传送和显示的设计过程:车载信息通过传感器(模拟量形式)或开关量形式被采到从单片机,主单片机和从单片机之间通过串行通信进行数据传输,并由主机将数据送往液晶面板显示出来。
       
        2总线型主从式多机系统
       
        综合考虑了电动汽车所涉及到的大量的车载信息和串行口的多机通信能力,该设计采用了总线型主从式多机通信模式,而进行数据传输的标准总线选为最普通实用的RS-485.总线型主从式多机通信系统模式如下图:
         
       
        而串口的通信协议在这里就不作介绍了。
       
        3车载信息采集系统硬件设计
       
        该系统所研究的对象为一款电动汽车的车载信息,笔者把信息分为两类:模拟量和开关量。模拟量包括:电池组(蓄电池)温度,电池组(蓄电池)电压,电池组(蓄电池)容量,车速(里程),总电流等;开关量是指各种操作状态,包括:灯(系列)的状态,档位开关量,刹车状态,限位开关状态等。
       
        由于涉及到的信息量比较多,且分布在车身周围范围较广,笔者采用AVR公司的一款单片机——ATMEGA8L.这是一款体积小但采集能力和通信能力却足够强的单片机:在采集方面,它含8通道A/D转换和最多23个可编程I/O口;在数据通信方面,它含一个可编程的串行USART接口,支持同步,异步以及多机通信自动地址识别[3].ATMEGA8L相对8051或其他单片机一个重要的优势是单片机所需外围电路比较简单(考虑到在车身布线,电路越简单越好)。LCD显示模块采用的是内置T6963C的MGLS240128T的点阵液晶,它的特点是与单片机引脚接口电路简单且显示功能强大。
       
        本文所设计的车载信息采集系统硬件框架如下图:
         
       
        模拟量通过特定传感器采样,转换成电压信号进入从机的A/D通道,从机做A/D转换后将数据存储下来;开关量通过继电器将电平信号送至从机的I/O口,从机也对信号做相关处理。主机与从机之间通过串行通信进行数据传输,并由主机将合理数据送往LCD显示。
       
        4车载信息采集系统软件设计
       
        基于串行通信的多机通信协议可以这样进行:1.所有从机处于监听状态。2.主机先发同步字符(即起始符,这里定为E8H),再发某个标识符(根据信息类别来定义不同值,比如电流值的标识符定义为14H),并将通信状态转换为接收状态(RXD=1)。3.当标识符所定义的从机(比如负责电流数据采集的从机1)监听到标识符(14H)后,从机转为发送速据状态,并将准备好的数据(电流值)和结束字符(这里定为CEH)传给主机,结束字符传完,从机通信状态转换为监听状态。4.主机接收到结束字符后,将数据送往LCD显示。5.主机发同步字符,发下一个标识符(比如电压15H)。
       
        所以,数据帧格式可以列为:起始符(E8H)+标识符+数据串+结束符(CEH),所有特定字符的选择都是为了与数据串中数字的ASCⅡ码(30H–39H)区分开来。
       
        下面是主机和从机程序流程:
         
       
        图(3)主机程序简易流程图(4)从机程序简易流主机采用循环点明的方式查询从机,被点到名的从机作出应答,将采集到的数据或信号传给主机,主机将数据送给LCD显示,再进入下一个循环。串行通信的波特率选用9600,数据格式定义为8位数据位加一位停止位。串口初始化程序如下:
       
        voidinit_usart(void)//串口初始化
        { UCSRB|=0x18;//数据发送允许和接收允许
        UBRRL=(fosc/16/(baud+1))%256;//设置波特率寄存器低位字节
        UBRRH=(fosc/16/(baud+1))/256;//设置波特率寄存器高位字节
        UCSRC=0x86;//8位数据位+1位停止位}
        主机和从机都采用查询方式接收和发送数据:
        voidtransmit(unsignedchardata)//数据发送
            {
            while(!(UCSRA&(1<    UDR=data;//发送数据
            }
            unsignedcharreceive(void)//数据接收
            {
            while(!(UCSRA&(1<    returnUDR;//接收数据
            }
       
        5结束语
       
        本文成功设计了针对一款电动汽车的车载信息采集系统结构,一方面用多个从机采集车载信息解决了车载信息众多而难于采集的问题;用简单的串口通信的多机通信原理避免了车身周围布线繁多的麻烦,另一方面采用液晶显示车载信息,给用户提供友好界面的同时,又可以准确实时地掌握汽车状况。从液晶的数据显示和数据刷新的效果来看,这种基于串口通信的车载信息采集系统是有很好的应用前景的。




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2