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

发布者:TranquilMind最新更新时间:2013-01-12 来源: dzsc关键字:ARM  车载HMI终端  CAN总线 手机看文章 扫描二维码
随时随地手机看文章

  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终端结构

图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安装包,运行#tarxvzf 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 cvzf qt4.7.tgz,下载到ARM 开发板,并解压到指定目录。至此Qt/E在ARM 开发板上移植完成。

  安装Linux环境下X86版Qt SDK软件-Qt Creator2.0进行Qt程序开发,设置为支持Qt4.7ARM 的交叉编译。最后将设计好的程序通过编译,生产二进制文件下载到ARM 开发板运行,以此实现HMI界面显示功能。

车载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Ω终端匹配电阻。[page]

  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终端

图2 车载HMI终端

车载HMI终端的软件设计

  4.1 CAN/RS232网关软件设计

  主程序中首先要完成初始化操作, 包括单片机、SJA1000、RS232通信以及中断源的初始化。其中SJA1000的初始化是整个设计最重要的部分,也是保证CAN 通信的前提。考虑车辆内部网络的兼容性,SJA1000配置为Peli模式,支持CAN2.0A和B规范,实现标准帧和扩展帧两种报文传输。SJA1000初始化寄存器配置流程如图3所示。

图3 SJA1000初始化寄存器配置流程

图3 SJA1000初始化寄存器配置流程

  为保证数据实时传输,采用中断方式进行数据收发。

  当CAN总线有数据接收时SJA1000会跳入接收中断函数将数据接收并存储到接收缓存,根据数据帧头来判别数据类型和所带数据长度,最后提取CAN 数据拆分为单字节通过串口发送,并在HMI终端显示;当HMI终端有控制字发送,串口接收中断函数将所发送的控制字依次接收存入接收缓存,并根据首字节来判别所发数据类型和长度,组装成CAN数据帧格式发送到网络中去,以此实现各节点的控制。具体流程如图4所示。[page]

图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开发提供了一种可行的设计思路与性价比更合理的解决方案。

参考文献:

[1]. SJA1000 datasheet http://www.dzsc.com/datasheet/SJA1000_609075.html.
[2]. PCA82C250 datasheet http://www.dzsc.com/datasheet/PCA82C250_18.html.
[3]. MAX232 datasheet http://www.dzsc.com/datasheet/MAX232_1074207.html.
[4]. TTL datasheet http://www.dzsc.com/datasheet/TTL_1174409.html.
[5]. CS8 datasheet http://www.dzsc.com/datasheet/CS8_2332280.html.

关键字:ARM  车载HMI终端  CAN总线 引用地址:基于ARM 和Qt/E的车载HMI终端的设计方案

上一篇:嵌入式ARM下的触摸屏驱动系统设计
下一篇:基于嵌入式的无线智能家居网关设计方案

推荐阅读最新更新时间:2024-03-16 13:16

基于MCP2515的多路CAN总线接口电路设计
  引言   在铁路系统中,为了保证列车的安全运行,需要对铁轨及周围状况进行实时检测。目前采用的方法是在铁路沿线安装多个检测设备,用于检测洪水、大风、泥石流等自然灾害及轨温等参数。这些设备一般采用的通信方式是RS232、RS485或CAN,并通过专线连接至监控中心的各个监控设备。这种方式极大浪费了线路资源,也不易于设备的统一管理。因此,需要一种安装在铁路沿线的设备,它将附近的检测设备发送的信息统一收集并通过一条专线直接送往监控中心。为了与多个检测设备通信,必须同时具有多个RS232、RS485和CAN接口。基于这种应用需要,本文提出了扩展多个CAN总线接口的方法。   1 系统结构   1.1 芯片介绍系统   采
