微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 新型出租车计价器软件功能分析与实现

新型出租车计价器软件功能分析与实现

时间:06-16 来源:互联网 点击:

摘要:介绍一款基于单片机的新型出租车计价器设计方法。详细介绍计价器计程、计时、统计功能的实现原理,并依次做了误差分析,同时还给出了部分软件设计流程。计价器在车轮转一圈最少需要的33.9 ms内,可以完成所有计程、计时的计算a软件设计灵活,误差小。统计功能的设计为出租车管理部门制定合理决策提供了最详实的依据。
关键词:AT24C256;软件设计;出租车计价器,计程原理

0 引言
随着物价升高,燃油费增长等原因,出租车行业难免有调整单价,增收燃油附加费的需求。现有的出租车计价器调整单价比较麻烦。需要更换计价器中的芯片。另外,现有的计价器没有附加费功能,若需要加收燃油附加费时,乘客在不了解的情况下,难免会和出租车司机产生不必要的纠纷;而当附加费取消耐,还要防止出租车司机仍旧向乘客收取这部分费用。在这种情况下,有必要去研制一款计价参数较易调整,且具有附加费功能的出租车计价器。

1 计价参数设计
在出租车计价器里,要让起步价、夜班价、附加费等计价参数容易调整,就要求在软件设计时不能固定参数,需要把参数先存储起来,计价器启动后从存储地址去读取计价参数。因为单片机数据存储器容量有限,需要另外扩展存储芯片,为了节省单片机I/O口,采用扩展I2C方式的存储芯片AT24C256。
AT24C256具有32 KB容量,地址为0000H~7FFFH。对于AT24C256,除了存计价参数外,还可以存储出租车的基本信息和统计信息,其地址内容分配如表1所示。其中计价参数从0100H开始存放,初始设置如表2所示。通过表2可以看出,已经将附加费作为一个计价参数存储起来,当计算价钱时会自动加上附加费值,也会在打印票据时体现出来。当计价参数需要改变时,只要软硬件设置好,计价器能与PC机串口通信的话,通过PC机向芯片发送新的数据即可。为了更方便起见,还可以采用无线数据收发方式。



2 计程
2.1 计程原理与软件设计
将安装在车辆变速箱输出端齿轮的霍尔传感器接到单片机外部中断接口上,车轮每转动一圈,霍尔传感器将产生一个下降沿脉冲(霍尔脉冲),触发外部中断。设车轮直径0.6 m,最高时速200 km/h,则两次外部中断之间最短时间间隔为:0.6×3.14/(200×1 000/3 600)×1 000=33.9 ms。
对单片机而言,所有计价、计时、显示、统计等功能,都可在33.9 ms时间内完成,所以对计程部分采用每次外部中断到来时(F_int0= 1),调用外部中断处理程序来处理计程价。具体流程如图1所示。
设计一个占5字节的计程单元S,车轮周长占3 B,每1 B存储内容如表3所示。对计程价每100 m处理1次,所以在计程计子程序中首先是让计程单元加上车轮周长,判断是否已行驶100 m。从表3可以看出,做加法计算时如果第3字节有向第4字节进位,说明已经行驶了100 m,这时再判断计程单元的大小,判断是起步价,还是3~8 km的短途价或是8 km以上的长途价,继而再根据时间判断是夜班还是白班,加上不同的计价参数。

2.2 计程误差分析
因为在计程时用的是每来一个霍尔脉冲加一个车轮周长的方法,车轮周长误差的累积将引起总计程的系统误差。车轮周长用3 B压缩BCD码表示,1 B整数(单位:m),2 B小数,每次系统误差为10-4m,相对误差小于0.01%。
假设最大计程1000km,车轮周长1.5m,则计程最大系统误差为:(1 000×1 000/1.5)×10-4=66.7m,偶然误差为2个周长,即3.0m。
对计程价每100 m加1次,即计程误差小于1个计价单位。

3 误时
3.1 误时原理与软件设计
误时价的计算是以Vwait=5 km/h为切换点,当速度低于5 km/h时,需要计算误时价。已知:速度=周长/时间间隔。为了判断出租车速度,开启单片机定时器来计算两次霍尔脉冲的时间间隔。为了计算方便,对于51单片机开设50 ms的定时器中断。特别设计一个占5 B的总误时单元,3 B的计时单元。这里第3字节存储的是50 ms中断的次数,具体存储内容如表4所示。其中总误时单元存储的是总的误时时间,计时单元专门存储霍尔脉冲间隔。

当行驶速度为5 km/h时,这时霍尔脉冲的时间间隔为:0.6×3.14/(5×1 000/3 600)×1 000=1 356.48≈27×50 ms。
根据上面计算,在两次霍尔脉冲之间,50 ms中断的次数大于27时,要计算误时价。而对误时价是10s处理1次,即调用1次误时价子程序,这时分两种情况:
第一种情况是在外部中断处理程序中。外部中断到来(F_int0=1)后,计时单元中50 ms次数大于27,这时总误时单元要加上计时单元,总误时单元的50 ms次数如果大于或等于200,则调用误时价子程序。还要注意的是,因为中断到来后,定时器会重新赋初值,所以需要把上一次定时器中不足50 ms的计数值转换为微秒,存储到计时单元的第1和第2个字节中。流程图如图1所示。
第二种情况是在50 ms中断处理程序中。计时单元50 ms中断次数已达到200次即两次霍尔脉冲的间隔超过了10 s,这时计时单元清零,也要调用误时价子程序。流程图如图2所示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top