基于STM32的汽车仪表系统设计
摘 要
当前,随着科技的发展,汽车功能的日益增多,汽车仪表系统也变得愈发多元化。传统的机械式指针仪表因为其繁琐的布线方式和点对点的通信方式,已不能满足当前行业的需求。因此,研究一款功能多样,结构简单,安全可靠的仪表系统成为汽车产业技术开发和研究的热点之一[1]。
本次课题基于STM32F407微型控制器以及CAN总线通信技术,设计一款新型全液晶汽车仪表。相比于传统的机械式指针仪表,本设计的汽车仪表具有简单的接线方式,快速的模块之间通讯以及全液晶显示等特点。同时,该课题中采用emWin技术进行LCD液晶显示屏的设计,具有更直观美化的人机交互界面,而且由于采用了CAN总线通信方式,元器件与控制元件(ECU)之间信息传递性将会更好。本次课题,采用CAN分析仪开发测试工具,通过定义好相关模拟变量,模拟实际汽车中的情况输入CAN信号报文并利用Simulink建模进行汽车仪表灯的逻辑处理。同时将FreeRTOS实时操作系统移植到STM32F407上,利用STM32芯片输入输出信号,进而达到点亮汽车仪表的目的。
通过软件与硬件方面的调试,该课题达到了预期研究要求,证明了课题技术上的可行性以及延展性。
关键词:汽车仪表; CAN总线; STM32F407; Simulink建模; FreeRTOS
1 方案设计
1.1 总体方案论证
本课题对于实现汽车仪表系统提出如下两套设计方案。
方案一:
本设计采用通过串口与按键的方式来进行汽车仪表的实现。该方式通过使用串口调试工具,在PC端向STM32芯片发送指令,经过STM32的识别后,输出到显示模块上。按键控制则是通过改变STM32芯片I/O口的高低电平,实现某个特定的仪表指示功能的点亮与熄灭。该方案分为硬件模块以及软件设计两个模块。其中硬件模块包括:主控芯片、按键控制电路、蜂鸣器报警电路、指针电机电路以及LED显示电路。软件方面采用了Keil5编程软件向STM32芯片烧写代码程序。
其中电源电路包括STM32的最小系统以及下载电路;按键电路主要负责系统的启动/关闭,以及相关指示灯的点亮/熄灭;蜂鸣器电路是根据STM32的输出信号,当某些报警条件触发时,蜂鸣器就会工作;电机电路采用伺服电机进行模块的控制,主要负责车速表的指针转动,转速表的指针转动等;LED显示电路则是根据STM32的输出信号,点亮对应的指示灯或熄灭对应的指示灯。
该方案的弊端主要为,机械式的仪表指针过于传统化,人机交互界面不够美观且智能化。同时,由于现代汽车仪表包含多种功能,需要大量的仪表指示灯与驾驶员进行交互。在本方案中采用的LED显示灯所呈现的信息不够生动、具体,而且需要大量的LED去表达对应的仪表指示灯,容易造成资源的浪费,且给项目的布线和通讯带来很大的麻烦。另一方面,由于项目存在大量的仪表模块,单一的点对点导线通讯很难完成高效的通讯实现,会对项目的实现造成干扰。
方案二:
本设计采用STM32芯片与CAN总线结合的方式实现汽车仪表。通过CAN分析仪发送报文,STM32处理输入输出报文信号,根据相应的条件控制显示模块与蜂鸣器模块。为了更直观的显示,在本设计中也增加了按键的硬线控制模块,通过按键控制某些特定的仪表灯。本设计主要分为硬件设计与软件设计。硬件模块包括:电源电路,蜂鸣器电路,按键电路以及LCD显示电路。软件设计主要由Keil5与Matlab来实现。
在本设计中,在LCD显示模块上,会采用软件烧写的方式,实现一款全液晶的仪表显示屏以取代电机模块与LED模块。相比于机械指针的方式,全液晶显示屏具有更美观,更直观的人机交互界面,同时节省了大量的LED以及布线需求。在通信的传递上,采用新兴的CAN总线传递方式,相比于传动的导线通信,CAN总线具有更高效,更稳定且更安全的通信方式。同时,在本次设计中,将会移植FreeRTOS实时操作系统到STM32芯片上。该方法可以实现多进程任务,可以在更好的处理不同情况下的仪表条件。
因此,采用方案二的汽车仪表系统更符合我们的实际需求,更贴切现代发展,该方案操作性高,维护性好,具有良好的安全性与实用性。因此,本设计采用方案二。
1.2 项目总体设计
本项目基于STM32F407设计的汽车仪表系统由:主控芯片,CAN通讯模块,按键模块,LCD显示模块和报警模块组成。STM32主控制芯片负责在接收到CAN通信传来的信号或者按键按下时的系统任务调度,经过主控芯片处理后,会输送到LCD显示模块和报警模块,执行点亮或熄灭相关指示灯,蜂鸣器警报,同步水温表,车速表等操作。系统功能框图如图1.1所示。

