技术中心
 
 

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

   日期:2011-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机向芯片发送新的数据即可。为了更方便起见,还可以采用无线数据收发方式。 a.JPG b.JPG

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以上的长途价,继而再根据时间判断是夜班还是白班,加上不同的计价参数。 c.JPG
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所示。其中总误时单元存储的是总的误时时间,计时单元专门存储霍尔脉冲间隔。 d.JPG
当行驶速度为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所示。 f.JPG
误时价子程序里先将总误时的10 s单元加1,然后判断有没有超过起价等待时间,如果超过的话,再根据时间判断,是要加白天10 s误时价,还是加夜间10 s误时价。
3.2 误时价误差
用单片机内部定时器测两个霍尔脉冲间的时间间隔,系统误差是1μs。假设最大误时计时60 min,车速按最快的200 km/h估计,两脉冲间隔时间为33.9 ms,即每测33.9 ms有1μs的误差。误时计时最大系统误差等于(60×60×1 000/33.9)×1μs=0.1 s。因为误时价每10 s加1次,即计时误差小于1个计价单位。

4 统计功能的设计
4.1 总价计算
总的费用由里程价、误时价和附加费三部分组成。在出租车停止载客后,计价器会计算总体费用,并从AT24C256中读取当天营业额,加上当次的费用后存回到AT24C256中。
4.2 误差分析
计程价每100 m加1次,误时价每10 s加一次,单价用2B(4位)压缩型BCD码表示,最高位“元”,精度为10-3元。计价误差由计程误差、误时误差、每次计价误差三分部分构成。如果计程误差小于1个计价单位,误时误差小于1个计价单位,可以忽略不计。每次计价误差包括计程单价误差和误时单价误差。其中若无计程单价误差,则误时单价按每分钟计无,每10 s计,除6尽则无,若除不尽最大计时60 min,每10s计一次,误差为10-3,则因误时单价误差累积的最大计价总误差为:(60×60/10)×10-3=0.36元。
4.3 统计功能的实现
AT24C256存储芯片有32 KB的存储容量(0000~7FFF)。1日的统计信息按最大99 999.999元考虑,最多需要4 B的存储空间,分别存储万位、千位、百位十位、个位角位以及分厘。则1年的统计信息需要365×4=1 460 B。1片256可供存储几年的统计信息,如果需要还可以扩展多片AT24C256。根据表1已知,统计信息从0200H开始存放。
在载客变空车以后,要将当次营业额加到当天的营业额中,即需要读取AT24C256中相应地址中的数据,加上当次营业额后,再存回AT24 C256中。也就是必须给每天分配一个绝对的地址,需要设计一个日期转换256地址的子程序。因为出租车都需要年检,故按1年的需求设计。
理论上1个月最多31天,用公式:
(月-1)×31×4+(日-1)×4+ADDRESS_AT3 (1)
即可,但是单片机中计算乘法是比较麻烦的,如果按32天计算及用公式:
(月-1)×32×4+(日-1)×4+ADDRESS_AT3 (2)
虽然浪费了一些存储空间,但是乘以128和乘4的运算的确可以通过简单的移位指令实现,大大减小了单片机的运算量。日期转256地址的计算如子程序DATE_TO_ATA所示。
j.JPG
k.JPG
这样1年的信息需要32×4×12=1 536 B,转换为16进制数为600H。则第一年占用的存储空间为0200~07FFH,如果要存储第二年的信息,则设计一个变量ADDRESS_AT4,统计信息从0800H开始存放,其余以此类推。
4.4 统计功能的意义
和参数传递一样的道理,设计了计价器可以与PC机通信的话,不管是按串口通信方式还是无线通信方式,都可以供出租车管理部门采集到详实、准确的营运数据,这些数据经过PC机处理后能够详细地做出日报表、月报表、运作分析表等,比较直观的反映出租车的营运情况,便于管理部门全面掌握第一手资料,及时针对所出现的情况做出准确的判断和决策,从而实现微机化、科学化管理。

5 结语
本文详细的阐述了在出租车计价器中计程、计时的原理,并做了误差分析。该设计巧妙,合理地利用存储芯片AT24C256,不但使计价器具有附加费功能,容易改变计价参数,还能存储营运信息,为管理部门制定相关政策,提供一手依据。根据本文方法设计的计价器误差小,软件设计灵活性高。
 
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