王拓,曲文敬,吴蓬勃

(石家庄邮电职业技术学院,河北石家庄,050031)

0 引言

摩托车定速巡航系统一般是厂家专门为某款车型定制,基本没有通用型的改装套件,即使没有厂家生产,摩托车爱好者们还是想出不少办法,例如在达到需要的车速时往加油手柄的空隙处塞硬币或者木棍,以达到油门锁止的目的实现定速行驶,但是这样做十分危险,一旦遇到紧急情况往往会造成刹车不及,同时在发动机高转速的情况下紧急刹车有可能会造成发动机缸体拉伤等不可逆转的严重损伤,对驾驶人的生命安全以及摩托车的使用寿命造成很大损失。针对这种现状本文设计这款基于STC89C52单片机的摩托车定速巡航系统,实现了摩托车的自动定速行驶、车速控制功能,具有结构简单、价格低廉、动作可靠、安装简易等优点。

1 系统总体设计

本文的摩托车定速巡航系统硬件设计分为四个部分分别为:单片机控制系统、霍尔传感器测速系统、电子离合器、舵机调速系统、显示屏等部分。软件编写基于硬件设计,包括测速函数,定速函数,舵机控制函数,PID调速函数、屏幕显示函数等部分。

摩托车进入行驶状态后,定速巡航系统开始运行,安装在前轮的霍尔测速器测得车轮转动一圈所需的时间,从而测得此时车速,并将车速实时显示,单片机检测定速巡航按键是否按动,如果按动会将此时测得车速设置为巡航车速,当增速或减速按键按下,系统后会修改巡航车速。此时电子离合器通电将摩托车油门拉杆与舵机之间的连接锁止,使得舵机可以控制油门拉杆的转动角度。霍尔测速器实时测量车速,单片机控制系统计算实时车速与设定车速的差,采用PID算法控制舵机转动角度维持车速稳定。当巡航按键、离合器手柄、刹车手柄、刹车脚踏任意一个状态发生改变时,电子离合器断电,切断舵机与油门拉杆的连接,此时摩托车恢复手动控制。系统总体设计框图如图1所示。

图1 总体设计框图

2 摩托车定速巡航系统硬件设计

2.1 单片机选型

系统的控制核心为单片机,其选型需要综合性能与成本进行考虑,最终选用STC公司生产的89C52单片机,该单片机为MCS-51内核的8位单片机,具有8k字节Flash存储空间,512字节RAM,具有32个可编程I/O口,看门狗定时器,内置3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。最高运作频率35MHz,6T/12T工作模式可选。

综合考虑本系统所需硬件资源为一个定时器用来测量车速, I/O口分别与继电器、舵机、显示屏、定速开关、车辆离合、刹车开关连接,该单片机完全满足要求。运算能力方面本系统只需进行简单的PID运算,即使单片机采用12M晶振,工作在12T模式运算速度也完全满足系统设计要求还有较大裕量。因此无需采用价格昂贵的ARM内核单片机,可以大幅降低成本。

STC89C52单片机工作电压为5V,摩托车电池电压为12V,本系统采用LM7805三端稳压器将12V电压转换为5V电压为系统供电。单片机控制系统原理图如图2所示。

图2 单片机控制系统原理图

2.2 测速传感器与油门开度执行器设计

系统实现定速巡航需要测量实时车速,传统摩托车的测速系统普遍为机械测速,前轮转动时通过测速线带动机械速度表转子旋转从而测得车速,即使车辆采用电子速度计也需对原车仪表通信协议进行解码,获取难度较大。因此本套系统采用外置传感器采集实时车速,测速传感器选择较多,较为常见的是采用测速编码器,但是该传感器需要车轮带动测速头转动,需要对摩托车前轮进行改装增加复杂的传动结构,为了降低成本系统采用非接触的霍尔传感器进行速度测量。

本文选用的霍尔传感器共三个引脚分别为VCC、GND、OUT,VCC、GND引脚与7805三端稳压器输出端与GND连接,初始状态下OUT引脚输出为高电平,当探头附近出现磁性物体时输出低电平,当磁性物体远离探头时又恢复高电平,只需将OUT引脚与单片机P3.2外部中断口连接即可实现测速。本系统中霍尔传感器安装在摩托车前叉处,在摩托车轮毂上安装有一片磁铁,安装示意图如图3所示。车轮每次转动都会产生一个低电平触发中断,记录两次外部中断的间隔时间即可获取车轮转速,从而获取实时车速。

