Arduino在汽车CAN通讯中的应用研究 Research on the Application of Arduino in Automobile CAN Communication

来源 :内燃机与配件 | 被引量 : 0次 | 上传用户:lqym2929
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:汽车各个电子控制单元之间的通讯通过CAN,在汽车研发过程中,存在软件不同步以致CAN通讯异常,无法交互信号,车辆功能异常。为满足研发需求,采用Arduino UNO+MCP2515进行CAN信号解析、转换并发送,试验数据显示,转发物理量的正确性及实时性较好,表明该方案有效,为其他类似场景需求提供解决方案。
  Abstract: The communication between various electronic control units of the vehicle is through CAN. In the process of vehicle development, software asynchronization leads to abnormal CAN communication, unable to exchange signals, and abnormal vehicle functions. In order to meet the research and development requirements, Arduino Uno +MCP2515 was used to analyze, convert and send CAN signals. The test data showed that the correctness and real-time performance of the forwarding physical quantity were good, which indicated that the scheme was effective and provided a solution for other similar scene requirements.
  關键词:控制器局域网;Arduino开发板;信号解析
  Key words: controller area network;Arduino development board;signal parsing
  中图分类号:U463.1                     文献标识码:A                      文章编号:1674-957X(2021)22-0006-03
  0  引言
  当今阶段的汽车电气化程度日益发展,每台配备数十个ECU(电子控制单元)[1],而它们之间并非是完全独立的,完成某项整车功能可能需要来自几个不同ECU的信号,例如非常熟悉的仪表显示,它需要获取ABS(防抱死制动系统)的车速信号,获取ECM(发动机控制模块)的发动机转速和水温信号,获取TCM(变速箱控制模块)的挡位信号。而TCM在执行换挡功能时,也同样需要获取发动机转速和车速等其他控制器的信号。为了解决汽车控制器之间的通讯问题,德国Bosch公司开发了一种现场总线——CAN(Controller Area Network),并最终成为国际标准(ISO11519),是应用最广泛的现场总线之一[2]。它通过两条双绞的线缆,以差分信号的形式进行通讯。CAN通讯具备以下特点:
  ①多主总线,每个节点机均可成为主机,且节点机之间也可进行通讯;
  ②通讯速率快,最高可达1Mb/s;
  ③采用CRC校验并提供相应的错误处理功能,保证通讯的可靠性;
  ④最大的特点是没有采用传统的站地址编码,取而代之对通讯数据块编码,这种方式可使节点机的个数在理论上不受限制,也可以使不同的节点机同时接收相同的数据,还可以作为发送仲裁的依据。
  1  原理与设计
  1.1 研究背景
  在汽车研发初期,会定义出车辆的配置及零部件方案,并以某款成熟汽车作为基础进行改制,列举如下场景:
  场景一:改制车有控制器A,其外发的CAN信号中有个信号a,会被控制器B接收并执行其相应功能,而基础车没有控制器A,导致控制器B无法正常执行功能;
  场景二:改制车将基础车的控制器C更换为控制器D,那么控制器D与基础车的其他控制器无法正常通讯,因为控制器D与控制器C对信号的定义不同;
  场景三:预研新增控制器做原型开发,与已有的控制器通过CAN进行通讯(该控制器的应用层软件非自主,不能直接在该控制器中开发,仅开放CAN接口),并通过其响应验证新开发逻辑的可行性。
  这三个场景有个共同点是都涉及到了CAN通讯,按照正常的开发流程需要各自的控制器更改软件以适配CAN信号的变更,但不同的供应商会有不同的开发周期,举例某供应商在仅更改CAN信号定义的软件升级需要3至4个月,对于整车公司而言,这个周期是很长的,难以满足开发需求。
  1.2 问题分析
  分析各个场景的问题核心,有如下解决方案:
  场景一:可以通过设备模拟缺失的信号a;
  场景二:可以将设备串接在控制器D前,并将交互的信号按照两侧的定义进行转发,具体而言(为简化描述,两侧分为左侧和右侧),设备按照左侧的信号定义接收,解析后获得表征的物理值,然后按照右侧的信号定义发送,同理从右侧接收,向左侧发送;
  场景三:可以通过设备运行新策略,并将最终结果通过CAN外发。
  接下来对设备进行选型,笔记本电脑安装BusMaster,可以通过USB口连ES581接入CAN总线,但此方案要占用一台电脑资源,而且占用空间大,不易放置。
  通过调研,MCP2515作为一款独立的CAN控制器并集成了收发器[3],可以直接接入CAN总线,而与主控芯片通过SPI通信,主控芯片则选用Arduino UNO[4]。三个场景的网络拓扑如图1所示。   1.3 硬件连接
  以场景二为例,仅仪表控制器更换供应商,其他控制器不变,开发设备的硬件包括:Arduino UNO一台(含线,集成数据传输及供电功能),MCP2515两块,杜邦线若干。Arduino UNO与MCP2515引脚连接关系如表1所示。
  将仪表控制器原有的CAN总线剪断,仪表这一侧的线头与MCP2515(ABS)的CAN总线连接,另一侧的线头与MCP2515(总线)的CAN总线连接,注意双绞线的两条线不能接反,如果CAN信号中转功能异常,这是一个排查点。Arduino UNO的线是USB口,可以通过车上的USB供电。
  1.4 软件设计
  软件是控制系统的灵魂,Arduino在软件设计的优势在这里就明显的体现出来了。由于开源的缘故,很多专业的高水平的研究人员或电子爱好者,会将开发的驱动封装为库函数,在应用时就会极为方便,只需要调用几个函数,就能轻松完成对外设的控制,让我们更加专注于应用层软件的设计,专注于功能的实现。
  Arduino的软件开发环境是Arduino IDE,与其他主控芯片有多个工具软件的开发方式不同的是,这是一个集成开发环境,包含代码编写、编译、下载等功能,界面简洁友好[5]。
  对于MCP2515的支持有许多库函数,本次应用研究使用sutowp开发的arduino-mcp2515-master。该库函数封装了几个重要且常用的函数:
  ①MCP2515 mcp2515(9),定义一个名为mcp2515的MCP2515对象,参数9代表mcp2515的片选引脚;
  ②mcp2515.setBitrate(CAN_500KBPS),定义mcp2515的总线速率为500kbps;
  ③mcp2515.readMessage(&canMsg),定义mcp2515的接收函数,并将报文信息保存至canMsg,包含3个主要内容,canMsg.can_id表示报文ID、canMsg.can_dlc 表示报文DLC(1~8)、canMsg.data[0]~ canMsg.data[7]表示1~8字节长度的数据场;
  ④mcp2515. sendMessage(&canMsg),定義mcp2515的发送函数,将canMsg保存的报文信息发送至总线;
  为了满足场景二的需求,需要提取特定CAN信号并转发出去,其中有两个关键点:ID匹配和数值转换。通过canMsg.can_id可以直接获得接收报文或定义发送报文的ID,接下来对数值转换进行说明。数值转换指的是报文的数据场数据(Raw Value)与信号的物理数据值(Physical Value)相互转换的过程。在汽车CAN研发过程中,对数值转换一般采用Excel管理,称之为CAN Matrix进行描述,而每家汽车公司都有自己的模板,但大同小异,vector公司也制定了一种统一的DBC格式的文件来进行描述。主要包含以下主要内容:
  ①Byte Order,有Motorola和Intel两种;
  ②Factor,数据场数据的“1”代表物理数据的值;
  ③Offset,偏移量,与Factor合用,Physical Value = Raw Value * Factor + Offset;
  ④Startbit,信号的Raw Value在数据场中的起始位置;
  ⑤Length,信号的Raw Value在数据场中的长度,影响其最大值。
  借用BusMaster软件界面,以发动机转速为例进行说明,如图2所示,Byte Order为Motorola,Factor为0.125,Offset为0,Startbit为16,Length为16。如图2解析,数据场数据(Raw Value)的第1和第2字节代表的十六进制数值为4B00,对应十进制数值为19200,计算Physical Value为2400。图中的Raw Value和Physical Value栏的数值框是可以输入数据的,改变其中一个,另一个会自动改变为其对应的值。反之,已知Physical Value,先计算对应的Raw Value(十进制),转为二进制,依据Length高位补0,再依据Startbit放置相应位置,即可得数据场数据。
  将代码输入Arduino IDE,如图3所示,通过点击工具栏中“项目”下拉菜单的“验证/编译”,可以检查语法等其他错误,会在最下方的消息框中以红色字体提示,如没有错误,编译完成时则显示如图的白色字体信息。最后可以通过工具栏中“项目”下拉菜单的“上传”来将程序烧录至Arduino UNO。
  2  实验
  最后进入实车验证阶段,改制一台领克03汽车,将仪表更换为另一家供应商的产品以模拟场景二,改制完成后发现发动机转速、水温、车速均没有示数。
  按1.3硬件连接中的方案将芯片接入汽车,如图4所示,发现仪表发动机转速、水温、车速有示数。
  主观转发正常,接下来进行数据采集,驾驶工况为自由驾驶,其中147s后为原地驻车踩油门,为了直观所以以发动机转速和车速为例进行说明,结果如图5所示,图中共显示4个信号,ECM_EngSpd,ECM_VehSpd,CAN_EngineSpeed,CAN_VehicleSpeed,分别为ECM外发的发动机转速,发动机接收的车速(ABS发出),ABS侧CAN总线解析出的发动机转速和车速,从图中只看到两条曲线,这是因为CAN_EngineSpeed和ECM_EngSpd基本重合,ECM_VehSpd和CAN_VehicleSpeed基本重合,这表明经过Arduino UNO+MCP2515的转发,各个物理量可以保持原有值,而且转发未出现明显延时。
  3  结论
  通过实车验证Arduino UNO+MCP2515转发CAN信号方案的可行性,为研发过程中由于CAN信号定义不同步带来的通讯异常提供解决方案,研究结果表明,该方案切实有效。
  参考文献:
  [1]方友勇.基于CAN总线的多ECU通信系统设计[D].南昌大学,2020.
  [2]黄菊花,顾晓辉,曹铭.基于Arduino的CAN通信模块的设计[J].南昌大学学报(工科版),2020,42(04):404-408.
  [3]丁雪静,许永辉.基于MCP2515的CAN总线通信单元设计[J].现代电子技术,2015,38(21):60-63.
  [4]孙龙,刘晖虎.基于MCP2515的CAN总线控制软件的设计与实现[J].现代信息科技,2018,2(07):1-4,8.
  [5]赵琨.基于Arduino的云平台智能家居控制系统设计与实现[D].华中师范大学,2020.
