基于STM32单片机的教练车转向轮转角显示仪设计与实现
2022-10-27刘霞,白刚
刘 霞,白 刚
(1.西安文理学院 机械与材料工程学院,西安 710065;2.中国铁路西安局集团有限公司,西安 710000)
0 引言
近年来,我国社会经济的快速发展以及我国城市化改革的深入推进,使人民群众对于购买汽车有着强烈需求。随着汽车进入千家万户,目前全国驾龄不满1年的实习驾驶人将近3 000万人,占机动车驾驶人总量的11.3%,部分实习驾驶者由于汽车转向轮转向角度把握不好而造成的车库移位、刮擦、追尾等不同程度的事故[1-3]。我国汽车保有量的提升,其规模已大大超过了道路等重要交通设施的修建,交通流量的增加正处于一个较高的水平,每年都会有6万多名人死于严重的交通事故[4-6]。在这些事故中,由于汽车转向轮转向角度把握不好而发生撞车的有很多。因此需要设计开发一套能够有效的采集汽车转向轮转向角度的系统,在初学驾驶阶段熟悉熟练汽车转向轮角度把控必要且迫切。
现阶段,单片机在交通工具上的应用研究发展态势良好,曾尧[7]使用STM32控制系统,提供一种中线差值采样的寻迹方法,选用MG995电动机进行驱动,使智能小车转向更加灵敏。赵林超[8]实现了信号采集处理电路集成化,传感器数据可直接在STM32中进行RBF人工神经网络计算,在满足测量精度和测量速度的同时,大大缩小了测量系统所占用的空间便于集成装配在球铰链底座的预留空间内,初步实现了测量系统集成化、智能化和便携化的目标,同时制造成本大幅下降。孔伟亮[9]以STM32单片机为核心设计了转向单元、制动单元和驱动单元。转向单元由转向电机驱动器、转向电机、转角传感器等组成,转向单元能够根据SALM最小系统获取的环境信息控制转向机构实现预期位置的转向。钟智杰等[10]提出了基于STM32为主控制器的速度转角闭环控制方案,还设计了基于该结构的超声波探头分布与检测策略,在实际应用中,具有较快响应速度,机构灵活,适用范围广泛。韩云鹏[11]根据靶车需求,确定STM32单片机作为主控制器,并完成各类电机与供电电源的选型。根据设计方案与结构参数,建立全地形移动靶车四轮驱动和四轮转向运动学模型。张盼盼[12]设计开发了基于STM32处理器的智能驾驶辅助系统回路仿真与控制器,车道保持和主动变道控制器在保证车辆纵、横向稳定性的基础上能够很好的完成车道保持和主动变道的功能。对车道保持和主动变道进行单片机控制的模型小车实验,验证了控制算法的可靠性。
本文针对基于STM32单片机的汽车转向轮转角显示系统进行研究。首先分析目前产品功能的合理性,这些方案是否可以借鉴。整理出系统的架构图并明确了系统的功能。功能的出现会带动方案,明确了功能就可以针对性的进行方案设计。下一个阶段是重要的硬件电路设计,需要研究各个方案,输出对应功能的电路图,结合电路设计的合理性、稳定性设计出系统的硬件。这一部分就需要将系统的硬件全部设计完成。硬件设计中的每一个器件的设计原因需要明确。在软件设计环节,配合硬件实现对应的功能即可,编写出程序代码,统计将所有的功能按照功能逻辑设计,按照逻辑流程图完善系统运行功能。最后进行仿真测试并决定系统功能是否符合要求,达到设计目的。期望全套设备开发为初学者和教练员教学带来便利,也为驾驶学校教练车装备智能化提供借鉴。
1 总体方案设计
1.1 整体方案布局
系统的功能结构如图1所示,基于STM32单片机的汽车转向轮转角显示的设计与实现系统的功能有汽车转向轮转角检测、按键控制、数据显示、WiFi通信、报警提示。设计转向轮检测角度范围为30~40°,测量精度为1°,系统采集汽车转向轮转角数据,若汽车转向轮转角实时获取数据不在设置阈值范围内,则通过声音报警提示。可以使用按键调整汽车转向轮转角阈值,通过WiFi传输到手机实现数据监控[13-14]。
图1 系统结构框图
1.2 主控制器
主控制器决定选择STM32。该芯片内置ARM型Cortex®-M3。内核使用的是32位数据处理数据。芯片的最高速度为72 MHz。芯片搭配了512 K的存储空间保证程序的存储。同样带有上电和掉电复位功能。为了保证系统的功耗,芯片内部有3种模式:休眠、停止、待机模式。带有多种调试方案,分别是SWD和JTAG接口。为了方便进行数据的移动和复制,设计了DMA方案,可以在不需要内核控制的情况下,自助地进行数据的拷贝转移。
1.3 转角检测
汽车转向轮转角检测的采集功能由转角检测模块完成。这款传感器的成本很低,而且设计精巧。在传感器的表面设计了镀镍处理。为了让传感器可以获取更可靠的土壤湿度数据,对传感器的测量面积进行了加宽设计。镀镍处理方案也可以提高传感器的使用时寿命,传感器不会产生生锈的现象。若汽车转向轮转角发声变化,传感器就可以输出对应的电信号,汽车转向轮转角越大,传感器输出的电信号伏值越大,因此只要获取到电压数据就可以判断汽车转向轮转角的大小。
1.4 WiFi通信
ESP8266是专用的WiFi通信技术方案,模块集成了WiFi所有的功能,常用的TCP/IP协议也在其中。模块和主控可以通过串口进行通信,模块集成了串口数据交互方案,就是方便和主控进行连接,这样能够适用于市面上所有的主控设备。WiFi通信作为一种常用的无线数据传输技术方案,在很多的产品上得到了广泛的使用。最终确定选择ESP8266模块完成WiFi通信功能。模块内部主要的是器件是WiFi芯片,搭配芯片需要的外围器件支撑芯片的运行,集成在同一块PCB上封装为模块,模块引出通信接口。模块最大的优势之一是一项透传模式,模块在这个模式下能够非常快捷的被单片机进行控制[15]。单片机在操作模块时只需要通过串口收发数据就能够实现WiFi通信双向数据传输,也就是说单片机不需要了解WiFi的具体传输细节,这些由模块完成。
1.5 显示
汽车转向轮转角数据显示选择LCD1602。系统需要一个显示功能作为信息输出。应用LCD1602实现信息显示。这款液晶的成本低,显示效果好。可以支持多种字符的显示,包括字母、数字等其他符号。这种显示器不需要实时占用主控资源,只要控制显示内容后,就可以长期保留显示信息。主控和显示器的连接关系简单,从设计难度上来讲也符合设计要求。整个屏幕可以容纳32个显示符号,能够满足系统的显示要求。显示器中集成了很多库以及驱动器,在控制的时候只需要依据显示器要求的时序输入数据即可完成显示信息的功能。显示器内部的核心是HD44780芯片,这款芯片具有封装了针对液晶控制的多种技术,所以在应用主控对液晶操作上会方便很多。同时搭配了HD44100作为对液晶的驱动控制方案,这些都是集成在液晶显示器模块中,不需要额外的进行设计。为了适应更多的场合,液晶显示器还集成了灯光效果,能够有背光功能,可以在夜间让显示内容更加的醒目。
1.6 报警
汽车转向轮转角数据超过设置的阈值时进行声音提示,以便用户了解汽车转向轮转角数据的具体情况。系统要求在异常情况下进行声音预警提示,使用蜂鸣器实现此功能。蜂鸣器在很多产品中都能够看到。蜂鸣器能够发出蜂鸣声,声音可以达到提示的效果,控制上手简单。蜂鸣器的控制需要有硬件驱动的支持,否则只靠主控的接口是无法对蜂鸣器进行控制的。蜂鸣器的选择需要注意类型,如果是无源蜂鸣器在控制信号上有一定的要求,信号必须有一定的波动频率。如果是有源蜂鸣器只需要简单的电平变换就能实现蜂鸣器响与不响的控制。因此最终确定选择有源蜂鸣器作为报警功能的方案。
2 硬件设计
2.1 主控电路
主控制器电路如图2所示,作为高性能的STM32F103C8T6,在高速运行条件下功耗为36 mA。接口的转换速度为10 MHz。两个模数转换模块速度快到1 μs。串口通信的速度可以达到每秒18兆位。芯片的供电电压在2.0~3.6 V范围内,虽然供电没有达到5 V,但是IO接口都可以兼容5 V,所以也扩大了芯片的使用范围。复位电路集成在芯片内部,因此不需要单独在外置复位电路,减少了硬件设计的成本和工作量。芯片能在超低温和超高温环境下运行,温度范围在-40~+85℃。芯片的IO接口有多种配置模式,非常便于连接不同的外设,包括上拉、下拉、模拟、开漏等模式[16]。STM32F103C8T6中的C代表芯片一共48个接口,这48个接口每个口都具备多种功能,可以通过程序配置使用其中一项功能。其中103表示这款芯片是增强型器件,8表示用户可以设计的代码量达到64 K。芯片在SWD模式下,使用的接口为PA13、PA14。芯片在JTAG模式下,使用的接口为PA13、PA14、PA15、PB3、PB4。这些接口也可以作为控制外设的接口,因此实现了复用功能。芯片的封装为LQFP,手工焊接并不是很方便,因此直接只用最小系统板进行系统开发。
图2 主控电路
2.2 转角检测电路
转角检测模块传感器能有效地消除其它信号的干扰。该传感器具有很强的可重用性,可长期稳定使用。该传感器启动时间短,感应时间快,长期稳定运行,测试性能强。传感器在使用时会产生热量,这是正常现象。加热一段时间后,它将恢复正常。输出为模拟量,需要与模数转换芯片匹配。ADC0832芯片设计了使能选择接口。位于CS引脚1处,使能有效信号为低电平,由主控的PB9控制。如果是低电平,则意味着芯片可以操作,模拟数据可以通过单片机接口读取和控制。芯片的两个模数转换通道分别位于引脚2的CH0和引脚3的CH0处。电源GND位于4脚。数据输入脚位于5脚的DI。数据输入脚位于6脚的DO,接单片机的PB7。时钟信号引脚位于7脚,由主控的PB8控制。8脚为电源以及参考电源端,转角检测电路如图3所示。
图3 转角检测电路
2.3 WiFi通信电路
WiFi模块和单片机的连接需要三条信号线,也就是完成串口的线速连接,就可以实现WiFi数据通信。WiFi模块引出8条信号线。其中4脚是模块的供电接口。6/7脚是WiFi模块自带的控制接口,WiFi模块本身也可以作为主控实现一些控制功能。5脚是模块引出的数据接收脚,相对于单片机就是串口数据发送脚,和单片机的TXD连接在一起。1脚是模块引出的数据发送脚,相对于单片机就是串口数据接收脚,和单片机的RXD连接在一起。8脚是模块的供电GND口。WiFi通信电路如图4所示。
图4 WIFI通信电路
2.4 显示电路
显示电路如图5所示,在LCD1602硬件电路中,液晶只需要16个接口进行连接。1脚为电源GND。2脚为电源VCC。3脚接电位器,电位器的作用是调节液晶屏的对比度,使液晶显示屏显示的内容更清晰。一般选择103,也就是10 K电位器。4脚为RS,是控制输入的内容是命令还是数据。如果控制RS为低电平,则输入的内容为指令。如果控制RS为高电平,则输入的内容为数据。5脚为RW,控制单片机是读液晶的数据,还是向液晶写数据。如果控制RW为低电平,可以对液晶进行写指令或者写数据。如果控制RW为高电平,主要读取显示屏的显示状态。6脚为E,使能控制端。7脚到16脚为8个数据口。液晶的电源要求为5V。显示屏D0到D7接单片机的PA口,RS接单片机的PB0,RW接单片机的PB1,EN接单片机的PB10。
图5 显示电路
2.5 报警电路
蜂鸣器的功能主要是实现声音的输出,因此应用非常的广泛。比如玩具、打印机、家用电器等都使用蜂鸣器。蜂鸣器的控制原理简单方便,但是主控也无法直接对蜂鸣器实行控制,需要有硬件驱动的支持,主要原因是蜂鸣器的驱动信号需要一定的电流,主控的接口无法满足输出电流的大小[17]。在电路中使用三极管完成主控和蜂鸣器之间的对接。在声音效果上也需要选择对类型的蜂鸣器。有通过电磁发声的蜂鸣器,有压电式发声的蜂鸣器。这两种蜂鸣器发出的声音效果不一样。压电式的蜂鸣器发出的声音洪亮,更适合系统的设计要求,因此使用的是压电式的蜂鸣器。报警电路如图6所示。
图6 报警电路
2.6 按键电路
按键最常用的是作为系统的参数设置功能方案。按键也属于开关的一种,因此具有两种状态。按键在没有任何操作的情况下是断开的,没有信号输入。按键在有操作的情况下会闭合,输入一个信号,因此设计两种信号分别代表按键有操作和无操作的状态。按键选择常用的轻触开关。在有人操作的情况下按键能否有效的动作和按键的结构以及制作材料有关系[18]。由于是机械动作转换为电信号,所以制作的工艺也会决定按键的使用寿命。为了达到更好的按键效果,制作按键选择的材料必须是电阻率小、耐使用。在进行实物制作时,按键的引脚会被上锡,引脚在上锡后会改变引脚的电阻率,因此厂家在制作按键时,加入了镀银工序,这样可以保证引脚电阻率的稳定,也会避免引脚的氧化,加长了按键的使用时间。使用按键S2可以设置汽车转向轮转角数据阈值,进入阈值设置界面,主控选择PA13采集按键信号。使用按键S3可以设置汽车转向轮转角数据阈值加控制,主控选择PA14采集按键信号。使用按键S4可以设置汽车转向轮转角数据阈值减控制,主控选择PA15采集按键信号。按键电路如图7所示。
图7 按键电路
2.7 电源电路
主控需要提供的电源是3.3 V。但是系统输入的电源是5 V,需要进行转换处理。电源是整个系统最重要的部分之一,电源如果瘫痪的话,整个系统没有一个功能是可以运行的,因此电源的设计一定要稳定、可靠。电源电路如图8所示,POWER是电源的接口,可以和所有的能够输出5 V的电源适配器连接。输入电源后经过两个电容的滤波,帮助电源滤除杂波信号,两个电容参数一大一小分别对高频和低频杂波进行滤除。经过U7将5 V电压稳压到3.3 V,再经过一大一小电容参数,同样对高频和低频杂波进行滤除输入到系统各部分模块中。为了指示电源是否正常功能,加入了LED。
图8 电源电路
3 软件设计
3.1 系统整体软件设计
系统整体软件设计中是将说有功能软件部分在主函数中整合。在主函数运行开始需要对各项功能进行配置。对汽车转向轮转角检测接口、按键控制接口、数据显示控制接口、WiFi通信控制接口、报警提示控制接口进行初始化。系统采集汽车转向轮转角数据,如果汽车转向轮转角数据超过设置的阈值,则通过声音报警提示。可以使用按键调整汽车转向轮转角阈值。同时可以通过WiFi传输到手机实现数据监控。系统整体软件设计流程如图9所示。
图9 系统整体软件设计流程图
3.2 转角检测软件设计
转角检测模块输出模拟数据。ADC0832是一个8位分辨率的模数转换方案,因此最多可以达到256级的数字量,可以满足大多数模数转换应用项目中。参考电压为5V,因此模拟量的输入范围为0~5 V。MCU只需要CS、CLK、DO和DI可以完成收藏数字量。在控制芯片时,数据输出DO和数据输入DI不同时使用,即如果有数据输出,就没有数据输入。因此,DO的数据输出和DI的数据输入重用了一条数据线,使单片机的值需要3个引脚来操作芯片。当需要操作芯片时,将引脚控制在低电平。芯片完成模数转换后,单片机将时钟信号输入芯片时钟,然后根据时钟信号通过数据输入DI选择相应的转换通道,然后通过数据输出DO接收数字数据。接收IN1、IN2信号,以控制电机的正向和反向旋转。转角检测软件设计流程图如图10所示。
图10 温度检测软件设计流程图
3.3 WiFi通信软件设计
WiFi通信的软件设计需要单片机来完成,单片机主要通过串口向WiFi模块输入相应的AT指令对模块进行功能控制。要实现串口需要确定串口数据传输的速度,即波特率[19-21]。还需要确定串口数据传输的位数,在系统设计中确定以9 600波特率以及8位数据位去设置好串口。在进行AT指令使用时,需要先发送AT进行测试,如果WiFi模块反回OK,则表示模块可以进行控制,否则需要继续进行AT指令测试。WiFi模块的串口参数也是需要设置的,需要设置和单片机一致即可,是否设置成功可以通过PC端的串口助手进行验证。先设置WiFi模块进入到路由模式,设置后必须重启模块才可以生效设置。启动WiFi通信后就完成了WiFi模块的配置,进入到连接数据传输状态。WiFi通信软件设计流程如图11所示。
图11 WiFi通信软件设计流程图
3.4 显示软件设计
LCD1602是专用的字符显示液晶屏,能够显示的内容包括字母、数字、符号等字符内容。可以满足大部分项目开发的需求。驱动芯片中有存储器,存储器有3种功能,DDRAM用于存储液晶需要显示内容的数据,包括所有能显示内容的数据,在控制的时候调用对应显示内容的数据到液晶屏,完成显示。液晶屏单个字符显示单元是5×7点阵式,需要显示任何字符,都可以在5×7点阵上显示出来,每个字符对应的数据都可以计算出来。DDRAM一共有80个字节的数据,作为液晶屏显示内容数据存储器,但是在显示的时候,液晶屏无法将80个字节数据全部显示,这样就需要应用移动指令控制显示数据,通过移动将未显示出来的内容进行移动显示。因此只需要把显示的内容数据写入到DDRAM,就可以完成显示。如果要显示数字1,直接将1对应的Ascll数据0x31输入到DDRAM中,就可以在液晶屏上显示出数字1。显示软件设计流程如图12所示。
图12 显示软件设计流程图
3.5 报警软件设计
汽车转向轮转角数据超过设置的阈值时进行声音提示,以便用户了解汽车转向轮转角数据的具体情况。如果汽车转向轮转角数据超过设置的阈值,则主控控制PB11输出低电平,控制蜂鸣器报警。报警控制软件设计流程如图13所示。
图13 报警控制软件设计流程图
3.6 按键扫描软件设计
按键的人软件代码设计很重要,如果按键判断错误,整个系统的控制就会产生故障。按键动作的检测主要在软件代码设计上,首先分析按键动作机制,了解按键动作才可以更好的设计软件代码。理论上按键就是开关动作,但是由于实际情况是机械动作转换为电信号,机械动作难免存在摩擦等情况,因为人手按下按键的机械动作存在抖动以及摩擦,所以在按按键的时候,真实情况是抖动的,所以导致按键开关是抖动开关,输出的电信号也是抖动状态,即为高低电平抖动,等人手按下按键稳定后,才输出稳定的低电平,这个抖动过程一般是3~5 ms,因此在单片机扫描按键电信号的时候,需要在按键按下状态稳定后检测电信号,在软件代码扫描中第一次扫描到按键有效信号,此时并非真正的稳定信号,而是抖动开始或者干扰信号,所以待3~5 ms后继续扫描,如果仍然是稳定信号,则表示按键按下。
4 实验结果与分析
按照电路图的设计,进行电源接口电路的焊接试。之后进行单片机系统电路的焊接,其他部分需要通过单片机进行控制。用万用表导通档位测量电源是否短路,若正常则测量电源电压是否正确。完成实物的焊接制作后即可进行系统软件功能测试。
Keil可以完成对系统软件功能的设计,Keil的使用方法简单,创建项目工程后就可以开始进行代码设计了。这也能保证能够快速的进入开发阶段。在编程上使用模块模式进行程序设计,有利于在对代码做管理,出现问题可以快速定位。此系统的代码截图如图14所示。
图14 软件代码截图
打开项目工程后,选择菜单进入调试界面进行调试。选择“Debug”→“Start/Stop Debug Session”就可以进入调试功能。具体操作方法如图15所示。
图15 选择调试功能示意图
进入到调试界面后,可以看到左侧有对寄存器进行实时监控的界面,可以在程序运行时观察寄存器的实时变化状态。同时还有代码断点的设置,对代码的运行进行单步点击运行操作,方便观察各个参数的变化。
图16 进入调试功能界面
之后,可以对部分变量进行监控,需要调节被监控的变量。选择“View”→“Watch Window”就可以进入监控设置界面。调出Watch界面后,在此界面就可以设置被监控的变量或者参数。双击Name就可以设置要监控的变量,输入变量名称就可以监控变量的动态变化。完成上述硬件测试和软件调试后,进行实际测试。整理了5组测试数据如表1所示,通过本文系统检测数据和车轮转向定位仪测量数据进行对比,测试结果一致。
表1 测试数据表与实际测量值比较
5 结束语
为了方便初学驾驶人员快速准确的掌握车辆转角角度,也为了教练员有针对性的教学。开发设计了一套基于STM32单片机的汽车转向轮转角显示仪,系统需要设计功能包括汽车转向轮转角检测、按键操作、汽车转向轮转角数据显示、语音播报、报警提示。系统采集汽车转向轮转角数据,如果汽车转向轮转角数据超过设置的阈值,则通过声音报警提示,通过语音播报提醒。可以使用按键调整汽车转向轮转角阈值。
系统的功能虽然基本满足要求,但是通过分析还存在一些不足之处,需要后期不断的改进。比如转向控制的功能比较单一,可以融入一些物联网的功能,比如加入远程WiFi功能,通过手机实现远程对汽车驾驶的控制。还可以加入人脸识别,让系统的功能更加的多样,也更加的智能和方便。