张晓晓, 马其华, 何晨曦, 王悦凡, 韩惠羽
(上海工程技术大学 汽车工程学院,上海 201620)
设计参加复杂赛场环境的全地形赛车的过程中,直接选配市售的车载仪表系统时,由于受车辆配置所限、功能要求的特殊,难以找到合适的、性价比高的产品。全地形车辆的仪表系统要求在极度恶劣环境下正常显示赛车各重要部件工作状况与工作数据,以保障赛车的正常工作[1]。另外由于比赛需要在仪表显示系统中增加车外扩音、行车轨迹记录以及赛车手心率采集等功能,因此,自主开发接布线简单、成本较低且工作可靠的仪表显示系统对于赛车的设计具有重要意义[2]。
仪表显示系统以Arduino NANO开发板为核心,按照功能要求设计各模块电路并配以处理程序,实现了显示可靠、扩展性强、使用便捷的设计目的[3,4]。
根据实际赛车情况,系统显示系统的主要功能及要求,如表1所示。
表1 仪表系统功能分类
所设计的仪表系统主要由传感器模块、控制器模块、显示模块及供电模块组成。传感器模块检测所需赛车部分工作数据,并发送给控制器模块。控制器模块选用Arduino NANO开发板,处理传感器发回的数据,并发送给显示模块;显示模块接收单片机传回的数据,并将其显示在屏幕上用于提示车手;电源模块为以各模块提供持续稳定电能[5]。
控制器模块选用Arduino开发板作为系统平台,负责、收集、显示各模块数据。如图1所示,控制各模块中的传感器及数据处理,通过外接电池供电,由各个传感器从车体不同位置采集到相应数据,交由Arduino中已编译的程序进一步处理,并通过Arduino发送给显示模块,最终车体各参数将通过LCD显示屏输出显示[6~10]。
图1 仪表系统模块框图
车速采集模块中用到的传感器为霍尔传感器[11],霍尔传感器结构为一个半导体器件,有4个引脚,数据传输用D0引脚与控制器模块相连,A0引脚连接至Arduino数字端口的任一空闲引脚,剩余的3个引脚分别连接至Arduino的5 V和GND端,D0引脚与Arduino D6引脚相连。其中,D0端口默认输出高电平,当磁铁的特定一面(磁铁的另一面无效)靠近霍尔传感器时,D0会输出低电平。将磁铁固定在半轴上,磁铁特定一面与霍尔传感器对应,其中,半轴转动至磁铁与霍尔传感器之间距离最短时,应保证霍尔传感器可以正常工作。Arduino测的单位时间内霍尔传感器传出低电平的次数,即为半轴转速n,rad/s;计算车辆行驶速度V=n×r×π×3.6,km/h。
由于Arduino引脚个数限制,在系统设计时,选用2块Arduino作为系统的控制模块,Arduino 1和Arduino 2,由Arduino1控制发动机转速模块、档位显示模块、车辆速度模块、加速度模块和CVT皮带/轮胎温度模块;由Arduino1控制心率模块、实时对讲模块、轨迹记录模块和赛时显示模块。
车速显示模块采用64×256点阵图形显示字符的液晶显示器,反应速度仅10 μs左右,能够缩短仪表系统的反应时间,提高仪表系统的精度。将显示屏放置在方向盘上,根据赛车手眼睛到方向盘的距离和显示屏尺寸设置车速显示模块字符的大小为34×58,先在Arduino1中写入"Serial.print('Speed:')",即在显示屏中显示字符"Speed:",然后将车速显示排布在字符后面,车速的刷新频率为0.01 s。
将得到的车辆速度进行挡位划分。车速为0~10 km/h为1挡,10~30 km/h为2挡,30~40 km/h为3挡,40~60 km/h为4挡,60~80 km/h为5挡,80 km/h以上为6挡。将相应程序写入Arduino1,Arduino1采集到发动机转速后,通过单位换算并分析转速所在范围,然后将相对应的挡位发送到显示模块,并显示在显示屏上,用以提示赛车手,为合理驾驶提供参考。
此模块中使用到导线、灯条WS2812和4位数码管3416BS,将导线缠绕到火花塞点火线上,通过采集发动机点火脉冲频率,发动机点火脉冲频率与曲轴转速和发动机缸数相关,即n=30τf/I。其中,n为发动机转速,r/min;τ为冲程数;f为点火脉冲频率,Hz;I为发动机缸数(赛车使用单缸发动机,I为1)。
将此模型写入单片机Arduino 1,当采集到的发动机点火脉冲频率输入Arduino 1后,Arduino 1根据写入的公式进行计算,计算结束后,Arduino 1将计算得到的数据分别发送并显示在显示模块和4位数码管3416BS上,与此同时,Arduino 1将根据发动机转速的变化控制灯条WS2812的亮度及个数的变化,赛车手在竞赛过程中更为直观地可以观察到发动机转速的变化。
当发动机的转速发生异常时,如发动机转速超过某设定值后,Arduino 1处理后将向显示屏发送报警信号并显示在显示屏上,用以提醒赛车手。设定值为5 000 r/min。
采用九轴姿态MPU9150传感器,其具有体积小、重量轻、灵敏度高等特点,该传感器集成了PNI三轴磁传感器、三轴加速度传感器、三轴陀螺仪和传感器融合算法,通过I2C接口输出测量数据。考虑到系统的功能要求,只选用了九轴姿态传感器中三轴加速度传感器部分[12]。
作为三轴加速度传感器的5个功能引脚,VCC和GND为供电引脚,INT引脚输出低电平中断请求信号,SCL引脚输出I2C串行时钟,SDA引脚输出I2C串行数据,SCL引脚数据线与SDA端口数据线构成I2C总线的串行总线。信息传输中,将Arduino1设置为主控器,MPU9150设置为发送器。Arduino1向MPU9150发出一个信号后,等待MPU9150发出一个应答信号,Arduino1接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,则判断MPU9150出现故障。将模块放置在中控板上,即间接放置在车体上,随着车体的运动并检测出车体的位置变化,继而测出车体的空间加速度,能够相对全面地反映出车体的运动性质。
Arduino1将通过MPU9150采集到的加速度数据分析并发送至显示模块,先在Arduino1中写入“Serial.print(‘X:’)”、“Serial.print(‘Y:’)”和“Serial.print(‘Z:’)”,即在显示屏中分别显示字符“X:”、“Y:”和“Z:”,在加速度数据输出时,将各数值的显示位置设置在上述字符后,加速度的刷新频率为0.01 s。
为保证赛车运行时皮带工作的可靠性,采用MLX90614红外测温传感器对温度进行实时监测。传感器工作范围为-40~+125 ℃,作为非接触式传感器其测量范围为-70~+380 ℃。正常工作时,其精度可达0.5 ℃[13]。MLX90614红外测温传感器共有4个引脚,其中VCC和GND两个引脚是为其供电,SCL引脚输出时钟信号,SDA引脚通过PWM波的形式输出物体温度。将该传感器固定在CVT壳体内部并保持在距离皮带2 cm的位置,当传感器工作时,其内部的微处理器通过相应的写命令和读数据指令,从MLX90614的RAM中地址为07H的存储单元里读出16位温度数据,由高8位(DataH)和第8位(DataL)组成,读出的数据(DataH:DataL)(:表示将高8位和低8位接合在一起组成16位数据),换算成温度T(单位为℃),Arduino1即可得到皮带温度,T=(DataH:DataL)×0.02-273.15。 Arduino1将通过MLX90614采集到的加速度数据分析并发送至显示模块,先在Arduino1中写入“Serial.print(‘Temp:’)”,即在显示屏中显示字符“Temp:”,在温度数据输出时,将显示位置设置在上述字符后,赛车手即可在显示屏上看到温度数据。其中, 温度数据的刷新频率为0.01 s。
为方便车手操作,采用体积小、灵敏度高、采集数据方式多样且不会限制被测人的活动的脉搏传感器,该传感器为一种用于脉搏心率测量的光电反射式模拟传感器,仅需将其佩戴在待测对象耳垂、手指等皮肤表面。其工作原理是通过光电容积法测量心率,即利用人体组织在血管搏动时造成透光率不同来进行脉搏测量。通过导线连接,将采集到的模拟信号传输给Arduino 2单片机,用于转换为数字信号,再通过Arduino 2数据处理分析等到心率数值。
PULSE SENSOR共有3个引脚,其中VCC和GND为PULSE SENSOR供电,S引脚为信号输出端,将S引脚与Arduino 2 28号引脚相连,将其佩戴在手指或耳垂处,S引脚即可将采集到的数据传输给Arduino 2。
Arduino 2将通过PULSE SENSOR采集到的心率数据分析并发送至显示模块,先在Arduino2中写入“Serial.print(‘HR:’)”,即在显示屏中分别显示字符“HR:”,在心率数据输出时,将数据的显示位置设置在上述字符后,心率刷新频率为0.1 s。
采用CJMCU-9812扩音模块实现实时对讲功能。模块具有封装尺寸小、重量轻和功耗低等特点,可将其与夹子相连接,使用时放置在使用者衣领上,可以减少外界因素干扰又较为轻便。由于模块已经封装,使用相对方便,只有“VCC”,“GND”和信号输出“OUT”三个引脚,其中,“VCC”和“GND”引脚与Arduino 2相对应的引脚相连,由Arduino 2为其持续供电即可正常工作。
为减少仪表系统体积,所需数据将从加速度模块导入。将Arduino 1中采集的MPU9150数据通过串口通信的方法,发送至Arduino 2中,在串口通信过程中,Arduino 1中的TX引脚与Arduino 2中RX引脚相连,Arduino 1中的RX引脚与Arduino 2中TX引脚相连,将数据处理成字符形式后,发送至Arduino 2中, Arduino 2即可采集到轨迹记录模块需要的数据[14,15]。
将Arduino 2通过调用u8glib库函数的方法在显示屏上画出所需轨迹范围边界,此处为64×64的方框,将采集的数据通过Arduino 2处理后发送至显示屏,并将这些点存储并保留在显示屏上,即可汇聚出赛车运行的轨迹图像,方便赛车手观察。
采用DS3234时钟驱动芯片作为比赛显示模块。模块采取SPITM总线的实时时钟(RTC)并且集成了电池备份的256字节SRAM。DS3234共有7个引脚,实际操作中只用到6个引脚,除VCC和GND两个引脚为DS3234供电外,另外MOSI、MISO、SS及CLK四个引脚用来数据传输,其中,MOSI端口为主机输入从机输出,MISO端口为主机输出从机输入,此处,将Arduino 2设置为主机,DS3234设置为从机。
Arduino 2将通过DS3234采集到的心率数据分析并发送至显示模块,先在Arduino 2中写入“Serial.print(‘TIME:’)”,即在显示屏中分别显示字符“TIME:”,在时间数据输出时,将数据的显示位置设置在上述字符后,时间数据的刷新频率为0.1s。
供电模块采用5 V电源持续为Arduino供电,再由Arduino为传感器模块和显示模块持续供电,该电源体积小,质量轻,拆卸方便。为减小系统体积并且增加电路稳定性,模块之间选用PCB连接。运用软件Altium Designer Release进行PCB板的设计[16],在设计PCB时,根据PCB线宽与允许最大电流关系,设计两种不同线宽,主路通过的电流较大,线宽设计为0.30 mm、厚度50 m,允许通过最大电流1.10 A;支路通过的电流较小,线宽设计为0.15 mm、厚度50 m,允许通过最大电流0.50 A,原理图如图2所示。
图2 PCB板原理
系统工作环境恶劣,经常会遇到浸水的情况,因此,将仪表系统中控板和各个传感器用盒子密封,各模块之间通过防水接头连接,使得不同模块与Arduino之间的连接可随意拆卸,达到可根据不同车型及功能需要随意选择不同模块与Arduino进行组合的效果。
将各模块测试数据与仪器测得实际数据进行比较,各模块更新频率满足使用要求,可达到最少3次/s的更新频率。经偏差校准,仪表系统各模块工作偏差范围为±1 %。经实车测试,车速模块、发动机转速模块、加速度模块和CVT皮带温度模块基础模块均可正常工作;心率采集模块、轨迹记录模块和赛时显示模块等扩展模块均可正常工作。测试过程中,仪表系统反应灵敏,当发动机转速模块、温度模块及心率模块所测数值高于设定值时,系统会在仪表显示模块界面显示报警信号,达到报警的目的。如图3所示。
图3 测试效果
通过在不同路况下全地形赛车上的测试,系统显示功能可靠,监测响应及时,满足赛车各工况需要与测试要求。该仪表系统电路设计简单、程序编制简易,既可在类似场合与环境使用,又可为初学者学习相关控制原理提供实验平台。