图1.1 系统功能框图
该项目分为两种控制方式:CAN总线通信以及按键硬线通信。通过使用CAN收发器实时发送CAN报文给STM32芯片,STM32芯片会判断是否满足相关条件,执行点亮/闪烁/熄灭相关仪表灯或报警。由于在STM32中移植FreeRTOS实时操作系统,会在一个循环周期内不停检测是否接收到CAN报文,执行多个任务调度,实现多个仪表灯的控制。按键控制则是通过定义好的I/O口与仪表灯,当按键按下或取消时,仪表灯和报警会有对应的显示。至此为该项目的流程与功能。
2.1.2 STM32F407ZGT6芯片
为了满足汽车仪表的功能,本设计的主控芯片需要具有强大的数据处理功能的CPU,足够大的内存来存储图形界面图像以及较高的内部时钟来进行中断,定时器等功能,同时该芯片支持移植FreeRTOS操作系统。
因此本设计采用STM32F407ZGT6单片机作为主控芯片。它不单具有ARM Cortex-M4内核并且延展了其他的外围设备。该主控芯片所拥有的168MHZ时钟、定时器功能、FLASH大小以及SRAM符合了本设计所需求的图像储存空间以及中断功能。同时,该芯片还拥有丰富的通信接口,包含了在本次设计中需求的串口通信以及CAN接口通信。它还支持FreeRTOS操作系统,满足了本次设计的需求。STM32F407具有144个引脚供用户使用,引脚描述如图2.1所示:

图2.1 STM32F407引脚图
3 软件设计
3.1 主程序设计
本课题设计的主程序流程如图3.1所示,开机后会初始化液晶显示屏,内部时钟以及I/O口。在FreeRTOS里建立两个任务,分别为主程序任务以及显示任务(主程序任务优先级大于显示任务)。主程序任务会根据内部时钟,不停地循环。当STM32收到信息或按键按下,会判断是否有效。如若无效,不执行任何操作,继续循环。如若有效,会切换到显示任务中,根据逻辑,输出对应的信号,更新LCD液晶显示屏上的信息或蜂鸣器鸣响。

图3.1 程序主流程图
3.2 FreeRTOS移植
FreeRTOS是一款免费的可裁剪的小型RTOS系统,同时也是一款可移植性极高的实时操作系统,由于汽车仪表系统需要判断多种任务状态,因此采用了操作系统。它提供了实时操作系统所需的基本功能包括:任务调度,任务管理,时间管理,消息队列,信号量,内存管理等[14]。同时,该系统也被称为抢占式的实时多任务系统,它将一个大任务分解为若干个小任务,由于小任务会很快执行完成,所以看起来像是同时执行了多个任务。同时,在小任务中会分配优先级的顺序,该系统的任务调度如图3.2所示:

图3.2 任务调度流程图
移植FreeRTOS需要去官网下载相关源码,适配到Keiil5的项目工程里。在适配中需要将sys.h文件中的宏SYSTEM_SUPPORT_OS修改为1,该宏决定了是否使用操作系统。还需要修改usart.c中的文件,在代码中添加FreeRTOS.h的头文件,将FreeRTOS引入进来,同时应用#if,#endif,防止头文件重定义。最后,封装好FreeRTOS操作系统所需要的延时函数,部分源码如图3.3所示:

图3.3 延时函数源码
4.1 重点问题及解决
在实物的调试过程中,主要包含以下几个重点问题:
(1)CAN通信不成功;
(2)图形界面冲突,会出现一个图形被另一个覆盖的情况;
(3)仪表指针异常,无法指向CAN报文发来的数据位置;
(4)编译不通过,STM32没有足够的空间存储图片信息;
经过多次调试排查,第一种情况需要先检查CAN总线的波特率是否保持一致,可以应用EmbededConfig(分析仪配置软件),配置波特率保持一致,检查CAN_H和CAN_L信号是否接反。同时在上位机界面中,需要将报文配置为标准帧,标准帧的ID长度不同于扩展帧,容易造成信息不匹配。针对图形界面冲突的问题,原因是由于在实现一个图像的时候,需要先将该图像所在的坐标“清除”出来,以便显示图像。解决办法是在代码中将突出的图像放在一个循环中,以免出现覆盖的现象。仪表指针异常,经过使用Keil5调试诊断,发现是由于CAN报文发送的是16进制的数据,而在指针算法中采用的是十进制的算法,数据不匹配造成的。可以采用位操作的技巧,取出正确的数值。最后一个问题,是由于STM32的存储空间有限,较大的图像信息过多的占用内存,可以应用Photoshop软件改变图片的像素大小,优化内存占用,可以解决上述问题。最后实物图像如图4.3所示:

图4.3 项目实物图
文章底部可以获取博主的联系方式,获取源码、查看详细的视频演示,或者了解其他版本的信息。
所有项目都经过了严格的测试和完善。对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)