出租车计费器报告.docx
《出租车计费器报告.docx》由会员分享,可在线阅读,更多相关《出租车计费器报告.docx(14页珍藏版)》请在冰豆网上搜索。
![出租车计费器报告.docx](https://file1.bdocx.com/fileroot1/2023-2/23/817faf9e-d73f-4728-8c33-6bebc3f6d871/817faf9e-d73f-4728-8c33-6bebc3f6d8711.gif)
出租车计费器报告
课程设计说明书
课程:
EDA技术基础
题目:
出租车计费器
学生姓名:
田伟正
学号:
201256110131
班级
:
(1)
专业:
电子信息科学与技术
指导教师:
贺慧勇
2014年12月20日
长沙理工大学课程设计任务书
物理与电子科学学院电信专业1201班姓名田伟正
课程名称EDA技术基础
题目出租车计费器
同组设计者:
糟怀明贺智勇赵亚杰洪敏杰
设计一个出租车自动计费器,计费包括起步价、行车里程计费、等待时间计费三部分。
起步价为6.0元,2公里之内按起步价计费,超过2公里,每公里增加1.8元,等待时间单价为每1分钟0.3元。
用数码管显示总金额、总里程、等待时间(可键控交替显示)。
设汽车每前进十米里程传感器输出一个脉冲。
设计一个测试用模拟车速的脉冲源,模拟的车速可通过按键调整,范围为5km/h~200km/h
发挥部分:
(1)时钟,白天夜间计费模式
(2)按长沙市出租车现行收费标准设计计费器
工作计划
(1)时间
本课程设计安排2周时间:
2014.12.22~2015.1.2
(2)进度安排
第1周周一周二:
查阅资料,拿出整体设计方案,划分模块;
第1周周三至周五:
各模块的设计、调试、验证。
第2周周三前完成项目整体调试和测试。
第2周周三周四文档写作整理
第2周周五:
答辩讨论
指导教师:
贺慧勇唐立军文勇军
周晓萍唐俊龙
2014年12月22日
教研室意见:
同意。
教研室主任文勇军
2014年12月26日
长沙理工大学课程设计成绩评定表
学生姓名:
田伟正学号:
201256110131专业班级:
电信1201
课程设计题目:
出租车计费器
评分项目
要求
分值
得分
学习态度
学习态度认真,遵守纪律。
10
设计方案
调研充分,方案设计合理。
20
工作量
完成了任务书规定的工作量。
实际设计、调试效果好。
40
设计报告
完全符合撰写规范要求,结构严谨,逻辑性强,层次清晰,表述准确,文字流畅。
20
答辩
准备充分,概念清楚,能准确流利地回答各种问题。
10
总分
备注:
成绩:
指导教师:
年月日
目录
1.设计任务1
2.设计方案1
3.各功能模块的原理及思路分析2
3.1分频模块2
3.2计量模块2
3.3计费模块3
3.4控制模块3
3.5显示模块4
3.6模拟出租车脉冲信号发生器4
3.7头文件5
4.个人模块(计量模块)5
5.个人模块方案验证7
6.心得体会8
参考文献9
1.设计任务
设计一个出租车自动计费器,计费包括起步价、行车里程计费、等待时间计费三部分。
起步价为6.0元,2公里之内按起步价计费,超过2公里,每公里增加1.8元,等待时间单价为每1分钟0.3元。
用数码管显示总金额、总里程、等待时间(可键控交替显示)。
设汽车每前进十米里程传感器输出一个脉冲。
设计一个测试用模拟车速的脉冲源,模拟的车速可通过按键调整,范围为5km/h~200km/h
发挥部分:
(1)时钟,白天夜间计费模式
(2)按长沙市出租车现行收费标准设计计费器
2.设计方案
根据设计要求,系统的输入信号有:
系统时钟信号CLK,出租车启动信号START,出租车每十米输出一个脉冲,等待信号STOP,公里信号FIN。
系统的输出信号有:
总费用数C0-C3(XX.X),行驶距离(数)K0-K1(XX)和等待时间M0-M1(XX)等。
系统组成方框图如下所示,它由模拟出租车脉冲信号、分频模块、计量模块、计费模块、控制模块和显示模块六部分组成。
总流程图:
模块
输入
接口
输出
接口
模拟脉冲
分频
系统时钟
CLK
clk_1
clk_10
clk_18
计量
模拟脉冲
CLK
en0
en1
Ko
K1
Mo
M1
控制
clk_1
clk_18
en0
en1
fin
计费
fin
C0
C1
C2
C3
显示
c0
c1
c2
c3
3.各功能模块的原理及思路分析
该设计问题自顶向下可分为模拟出租车脉冲信号发生器、分频模块、计量模块、计费模块、控制模块、和扫描显示模块,下面就每个部分的原理及算法进行分析。
3.1分频模块
分频模块对频率为240Hz的输入脉冲进行分频,得到的频率18Hz,10Hz和1Hz的三种频率。
该模块产生频率信号用于计费,每个1Hz脉冲为0.1元计费控制,10Hz信号为1元的计费控制,18Hz信号为1.8元计费控制。
分频模块的实现
系统是对240Hz时钟脉冲信号进行分频,分别得到18Hz、10Hz、1Hz三种频率,本设计中通过三种不同频率脉冲信号实现计程车在行驶、等待两种情况下的不同计费。
3.2计量模块
计量控制模块是出租车自动计程器系统的主体部分,该模块主要完成等待计时功能、计程功能,同时产生等待计时使能控制信号en1,行程2公里外的使能控制信号en0。
其中计价功能主要完成的任务是:
行程2公里内,起步价为6元;2公里外以每公里1.8元计费,等待时间每分钟0.3元;计时功能主要完成的任务是:
计算乘客的等待累计时间,计时器的量程为59分,满量程自动归零;计程功能主要完成的任务是:
计算乘客所行使的公里数。
计量模块的实现
本模块实现对于出租车在行驶和等待过程中的计程和计时功能。
当行使里程大于2Km时,本模块中en0信号变为1;当等待时间开始计时时,en1信号变为1,clk1每来一个上升沿,计量模块实现一次计数,里程数或者等待时间加1。
3.3控制模块
控制模块主要是通过计量模块产生的两个不同的输入使能信号en0,en1,对每个分频模块输出的18Hz,1Hz的脉冲信号进行选择输出的过程;本模块实现了双脉冲的二选一;由于单价1.8元/公里、0.3元/每分钟,通过选择18HZ(1.8元),1HZ(0.1元)脉冲信号,方便最终计费模块中对行驶过程中不同的时段、不同路程段进行计价。
控制功能的实现
本模块主要是通过两个不同的输入使能信号,对两个输入脉冲进行选择输出,使能信号是计量模块的输出,两个输入脉冲是分频模块输出的18Hz、1Hz的脉冲。
3.4计费模块
当计费信号start一直处于高电平即计费状态时,本模块根据控制模块选择出的信号从而对不同的单价时段进行计费。
即行程在2km内,起步价6元;2km外以每公里1.8元计费,等待时间每分钟0.3元计费。
c0,c1,c2,c3分别表示费用的显示。
计费功能的实现
输入一个脉冲信号,同时当start为高电平时开始计价,次脉冲信号是控制模块的输出,源于分频模块的18HZ或者1HZ脉冲信号,累计费用在c0、c1、c2、c3四个端口,并作为价格的显示信号。
3.5显示模块
公里数,等待时间,总费用输出。
3.6模拟出租车脉冲信号发生器
该部分暂定两套方案:
方案一:
由分频模块分频出不同频率的脉冲信号,作为模拟出租车脉冲信号,但可能会因此增加系统的复杂度。
方案二:
采用外部脉冲发生源,这里选择51单片机开发板作为脉冲信号发生器,可以通过按键调节脉冲频率大小,以此来代替出租车速度的变化。
3.7头文件
调用模块实现总体记录与计算。
4.个人模块与调试
计量模块
4.1设计要求
计量控制模块是出租车自动计程器系统的主体部分,该模块主要完成等待计时功能、计程功能,同时产生使能控制信号en1,行程2公里外的使能控制信号en0。
其中计价功能主要完成的任务是:
行程2公里内,起步价为6元;2公里外以每公里1.8元计费,等待时间每分钟0.3元计费;计时功能主要完成的任务是:
计算乘客的等待累计时间,计时器的量程为59分,满量程自动归零(仅仅是显示归零,实际累计时间所产生的费用不能归零);计程功能主要完成的任务是:
计算乘客所行使的公里数。
计程器的量程为99公里,满量程自动归零。
4.2设计思路
在得到分频信号(fin,clk)后,分别对等待时间(minute)和行驶路程(kilometer)记录,得到公里脉冲后满一公里加1,在按钮按等待按钮时开始判断clk信号,满60秒分钟加一,最后输出使能信号e1,e0(e0信号输出判断两公里之后输出)。
4.3程序代码分析
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entityjiliangis
port(enable_kile:
instd_logic;--计程开始信号
clk_speed:
instd_logic;--里程脉冲信号
enable_time:
instd_logic;--行驶中,中途等待信号
clk_time:
instd_logic;--计时脉冲
en1,en0:
outstd_logic;--计费单价使能信号
kile1,kile0:
outstd_logic_vector(3downto0);--行驶公里计数
time1,time0:
outstd_logic_vector(3downto0));--等待时间计数
endjiliang;
architecturebhv2ofjiliangis
begin
process(enable_kile,clk_speed,enable_time,clk_time)
variablew:
integerrange0to3000;--计时范围0~59
variablem:
integerrange0to1000;
variableq1,q2,q3,q4:
std_logic_vector(3downto0);
variableen:
std_logic;
begin
ifenable_kile='0'then--开始清零按钮
en1<='0';q1:
="0000";q2:
="0000";w:
=0;
elsifclk_time'eventandclk_time='1'then
ifenable_time='1'then--计时开始信号
ifw=3000thenw:
=0;w:
=w+1;en1<='1';--(表示当计时器达到60时,归零)
ifq1="1001"thenq1:
="0000";--(计时器个位到9进一位)
ifq2="1001"thenq2:
="0000";--(计时器十位到5进一位)
elseq2:
=q2+1;
endif;
elseq1:
=q1+1;
endif;
elsew:
=w+1;en1<='0';
endif;
endif;
endif;
ifenable_kile='0'then--开始清零按钮
q3:
="0000";q4:
="0000";en:
='0';m:
=0;
elsifclk_speed'eventandclk_speed='1'then--开始计程
ifenable_kile='1'andenable_time='0'then
ifm=1000thenm:
=0;m:
=m+1;--(表示当计程器达到1公里时,归零)
ifq3="1001"thenq3:
="0000";--(计程器满一公里,归零)
ifq4="1001"thenq4:
="0000";--范围0~99
elseq4:
=q4+1;
endif;
elseq3:
=q3+1;
endif;
ifq4&q3>="00000011"thenen:
='1';
endif;
elsem:
=m+1;en:
='0';
endif;
endif;
endif;
time0<=q1;time1<=q2;kile0<=q3;kile1<=q4;en0<=en;
endprocess;
endbhv2;
4.4方案验证
模块电路图:
中途停车等待时间记录:
(测试信号clk:
10ns;fin:
10ns;start:
1;stop:
1;在start状态为1时按下stop开始记录等待时间)
里程记录:
(测试信号clk:
10ns;fin:
10ns;start:
1;stop:
0;在得到输入模拟脉冲后按start开始记录里程)
6.心得体会
经过两周的课程设计,我学习到了很多,开始拿到课题只是经过理论的分析觉得很简单,但是实际实施起来却很困难,前半周拿到课题我们都在讨论方案如何实施,因为大家的想法都不相同,所以存在很大的争议,方案迟迟没有确定下来,我们都非常的焦急,最后在和老师讨论过大家的想法之后确定了最优的方案,大家分配了模块开始编写,我的模块是计量模块,在写代码之前参考了很多资料,因为之前做的实验比较少,我的问题在于没有科学严谨的态度,虽然代码写完了,但是却存在很多错误,当修改可以运行波形图时,又存在这样那样的错误,虽然调试成功了,但是对我的感触很深,这种眼高手低的态度对于学习和科研是很有害的,以后应该注意和努力改掉。
参考文献:
[1]潘松,黄继业.EDA技术实用教程-VHDL版(第五版).科学出版社.2013
[2]AlteraCorporation.VHDLProgrammingbyExample[M].FourthEdition.NewYork:
McGraw-HillCompanies,2002.
[3]杨恢先,黄辉先.单片机原理及应用[M].人民邮电出版社,2006,19-23