基于ARM和Qt/E的车载HMI终端的设计方案

摘要:车载hmi是人与车辆之间的关键设备,使人能够对车辆的运行实现控制;设计了一种触摸控制与数字显示合理结合的车载hmi终端,采用arm 作为处理器,通过移植qt/e对系统加以实现;该终端通过在polo车can总线试验台测试,实现了对基本设备的触摸控制和车辆状态信息的实时显示,表明所设计的终端能够满足车载hmi的基本要求。
0 引言
改善hmi (human machine interface)终端性能可降低车辆控制系统操作的复杂性,也可提高驾驶员对自己车辆的控制力。车载hmi通过单一结构中控台,可以减少零部件数量,提高性价比。传统机械式的控制终端正在逐步向直观、便捷的hmi终端发展。2009年6月29日,美国汽车多媒体与通信研究服务公司strategy analytics发布最新研究报告,认为“车载人机界面市场领先者保持强势地位”。报告预测,2015年,车载语音和触摸屏市场规模将达到29 亿美元。目前,hmi设备,尤其是语音、触觉控制和触摸屏,在汽车市场上被大量应用。
本文报告了一种基于触摸控制与数字显示理念的车载hmi终端,通过在arm 上移植qt/e接tft-lcd触摸面板加以实现。
1 系统结构介绍
基于arm 和qt/e的车载hmi终端主要由两个模块组成,分别是arm 处理器与触摸显示屏组成的hmi触控平台和can/rs232协议转换器模块。该终端可接入车载can网络中实现车载设备的触摸控制与状态信息显示。其结构框图如图1所示。
图1 车载hmi终端结构
hmi触控平台主要是将qt/e交叉编译后移植到arm 平台,调用gui在触摸面板显示。通过点击触控界面发送控制字,经can/rs232网关发送到can网络中对各设备进行控制,同时实时采集各设备运行状态参数并显示,便于驾驶员及时了解车辆运行状态。该平台还预留了uart和usb端口分别可外接gps模块,无线上网卡或u 盘设备,实现导航、无线上网和多媒体播放功能。
can/rs232协议转换模块主要由mcu、can 接口与uart接口组成,其中can 接口采用can 控制器sja1000和can收发器pca82c250设计,rs232接口采用max232设计,以此实现两种不同总线协议数据帧的透明转换,是hmi终端与can网络中各设备交互的纽带。
车载can网络模块主要以polo车can 试验台为平台,试验台集成了车灯、电动车窗、雨刷和后视镜can 节点模块。
2 qt/e在arm 上的移植
qt/e是trolltech公司专为嵌入式linux系统开发的图像用户界面(gui)工具包。提供了窗口操作系统、开发环境、工作辅助应用程序和个性选项等,是基于c++ 可跨平台的gui应用程序框架;还提供给开发者建立艺术级gui所需的功能,开发者可根据需求定制整个软件解决方案。目前,众多手机、pda、机顶盒都采用qt作为图形引擎。因此,选择了qt/e作为hmi终端的开发工具。
2.1 交叉编译环境的搭建
采用宿主机fedora9.0作为开发平台,移植arm 版qt/e4.7进行设计。因编译linux内核和qt/e都需要交叉编译工具链,交叉编译器版本过高过低都会与qt/e4.7不兼容,最终导致安装失败,所以一定要根据qt的版本来选择对应的编译器。本系统采用arm-linux-gcc-4.5.1.安装过程如下:
首先,解压arm-linux-gcc-4.5.1安装包,运行#tarxv*** arm-linux-gcc-4.5.1.tgz命令;然后将编译器所在路径加入系统环境变量,运行#gedit/root/.bashrc编辑该文件,修改最后一行为export path=path:/usrt/local/arm/4.5.1/binpath,此时交叉编译器已经安装好;最后执行#arm-linux-gcc-v显示编译器版本信息,验证是否安装成功。
2.2 qt/e4.7的编译与移植
减压arm 版qt/e安装包到指定目录,然后进入该目录执行编译配置源码命令#echo yes | 。/configure -opensource-embedded arm –xplatform qws/linux-arm-g++-no-webkit-qt-libtiff-qt-libmng-qt-mouse-tslib-qt-mouse-pc-no-mouse-linuxtp-no-neon.其中编译arm 平台的embedded版本配置参数为embedded arm,使用arm-linux交叉编译器进行编译为xplatform qws/linuxarm-g++,qt-mouse-tslib是使用tslib来驱动触摸屏。然后执行make命令进行编译,当编译完成之后执行安装命令make install.最后把安装文件打包#tar cv*** qt4.7.tgz,下载到arm 开发板,并解压到指定目录。至此qt/e在arm 开发板上移植完成。
安装linux环境下x86版qt sdk软件-qt creator2.0进行qt程序开发,设置为支持qt4.7arm 的交叉编译。最后将设计好的程序通过编译,生产二进制文件下载到arm 开发板运行,以此实现hmi界面显示功能。
3 车载hmi终端的硬件设计
3.1 can/rs232协议转换器的硬件设计
can/rs232协议转换器主要有主控制器、can接口模块与rs232接口模块组成,其中主控制器采用stc89c52单片机负责处理can总线与rs232总线的数据接收与发送,实现两种不同协议数据帧的透明转换与传输。
can接口模块采用philips公司的can 控制器sja1000和can收发器pca82c250芯片组成,主要实现can协议的物理层和数据链路层功能。其中can控制器完成数据链路层功能,实现与主控制器的信息读写操作,物理层通过can收发器实现电平转换和传输。sja1000的ad0~ad7与单片机p0口连接,实现地址/数据复用;片选/cs与p2.7相连,则基地址为0x7f00;/rd、/wd、ale引脚依次与单片机各引脚相连;中断/int接单片机/int0,因此可通过中断方式对sja1000进行实时访问。sja1000的mode 引脚用于选择can控制器在intel模式还是在motorola模式工作。由于stc89c52属于intel系列微控制器,故mode引脚接+5v高电平设置为intel模式,以满足89c52的读写时序要求。为了增强节点的抗干扰能力,以及避免当can收发器失效时出现过流导致can控制器击穿,sja1000的tx0和rx0引脚通过光耦n6137后与pca82c250的txd和rxd连接,以此实现总线上节点间电器隔离;收发器can_h 和can_l引脚通过5ω电阻与can总线端口连接起到限流作用;同时两端接120ω终端匹配电阻。
rs232接口电路采用max232芯片,实现单片机串口ttl电平与rs232电平相互转换,完成hmi终端uart口的信息传输。stc89c52串口端(p3.0和p3.1)与max232的t1in和r1out连接,t1out与r1in接九针串口,然后通过交叉线与hmi终端连接实现数据通信。
3.2 车载hmi触控平台的设计
hmi触控平台以arm 为处理器,接7.0寸lcd触摸屏来实现,可取代传统的(如图2a)机械按键与表盘显示的中控平台。hmi触控平台如图2b所示,由车灯、车窗、后视镜、多媒体、空调、导航以及状态参数显示菜单组成。将该终端嵌入到方向盘,驾驶员可点击触控菜单进入车灯、车窗等控制界面(如图2c和d)实现车灯、车窗等设备的触摸控制,也可实时采集与显示设备状态参数如:车速、故障码等。其中,触控与显示数据需调用arm 底层串口驱动来实现读写操作,触控界面通过button控件的信号与槽机制来实现数据的发送,状态参数的采集与显示通过事件驱动方式实现。终端可外接gps模块实现导航功能,设计了qt媒体媒体播放器实现娱乐功能,也可接入无线网卡来实现无线上网功能。
图2 车载hmi终端
4 车载hmi终端的软件设计
4.1 can/rs232网关软件设计
主程序中首先要完成初始化操作, 包括单片机、sja1000、rs232通信以及中断源的初始化。其中sja1000的初始化是整个设计最重要的部分,也是保证can 通信的前提。考虑车辆内部网络的兼容性,sja1000配置为peli模式,支持can2.0a和b规范,实现标准帧和扩展帧两种报文传输。sja1000初始化寄存器配置流程如图3所示。
图3 sja1000初始化寄存器配置流程
为保证数据实时传输,采用中断方式进行数据收发。
当can总线有数据接收时sja1000会跳入接收中断函数将数据接收并存储到接收缓存,根据数据帧头来判别数据类型和所带数据长度,最后提取can 数据拆分为单字节通过串口发送,并在hmi终端显示;当hmi终端有控制字发送,串口接收中断函数将所发送的控制字依次接收存入接收缓存,并根据首字节来判别所发数据类型和长度,组装成can数据帧格式发送到网络中去,以此实现各节点的控制。具体流程如图4所示。
图4 数据接收与发送流程图
4.2 车载hmi界面的设计
hmi界面采用qt creator2.0来设计,因为hmi终端是通过uart接口接入can网络中,所以通信时需接上面所介绍的can/rs232协议转换器来实现。同时,还需在linux下编写qt串口通信程序。
首先,在linux下利用open函数打开串口设备,用tcsetattr函数来设置串口属性。打开驱动设备uart0进行读写操作:const char*devname= “ /dev/ttysac0”;fd = ::
open (devname,o_rdwr|o_nonblock);设置波特率等参数:serialattr.c_cflag= b115200| hupcl| cs8|cread|clocal;serialattr.c_cc[vmin]=1;其中串口设备可使用linux下i/o函数进行read和write操作。但是,在数据接收时当数据量过大会导致界面被阻塞(造成界面假死),于是创建了一个线程通过事件驱动实现数据接收。
qt中可采用qsocketnotifier类来实现设备事件驱动的设计要求。qsocketnotifier类关联signal/slot机制,当有数据可读时会触发ativated信号,lcd number控件slot会被调用来连接到该信号并显示,从而实现数据采集与显示功能。在数据发送时,可通过button控件signal/slot调用qobject对象的connect()函数来实现[3]。当按键被按下时触发signal信号,slot会调用pressed ()函数将定义好的数据通过串口write函数发送到总线上。函数实现如下:
void glass::on_lu_pressed(){char msg[]= {160,34,16,0};//定义所发送数据myserial-》mycom-》write(msg,4);//写发送数据}
通过qpainter类进行对窗体界面和按键图像界面进行设计,达到美观的人机界面。最后将设计好的程序通过交叉编译,生产二进制文件移植到arm 中,然后在文件系统中调用执行,最终在lcd触摸屏上显示,如图2所示。
5 系统集成与测试
首先将设计好的hmi终端通过交叉串口线与pc机连接,进行相互通信,测试是否能够进行数据收发,测试成功后通过can/rs232网关接入polo车can试验台进行综合测试。试验台设备节点可通过触摸方式控制,同时可实时采集与显示运行状态信息,经过多次实验测试,运行稳定可靠,达到了设计要求。
6 结束语
本文所设计的车载hmi终端集车身控制、仪表显示、导航、多媒体和无线上网为一体,简化了车载中控平台,降低了车辆控制系统操作的复杂性。经实验测试实现了车身设备的触摸控制,能够对各设备运行状态信息进行采集与显示。为车载hmi开发提供了一种可行的设计思路与性价比更合理的解决方案。

英特尔开始交付新款Atom芯片 可降低能耗20%
AGV助力下 斯坦德机器人自动化效率将得到提高
Aeroflex推出首款用于飞机航线测试的便携式射频高度表测
Wi-SUN 可最大限度地提高太阳能跟踪器的性能
什么是无焊端子
基于ARM和Qt/E的车载HMI终端的设计方案
获得高输出电流的三种方法介绍
看一下EUV光刻的整个过程
正点原子开拓者FPGA:DS18B20湿度传感器实验(2)
ARM处理器引领无线连接迈进LTE时代
光谱数据是否随时间的正常推移而变化
高低温交变试验箱使用对环境的要求
基于纳米孔的DNA计算技术检测microRNA表达模式的方法
AI机器人竞选日本市长,机器人的存在,究竟会不会威胁人类安全?
江苏FM电台频率
隆基拉美可持续发展大会圆满举行
物联网平台业务将迎来大清洗 物联网平台是战略布局必争之地
用ChatGPT编写各种脚本
如何在STM32中收发float数据?
零线电流治理与谐波治理之间有着怎样的联系