您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 出租车自动计费器EDA设计
6.7出租车自动计费器EDA设计6.7.1设计要求设计一个出租车自动计费器,计费包括起步价、行车里程计费、等待时间计费三部分,用三位数码管显示金额,最大值为999.9元,最小计价单元为0.1元,行程3公里内,且等待累计时间3分钟内,起步费为8元,超过3公里,以每公里1.6元计费,等待时间单价为每分钟1元。用两位数码管显示总里程。最大为99公里,用两位数码管显示等待时间,最大值为59min。6.7.2原理描述根据层次化设计理论,该设计问题自顶向下可分为分频模块,控制模块计量模块、译码和动态扫描显示模块,其系统框图如图6-63所示,各模块功能如下:图6-63出租车自动计费器系统框图1分频模块分频模块对频率为240Hz的输入脉冲进行分频,得到的频率为16Hz,10Hz和1Hz的三种频率。该模块产生频率信号用于计费,每个1HZ脉冲为0.1元计费控制,10HZ信号为1元的计费控制,16Hz信号为1.6元计费控制。2计量控制模块计量控制模块是出租车自动计费器系统的主体部分,该模块主要完成等待计时功能、计价功能、计程功能,同时产生3分种的等待计时使能控制信号en1,行程3公里外的使能控制信号en0。其中计价功能主要完成的任务是:行程3公里内,且等待累计时间3分钟内,起步费为8元;3公里外以每公里1.6元计费,等待累计时间3分钟外以每分钟1元计费;计时功能主要完成的任务是:计算乘客的等待累计时间,计时器的量程为59分,满量程自动归零;计程功能主要完成的任务是:计算乘客所行驶的公里数。计程器的量程为99公里,满量程自动归零。3译码显示模块该模块经过8选1选择器将计费数据(4位BCD码)、计时数据(2位BCD码)、计程数据(2位BCD码)动态选择输出。其中计费数据jifei4~jifei1~送入显示译码模块进行译码,最后送至百元、十元、元、角为单位对应的数码管上显示,最大显示为999.9元;计时数据送入显示译码模块进行译码,最后送至分为单位对应的数码管上显示,最大显示为59秒;计程数据送入显示译码模块进行译码,最后送至以公里为单位的数码管上显示,最大显示为99公里。6.7.3层次化设计方案1出租车自动计费器系统的主体FPGA电路txai的VHDL设计根据6.7.2节的功能描述,该电路的核心部分就是计数分频电路,通过VHDL语言的顺序语句IF-THEN-ELSE根据一个或一组条件来选择某一特定的执行通道,生成计费数据、计时数据和里程数据。其VHDL源程序如下:LIBRARYIEEE;USEIEEE.std_logic_1164.all;USEIEEE.std_logic_unsigned.all;USEIEEE.std_logic_arith.all;ENTITYtaxiisport(clk_240:instd_logic;--频率为240Hz的时钟start:instd_logic;--计价使能信号stop:instd_logic;--等待信号fin:instd_logic;--公里脉冲信号cha3,cha2,cha1,cha0:outstd_logic_vector(3downto0);--费用数据km1,km0:outstd_logic_vector(3downto0);--公里数据min1,min0:outstd_logic_vector(3downto0));--等待时间endtaxi;architecturebehavoftaxiissignalf_10,f_16,f_1:std_logic;--频率为10Hz,16Hz,1Hz的信号signalq_10:integerrange0to23;--24分频器signalq_16:integerrange0to14;--15分频器signalq_1:integerrange0to239;--240分频器signalw:integerrange0to59;--秒计数器signalc3,c2,c1,c0:std_logic_vector(3downto0);--十进费用计数器signalk1,k0:std_logic_vector(3downto0);--公里计数器signalm1:std_logic_vector(2downto0);--分的十位计数器signalm0:std_logic_vector(3downto0);--分的个位计数器signalen1,en0,f:std_logic;--使能信号beginfeipin:process(clk_240,start)beginifclk_240'eventandclk_240='1'thenifstart='0'thenq_10=0;q_16=0;f_10='0';f_16='0';f_1='0';f='0';elseifq_10=23thenq_10=0;f_10='1';--此IF语句得到频率为10Hz的信号elseq_10=q_10+1;f_10='0';endif;ifq_16=14thenq_16=0;f_16='1';--此IF语句得到频率为16Hz的信号elseq_16=q_16+1;f_16='0';endif;ifq_1=239thenq_1=0;f_1='1';--此IF语句得到频率为1Hz的信号elseq_1=q_1+1;f_1='0';endif;ifen1='1'thenf=f_10;--此IF语句得到计费脉冲felsifen0='1'thenf=f_16;elsef='0';endif;endif;endif;endprocess;main:process(f_1)beginiff_1'eventandf_1='1'thenifstart='0'thenw=0;en1='0';en0='0';m1=000;m0=0000;k1=0000;k0=0000;elsifstop='1'thenifw=59thenw=0;--此IF语句完成等待计时ifm0=1001thenm0=0000;--此IF语句完成分计数ifm1=101thenm1=000;elsem1=m1+1;endif;elsem0=m0+1;endif;ifm1&m00000010thenen1='1';--此IF语句得到en1使能信号elseen1='0';endif;elsew=w+1;en1='0';endif;elsiffin='1'thenifk0=1001thenk0=0000;--此IF语句完成公里脉冲计数ifk1=1001thenk1=0000;elsek1=k1+1;endif;elsek0=k0+1;endif;ifk1&k000000010thenen0='1';--此IF语句得到en0使能信号elseen0='0';endif;elseen1='0';en0='0';endif;cha3=c3;cha2=c2;cha1=c1;cha0=c0;--费用数据输出km1=k1;km0=k0;min1='0'&m1;min0=m0;--公里数据、分钟数据输出endif;endprocessmain;jifei:process(f,start)beginifstart='0'thenc3=0000;c2=0000;c1=1000;c0=0000;elsiff'eventandf='1'thenifc0=1001thenc0=0000;--此IF语句完成对费用的计数ifc1=1001thenc1=0000;ifc2=1001thenc2=0000;ifc3=1001thenc3=0000;elsec3=c3+1;endif;elsec2=c2+1;endif;elsec1=c1+1;endif;elsec0=c0+1;endif;endif;endprocessjifei;endbehav;该源程序包含3个进程模块。fenpin进程对频率为240Hz的输入脉冲进行分频,得到的频率为16Hz,10Hz和1Hz的三种计费频率信号,供main进程和jifei进程进行计费、计时、计程之用;main进程完成等待计时功能、计程功能,该模块将等待时间和行驾公里数变换成脉冲个数计算,同时产生3分种的等待计时使能控制信号en1,行程3公里外的使能控制信号en0;jifei进程将起步价8元预先固定在电路中,通过对计费脉冲数的统计,计算出整个费用数据。源程序中输入信号fin是汽车传感器提供的距离脉冲信号;start为汽车计价启动信号,当star=1时,表示开始计费(高电平有效),此时将计价器计费数据初值80(即8.0元)送入,计费信号变量(cha3cha2cha1cha0=0080),里程数清零(km1km0=00),计时计数器清零(min1min0=00);stop为汽车停止等待信号(高电平有效),当stop=1时,表示停车等待状态,并开始等待计时计费。其部分仿真输出波形如图6-64和图6-65所示,元件符号如图6-66所示。在图6-64中,stop=0即全程无停止等待时间,因此计时显示输出为00,该图中出租车总行驶5公里,等待累计时间为0分钟,总费用为11.2元;图6-65中共有3次停车等待累计时间为3分钟,出租车总行驶21公里,总费用为57.6元,仿真结果正确。图6-64出租车自动计费器系统的主体电路仿真输出波形(1)图6-65出租车自动计费器系统的主体电路仿真输出波形(2)图6-66出租车自动计费器系统的主体FPGA电路元件符号2扫描显示电路该模块包含8选1选择器,模8计数器,七段数码显示译码器三个子模块,其VHDL源程序和仿真输出如下:1)模8计数器se的VHDL源程序和仿真LIBRARYIEEE;USEIEEE.std_logic_1164.all;USEIEEE.std_logic_unsigned.all;ENTITYseIS;port(clk:instd_logic;a:outstd_logic_vector(2downto0));EDNse;ARCHITECTURErt1ofseISbeginprocess(clk)variableb:std_logic_vector(2downto0);beginif(clk'eventandclk='1')thenif(b=111)thenb:=000;elseb:=b+1;endif;endif;a=b;endprocess;endrt1;源程序中输入信号clk为系统输入的240HZ基准时钟,输出a为3位二进制编码,其仿真输出波形如图6-67(a)所示,元件符号如图6-67(b)所示。(a)(b)图6-67模8计数器se(a)仿真输出波形;(b)元件符号图2)8选1选择器mux8_1的VHDL源程序和仿真LIBRARYIEEE;USEIEEE.std_logic_1164.all;ENTITYmux8_1IS;port(c:instd_logic_vector(2downto0);dp:outstd_logic;a1,a2,a3,a4,b1,b2,t1,t2:instd_logic_vector(3downto0);d:outstd_logic_vector(3downto0));endmux8_1;architecturert1ofmux8_1isbeginprocess(c,a1,a2,a3,a4,b1,b2,t1,t2)variablecomb:std_logic_vector(2downto0);begincomb:=c;casecombiswhen000=d=a1;dp='0';when001=d=a2;dp='0';when010=d=a3;dp='1';when011=d=a4;dp='0';when100=d=b1;dp='0';when101=d=b2;dp='0';when110=d=t1;
本文标题:出租车自动计费器EDA设计
链接地址:https://www.777doc.com/doc-6122575 .html