出租车计费系统
出租车计价系统控制原理

出租车计价系统控制原理
出租车计价系统控制原理是指出租车上安装的计价器的工作原理和控制方式。
计价器主要由速度传感器、计价装置、显示屏和控制电路等组成。
当车辆行驶时,速度传感器会感应到车轮转速,计算出车辆行驶的距离和时间,并将这些信息传送至计价装置中。
计价装置根据行驶的距离和时间,按照规定的计费标准计算出乘客需要支付的车费,并将其显示在显示屏上。
在控制方面,出租车计价系统主要由计价器和计价控制器两部分组成。
计价控制器是出租车公司或政府监管部门安装在车辆上的一个控制装置,它能够对计价器进行远程控制和管理。
例如,可以设置不同的计费标准,或者对不良司机进行惩罚和处罚。
总的来说,出租车计价系统的控制原理基于计价器和计价控制器的交互作用,确保了乘客支付车费的合理性和公正性,同时也保障了出租车公司和政府监管部门对出租车运营的有效控制和管理。
- 1 -。
基于CPLD的出租车计费系统设计

基于CPLD的出租车计费系统设计一、引言出租车计费系统是指通过计算出租车行驶的距离和时间来确定乘客需要支付的费用的系统。
传统的计费系统通常使用微控制器来控制计费规则和处理计费过程。
然而,随着计算机技术的进步,使用CPLD(复杂可编程逻辑器件)来设计出租车计费系统成为可能。
CPLD具有高度灵活性和可编程性,可以用于实现复杂的计费算法和处理大量的数据。
本文将详细介绍基于CPLD的出租车计费系统的设计方法和流程。
二、设计要求1.支持多种计费规则:根据不同城市的出租车计费规则的差异,计费系统需要支持多种不同的计费规则,包括按里程、按时间和混合计费等规则。
2.精确计算距离和时间:计费系统需要能够精确计算出租车的行驶距离和所花费的时间。
3.实时更新计费:计费系统需要实时更新乘客的费用,并在计费过程中能够实时处理折扣等特殊情况。
4.可配置的费率和计费规则:计费系统需要支持灵活配置费率和计费规则,并能够根据政策的变化进行更新。
5.可靠性和稳定性:计费系统需要具备高可靠性和稳定性,以确保计费过程的准确性。
三、设计方案1.系统框架:基于CPLD的出租车计费系统主要由以下几个部分组成:输入模块、计费算法模块、存储模块、显示模块和输出模块。
输入模块用于获取出租车行驶的距离和时间信息,计费算法模块用于根据距离和时间计算费用,存储模块用于存储费率和计费规则,显示模块用于显示乘客的费用,输出模块用于向乘客输出费用信息。
2.系统流程:(1)输入模块获取出租车行驶的距离和时间信息。
(2)计费算法模块根据距离和时间信息结合存储模块中的费率和计费规则,计算出乘客需要支付的费用。
(3)计费算法模块将计算出的费用存储到存储模块中。
(4)显示模块从存储模块中获取费用,并将费用信息显示给乘客。
(5)输出模块向乘客输出费用信息。
3.系统设计:(1)输入模块:使用距离传感器和时间传感器获取出租车行驶的距离和时间信息,并将数据传输给CPLD。
(2)计费算法模块:根据距离和时间信息以及存储模块中的费率和计费规则,使用CPLD设计计费算法,计算出乘客需要支付的费用。
出租车计费系统设计

