当前位置:首页  <  应用教程  <  【创客学堂】DIY个性多功能摩托车仪表...
【创客学堂】DIY个性多功能摩托车仪表
编辑:Jack-Bei 2013-12-31 浏览次数:886

  骑过摩托的朋友都有一个感觉,就是基本的摩托车仪表除了转速表和码表(速度表),剩下的没有啥花样了,作为一个电子爱好者,何不动手实践,设计定制一款属于自己的DIY个性多功能摩托车仪表。

硬件篇

      从我的标题上大家看见了多功能这几个字,那么我这多功能包含几部分呢?第一是要兼顾原有的的仪表功能,第二是要讲究一些实用的人机交互信息体现出来,其次由于是自己DIY所以对于制作的话,需要精简。下面就看看我的摩托车仪表系统框图吧,(图1),在这里我选用了一款飞思卡尔公司生产的HCS12X系列的单片机MC9S12XS128MMA,是HCS12家族中的一员,由16位的中央处理单元(HCS12CPU)、128KBFlash、8KB RAM、2KB EEPROM组成,外设功能以及IO资源极为丰富,包括了常用ADC、PWM、SCI、SPI、CAN,总线频率通过锁相环倍频能超到80M左右,对于本设计应用来说完全满足,本人选用此芯片的主要原因在同类微处理器中性价比较高(低功耗和强抗噪,汽车专业级芯片),同时在设计制作完仪表后可以扩展控制对处理速度要求较高(此要求非传统51系列,AVR系列所能及)的摩托车的点火系,以及燃油进气系统,排气系统等,以达到提高燃油经济性的目的。下面就说说我的仪表的的传感器信号输入部分,这里的重头戏还是发动机转速和码表(速度表)。

摩托车仪表系统框图

图1摩托车仪表系统框图

      我从发动机曲轴飞轮处提取电磁感应信号(现在一般的单缸四冲程发动机曲轴位置信号都是以此种信号模式输出)(如图2),根据信号V-PP变化以及频率响应特性,开始我选择利用稳压二极管以及三极管等自己搭建信号调理电路,但发现由于发动机在不同转速下,产生的磁感电动势大小有很大差别,用这种方法搭建电路,不能对信号做出适应性的调节,波形整形稳定性以及质量较差,通过搜寻资料后,选择一款集成芯片LM1815作为信号调理电路的主要组成部分。LM1815是省略门电路的自适应传感放大器。LM1815提供一次性脉冲输出,其前沿与反向过零基准输入信号恰好一致。正常工作时,计时基准信号在外部被处理(延迟)并且返回 LM1815,然后逻辑输入可以用作传送到输出驱动极的定时基准或处理信号。LM1815的原理结构框图如图(3),根据其模式的真值表(图4),我选择了第一种模式,

曲轴电磁感应信号

图2曲轴电磁感应信号                                                                                    图3  LM1815的原理结构框图

模式的真值表

图3  模式的真值表

         最后的电路原理图(如图5),采取脉冲输出,且脉冲宽度为一个RC的宽度,经过试验选定R=150K?,C=0.001uf,利用单片机采样时,信号稳定,准确(图6)。对于摩托车的转速测量设计本着简单的原则,抛弃了常见的光电式传感器和霍尔传感器,在这里我选用了一个电感式的接近开关(图7)(接近开关是一种毋需与运动部件进行机械接触而可以操作的位置开关,当物体接近开关的感应面到动作距离时,不需要机械接触及施加任何压力即可使开关动作,从而驱动交流或直流电器或给计算机装置提供控制指令),检测摩托车轮辐板,厂家:OMRON,型号:E2E-X5E1 电 压:DC12-24V 检测距离:5mm 输 出:NPN ,在电路设计上,由蓄电池直接为其供电(我曾尝试过用5V给接近开关进行供电,但实际发现其检测距离明显变小,信号的稳定性下降,对于其安装以及调试带来不必要的困难,所以还是选择按其规定来为其供电,在信号调理电路上来做些补偿),在输出端对地加10 K?的负载,同时将其输出端的电压节点过钳位二极管的保护电路,使其转化成单片机能兼容的TTL电平,(原理图如8)。下面就档位信号的处理做一番描述吧,首先看看发动机档位信号的来源以及原理,(图9),其可以视作是一个多路选择开关,当发动机选择某个档位工作时,就将信号输出端和地短接,而其余管脚信号悬空,为防止误读,在这里添加上拉电阻,保证信号的稳定可靠。对于电压信号而言电池电压进来后分压降压,通过一个二极管钳位电路实现保护我们的娇贵的单片机。电路原理图如图以及pcb图 (10),在其中为了调试的方便,添加了USB转UART模块。

 电路原理图\条理之后的信号