图3 安装示意图

油门开度执行器的硬件设计为定速循环系统能否正常工作的核心,舵机为了获取大扭矩,内部采用多组减速齿轮,不通电状态转动舵机摇臂需要较大的力,如果将油门拉杆与舵机摇臂进行刚性连接,在非定速巡航状态舵机会严重阻碍油门拉杆转动,造成油门手柄无法控制油门拉杆转动,本系统采用电磁离合器解决这一问题。

电磁离合器靠线圈的通断电来控制离合器的接合与分离,线圈通电时产生磁力,在电磁力的作用下,使衔铁的弹簧片产生变形,动盘与”衔铁”吸合在一起,离合器处于接合状态;线圈断电时,磁力消失,”衔铁”在弹簧片弹力的作用下弹回,离合器处于分离状态。因此需要在定速巡航时电磁离合器将油门拉杆与舵机锁止使得舵机可以控制油门拉杆旋转,当退出定速巡航模式时电磁离合分离,油门拉杆断开与舵机的连接,油门拉杆可以自由旋转,使得舵机不会阻碍油门手柄对油门拉杆的控制,其连接示意图如图4所示。

图4 连接示意图

舵机采用10KG大扭力舵机共有三根引线,红色为电源棕色为GND,黄色为信号线。需要控制舵机时只需通过单片机I/O口向舵机信号线输出PWM波即可控制舵机在某个角度保持扭矩。PWM波由单片机定时器产生,当控制系统发出指令,让舵机移动到某一位置,并让他保持这个角度,这时外力的影响不会让其旋转角度产生变化,但是这个是有上限的,上限就是他的最大扭力。

本系统选用的电磁离合器工作电压为直流24V,功率为3W,有两根导线分别为正极与负极,该元件工作电压高、功率大因此无法通过单片机引脚对其直接控制因此采用继电器控制其通断电,从而控制它的接合与分离。工作电压为24V但是摩托车电池电压为12V,因此需要升压电路,考虑到转换效率与成本本系统采用SX1308芯片作为升压方案,SX1308是一款固定频率,SOT23-6封装的电流模式升压器,具有1.2MHz的工作频率,并且内置软启动,转换效率最高可达97%,内部电流限制为4A完全满足驱动电磁离合器的参数要求。

定速巡航模式的进入与退出由系统的巡航按键与车辆的离合器手柄,刹车手柄,以及刹车踏板控制。巡航按键一端与单片机IO口连接另一端与GND连接较为简单,按键按下会给单片机低电平信号。但是想实现拉动车辆的离合器手柄、刹车手柄以及刹车踏板给单片机信号退出巡航模式需要了解摩托车本身电路。拉动离合器手柄、刹车手柄以及刹车踏板时摩托车刹车灯均会亮起,通过分析摩托车电路可知离合器手柄、刹车手柄以及刹车踏板内部均有开关,一端与刹车灯负极连接,另一端与电池负极连接,当拉动离合器手柄、刹车手柄以及刹车踏板时开关接通,点亮刹车灯,因此只需要将刹车灯负极与单片机外部中断I/O口进行连接即可,为了保护单片机不受电流冲击,此处增加光耦进行隔离。测速传感器与油门开度执行器的总体电路原理图如图5所示。各个功能引脚连接如表1所示。

图5 总体电路原理图

表1 功能引脚连接表

3 摩托车定速巡航系统软件设计

定速巡航系统采用C语言进行程序编写,开发环境为Keil4。系统工作的流程为:设备上电后对系统进行初始化,初始化工作包括三个部分分别定时器/计数器初始化、显示屏初始化与舵机复位,随后开始进行实时车速测量并将车速进行显示,之后判断定速巡航按键是否按下,如果按下,设定巡航车速,电磁离合器接合,舵机根据PID算法输出结果控制油门拉杆开度控制车速,此时检测加减速按键是否按动,如果按动更改巡航速度设定,如果巡航按键离合器手柄、刹车手柄以及刹车踏板任意一个的状态发生变化则退出巡航模式,程序流程图如图6所示。

