基于cpld的出租车计费系统设计.docx
- 文档编号:25918717
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:30
- 大小:189.97KB
基于cpld的出租车计费系统设计.docx
《基于cpld的出租车计费系统设计.docx》由会员分享,可在线阅读,更多相关《基于cpld的出租车计费系统设计.docx(30页珍藏版)》请在冰豆网上搜索。
基于cpld的出租车计费系统设计
毕业设计论文
基于CPLD的出租车计费器系统设计
摘要:
2
Abstract:
2
1.引言1
1.1课题背景1
1.2国内外研究现状及趋势1
1.3本文的主要工作1
2.CPLD、VHDL介绍1
2.1CPLD现状及发展1
2.2CPLD的结构与特点2
2.2.1CPLD基本结构2
2.2.2CPLD的特点2
2.3VHDL设计优点3
3.出租车计费器的设计3
3.1出租车计费器的总体设计3
3.1.1出租车计费标准3
3.1.2总体框架设计3
3.2出租车计费器主要模块设计4
3.2.1速度模块4
3.2.2计程模块4
3.2.3计时模块5
3.2.4计费模块5
4.整体电路设计6
4.1整体电路图6
4.2电源电路6
4.3启动/停止按键电路6
4.4自动清零部分7
5.系统仿真与下载实现7
5.1QuartusⅡ软件介绍7
5.2仿真结果8
5.2.1整体仿真8
5.2.2速度模块仿真8
5.2.3计程模块仿真9
5.2.4计时模块仿真9
5.2.5计费模块仿真10
5.3设计测试10
6.总结及展望10
致谢11
参考文献11
摘要:
为了使出租车计费系统设计成本降低、计费准,本文介绍了一种采用CPLD芯片进行出租车计费器的设计方法,描述了该课题的研究意义和应用价值;叙述了CPLD结构原理及其主要运用;介绍了超高速集成电路硬件描述语言的设计和主要功能。
本文主要应用可编程逻辑芯片EPM7128S为核心控制,附加一定外电路组成出租车计费器系统,使用具有移植性强的特点,便于升级及可重复使用的VHDL语言进行设计。
关键字:
CPLD,VHDL,出租车计费器
Abstract:
Inordertoreducedesigncosttaxibillingsystem,accountingstandard,thispaperintroducesaCPLDchiptaximeterdesignmethod,describedtheresearchsignificanceandapplicationvalue;theCPLDstructureprincipleanditsmainapplication;introducestheultrahighspeedintegratedcircuithardwaredescriptionlanguageisdesignedandthemainfunctions.Inthispaper,themainapplicationoftheprogrammablelogicchipEPM7128Sasthecorecontrol,someadditionalexternalcircuittaximetersystem,withtheuseoftransplantationandstrongfeatures,easytoupgradeandrepeateduseofVHDLlanguagedesign
KeyWords:
CPLD,VHDL,TaxifareRegisters
1.引言
1.1课题背景
随着城市的发展,出租车行业发展迅速,出租车的附属品也应运而生。
传统的出租车计费器大多是由单片机实现的,出租车计价器在最初使用时具备的主要功能是根据行驶里程计价,要求精度高,可靠性好。
可以说,早期的计价器就是个里程表。
随着科学技术的发展,产生了第二代计价器。
它采用了手摇计算机与机械结构相结合的方式,实现了半机械半电子化。
此时它在计程的同时还可完成计价的工作。
大规模集成电路的发展又产生了第三代计价器,也就是全电子化的计价器。
出租车行业以低价高质的服务给人们带来了出行的享受。
但是总存在着买卖纠纷困扰着行业的发展。
而在出租车行业中解决这一矛盾的最好方法就是改良计价器。
用更加精良的计价器来为乘客提供更加方便快捷的服务。
计价器作为出租车的一个重要组成部分,关系着出租车司机和乘客双方利益,起着重要的作用,因此,具有良好性能的计价器对广大出租车司机朋友来说是很必要的。
1.2国内外研究现状及趋势
目前市场上使用的出租车计费器主要采用的都是利用89C51单片机实现的计费器设计,显示方式上主要采用的是固定显示内容的LED显示[1]。
社会的发展对传统的出租车计费器提出了更高的要求[2]。
近年来,各大城市都在对出租车价格进行调整,由于数量太多,很多城市的调价甚至需要一个月时间才能完成,经常会同一时间出现几个价格,有的城市出租车上还会出现司机人工计价的尴尬情形。
这些都暴露了传统计费器灵活性和升级换代能力的不足[3]。
此次选做的毕业课题是“基于CPLD的租出车计费器”,利用现在已经很成熟的可编程逻辑器件来实现这一计费系统,相对用51单片而言,会比较简单,这也同样体现出EDA技术上的优势[4]。
其最突出的地方表现在最具现代电子设计技术特征的功能是日益强大的逻辑设计仿真测试技术。
1.3本文的主要工作
利用VHDL(Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage)语言设计出来的出租车计费器系统将实现计程模块、计时模块以及动态扫描模块等设计方法与技巧。
计程模块将用计数器来完成,计数器对脉冲数计数,然后提供给程序数据。
通过不同的信号,用比较器可以让我们确定出租车是在车行计程还是车停计时。
再将数据传输到计费模块,通过多种条件判定,最后确定输出值,然后相加确定最后的费用,并显示出来。
2.CPLD、VHDL介绍
2.1CPLD现状及发展
20世纪70年代,最早的可编程逻辑器件——PLD诞生了。
其输出结构是可编程的逻辑宏单元,因为它的硬件结构设计可由软件完成,因而它的设计比纯硬件的数字电路具有很强的灵活性,但其过于简单的结构也使它们只能实现规模较小的电路。
为弥补PLD只能设计小规模电路这一缺陷,推出了复杂可编程逻辑器件——CPLD。
目前应用已深入网络、仪器仪表、汽车电子、数控机床、航天测控设备等方面。
[7]
2.2CPLD的结构与特点
CPLD主要是由可编程逻辑宏单元围绕中心的可编程互连矩阵单元组成。
其中MC结构较复杂,并具有复杂的I/O单元互连结构,可由用户根据需要生成特定的电路结构,完成一定的功能。
由于CPLD内部采用固定长度的金属线进行各逻辑块的互连,所以设计的逻辑电路具有时间可预测性,避免了分段式互连结构时序不完全预测的缺点。
2.2.1CPLD基本结构
经过几十年的发展,许多公司都开发出了CPLD可编程逻辑器件。
PLD的总体结构(以MAX7000为例,其他型号的结构与此都非常相似见图2-1):
图2-1CPLD基本结构
2.2.2CPLD的特点
CPLD具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点,可实现较大规模的电路设计,因此被广泛应用于产品的原型设计和产品生产(一般在10,000件以下)之中。
几乎所有应用中小规模通用数字集成电路的场合均可应用CPLD器件。
CPLD器件已成为电子产品不可缺少的组成部分,它的设计和应用成为电子工程师必备的一种技能。
2.3VHDL设计优点
第一,它是可以用来描述逻辑设计的结构,比如逻辑设计中有多少个子逻辑,而这些子逻辑又是如何连接的。
除此之外,VHDL并不十分关心一个具体逻辑依靠何种方式实现,而是把开发者的精力集中到逻辑所实现的功能上。
第二,VHDL采用类似高级语言的语句格式完成对硬件行为的描述,具备更强的模块化能力,并拥有良好的可读性以及程序的移植性。
第三,VHDL给出逻辑的模拟与调试为设计工作提供了最大的空间。
VHDL调试的过程是相当灵活的:
一方面可以使用传统的调试方法;另一方面,可以使用一些VHDL原码调试器,这类调试器可以大大加快VHDL程序调试的速度[5]。
3.出租车计费器的设计
3.1出租车计费器的总体设计
3.1.1出租车计费标准
计费标准为起步3元,车行3公里后为1.4元/公里,当计费达到20元后,每公里加收50%的车费,车停止每3分钟增加0.7元。
车费显示出来,有一位小数。
3.1.2总体框架设计
图3-1出租车计费器系统结构图
系统接收到reset信号后,总费用变为3元,同时其他计数器、寄存器等全部清零。
系统接收到start信号后,首先把部分寄存器赋值,总费用不变,单价price寄存器通过对总费用的判断后赋为3元。
其他寄存器和计数器等继续保持为0。
速度模块:
通过对速度信号sp的判断,决定变量kinside的值。
Kinside即是行进100m所需要的时钟周期数,然后每行进100m,则产生一个脉冲clkout。
计程模块:
由于一个clkout信号代表行进100m,故通过对clkout计数,可以获得共行进的距离kmcount。
计时模块:
在汽车启动后,当遇到顾客等人或红灯时,出租车采用计时收费的方式。
通过对速度信号sp的判断决定是否开始记录时间。
当sp=0时,开始记录时间。
当时间达到足够长时产生timecount脉冲,并重新计时。
一个timecount脉冲相当于等待的时间达到了时间计费的长度。
计费模块:
由两个进程组成。
其中,一个进程根据条件对enable和price赋值,当记录的距离达到3公里后enable变为1,开始进行每公里收费,当总费用大于20元后,则单价price由原来的1.4元每公里变成2.1元每公里;第二个进程在每个时钟周期判断timeout和clkout的值。
当其为1时,则在总费用上加上相应的费用。
3.2出租车计费器主要模块设计
3.2.1速度模块
速度模块首先根据start信号判断是否开始计费,然后根据输入的速度档位sp的判断,确定行驶100m所需要的时钟数,每前进100m,输出一个clkout信号。
同时由cnt对clk进行计数,当cnt等于kinside时,把clkout信号置1,cnt清0。
VHDL语言程序见附录,模块原件符号如下。
图3-2速度模块框图
3.2.2计程模块
此模块主要用于记录行进的距离,其模块框图如图3-3所示。
通过对clkout信号的计数,可以计算行驶的距离kmcount。
一个clkout脉冲相当于行进100m所以只要记录clkout的脉冲数目即可确定共行进的距离。
Kmcount1为十分位,kmcount2为个位,kmcount3为十位,分别为十进制数。
图3-3计程模块框图
3.2.3计时模块
速度模块主要用于计时收费,记录计程车速度为0的时间(如等待红灯),其模块框图如图3-4所示。
通过对sp信号的判断,当sp=0,开始记录时间。
当时间达到足够长时,产生timecount脉冲,并重新计时。
图3-4计时模块框图
3.2.4计费模块
计费模块如图3-6所示,可分为kmmoney1和kmmoney2两个进程。
Kmmoney1用于产生enable和price信号。
当记录距离达到3km后,enable信号为1,开始进行每公里收费。
当总费用大于40元后,单价price由原来的2元变成4元,用作计时收费。
通过对sp信号的判断,当sp=0,开始记录时间。
当时间达到足够长时,产生timecount脉冲,并重新计时。
Kmmoney2用于判断timecount和clkout的值,当其为1时,总费用加1。
最终输出为总费用。
图3-5计费模块框图
4.整体电路设计
4.1整体电路图
整体电路如图4-1。
硬件电路由CycloneⅡ电路板组成,clk为时钟周期信号,由试验箱产生,start/stop是启动停止按键电路,reset为自动清零电路。
电源又AD-DC开关电源供电。
图4-1整体门电路
4.2电源电路
电源采用了AD-DC开关电源,输入115VAC到230VAC,输出+5V(4A)。
使用开关电源的好处就是比较节省能源,它的转换效率很高,可达85%以上,稳压范围宽,除此之外,还具有稳压精度高、不使用电源变压器等特点。
4.3启动/停止按键电路
如图4-2所示,采用双刀双路开关,一路开关用于清零部分,由于显示部分特殊要求,即计费停止后屏幕上仍然要保持计费的所有信息,只有当下次计费启动时才清零从新开始计费。
另外两路开关,其中一路用于启动指示和启动/停止输出信号给CPLD芯片的I/O口。
当按下键后,清零部分和启动计费部分同时进行,但清零只是瞬间的,计费指示灯两起。
再次按下键后,开关换到另外的两路,空车指示灯亮起。
图4-2启动/停止按键电路
4.4自动清零部分
由于显示部分的特殊要求,即计费停止后屏幕上仍然要保持计费的所有信息,只有当下次计费启动时才清零从新开始计费。
VHDL语言的特殊性,不能在一个结构中用两个不同的动作使其赋值。
所以必须要有一个瞬间清零的信号,当CPLD的清零I/O端口为“1”时就自动清零。
使用电容的充放电功能来实现,按键断开时清零输出端为接地,按键闭合时电容充电清零端为高电平,充完电后清零端输出又为低电平,当按键断开后,通过一个2k欧姆的电阻放电,为下次充电做好准备。
如图4-3所示。
图4-3自动清零电路
5.系统仿真与下载实现
5.1QuartusⅡ软件介绍
QuartusⅡ是Altera公司自行设计的一个完全集成化、易学易用的可编程逻辑设计环境,它提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:
可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;
芯片(电路)平面布局连线编辑;
LogicLock增量设计方法,用户可建立并优化系统,然后添加对原始系统的性能影响较小或无影响的后续模块;
功能强大的逻辑综合工具;
完备的电路功能仿真与时序逻辑仿真工具;
定时/时序分析与关键路径延时分析;
可使用SignalTapⅡ逻辑分析工具进行嵌入式的逻辑分析;
支持软件源文件的添加和创建,并将它们连接起来生成编程文件;
使用组合编译方法可一次完成整体设计流程;
自动定位编译错误;
高效的期间编程与验证工具;
可读入标准的EDIF网表文件、VHDL网表文件、和Verilog网表文件;
能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件;
5.2仿真结果
5.2.1整体仿真
对电路整体进行仿真,得出如下仿真波形图5-1。
图中,当复位信号reset为高电平时,系统所有寄存器、计数器都清零;当开始计费信号start信号有效时,计费器开始计费,根据出租车行驶的速度sp[2..0]的取值计算所用花费和行驶里程;当停止计费信号有效时,计费器停止工作。
图5-1出租车计费器仿真波形图
5.2.2速度模块仿真
速度模块的仿真波形图如图5-2所示。
该模块根据出租车所处的运行状态和不同的形式速度,对相应数目的时钟周期进行计数,车每行驶100m时输出信号clkout输出高电平。
图5-2速度模块仿真波形图
5.2.3计程模块仿真
计程模块的仿真波形如图5-3所示。
图中,当reset信号有效时,系统复位清零;否则,对输入信号clkout进行十进制计数。
图5-3计程模块仿真波形图
5.2.4计时模块仿真
计时模块的仿真波形图如图5-4所示。
预设1000个时钟周期为20s,对时钟周期进行计数,每计1000个时钟周期输出高电平,指示计时20秒。
图5-4计时模块仿真波形图
5.2.5计费模块仿真
计费模块的仿真波形图如图5-5所示。
当reset信号有效时,系统复位清零;否则,当计时计费信号timecount和计程计费信号clkout为高电平时,按照一定计费规则进行计费。
图5-5计费模块仿真功能图
综上所述,本设计的出租车计费器完全符合系统设计的要求,实现了出租车计费器所需的各项基本功能。
5.3设计测试
利用QuartusⅡ6.0对所设计出租车计费器的VHDL代码进行了仿真,并在CycloneⅡ型可编程数字实现系统上实现了该控制。
该数字实现系统分成两部分,一是FPGA的下载板,它主要包括所使用的芯片、RS-232接头、接脚转换插槽等;另一部分是I/O实验板,它主要包括显示、脉冲输出等。
出租车计费器的各部分利用数字实验系统所附的RS-232连接线将计算机中的VHDL代码设计的内容烧录到该实验系统的EPC2C35F672C8芯片中进行测试,测试结果基本实现了总费用=起费用+(里程-3km)×里程单价+等待时间×等待单价的出租车计费模式。
6.总结及展望
本文论述了基于CPLD的出租车计费器设计,分别介绍了整个系统和各个模块的设计,使用CPLD芯片、VHDL硬件描述语言作为设计手段,利用自顶向下的模块化设计思路,通过在QuartusⅡ软件下进行的模拟仿真,并进行相应的硬件下载调试,证明所设计的系统完成了出租车计费器的功能,各项技术指标符合预定标准,具有一定实用性。
由于本人在经验水平上的欠缺,设计中可能存在很多不足,请各位老师予以指证!
近年来,CPLD在通信、控制、数据计算等领域得到了广泛的应用,利用CPLD来设计电子产品可减少电子系统的开发风险和开发成本;缩短了上市时间;通过在系统编程、远程在线重构等技术降低维护升级成本。
并且,CPLD器件的成本越来越低,这些都说明可编程器件已成为现在及未来很长一段时间的主流,用它来实现的出租车计费器省去很多外围电路,稳定,简单有效,将来必然可以设计出更多更强大的功能,提高产品竞争力。
未来基于CPLD平台的出租车计费器将会有更低的成本、更小的体积、更安全、更精确和更多功能。
致谢
本次设计从选题到最后完成,都得到了指导老师邵利敏老师的悉心指导。
邵老师渊博的知识、严谨的治学态度和诲人不倦的精神永远是我学习的榜样。
在系统设计过程中,我也遇到了较多的困难,我十分感谢我的朋友和老师给与我的帮助和支持,使我能顺利完成本系统的设计与实现。
参考文献
[1]江国强.EDA技术与应用[M].西安:
电子科技大学出版社,2000,310-312.
[2]潘松,黄继业.EDA技术与VHDL[M].北京:
清华大学出版社,2005,220-228.
[3]甘登岱,田富鹏,朱利娜.EDA培训教程[M].南京:
机械工业出版社,1998,215-220.
[4]延明,张霖华.数字电路EDA入门[M].北京:
邮电大学出版社,2002,195-200.
[5]林愿.基于CPLD/FPGA的出租车计费系统的设计实现[M].西安:
电子科学出版社,2003,94-101.
[6]何宾.EDA原理及应用.北京:
清华大学出版社,2009.
附录
VHDL程序
Speed模块
libraryieee;--加载库文件
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityspeedis
port(--定义输入输出端口
clk:
instd_logic;
reset:
instd_logic;
start:
instd_logic;
stop:
instd_logic;
sp:
instd_logic_vector(2downto0);
clkout:
outstd_logic
);
endspeed;
architecturertlofspeedis
begin
process(clk,reset,start,stop,sp)--敏感信号发生变化时,启动进程
typestate_typeis(s0,s1);--枚举类型;
variables_state:
state_type;
variablecnt:
integerrange0to28;
variablekinside:
integerrange0to30;
begin
casespis--速度选择
when"000"=>kinside:
=0;--停止状态或空档
when"001"=>kinside:
=28;--第一档
when"010"=>kinside:
=24;--第二档
when"011"=>kinside:
=20;--第三档
when"100"=>kinside:
=16;--第四档
when"101"=>kinside:
=12;--第五档
when"110"=>kinside:
=8;--第六档
when"111"=>kinside:
=4;--第七档
endcase;
ifreset='1'then--复位清零
s_state:
=s0;
elsifclk'eventandclk='1'then--时钟上升沿到达时,状态转换
cases_stateis
whens0=>
cnt:
=0;
clkout<='0';
ifstart='1'then
s_state:
=s1;
else
s_state:
=s0;
endif;
whens1=>
clkout<='0';
ifstop='1'then
s_state:
=s0;--相当于无客上车
elsifsp="000"then
s_state:
=s1;--有客上车但车速为0,即刚上车还未起步
elsifcnt=kinsidethen
cnt:
=0;
clkout<='1';
s_state:
=s1;
else
cnt:
=cnt+1;
s_state:
=s1;
endif;
endcase;
endif;
endprocess;
endrtl;
1)Times模块
libraryieee;--加载库文件
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytimesis
port(--定义输入输出端口
clk:
instd_logic;
reset:
instd_logic;
start:
instd_logic;
stop:
instd_logic;
sp:
instd_logic_vector(2downto0);
timecount:
outstd_logic
);
endtimes;
architecturertloftimesis
begin
process(reset,clk,sp,stop,start)--启动进程
typestate_typeis(t0,t1,t2);
variablet_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 cpld 出租车 计费 系统 设计