图5 电路原理图                                                                                  图6条理之后的信号

接近开关

图7 接近开关                                                                                                图8电池电压测试电路 

档位示意图

图9 档位示意图

软件篇

      首先请大家看一下整个控制的流程图(11),首先对单片的初始化部分,我在这里选择了飞思卡尔公司生产的HCS12X系列的单片机,开发的IDE是CodeWarrior Development Studio for S12(X) V5.1,对于没有学习过该系列单片机的读者,也不必纠结于如何对单片机进行初始化,在这个集成的IDE中自带了一个Processor Expert(处理器专家),图(12)在这个集成的开发环境中,你只要对你所需要的相关功能以及模块勾勾选选,就能一键生成单片机底层的驱动,如有困难的话,点击其的帮助功能或者去我的博客下载使用教程。在这里我还是选用自己编写底层的驱动,代码详见文档我的博客。

系统原理框图

图11 系统原理框图

 图12Processor Expert(处理器专家)

图12Processor Expert(处理器专家)

初始化后,就得开始进行流程图的第二步,编写12864液晶的驱动代码。在这里我选用了一块带中文字库的12864液晶屏,我以前也在无线电的杂志上看见过有笔者写过关于12864的使用的文章,在这里我就不再赘述,直接附上源码,(文档1)。在程序的主体上我采取在函数的实时中断部分去采样相关检测变量,采样周期为0.5S(对于检测摩托车的状态而言已经足够了),然后在函数的主循环部分,完成单片机端口的采集变量值,与实际变量之间的参数换算,相应参数的显示。下面就如何换算相关变量值的方法做详细说明,1)、发动机转速,采取测周法测量,在程序设计上捕捉脉冲上升沿之间的差值Δ,在ECT模块初始化时,设计脉冲周期4us,则实际的脉冲周期可计算得T=Δ*4us,换算转速可得转速n= (60000*1000/Δ)/4 rad/min;由于输入捕捉的定时计数器是16bit,即差值Δ的换算范围为0~65535,换算成转速的话,n的范围在228~15000000 rad/min之间,满足设计要求,实际查阅资料可知,摩托车发动机正常工作在600~15000 rad/min;2)、车速测量,采取测频法测量,记录0.5ms内车轮辐板经过接近开关的次数ζ,以及车轮一周的辐板数З,轮子的周长C m,则换算成速度的话V=(ζ/З)*C*2*3.6Km/h;在计算里程时,经过实验发现当计数较大时,数值计算很容易发生溢出现象,故将数值进行估计处理,因为我最后显示的数的单位是KM,所以估算记录一公里将会产生的脉冲个数,记录实际满足的次数,即为里程数;3)、电压换算就比那些简单多了,一个纯粹的比例而已,根据分压参数实际决定,在这里不再细说;4)、档位换算的话就比较容易,由于逻辑关系不是很复杂,只要对于其附加相应的档位值(在编写程序前,请仔细测量各个档位线所实际对应的档位值)。显示如图


      在程序流程图中,大家可以看见,我还特意写了档位特写显示这一个流程,主要目的是我们骑摩托时,为了确认是否换挡成功,以及显示当前新欢档位的需求,在程序编写上,也不是特别复杂,只需每次刷新数据时检测档位是否发生变化,一旦检测到档位变化,立即响应显示特写画面的程序(图14)。同时为了能让其控制大灯,以及尾灯,在我增加了两个按键,和继电器,由此控制大灯和尾灯的开关,或者在扩展作为燃油控制阀的按键,和继电器,由此研究燃油经济性的需求。
结语
      至此,我的仪表系统已经基本完成,但也存在一些不足之处,比如:里程数数据不能掉电保存,用户界面还不够美观,我将所有的源码以及电路原理图,公开在我博客上,望有兴趣的爱好者可以尝试,给予其改进之。

本文已经刊登在《无线电》杂志2013年3月刊