图6 程序流程图

速度测量采用定时器中断方式,设置定时器每1ms进入一次定时器中断,中断服务函数中变量timmer_number加1。测速霍尔传感器OUT引脚与单片机外部中断输入引脚连接,车轮转动一圈进入一次外部中断,进入外部中断后获取timmer_number的值即可得知车轮转动一圈所需的时间为timmer_number毫秒,根据车轮周长即可测得车辆实时速度,获取实时速度后将timmer_number值归零。以本次使用的摩托车为例,型号为“雅马哈JYM250”前轮轮胎规格为90/90-18,周长为1944.3mm,例如进入200次定时器中断后进入一次外部中断,即为车轮转动一圈所需时间为200ms得实时车速为34.99km/h。此次使用两种中断,为了保证测速精度,程序中设置外部中断优先级高于定时器中断优先级。

加入PID算法的作用是为了增强摩托定速的精度与调节速度,PID算法共有三个参数Kp、Ki、Kd它们的作用分别是加快调节速度、减小误差、调节系统动态性能,考虑到本系统设计目标,以快速精确为主因此只采用PI算法,降低了参数整定难度。为了简化代码,降低运算量,提高控制精度,笔者采用增量形式,其公式可由式1推导得出:

由式1可得控制的K-1个采样时刻输出为:

将式1与式2相减即可得到式3既增量PI公式:

式3中参数A、B为式4:

由公式3、4可知只需确定T值,既单片机的采样周期,且获取A、B两次的测量的偏差值即可获取输出。

在定速巡航过程中为了保证安全与控制精确性,系统中设置只有车速高于35km/h时才会启动定速巡航,经过计算当车速为35km/h时测速所需时间为200ms,留出适当裕量,在此设置采样周期为250ms。位置式PID算法的输出结果为增量,因此在进行控制前需要将增量转化为控制量使得舵机控制油门拉杆开度实现速度稳定。

舵机的驱动方式为PWM控制,PWM为脉冲宽度调制技术,通过控制脉冲的宽度来模拟所需波形,可通过I/O口进行输出,只需控制I/O口的高低电平持续时间即可,有多种方式可以实现,最简单方法是直接控制I/O输出高电平,使用软件延时,再输出低电平,使用软件延时。但是此种方法存在一个严重问题,软件延时原理是通过自加自减运算消耗CPU运算时间。软件延时期间CPU除了中断外无法处理其他信息,同时在CPU进行其他运算时无法产生PWM波,因此笔者采用定时器中断产生相应高低电平,通过中断实现相应的多任务并行运行。相对于测速时用到的两个中断,PWM的高低电平持续时间以毫秒为单位,PWM中断等待测速两个中断完成并不会对舵机运行造成影响,因此笔者将产生PWM的定时器中断优先级设置为最低。

退出巡航模式有两种方式,一为按动巡航按键,既单片机进行端口输入检测此代码较为简单,在此不再赘述。二为拉动离合器手柄、刹车手柄、刹车踏板中的任意一个,此操作一般为紧急情况,为了保证安全性需要此操作不受正在执行代码的干扰因此采用外部中断方式,拉动离合器手柄、刹车手柄、刹车踏板刹车灯亮起单片机外部中断引脚输入低电平,触发外部中断。笔者认为将单片机进行软件复位是最有效的最安全的退出方式。软件复位方式采用的是把程序转到地址0去执行,本系统没有Boot load程序开始地址为0x0000。在keil C51下面可以这样实现:

只需要在外部中断中调用 soft_reset();函数即可实现软件复位,提高系统响应性能,提高了安全性。

4 结语

本文描述了一款基于STC89C52单片机的摩托车定速巡航系统的设计实现,整个系统分为单片机控制系统、油门开度执行器两个部分,通过霍尔测速传感器获取车辆实时速度,通过电磁离合器以及大扭矩舵机控制油门拉杆开度,从而实现摩托车在定速状态下的车速稳定。实践证明该系统性能优良,安全性出众,结构简单,对车辆本身结构几乎没有改动适合推广应用。