文档章节

基于WinCE的智能车载仪表设计

sinlinx
 sinlinx
发布于 2014/07/09 12:23
字数 2463
阅读 39
收藏 0

欢迎访问www.sinlinx.com

引言

    随着高性能电子显示技术的发展,汽车仪表电子化的程度越来越高。国内外已开发出了多功能全电子显示仪表、平视显示仪表、汽车导航系统、行车记录仪等高技术产品。未来,车用电子化嵌入式仪表具有以下优点:提供大量复杂的信息,使汽车的电子控制程度越来越高;满足小型、轻量化的要求,使有限的驾驶空间更人性化;高精度和高可靠性实现汽车仪表的电子化,降低了故障的发生率;设有在线故障诊断系统,一旦汽车发生故障,可以找到故障来源,方便维修;外形设计自由度高,汽车仪表盘造型美观。基于以上优点,汽车会越来越多地采用各种用途的电子化仪表。造型新颖、功能强大的嵌入式电子化仪表将是今后车用仪表的发展趋势和潮流。

    1 智能车载仪表系统结构

    本智能车载仪表拥有大多数传统车载仪表所拥有的功能,驾驶员可以通过车载仪表的显示界面获取当前汽车的状态信息,例如车速、油压、油温、水温、机油压力或者电瓶电量。

    传统车辆仪表直接与车辆的传感器相连,仪表系统经由传感器的模拟量得到汽车当前状态,精确性不高。本文设计的智能车载仪表并不是简单地与传感器相连,而是通过CAN控制器将整车连接成一个网络结构。车辆部件配以CAN控制器,通过双绞线将车辆部件连接起来形成一个网络体系,实现部件的电子化。同时,车载仪表和汽车部件的电子化也提高了汽车的精准度和可靠性,降低故障发生率。

    车载智能仪表主要分为基于S3C2440处理器的硬件系统和WinCE环境下的软件系统两大部分。硬件系统为整个控制系统提供基础,负责CAN总线通信。软件系统提供CAN总线的硬件驱动以及在WinCE下的仪表上位应用程序。

    2 硬件设计

    硬件系统以S3C2440为核心,RAM内存、NOR Flash和NAND Flash作为存储介质,扩展部分外围设备以负责系统信息的输入与输出,如CAN总线通信单元、LCD显示、触摸屏、通用串行口、USB设备、以太网接口等。系统硬件结构如图1所示。

    

    图1 系统硬件结构框图

    在众多接口中,CAN总线通信单元是在整车通信过程中的关键部分。在汽车的各个重要部件中,配置相应的CAN控制单元,由双绞线将各个CAN总线控制单元连接起来。汽车的各个部件将该部件的当前状态信息由CAN控制单元发送出去,经双绞线发送到智能车载仪表的CAN单元当中,经过系统的CAN接口将数据发送到系统中。车载仪表系统得到数据后,经过数据处理得到汽车部件的当前状态信息。

CAN总线接口电路如图2所示。采用Microchip公司的CAN总线控制器MCP2515。MCP2515完全支持CAN 2.0A/B技术规范,速度达到1 Mbps;SPI的接口标准使得它与S3C2440的连接更加简单;能发送和接收标准和扩展数据帧以及远程帧;自带2个验收屏蔽寄存器和6个验收滤波寄存器,可以过滤掉不想要的报文,减少了微处理器的开销。CAN总线收发器采用TJA1050,该器件提供了CAN控制器与物理总线之间的接口以及对CAN总线的差动发送和接收功能。

    
图2 CAN总线接口电路

    为了增强CAN总线节点的抗干扰能力,提高系统的稳定性,在CAN控制器与CAN收发器之间加入了光耦隔离器6N137,而不是使TXCAN和RXCAN端直接与收发器相连,这样就实现了总线上各CAN节点之间的电气隔离。同时,这也解决了MCP2515与TJA1050之间电平兼容的问题,还可以抑制CAN 网络中的尖峰脉冲及噪声干扰。光耦部分电路所采用的两个电源必须完全隔离,否则也就失去了意义。电源的隔离可以采用小功率的电源隔离模块或者多带5 V隔离输出的开关电源模块实现。这些部分虽然增加了接口电路的复杂性,但是却提高了节点的稳定性和安全性。

    在CAN接口处,CAN通信线上的2个60 Ω电阻(总计120 Ω),起到增大负载、减少回波反射作用,是一种阻抗匹配的补救措施。2个60 Ω的中间部分与地端之间连接一个电容以抗干扰。

    3 软件设计

    软件的整体环境为WinCE编程环境。针对本车载智能仪表硬件系统定制相应的WinCE操作系统,实现对硬件的驱动。再编写应用程序,通过对应用程序的具体操作实现对系统硬件的操作,即实现系统的功能。其中非常关键的是编写CAN控制器的驱动。CAN驱动实现应用软件对CAN控制单元的操作,以及读取CAN控制单元中的数据代码。

    3.1 系统开发和移植

    嵌入式系统开发就是系统驱动层的设计,其中最主要就是BSP的开发和调试。所以智能车载仪表底层驱动的开发就显得尤为重要。

    由于使用的是WinCE操作系统,所以使用Platform Builder定制WinCE操作系统镜像。在Platform Builder中,可以添加系统部分硬件(如液晶屏、RAM)的驱动,这些驱动已经由微软公司编写好。然后启动Bootloader,把镜像文件下载到Flash存储器中,并配置操作系统启动文件boot.ini。

    3.2 CAN总线驱动开发

    由于CAN是外部设备,所以需要将CAN的驱动以流接口驱动方式编写。流接口驱动函数被设计来与通常的文件系统API(如ActivateDevice、ReadFile、WriteFile和IOControl等)紧密匹配,即流接口驱动在应用程序中表现为一个系统文件,应用程序通过对系统文件的特殊文件进行操作从而完成对设备的操作。编写流接口文件主要用到流接口函数,也就是流接口驱动的入口点,如XXX_Init、XXX_Read和XXX_Open等。这些流接口文件与相应的API函数对应,使应用程序由相应的函数可以访问到外部设备。

    作为流接口驱动程序,CAN总线驱动程序也有一组标准函数,可完成I/O操作。这些函数提供给WinCE操作系统内核使用,它们都是流接口驱动程序的DLL文件。动态加载CAN总线驱动程序时,系统要进行注册。CAN驱动程序注册表信息:

    WCHAR * szRegKey=L"DriversBuiltInCAN";