4.8 出租车计费系统的设计4.8.1 设计要求设计出租车计费系统,实现出租车按照行驶里程计费,行驶里程在3公里以 内,预置起步费为7元,3公里以上以1.6元/公里计费,当计费总额超过30元, 以 2.4 元/公里计费,车停止结束计费。
车费总额可显示最大值为 99.9 元,能同 步显示对应行驶里程。
模拟出租车启动、暂停、停止等状态,通过动态扫描显示 电路,显示行驶里程和车费总额。
4.8.2 设计过程1.出租车计费系统的设计原理出租车计费系统整体设计框图如图 4.8.1 所示,主要模块包括车轮脉冲计数 模块、里程计数模块、计费模块、动态扫描模块及译码模块。
图 4.8.1 出租车计费系统整体设计框图车轮脉冲计数模块接收来自车轮传感器的脉冲信号, 以及出租车运营过程的 启动、暂停、停止等信号,根据车轮的型号,转换得到百米行驶信号。
里程计数 模块负责统计百米行驶信号,得到行驶里程数据信号,计费模块根据行驶里程以 车轮脉冲计数模块计费模块 里程计数模块动态扫 描及译 码模块车轮脉冲 信号 启动/暂停 停 止 时钟信号及车费规则,得到车费总金额数据信号,将行驶里程和车费总金额数据信号,送 入动态扫描模块及译码模块,供外部数码管显示。
2.车轮脉冲计数模块车路脉冲计数模块接收来自车轮传感器的脉冲信号,经过计数分频,产生出 租车行驶100米的输出信号。
由于不同型号的车轮,直径大小不同,行驶100米车轮转的圈数不同,即车 轮传感器发出的脉冲信号个数不同,对不同车轮应区别对待。
如表481所示, 车轮直径与每公里所转圈数对应表。
表 481 车轮直径与每公里所转圈数对应表车轮直径 500mm 520mm 540mm 560mm 580mm圈数/公里 637 612 590 569 549本设计中我们选取车轮直径为520mm进行讨论,设计程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count ISPORT(clk, reset, start : IN STD_LOGIC;clk_out : OUT STD_LOGIC);END count;ARCHITECTURE behave OF count ISSIGNAL mode : STD_LOGIC_VECTOR(5 DOWNTO 0);SIGNAL temp : STD_LOGIC_VECTOR(5 DOWNTO 0);TYPE states IS (s0, s1);SIGNAL s_state : states;BEGINmode <= "111101";PROCESS(clk, start, reset)BEGINIF reset = '1' THEN s_state <= s0;temp <= "000000";ELSIF (clk'EVENT AND clk = '1') THENCASE s_state ISWHEN s0 => temp <= "000000";IF start = '1' THENs_state <= s1;ELSE s_state <= s0;END IF;WHEN s1 => IF start = '1' THENIF temp = mode THENtemp <= "000000"; s_state <= s1;ELSE temp <= temp + 1; s_state <= s1;END IF;ELSE s_state <= s0;END IF;END CASE;END IF;END PROCESS;clk_out <= '1' WHEN temp = mode ELSE '0';END behave;以上程序中,当停止键 reset 设为高电平,模块进入停止计数状态(s0);停止键 reset 设为低电平,同时启动/暂停键设为启动状态(start 高电平),进入;设置为暂停(start 低电平),回到s0状态,停止分频计数。
出租车计费系统课程设计

出租车计费系统课程设计一、课程目标知识目标:1. 学生能理解出租车计费系统的基本构成和原理;2. 学生能掌握出租车起步价、里程价和等候时间的计算方法;3. 学生了解并掌握实际出租车计费中的分段计费和优惠策略。
技能目标:1. 学生能够运用所学知识设计并实现一个简单的出租车计费系统;2. 学生能够运用计算机编程语言,编写出计费系统的核心算法;3. 学生通过实际操作,培养解决问题的能力和团队协作能力。
情感态度价值观目标:1. 学生在学习过程中,培养对信息技术学科的兴趣和热情;2. 学生通过了解计费系统的实际应用,认识到数学和信息技术在生活中的重要性;3. 学生在团队协作中,学会尊重他人,培养合作精神和沟通能力。
课程性质分析:本课程为信息技术学科,结合数学知识,以提高学生的实际操作能力和解决问题的能力为主要目标。
学生特点分析:本课程针对初中年级学生,他们对计算机编程有一定的基础,具备一定的逻辑思维能力和团队协作能力。
教学要求:1. 教学内容与实际生活紧密联系,提高学生的实践操作能力;2. 教学过程中注重培养学生的团队协作和沟通能力;3. 教学评价以学生的实际操作和解决问题能力为主要标准。
二、教学内容1. 出租车计费系统的基本概念与原理:- 出租车计费系统的组成与功能;- 出租车计费的基本原则与标准。
2. 出租车计费算法:- 起步价、里程价和等候时间的计算方法;- 分段计费和优惠策略的应用;- 计费算法的编写与实现。
3. 编程实践:- 利用计算机编程语言(如Python)设计出租车计费系统;- 编写计费系统核心算法;- 调试、优化和测试计费系统。
4. 教学内容的安排与进度:- 第一课时:介绍出租车计费系统的基本概念与原理,让学生了解计费系统的组成和功能;- 第二课时:讲解出租车计费算法,引导学生学习起步价、里程价和等候时间的计算方法;- 第三课时:学习分段计费和优惠策略,分析实际案例;- 第四课时:编程实践,指导学生编写计费系统核心算法;- 第五课时:调试、优化和测试计费系统,总结学习成果。
出租车计费系统

嵌入式程序课程设计设计题目:出租车计费系统指导老师:温景国专业班级:通信06-01班姓名:学号:一.设计题目: 出租车计费器二. 设计要求1.设计任务(1) 外部脉冲自动计数,自动显示。
(2) 设计一个255计数器:0-255计数,计满后自动清0,重新计数(在数码管中显示)。
(3) 设计一个50000计数器:0-50000计数,计满后自动清0,重新计数(在数码管中显示)。
2.设计一个出租车计费系统:起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元)三. 单片机最小系统硬件资源介绍※MCS-51单片机;※ 6位共阳极数码管;※段码驱动器74HC573,位选译码器74HC138;※ 4路独立式按键;※外部晶振电路;※ ISP下载接口(In system program,在系统编程);※ DC+5V电源试配器(选配);※ ISP下载线(选配)。
单片机最小系统实训板硬件资源分布见图1元件布局图和图2电路原理图:其中P1为外部电源输入座(DC+5V),S8为电源最小系统的电源开关,E1和C3为电源滤波,去耦电容。
D1为系统电源指示灯。
J2为ISP下载接口,S7系统复位按键。
CRY1,C1,C2为外部时针电路。
IC1为89S51(DIP-40),左上角为第一脚。
PRE1,PRE2。
为上拉排阻(阻值4.7k—10k)。
J5,J9,J6,J10分别对应单片机的P0,P1,P2,P3口。
便于二次开发。
6路共阳极数码管动态显示电路,P0口通过74HC573(起驱动和隔离作用,让电流通过74CH573流入公共地),来控制数码管的8路段码,P20-P22通过74HC138译码器(使用其中的6路)控制数码管的公共端(中间还有三极管做驱动器)。
这样设计的理由:为了保证该单片机最小系统的二次开发的资源充足和合理性。
(整理)出租车计费系统VHDL.

EDA课程设计:出租车计费系统学生姓名:所在班级:指导老师:完成时间:一、课程设计目的1、综合运用EDA技术,独立完成一个课题的设计,考察运用所学知识,解决实际问题的能力;2、结合理论知识,考察阅读参考资料、文献、手册的能力;3、进一步熟悉EDA技术的开发流程,掌握文件编辑、编译、仿真、下载验证等环节的实现方法和应用技巧;二、课程设计要求实际中出租车的计费工作原理一般分成3个阶段:(1)车起步开始计费。
首先显示起步价(本次设计起步费为7.00元),车在行驶3 km 以内,只收起步价7.00元。
(2)车行驶超过3 km后,按每公里2.2元计费(在7.00元基础上每行驶1 km车费加2.2元),车费依次累加。
(3)行驶路程达到或超过9 km后(车费达到20元),每公里加收50%的车费,车费变成按每公里3.3元开始计费。
车暂时停止(行驶中遇红灯或中途暂时停车)不计费,车费保持不变。
若停止则车费清零,等待下一次计费的开始三、基本设计思想1、根据出租车计费原理,将出租车计费部分由5个计数器来完成分别为counterA,counterB,counterC,counterD,counterE。
①计数器A完成车费百位。
②计数器B完成车费十位和个位。
③计数器C完成车费角和分。
④计数器D完成计数到30(完成车费的起步价)。
⑤计数器E完成模拟实现车行驶100 m的功能。
2、行驶过程中车费附加50%的功能:由比较器实现。
3、车费的显示:由动态扫描电路来完成。
用专用模块来实现,完成数据的输入即动态数据的显示。
4、通过分析可以设计出系统的顶层框图如图3.1所示:图3.1 系统的顶层框图四、出租车计费系统的实现1、系统的总体框图2、程序流程图图4.2程序流程图3、系统各功能模块的实现(1)模块JIFEI的实现:图 4.3 模块模块JIFEI见图4.3。
输入端口START、STOP、PAUSE、JS分别为汽车起动、停止、暂停、加速按键。
出租车计价系统设计
出租车计价系统设计要求: 1.实现计费功能:按行驶里程收费,起步费为7.00元,并在车行3公里后能:能模拟汽车启动、停止、暂停、车速等状态; 3.设计动态扫描电路:显示车费,保存两位小数; 4.仿真验证:观察波形确认电路设计是否正确。 5.实际验证:设计电路下载,检查设计方案的正确性。 6.分析方案:进行资源占用、工作频率及其时间分析以及改进方案分析。
北京出租车详细价目: 1.每公里2元,基价3公里,起价10元; 2.单程15公里以上局部加收50%空驶费; 3.时速低于12公里/小时或等候乘客,每累计5分钟加收1公里费用; 4.晚23时至早5时,每公里租价加收20%;晚23时以后起步价11元; 5.不同乘客合租,按合乘里程各收60%; 6. 租车,每次加收3元 租车费; 7.出北京市,由双方议定收费;过路过桥费由乘客支付。 另:出租车四舍五入按元收费,没有角分的概念;
出租车计价系统的设计要求与设计方案
第一章出租车计价系统的设计要求与设计方案1.1出租车计价器设计要求设计一个出租车自动计费器,计费包括起步价、行车里程计费、等待时间计费三局部,用七段数码管显示总金额,单价,运行里程,起步价为6 元,超过 6 元,每一公里增加 1 元或2 元,等待时间单价为每 30 秒钟1 元,计费功能:费用的计算是按行驶里程收费。
设起步价为 6 元。
1、当总金额<6 元时,按起价计算费用2、当总金额>6 元时,每公里按 1 元或2 元计费3、等待累计时间>30s 时,按 1 元/30s 计费4、S1 为启动按钮、S2 转换单价按钮、S3 复位按钮。
显示功能:1、显示行驶里程:用三位数字显示,显示方式为“XX.X”,单位为 km。
计程范围 0-99.9km,准确到 0.1km。
2、显示单价:用两位数字显示,显示方式为“X.X”,单位为元。
3、显示总费用:用三位数字显示,显示方式为“XX.X”,单位为元。
计价范围 0-99.9 元,准确到 0.1 元。
1.2系统主要功能本出租车自动计费,上电后显示最初的起步价,里程计费单价。
同时具有运行,复位,转换等状态,可以切换白天与晚上不同计费单价,可以实现每等待30s 收1 元功能。
出租车显示行驶的总费用,里程,单价。
1.3方案论证与比较方案一:承受数字电子技术,利用 555 定时芯片构成多谐振荡器,或承受外围的晶振电路作为时钟脉冲信号,承受计数芯片对脉冲尽心脉冲的计数和分频,最终通过译码电路对数据进展译码,将译码所得的数据送给数码管显示,一下是该方案的流程框图,方案一如图 1-1 所示:图1-1 方案一方案二:承受 EDA技术,依据层次化设计理论,该设计问题自顶向下可分为分频模块,把握模块计量模块、译码和动态扫描显示模块,其系统框图如图 1-2 所示:图1-2 方案二方案三:承受MCU 技术,通过单片机作为主控器,承受外部晶振作为时钟脉冲,通过按键可以便利调整,以下是方案三的系统流程图,本方案主要是必需对于数字电路比较生疏,本钱又不高。
出租车计价系统控制原理
出租车计价系统控制原理出租车计价系统控制原理出租车计价系统是指根据计价表,在旅途中根据里程数和时间长短计算乘客应该支付的车费。
计价表根据不同的城市和地区而有所不同,但是它们的核心控制原理是相似的。
1. 里程计价原理里程计价是指根据出租车所行驶的里程数来计算车费的一种计价方式。
该计价方式主要由计价表和计价器组成。
计价表是指出租车企业或政府规定的从A地到B地所需支付的车费,计价器则是促进车费的自动计算的设备。
计价器通过检测车辆的里程计和速度传感器,自动计算并显示车费。
计价器的控制原理是基于计价表中每个里程段的车费和每个时间段的车费率。
根据里程数和时间段的组合,计价器自动计算车费,并显示在计价表中。
2. 时间计价原理时间计价是指根据出租车旅途中花费的时间长短来计算车费的计价方式。
时间计价主要适用于交通拥挤的城市,车辆因为无法短时间内到达目的地而导致时间长短的变化。
这种情况下,由于里程计价无法精确计算车费,时间计价方式可以更好地反映车费的真实消费。
时间计价的控制原理是基于时间段的车费率,时间段包括富5分钟、10分钟等时间段。
计价器通过检测车辆行驶的时间和时间段,自动计算并显示车费。
计价器根据每个时间段的车费率和时间差异自动调整车费。
时间计价和里程计价常常结合形成混合计价体系。
3. 附加费用除了里程计价和时间计价之外,出租车计价系统可能根据不同的城市和地区收取附加费用。
例如,一个城市可能规定在高峰时间段加收50%的附加费用,或者在夜间行驶中加收额外的附加费用。
附加费用通常会在计价器显示出计算过的车费上另外显示出来。
总结综上所述,出租车计价系统的控制原理是基于里程计价和时间计价的相互作用。
里程计价通过检测车辆行驶的里程数来计算车费,而时间计价则通过检测车辆行驶时间的长短来计算车费。
附加的费用根据当地政府和出租车企业规定的不同而有所不同。
计价器的作用是将这些控制原理结合在一起,自动计算旅途费用,并显示在计价表中。
EDA出租车计费系统
一、出租车计费系统的主要功能出租车计费器一般都是按公里计费,通常是起步价xx 元(xx 元可以行走x公里),然后再是xx 元/公里。
所以要完成一个出租车计费器,就要有两个计数单位,一个用来计公里,另外一个用来计费用。
通常在出租车的轮子上都有传感器,用来记录车轮转动的圈数,而车轮子的周长是固定的,所以知道了圈数自然也就知道了里程。
在这个实验中,就要模拟出租车计费器的工作过程,用直流电机模拟出租车轮子,通过传感器,可以得到电机每转一周输出一个脉冲波形。
本实验要完成的任务就是设计一个简单的出租车计费器,要求是起步价 3 元,准行1 公里,以后1 元/公里。
时钟输入为一个1KHz的系统时钟,直流电机模块每转一圈输出一个脉冲信号给CPU,另外用按键模块的S1 来作为整个系统的复位按钮,每复位一次,计费器从头开始计费。
直流电机模块用来模拟出租车的车轮子,每转动一圈认为是行走1 米,所以每旋转1000 圈,认为车子前进1 公里。
系统设计是需要检测电机的转动情况,每转一周,计米计数器增加1。
二、出租车计费系统的功能模块的划分此系统共分为三个模块:1)、直流电机模块2)、按键模块3)、计费模块模块图如下:三、主要功能的实现直流电机模块:当出租车轮子每转动一圈认为是行走 1 米,所以每旋转1000 圈,认为车子前进1 公里。
即当轮子转的圈数distance在0~999之间,计米器就增1,;当轮子转的圈数distance大于999的时候,计米器不增1,;特殊情况:当轮子转的圈数distance刚好为999时,则进位co进一位。
按键模块:定义4个里程的中间信号D1,D2,D3,D4,每个中间信号都从0-9之间变化,当个位D1为9时,就向十位进一位,十位D2开始增1;后面三位同理。
最后把4个里程的中间信号D1,D2,D3,D4分别赋给里程输出信号k1,k2,k3,k4,最后显示的就是出租车所走的里程。
计费模块:把计费的四个输出信号c1,c2,c3,c4定义成buffer型,计费模块的功能大致跟按键模块的功能一样,即同理,最后显示的就是乘客需付的车费。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
江西理工大学应用科学学院SOPC/EDA综合课程设计报告设计题目:出租车计费系统设计者:罗云学号: 22班级:自动化101指导老师:王忠锋完成时间: 2013年1月10日设计报告综合测试总评格式(10)内容(40)图表(10)答辩(20)平时(20)目录第一章系统设计要求 (2)1.1系统设计要求 (2)第二章系统设计方案及思路 (3)2.1系统设计方案 (3)2.2设计技巧分析 (4)2.3系统扩展思路 (5)第三章主要原程序 (5)3.1分频器模块FPQ的VHDL源程序 (5)3.2等待判别模块DDPB的VHDL源程序 (6)3.3里程计算模块LCJS的VHDL源程序 (8)3.4里程计费模块LCJF的VHDL源程序 (10)3.5等待计时模块DDJS的VHDL源程序 (13)3.6等待计费模块DDJF的VHDL源程序................................第四章系统仿真及硬件验证 (14)4.1 系统调试的软/硬件 (14)4.2 系统的有关仿真 (14)4.3系统的硬件验证 (16)设计心得 (16)参考文献 (17)第一章 系统设计要求1.1系统设计要求以CPLD/FPGA 为主体,设计并制作一台出租车计费系统,系统的方框图如图所示。
速度传感器电路主板汽车电瓶+9~+16 V空车指示牌显示器LED/LCD出租车计费系统方框图1.计费及显示(1) 里程,即汽车行驶里程,用四位数字显示,显示方式为“XXX.X”,单位为km ,精确到0.1 km 。
(2) 单价,即里程单价,用三位数字显示,显示方式为“X.XX”,单价为元/km ,根据每天不同的时间段有两种情况:当时间段为06:00~23:00时单价为1.40元/km ,其他时间段内单价为1.80元/km 。
(3) 等候时间,用四位数字显示分钟和秒,显示方式为“XX:XX”,等候的定义是:当汽车行驶速度小于或等于12 km/h 时为“等候”。
(4) 等候单价,等候单价有两种情况:在等候时间小于1小时的情况下,等候单价为1元每5分钟;在等候时间大于1小时的情况下,等候单价为20元每小时。
(5) 费用的计算,出租车的起价为5.00元,当里程小于2 km 时,按起价计算费用;当里程大于2 km 时按下式计算费用:费用=里程╳里程单价+等候时间╳等候单价(6) 费用的显示,用五位数字显示,显示方式为“XXX.XX”,单价为元。
2.时钟及显示当出租车在常运状态下,应能显示当前的时间。
在汽车熄火的情况下,时钟必须正常运行,但是可以不显示时钟。
3.计费开始提示当出租车载上乘客并起步后,将空车指示牌扳倒时,空车指示牌里的指示灯熄灭,并有语音或灯光提示信号。
第二章系统设计方案及思路2.1系统设计方案根据系统的设计要求,我们可将整个测控FPGA系统CZJFXT分为七个模块,它们分别是:分频器模块FPQ,等待判别模块DDPB,里程计算模块LCJS,里程计费模块LCJF,等待计时模块DDJS,等待计费模块DDJF,输出数据选择模块SCXZ。
其内部组成原理图如图14.3所示。
分频器模块FPQ:将外部时钟信号SCLK(设计时假设为200 Hz)经过适当分频后,产生1 Hz的系统工作用基准时钟信号CLK1HZ,供系统中的有关模块计时用。
等待判别模块DDPB:根据速度传感器脉冲信号WCLK和分频器产生的基准时钟信号CLK1HZ,计算单位时间里WCLK的脉冲个数(每km产生1000个脉冲信号,即每米产生1个脉冲信号),亦即出租车行驶速度,从而判别出租车是否处于等待状态,发出等待标志信号DDBZ。
里程计算模块LCJS:根据速度传感器脉冲信号WCLK和等待标志DDBZ,对出租车行驶的里程数XSLC进行计算,同时发出里程标志信号LCBZ和里程计费标志信号JFBZ。
里程计费模块LCJF:在计费标志信号JFBZ、等待标志信号DDBZ、里程标志信号LCBZ和时段标志信号XDBZ等信号的控制下,计算行驶里程超过2 km以上里程的费用LCFY。
等待计时模块DDJS:在等待标志信号DDBZ和基准时钟信号CLK1HZ的控制下,进行等待时间DDSJ的计算,其中DDSJ的低8位表示等待时间的秒数,DDSJ的高8位表示等待时间的分钟数,同时根据等待时间的长短发出一个熄灯标志信号XDBZ。
等待计费模块DDJF:在等待标志信号DDBZ和熄灯标志信号XDBZ控制下,进行等待费用DDFY的计费操作。
表1.1 SEL与被传送数据的关系列表图2.1.1图2.1.22.2设计技巧分析(1) 本出租车计费系统,在总体设计方面,结合了单片机和FPGA各自的特长。
测控FPGA芯片就是通过采集传感器脉冲信号WCLK进行里程计算、里程计费,利用外部脉冲信号SCLK产生标准时钟信号计算等待时间、等待费用,并产生里程标志(LCBZ)、等待标志(DDBZ)、熄灯标志(XDBZ)等有关控制标志信号,同时根据单片机发出的开始信号(START)、时段标志(SDBZ)、传输数据选择(SEL)等控制信号将有关计算结果传送给单片机。
(2) 在测控FPGA芯片的VHDL程序设计中:①采用自顶向下的设计方法将整个系统分为分频器模块FPQ、等待判别模块DDPB、里程计算模块LCJS、里程计费模块LCJF、等待计时模块DDJS、等待计费模块DDJF、输出数据选择模块SCXZ 等7个模块,使每个模块的设计功能相对单一,降低了设计难度,也便于程序调试。
②在数据的计算和处理中,注意了一些数据关系的转换、换算和放大,数据关系的转换、换算是为了便于控制程序的设计,而数据的放大则避免了浮点数的运算,数据放大后的还原是通过显示数据时在对应的数码管处显示小数点来处理。
③系统中很多模块的VHDL程序设计中,均涉及多个控制信号,多个控制信号的作用是通过嵌套的条件语句完成的,这些条件信号的作用时机(是先作用还是后作用)和作用方式(是高、低电平还是上升沿、下降沿)非常有技巧,特别值得揣摩与注意。
(3) 在CPLD/FPGA和单片机的数据处理中,设置了许多标志信号(包括初始设置和中间运算处理产生),这给数据的处理带来了非常大的方便,同时当按键时分别处理各按键的或各工作状态的标志位,在显示时可根据标志位进行参数的分别处理。
这种方法相当灵活且有技巧,效率也高。
2.3系统扩展思路(1) 设计并制作系统工作的外围电路:系统用方波信号源、直流工作电源。
(2) 系统联合调试成功后,可将单片机程序通过编程器固化到单片机中,将VHDL 设计经过综合适配后的网表对CPLD/FPGA进行编程下载,将整个系统的外围电路设计制成印刷电路板。
(3) 扩展出租车计费器的功能:①能够显示汽车行驶速度(比如以图形显示km/h)。
②加接微型打印机接口,能自动打印收据发票。
第三章主要源程序3.1分频器模块FPQ的VHDL源程序分频器模块FPQ图3.1.1--FPQ.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY FPQ ISPORT(SCLK: IN STD_LOGIC; --SCLK=200 Hz CLK1HZ: OUT STD_LOGIC); --CLK1HZ=1 HzEND ENTITY FPQ;ARCHITECTURE ART OF FPQ ISSIGNAL CNT100: INTEGER RANGE 0 TO 99;SIGNAL CLK1: STD_LOGIC;BEGINPROCESS(SCLK)BEGINIF SCLK'EVENT AND SCLK='1' THENIF CNT100=99 THENCNT100<=0;CLK1<=NOT CLK1;ELSECNT100<=CNT100+1;END IF;ELSECLK1<=CLK1;END IF;CLK1HZ<=CLK1;END PROCESS;END ARCHITECTURE ART;3.2等待判别模块DDPB的VHDL源程序等待判别模块DDPB图3.2.1--DDPB.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY DDPB ISPORT(START,WCLK:IN STD_LOGIC;CLK1HZ:IN STD_LOGIC;DDBZ:OUT STD_LOGIC);END ENTITY DDPB;ARCHITECTURE ART OF DDPB ISSIGNAL T60S:STD_LOGIC;SIGNAL WCLKCOU:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN--产生60 s周期性跳变信号进程PROCESS(START, CLK1HZ) ISVARIABLE CNT60: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINIF START='1' THENCNT60:="00000000"; T60S<='0';ELSIF CLK1HZ'EVENT AND CLK1HZ='1' THENIF CNT60="00111100" THEN --CNT60=60T60S<='1'; CNT60:="00000000";ELSECNT60: =CNT60+'1'; T60S<='0';END IF;END IF;END PROCESS ;--每分钟行驶距离计算进程PROCESS(START, WCLK, T60S) ISBEGINIF START='1' THENWCLKCOU<="00000000";ELSIF WCLK'EVENT AND WCLK='1' THENIF T60S='1' THENWCLKCOU<="00000000";ELSEWCLKCOU<=WCLKCOU+'1';--距离计算,单位为mEND IF;END IF;END PROCESS ;--等待标志判别进程PROCESS(WCLKCOU,T60S) ISBEGINIF T60S'EVENT AND T60S='1' THENIF WCLKCOU<="11001000" THEN --WCLKCOU<=200 DDBZ<='1'; --等待ELSEDDBZ<='0'; --行驶END IF;END IF;END PROCESS ;END ARCHITECTURE ART;3.3里程计算模块LCJS的VHDL源程序里程计算模块LCJS图3.3.1--LCJS.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY LCJS ISPORT(START, DDBZ, WCLK: IN STD_LOGIC;XSLC: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);LCBZ,JFBZ:OUT STD_LOGIC);END ENTITY LCJS;ARCHITECTURE ART OF LCJS ISSIGNAL BMS:STD_LOGIC_VECTOR(15 DOWNTO 0);SIGNAL BMS1: INTEGER RANGE 0 TO 99999;SIGNAL JFBZ1: STD_LOGIC;BEGIN--里程计算及标志产生进程PROCESS(START,WCLK)VARIABLE MS: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF START='1' THENMS:="00000000";BMS<="0000000000000000";LCBZ<='0';ELSIF WCLK'EVENT AND WCLK='1' THENIF DDBZ='0' THENIF MS="01100011" THENMS:="00000000";BMS<=BMS+'1'; --百米数计算IF BMS>=20 THENLCBZ<='1'; --大于2 km标志END IF;ELSEMS:=MS+'1'; --米数计算END IF;END IF;END IF;END PROCESS;--里程计算结果输出XSLC<=BMS;--里程计算结果转换BMS1<=CONV_INTEGER(BMS);--产生计费信号进程PROCESS(BMS1) ISBEGINCASE BMS1 ISWHEN 10|20|30|40|50|60|70|80|90|100=>JFBZ1<='1';WHEN 110|120|130|140|150|160|170|180|190|200=>JFBZ1<='1';WHEN 210|220|230|240|250|260|270|280|290|300=>JFBZ1<='1';WHEN 310|320|330|340|350|360|370|380|390|400=>JFBZ1<='1';WHEN 410|420|430|440|450|460|470|480|490|500=>JFBZ1<='1';WHEN 510|520|530|540|550|560|570|580|590|600=>JFBZ1<='1';WHEN 610|620|630|640|650|660|670|680|690|700=>JFBZ1<='1';WHEN 710|720|730|740|750|760|770|780|790|800=>JFBZ1<='1';WHEN 810|820|830|840|850|860|870|880|890|900=>JFBZ1<='1';WHEN 910|920|930|940|950|960|970|980|990|1000=>JFBZ1<='1'; WHEN 1010|1020|1030|1040|1050|1060|1070|1080|1090|1100=>JFBZ1<='1'; WHEN1110|1120|1130|1140|1150|1160|1170|1180|1190|1200=>JFBZ1<='1';WHEN1210|1220|1230|1240|1250|1260|1270|1280|1290|1300=>JFBZ1<='1';WHEN1310|1320|1330|1340|1350|1360|1370|1380|1390|1400=>JFBZ1<='1';WHEN1410|1420|1430|1440|1450|1460|1470|1480|1490|1500=>JFBZ1<='1';WHEN1510|1520|1530|1540|1550|1560|1570|1580|1590|1600=>JFBZ1<='1';WHEN1610|1620|1630|1640|1650|1660|1670|1680|1690|1700=>JFBZ1<='1';WHEN1710|1720|1730|1740|1750|1760|1770|1780|1790|1800=>JFBZ1<='1';WHEN1810|1820|1830|1840|1850|1860|1870|1880|1890|1900=>JFBZ1<='1';WHEN1910|1920|1930|1940|1950|1960|1970|1980|1990|2000=>JFBZ1<='1'; WHEN 3910|3920|3930|3940|3950|3960|3970|3980|3990|4000=>JFBZ1<='1'; WHEN OTHERS =>JFBZ1<='0';END CASE;END PROCESS;--计费标志去毛刺进程PROCESS(WCLK,JFBZ1) ISBEGINIF WCLK'EVENT AND WCLK='1' THENJFBZ<=JFBZ1;END IF;END PROCESS;END ARCHITECTURE ART;3.4里程计费模块LCJF的VHDL源程序图3.4.1里程计费模块LCJF--LCJF.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY LCJF ISGENERIC(SD1:INTEGER:=140; --04:00~23:00单价SD2:INTEGER:=180); --其他时段单价PORT(LCBZ,JFBZ,START,DDBZ,SDBZ:IN STD_LOGIC; LCFY:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END ENTITY LCJF;ARCHITECTURE ART OF LCJF ISSIGNAL LCFY1: STD_LOGIC_VECTOR(15 DOWNTO 0); BEGINPROCESS(START, LCBZ, SDBZ, JFBZ)BEGINIF START='1' THENLCFY1<="0000000000000000";ELSIF JFBZ'EVENT AND JFBZ='1' THENIF DDBZ='0' THEN --行驶状态IF LCBZ='0' THEN --2 km以内LCFY1<="0000000000000000";ELSIF LCBZ='1' THEN --2 km以上IF SDBZ='0' THENLCFY1<=LCFY1+SD1;ELSIF SDBZ='1' THENLCFY1<=LCFY1+SD2;END IF;END IF;END IF;END IF;END PROCESS;LCFY<=LCFY1;END ARCHITECTURE ART;3.5等待计时模块DDJS的VHDL源程序等待计时模块DDJS图3.5.1--DDJS.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY DDJS ISPORT(START, DDBZ: IN STD_LOGIC;CLK1HZ: IN STD_LOGIC;DDSJ: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);XDBZ: OUT STD_LOGIC);END ENTITY DDJS;ARCHITECTURE ART OF DDJS ISSIGNAL MS,MG,FS, FG: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL XIDENG: STD_LOGIC;BEGINPROCESS(START, DDBZ, CLK1HZ) ISBEGINIF START='1' THENMS<="0000";MG<="0000";FS<="0000";FG<="0000";ELSIF CLK1HZ'EVENT AND CLK1HZ='1' THENIF DDBZ='1' THENIF MG=9 THEN MG<="0000";IF MS=5 THEN MS<="0000";IF FG=9 THEN FG<="0000";IF FS=5 THENXIDENG<='1';FS<="0000";ELSEFS<=FS+'1'; --分数十位计算END IF;ELSEFG<=FG+'1'; --分数个位计算END IF;ELSEMS<=MS+'1'; --秒数十位计算END IF;ELSEMG<=MG+'1'; --秒数个位计算END IF;END IF;END IF;END PROCESS;XDBZ<=XIDENG;DDSJ(15 DOWNTO 12)<=FS;DDSJ(11 DOWNTO 8)<=FG;DDSJ(7 DOWNTO 4)<=MS;DDSJ(3 DOWNTO 0)<=MG;END ARCHITECTURE ART;3.6等待计费模块DDJF的VHDL源程序等待计费模块DDJF图3.6.1--DDJF.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY DDJF IS--每分钟等待费用定义,单位为分GENERIC(WDJ1: INTEGER:=20;WDJ2: INTEGER:=33);PORT(START, XDBZ, DDBZ, CLK1HZ: IN STD_LOGIC;DDFY:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTITY DDJF;ARCHITECTURE ART OF DDJF ISSIGNAL DDFY1: STD_LOGIC_VECTOR(15 DOWNTO 0);SIGNAL CNT60: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL T60S: STD_LOGIC;BEGIN--产生60 s周期性跳变信号进程PROCESS(CLK1HZ) ISBEGINIF CLK1HZ'EVENT AND CLK1HZ='1' THENIF CNT60="00111100" THEN --CNT60=60 T60S<='1';CNT60<="00000000";ELSECNT60<=CNT60+'1';T60S<='0';END IF;END IF;END PROCESS ;--等待费用计算进程PROCESS(T60S,XDBZ,DDBZ) ISBEGINIF START='1' THENDDFY1<="0000000000000000";ELSIF T60S'EVENT AND T60S='1' THENIF DDBZ='1' THENIF XDBZ='0' THEN --等待时间小于1小时 DDFY1<=DDFY1+WDJ1;ELSIF XDBZ='1' THEN --等待时间大于1小时 DDFY1<=DDFY1+WDJ2;END IF;END IF;END IF;END PROCESS;--等待费用计算结果输出DDFY<=DDFY1;END ARCHITECTURE ART;第四章系统仿真及硬件验证4.1 系统调试的软/硬件(1) 设计开发软件:MAX+plus Ⅱ 10.0,伟福6000(WAVE 6000 for windows)。