其他文献
摘要:气缸套是内燃机燃烧室的主要组成部分,在高温高压的条件下,能承受活塞和活塞环的高速滑动摩擦。本文在综合分析了国内外激光加工技术的基础上,提出了对传统发动机气缸套进行激光网格状淬火设计。这样就完成了工件表面的相变硬化。提高了发动机气缸套硬度,也提高了耐磨损度和寿命,能创造良好的社会效益和經济效益。  Abstract: The cylinder liner is the main part of
摘要:本文提出一种由加速踏板、制动踏板、档位、整车控制器、电机控制器及电机、陀螺仪组成的防溜系统。整车控制器通过踏板、挡位状态、陀螺仪等外设判断车辆是否需要进入防溜工作模式,车辆的防溜工作模式和正常驱动模式的切换需要经过预防溜模式,初始防溜扭矩依据陀螺仪检测到的坡度值给出,以使系统的响应速度提高,降低车辆后溜距离。如果整车处于防溜坡状态,VCU根据车辆倾角及当前电机转速和电机执行扭矩情况实时调整防
期刊
期刊
摘要:为探究压铆螺母推广应用的可行性,本文通过静载力学试验,得出了压铆螺母CLS-M8-2的推出力、扭出力矩以及极限安装力矩;同时,基于不同应力水平进行了疲劳寿命测试,得到了CLS-M8-2的疲劳寿命数据,拟合了S-N曲线,总结了压铆螺母疲劳寿命规律;验证了压铆螺母CLS-M8-2的静力学强度、疲劳强度及应用可靠性。  Abstract: In order to explore the feasi
摘 要:“地上之城”是奥古斯丁所提出的与“上帝之城”相对应的概念,初指罗马,后泛指人的城邦和国度。莎士比亚的十一部英国历史剧塑造了八位基督徒国王,其中约翰王和亨利八世都拥有大权独揽的雄心和气魄,也先后与罗马教廷发生冲突和决裂;然而,二人作为世俗君主的智慧和才能呈现出高下之分,作为基督徒的信仰亦有深浅和真伪之别,由此造就了一衰一兴的两代王朝,即:奥古斯丁所谓衰落和兴盛的两种“地上之城”。本文从奥古斯
期刊
摘要:直接利用汽车内燃机直接驱动汽车,是目前汽车信息化时代飞速发展的一种技术应用非常广泛的汽车动力机械。当液体燃料直接注入车辆并燃烧时,会释放大量固体。热能作为机械力的一种动能直接转化为动力,从而为机械设备提供动力。是当前工业生产和运输中非常核心的机械设备。内燃机对社会发展的重要性不言而喻,因此对内燃机的研究从未停止。本文对内燃机相关零部件的整体结构设计和实际应用场景进行了分析和探讨。  Abst
期刊
摘要:履带式车辆有较好的通过性能和承载能力,一般应用于工程机械、军事领域和农田作业。由于履带车辆的工作环境非常复杂,若只靠单个电动机或者双侧电动机驱动,在车辆满负载工况时,驱动电机输出牵引功率和力矩无法满足工作要求,会造成整车动力性不足。基于此,本文对履带车辆进行双电机耦合驱动设计和探讨,以改善履带车辆的动力性。  Abstract: Tracked vehicles have good pass
期刊