[单片机]
基于MCP2515的多路<font color='red'>CAN总线</font>接口电路设计
ARM9学习笔记之——汇编
ARM系列芯片与PC系列(可能我说法不太准确)芯片在指令设计上就有本质的区别。ARM中每条指令是精简指令集要么是32位,要么是16位。而PC的指令是复杂指令集,一条指令可以由多个字节组成。 在写ARM汇编程序时,发现ARM的指令非常的灵活,同样一个功能可以使用多种方式实现。给开发者更多DIY的地方。以下是一些小总结,如有不正确的地方欢迎指正。 1. 关于函数调用方法 在ARM汇编中,函数调用非常灵活。 (1)BL指令 bl initmem ;调用 mem .... mov pc , lr ;返回 BL指令在编译时,是以当前指令地址为基准相对跳转
[单片机]
S3c2440ARM异常与中断体系详解6---按键中断程序示例概述与初始
在前面的视频里我们举了一个例子,母亲看书被声音打断,远处的声音来源有多种多样,声音传入耳朵,再由耳朵传入大脑,整个过程涉及声音来源耳朵大脑,为了确保这个母亲看书的过程能够被声音打断,我们必须保证声音来源可以发出声音,耳朵没有聋,脑袋没有傻。 中断处理流程 1、中断初始化: ①我们需要设置中断源,让它能够发出中断 ②设置中断控制器,让它能发出中断给CPU ③设置CPU,CPSR有I位,是总开关 2、处理完之后清理中断 3、处理时,要分辨中断源,对于不同的中断源要执行不同的处理函数 下面开始写代码 打开start.S 先做初始化工作,先做第 3 设置CPU,CPSR有I位,是总开关 我们需要把CPSR寄存器 b
[单片机]
S3c2440<font color='red'>ARM</font>异常与中断体系详解6---按键中断程序示例概述与初始
基于ARM9嵌入式平台的多标签多协议RFID读写器设计
1 RFID系统结构原理 无线射频识别技术是一种非接触的自动识别技术,常称为感应式电子晶片或近接卡、感应卡、非接触卡、电子标签、电子条码等。完整的RFID阅读系统是由读写器(Reacler)、应答器(Transponder)、天线(Antenna)三部分组成。其动作原理为Reader通过Antenna发射特定频率的无线电波能量给Transponder,用以驱动Transponder电路将内部ID Code送出,此时ReaGler便接收此IDCode。由于此ID Code的唯一性,所以RFID读写器可以实现对物体或商品的自动识别。RFID系统框图如图1所示。系统由中间件、读写器、应答器等部分组成。 射频识别系统的基本工
[单片机]
基于<font color='red'>ARM</font>9嵌入式平台的多标签多协议RFID读写器设计
ARM的函数指针、指针函数的区别和用法
在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,和大家的一些总结,整理到此。和大家分享。 首先它们之间的定义: 1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。 表示: float *fun(); float *p; p = fun(a); 注意指针函数与函数指针表示方法的不同,千万不要混淆
[单片机]
ARM入门笔记(10)
USB 设备实验 一.背景 在ATMEL官方网站上提供了USB的应用例子(详情请参考 BasicUSB Application 说明),里面有源代码(是用IAR编译的,需要稍作修改才能用在ADS上),两个不同的USB驱动程序。两个不同的USB驱动程序,在PC机上是两个不同的应用例子。当安装完两个不同的驱动后,一个出现的是调制解调器的设备,可以用超级终端来完成USB数据的收发。另一个是USB 设备,用ATMEL提供的 BasicUSB_6124.exe 来完成USB数据的收发。我起初一直在用后面的例子来做实验,但试了很久都没有成功,后来改用前面的成功了。 二.USB驱动安装说明 当第一次与host PC机连接时,系统会弹出一个
[单片机]
ARM发布最新CPU架构Cortex-A72 计算速度翻倍
    网易科技讯 2月4日消息, 据国外媒体报道,英国芯片设计公司ARM周二推出全新Cortex-A72处理器和Mali-T880图形芯片架构,预计2016年进入市场。ARM总裁伊恩·弗格森表示。“我认为手机领域的创新在加快。 我们认为,手机正在成为主要的计算平台。” Cortex A72 基于64位ARMv8设计,是目前的Cortex A57架构计算速度的2倍,Cortex A15的3.5倍。相比五年前的技术Cortex-A72计算性能甚至提升50倍。新的Mali-T880 GPU计算速度是目前最高端的Mali-T760的1.8倍的速度。T880将有助于在移动端实现更复杂的游戏。 苹果在内的大多数移动芯
[手机便携]
CAN总线故障分几种?如何检测
由于CAN网络采用多种协议,每个控制模块的端口在正常的情况下都有标准电压,因此电压测量法可用于判断线路是否有对地或电源短路、相线间短路等问题。 为了确定CAN H 或CAN L 导线是否损坏或信号是否正常,可以测量其对地电压(平均电压)。测量点通常在OBD诊断接口处,如下图所示。 诊断接口的6号针脚连接CAN H 导线,14号针脚连接CAN L 导线。如果诊断接口上连接有两组CAN总线,那么动力CAN总线使用6号和14号针脚,舒适总线使用3号和11号针脚。诊断接口的针脚含义如下图所示。 正常情况下,当CAN总线唤醒后,CAN H 对地电压约为2.656V,CAN L 对地电压约为2.319V,而且两者相加为4.975V
[汽车电子]
<font color='red'>CAN总线</font>故障分几种?如何检测
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved