基于FPGA的出租车计价系统设计
扫描二维码
随时随地手机看文章
摘要:设计出租车计价系统,运用自顶向下的设计思想,以芯片CycloneⅡEP2C8T144C8为设计核心,采用QuartusⅡ仿真软件,对设计电路的各模块及整个系统进行了EDA仿真验证。结果表明,该计价系统具有计时、计费、计程和动态显示的功能,符合设计要求,修改VHDL语言源程序,可完成更多的出租车计价系统的扩展功能。
关键词:出租车计价;自顶向下;VHDL;FPGA
0 引言
随着电子技术的发展,出租车计价器的设计也从传统的全部由机械元器件组成的机械式设计到半电子式(即用电子线路代替部分机械器件的出租车计价器),再从集成电路式到目前基于FGPA芯片为核心的系统的设计共经历了四个阶段,利用FPGA芯片,用较少的外部硬件和适当的软件相互配合,可以通过软件编程来完成更多的附加功能,设计比较灵活,并且还具有功耗小,体积小、低成本、安全可靠、使用方便等优点。因此,使用FPGA来设计出租车计价系统已受到人们的关注,也能更好地发挥其优点。
本文以FPGA为设计载体,通过VHDL语言编程,采用QuartusⅡ仿真软件,设计了一种能动态显示出租车计时、计费、计程的系统,具有一定的实际应用价值。
1 出租车计价系统的设计要求
1.1 实现计费功能
车起步开始计费,首先显示起步价(本次设计为8.0元),行程在3 km以内,按起步价收费;当行驶超过3 km,1.6元/km,车暂时停车(如遇红绿灯或中途暂时停车),当等待时间超过3 min,按1元/min收费。
1.2 实现显示功能
能动态显示出租车行驶的里程,范围为00~99 km(考虑到出租车就在市区或近郊附近活动),同时显示等待时间,范围为00~59 min,显示总计价值,范围为00~999.9元,计价分辨率为0.1元。
2 出租车计价系统的设计体系
图1为整个系统的顶层框图,根据层次化设计理论,将出租车自动计价系统自顶向下可分为分频模块、控制模块、计量模块、译码和动态扫描显示模块。
(1)分频模块。通过分频产生不同频率的脉冲信号用来实现系统的计费,本次设计中通过对240 Hz的输入脉冲进行15次,24次和240次分频,得到16 Hz,10 Hz和1 Hz的三种频率,分别用于1.6元,1元和0.1元的计费。
(2)计量控制模块。计量控制模块是出租车自动计费器系统的主体部分,该模块主要完成出租车的计时、计价、计程功能。计时器的量程为59 min,满量程自动归零。计程器的量程为99 km,满量程自动归零。行程在3 km内,且等待累计时间在3 min内,起步价费为8元;3 km外以1.6元/km计费,等待累计时间超过3 min按1元/min计费。
(3)译码显示模块。该模块经过8选1数据选择器将计费数据(4位BCD码)、计时数据(2位BCD码)、计程数据(2位BCD码)动态显示输出。其中计费数据最大显示为999.9元;计时数据最大显示为59 min;计程数据最大显示为99 km。[!--empirenews.page--]
3 出租车计价系统的实现
系统的顶层原理图如图2所示,出租车计价器系统由主体FPGA电路taxi模块和动态扫描显示部分(8选1选择器mux8_1模块、模8计数器mo8模块、七段数码显示译码器di_LED模块、生成动态扫描显示片选信号的3-8译码器模块74138)组成。
3.1 系统各功能模块
3.1.1 taxi模块
Taxi模块是系统中十分重要的模块,模块设计中,系统的输入信号为clk_240(240 Hz)、计价开始信号start、等待信号stop、里程脉冲信号fin。系统的输出信号有总费用数cha3(百),cha2(拾),cha1(元),cha0(角),行驶距离信号为km1,km0,等待时间信号为m1,m0。
Taxi模块的控制过程为:start作为计费开始开关,当start为高电平时,系统开始跟据输入情况计数,有乘客上车并开始行驶时,fin脉冲到来,进行行驶里程计数,这时的stop应为0,中途若停车等待,就需把stop置为1,同时fin为0,进行等待计费,当乘客下车时,直接将start置为0,系统停止工作。taxi模块又可分为分频(fenpin)、计量(jiliang)、kongzhi(控制)和计费(jifei)四个子模块,taxi模块的内部结构如图3所示。
[!--empirenews.page--]
Fenpin模块是将输入端clk_240(240 Hz)的时钟信号进行分频,分别得到f_16(16 Hz),f_10(10 Hz),f_1(1 Hz)的信号,用于计量时的1.6元,1元,0.1元。
Jiliang模块用来计时和计程,fin为汽车的里程脉冲信号,当fin为高电平时,以记录的f_1的脉冲个数作为行驶的公里里程数,start是汽车计量开始信号,stop为等待信号。f_1是计量驱动信号,当f_1的脉冲到来,如果fin=1,记录f_1的个数(即行驶公里数),当行驶超过3 km,ent0输出为1。当stop为高电平时,记录f_1的脉冲个数,60个脉冲为1 min,当超过3 min时,ent1输出为1。仿真波形如图4所示。
Kongzhi模块主要根据jiliang模块的en1和en0的不同输出信号选择不同的输出频率供jifei模块计费,en1=1时f=10 Hz,en0=1时f=16 Hz。
Jifei模块实际就是一个四位十进制加法器,仿真图形如图5所示,在taxi模块中,它根据不同的输入脉冲频率对脉冲个数进行计数。jil iang模块每计一次数,jifei模块就实现16次或10次脉冲计数,即实现超时时的1元/min,超里程时的1.6元/km的收费。
对整个taxi模块进行仿真,结果如图6所示,由图中可知,当stop为高电平时,汽车行驶了km1km0=35 km,计费cha3cha2cha1cha0为05 92,即59.2元,与8+(35-3)x 1.6=59.2元一致,图中当等待超过3 min时,价格按1元/min计费,仿真结果正确。
3.1.2 动态扫描显示部分
此模块包含mo8计数器、mux8_1(8选1选择器)、di_led七段数码显示译码器3个子模块。
mo8计数器:输入信号clk为系统输入的240 Hz基准时钟,输出a为模8的二进制码。
mux8_1模块是根据输入信号c[2..0]的地址码000至111分别对应了cha3,cha2,ch1,ch0,km1,km0,min1,min0八个四位BCD码,dp为小数点指示信号,在计费的第二位数字上带有小数点,仿真波形如图7所示。
[!--empirenews.page--]
di_led数码显示译码模块,将输入信号d[3..0]转换为q[6..0],即g,f,e,d,c,b,a七段译码输出(高电平有效),3F对应为0,仿真波形图如图8所示。
由于采用动态扫描,主要是根据人视觉暂留现象,一般影像在人眼中保留0.1~0.5 s左右,74LS138的输出码依次选通8个数码管。只要频率够高,依次点亮8个数码管时,给人视觉是同时点亮。
3.2 总体电路的仿真结果
通过对整个设计系统的仿真分析,结果如图9所示,输出依次是3F 7D 27.5B 66 3F 3F 3F,其中总价格为3F7D27.5B(即67.2元),里程数为663F(即40km),等待时间为3F3F(即0 min),8+(40-3)×1.6=67.2元,仿真结果正确。
4 结语
通过仿真验证表明,本文所设计的出租车计价系统能动态显示行驶的里程、等待时间和计费数目等,符合预定的设计功能要求。但设计中对出租车里程计数精度不高,若要提高精度,需根据设计要求设置取样里程的脉冲,在计量(jiliang)模块的输入频率中要做相应的修改,当出租车计费标准发生变化时,也可以通过修改VHDL源程序达到要求,另外,还可以扩展语音播报或票据打印等附加功能,此系统的设计体现了FPGA设计的自顶向下的设计思想,基于FPGA的设计灵活性高、功耗低、集成度高,具有广阔的市场前景。