WCHAR * szPrefix=L"CAN";
WCHAR * szDLL=L"can.dll";
WCHAR * szFriendlyName=L"CANDriver";
DWORD * DrvIndex=1;
DWORD * DrvOrder=0;

    通过以上代码完成注册之后,调用 ActivateDeviceEx()函数进行加载驱动。

    3.3 CAN总线驱动通信流程

    CAN总线控制器驱动程序主要用于设置MCP2515的波特率、MCP2515的验收过滤器、CAN消息传送模式和CAN收发数据方式。驱动程序是连接上位应用程序和硬件的一个中间纽带。智能车载仪表系统在EVC++环境下进行CAN总线开发。

    流式驱动以文件的方式打开函数CreateFile( ):驱动成功打开后,CreateFile( )函数返回不为INVALIDHANDLEVALUE的句柄,此句柄也是关闭驱动函数CloseHandle( )的参数。CAN设置函数DeviceIoControl( )接收由CreateFile( )函数获得的句柄及控制命令码,设置输入/输出缓冲区以及缓冲区的大小。函数执行完成后返回实际输出的缓冲区大小等。CAN总线发送与接收函数WriteFile( )和ReadFile( ),利用驱动文件句柄、发送和接收缓冲区等参数完成数据的发送和接收,操作成功后返回实际发送和接收的字节数。

    为了不让主线程一直处于等待数据到来的状态,让主线程拥有时间令牌来操作其他事情,程序采用多线程设计,创建一个接收数据线程。接收数据线程是一个无限循环,它不断查询CAN总线数据退出标志,如果退出标志有效,则该循环结束退出。驱动程序流程如图3所示。

    
图3 CAN总线驱动通信流程

    结语

    目前,基于嵌入式技术的车载仪表逐渐开始流行。本文使用基于WinCE的arm9微处理器作为开发平台,处理速度快,功能强大;使用CAN总线技术进行信号的相互传输,CAN总线实时接收汽车部件发送来的信息,并进行处理与分析;使用WinCE操作系统,界面友好。本智能车载仪表系统可以节约成本、降低功耗,并且可维护性强,便于扩展和升级。

© 著作权归作者所有

sinlinx
粉丝 0
博文 14
码字总数 13077
作品 0
保定
高级程序员
私信 提问
iMX8方案服务-辰汉

辰汉电子(股票代码900017)iMX8是飞思卡尔/NXP出品的新一代多媒体应用处理器,采用ARM Cortex-A53和Cortex-A72的内核,具备多屏同步4K视频解码能力,面向下一代车载航空智能仪表仓类高性能产...

lucy007
2017/05/19
0
0
【大连】高薪急聘【嵌入式硬件/软件工程师/底层研发工程师/WinCE系统工程师】

【大连】高薪急聘【嵌入式硬件/软件工程师/底层研发工程师/WinCE系统工程师】 若人选熟悉JD要求的70-80%就可以推荐尝试! 工 资:6K~15K 固定补助、五险一金(公积金32%)、带薪年假、年末奖...

itcherry
2012/02/03
854
0
.NET(WinCE、WM)转Android开发——Xamarin和Smobiler对比

对比 WinCE Android 行业场景 扫描分拣、车载、工控 扫描分拣、车载定位 开发语言 C++、C# Java/.NET(Smobiler) 开发环境 Visual Studio Android Studio/ Visual Studio(Smobiler) 硬件 ...

amanda112
04/19
61
0
图吧地图夜间导航SDK接口应用案例

前不久,图吧(北京图为先科技有限公司)与水晶光电(浙江水晶光电科技股份有限公司)强强联合,合力打造一款名为Qrios游乐士的车载智能硬件, 基于图吧专业级Android导航SDK开发工具包,实现...

幺小妖
2016/07/08
163
1
安波福将为中国车企打造智能驾驶座舱,第一个是长城

8月6日,安波福宣布将为长城汽车有限公司提供驾驶座舱解决方案,帮助长城汽车打造全新的集成驾驶座舱。 安波福将利用驾驶座舱技术和集成能力优势,并且整合已有的自动驾驶及驾驶辅助技术,为...

于胜越
2018/08/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部