基于单片机和CPLD的出租车计费系统资料Word文档格式.docx
《基于单片机和CPLD的出租车计费系统资料Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机和CPLD的出租车计费系统资料Word文档格式.docx(33页珍藏版)》请在冰豆网上搜索。
3.2.6单片机控制程序设计13
3.3CPLD17
3.3.1CPLD的基本结构18
3.3.2CPLD的特点18
3.3.3EP1K30管脚分配19
3.4显示及按键控制系统20
3.3.1LED数码管20
3.3.2数据显示电路的设计21
3.5稳压电源22
第4章系统检测及分析25
4.1系统仿真/硬件验证25
4.1.1系统的调试方法25
4.1.2系统的硬件验证25
4.2设计技巧分析26
附录A:
FPGA芯片引脚28
摘要
本系统电源电压为+16V,速度传感器具有汽车每运行一圈提供1个脉冲信号的特性。
显示器可以采用LED数码管。
系统采用单片机和CPLD/FPGA的结合进行系统的主体设计,单片机MCU芯片通过采集传感器脉冲信号进行里程计算,里程计费,利用内部定时器T0产生标准时钟信号,以计算等待时间,等待费用,同时将有关计算结果通过P0、P2口传送给CPLD/FPGA芯片。
CPLD/FPGA主要完成键盘扫描,显示控制,还通过普通I/O口与单片机进行数据交换。
本设计方案利用单片机和CPLD/FPGA的结合,发挥它们各自的长处,分工清晰,实际使用和操作符合大众逻辑,容易被人接受。
而且,单片机丰富的I/O口和CPLD/FPGA模块化的设计为系统功能的扩展提供了空间和便利。
关键词:
计费系统;
单片机;
CPLD/FPGA芯片
Abstract
Thepowersupplyvoltageis+16V,speedsensorprovidedwithacareachlaprunapulsesignalcharacteristics.LEDdigitaldisplaycanbeused.ThesystemusesMCUandCPLD/FPGAsystematiccombinationofthemaindesign,MCUMCUchipsensorpulsesignalbycollectingmileagecalculation,metered,usinginternaltimerT0generatesstandardclocksignaltocalculatethewaitingtime,waitingcosts,whiletherelevantcalculationsbyP0,P2porttosendtotheCPLD/FPGAchip.CPLD/FPGAmainlytocompletethekeyboardscanning,displaycontrol,butalsobythegeneralI/Oportfordataexchangewiththemicrocontroller.ThisdesigncombinedwiththeuseofSCMandCPLD/FPGA,toplaytheirrespectivestrengths,divisionoflaborisclear,practicaluseandoperatinginlinewithpubliclogic,easytobeaccepted.Moreover,expansionofthesystemfunctionalityandconveniencemicrocontrollerprovidesabundantspaceforI/OportandCPLD/FPGAmodulardesign.
Keywords:
billingsystem;
SCM;
CPLD/FPGA
第1章绪论
1.1课题背景及目的
在我国社会经济的全面发展过程中,各大中小城市的出租车营运事业也迅速发展,出租车已经成为人们日常出行选择较为普遍的交通工具。
出租车计价器是出租车营运收费的专用智能化仪表,是出租车市场规范化、标准化以及减少司机与乘客之间发生纠纷的重要设备。
一种功能完备、简单易用、计量准确的出租车计价器是加强出租车行业管理、提高服务质量的必备品。
当计费系统在各大、中城市出租车中使用越来越广泛,用户对计费器的要求也越来越高。
以出租车多功能计费器为例,用户不仅要求计费器性能稳定,计费准确,有防作弊功能;
同时还要求其具有车票打印、语音报话识别、电脑串行通信及税控等功能;
不同国家和地区的收费方式存在差异,即使在同一地区,不同车型的出租车其收费方式也有差别,而且出租车还面临几年一次的调价或调整收费方式等问题。
传统的基于单片机设计的出租车多功能计费器已远远跟不上这种变化,功能升级很繁琐,需要硬件重组和软件更新同步进行,成本高,并且每次升级都可能出现新的不稳定因素;
而基于现场可编程逻辑阵列的出租车多功能计费器,采用硬件描述语言VerilogHDL和逻辑综合为基础的自顶向下的电路设计方法,开发成本低,周期短,可靠性高,功能升级方便,满足了用户的要求。
该系统在不改变硬件电路的前提下,具有可以重构系统的功能;
采用完全相同电路结构,只要根据各地区的要求在VerilogHDL程序中设置各参数,就可以适应各地区出租车不同计费标准的需要,还可以根据各地区需求增加其他功能[1]。
1.2国内外研究状况
从国内外的各种研究方法来看,实现出租车计费系统总共有三种方案。
利用大规模的数字逻辑器件来实现,利用89C51实现,利用CPLD来实现。
二十世纪后半期,数字系统得到了飞速发展,同时为了提高系统的可靠性与通用性,微处理器和专业集成电路逐渐取代了通用全硬件电路。
目前,业界大量可编程逻辑器件,尤其是现场可编程器件被大量地应用在集成电路的制作当中[2]。
理想的可编程逻辑开发系统能符合大量的设计要求:
它能支持不同结构的器件。
在多种平台运行,提供易于使用的界面,并且有广泛的特征。
可编程器件的逻辑功能描述一般分为原理图描述和硬件语言描述,原理图描述是一种直观简便的方法,它可以讲现有的小规模集成电路实现的功能直接用可编程器件来实现,而不必去将现有的电路用语言来描述,但电路图描述方法无法做到简练。
而语言描述可以精确和简练地表示电路的逻辑功能,现在可编程器件的设计过程中广泛使用。
常用的硬件描述语言有ABEL、VHDL语言等,其中VHDL语言是一种行为描述语言,其编程结构类似于计算机中的C语言,在描述复杂逻辑设计时,非常简洁,具有很强的逻辑描述和仿真能力,是未来硬件设计语言的主流。
1.3课题研究方法
在分析了相关资料的基础上,首先了解了出租车计费系统的重要性,国内外实现该系统的不同方法。
在方案的选择上,对比了各个方案的优缺点,并对现有的计费系统进行了更新,使它能够更好的满足不同的要求。
采用软件仿真方法对计费系统进行仿真,模拟电动机输出信号,设置初始值,得出仿真波形并进行观察。
1.4论文构成及研究内容
论文包括绪论、出租车计费系统的设计、外围电路、结论等四大部分组成。
核心部分是设计说明部分和单片机、CPLD程序设计部分。
本文的的基本框架为:
在方案的论证和设计说明部分一章中,同时介绍了总体设计框架,并对各个部分进行了详细说明。
在计费系统的实现一章中,介绍了计费系统的相关外围电路,使系统更完善。
第2章系统设计
2.1系统组成
其中系统电源电压为+16V。
速度传感器不需要进行设计,假设它具有汽车每运行一圈提供1个脉冲信号的特性。
显示器采用LED数码管。
具体功能要求如下:
图2.1系统方框图
2.1.1计费及显示
①里程,即汽车行程里程,用四位数字显示,显示方式为“XXX.X”,单位为㎞,精确到0.1㎞。
②单价,即里程单价,用三位数字显示,显示方式为“X.X”,单价为元/㎞,根据每天不同的时间段有两种情况:
当时间段为06:
00~23:
00时单价为1.4元/㎞,其他时间段内单价为1.80元/㎞。
③等候时间,用四位数字显示分钟和秒,显示方式为“XX-XX”,等候的定义是:
当汽车行驶速度小于或等于12㎞/h时为“等候”。
在等候时间大于1小时的情况下,可以不显示等候时间,但必须对等候时间进行统计计算。
④等候单价,等候单价有两种情况:
在等候时间小于1小时的情况下,等候单价为1元每5分钟;
在等候时间大于1小时的情况下,等候单价为20元每小时。
⑤费用的计算,出租车的起价为7.00元,当里程小于2㎞时,按起价计算费用;
当里程大于2㎞时按下式计算费用:
费用=里程*里程单价+等候时间*等候单价。
⑥费用的显示,用四位数字显示,显示方式为“XXX.X”,单价为元。
2.1.2时钟及显示
当出租车在通常运行状态下,应能显示当前的时间,在汽车熄火的情况下,时钟必须正常运行,但是可以不显示时钟.
2.1.3计费开始提示
当出租车载上乘客并起步后,将空车指示牌扳倒时,空车指示牌里的指示灯熄灭,并有语音或灯光提示信号。
图2.2总体原理框图
2.2功能模块设计
根据系统的设计要求,将整个计费系统分为两个大的模块,单片机模块与CPLD模块,单片机模块分为:
等待判别,里程计算,等待计时,参数调整。
CPLD模块分为:
按键处理模块,数据整合模块,数码管扫描显示模块。
单片机模块:
等待判别模块:
根据速度传感器脉冲信号WCLK和定时器中断产生的基准时钟信号,本系统的传感器与单片机的外部中断0即P3^2口相连,每次来个脉冲就会触发一次外部中断,同时就会关闭定时器中断T1,DDBZ=0,当没有脉冲来时就会打开定时中断T1,当5秒内还没脉冲系统就会判断此时出租车为等待状态,DDBZ=1;
开启等待计时。
里程计算模块LCJS:
根据速度传感器脉冲信号WCLK,对出租车行驶的里程数进行计算,同时发出里程标志信号LC和里程计费标志信号。
当LC>
2000说明没超过2㎞,按起价计费,当LC>
2000时进行里程计费,每行驶100M应计费1次。
里程计费模块LCJF:
计算行驶里程LC超过2㎞以上里程的费用。
里程计费的条件是在DDBZ=0,并且根据SDBZ分别进行加法计费操作。
当SDBZ=1时,表示在06:
00时段,其单价SD1为1.4元/㎞;
当SDBZ=0时,表示其他时段,其单价SD2为1.8元/㎞。
如果LCBZ=1,说明行驶距离超过2㎞,里程计费启动;
如果LC<
2000,说明没超过2㎞,按起价计费。
等待计时模块:
在等待标志信号DDBZ控制下,进行等待时间的计算,等待计时用定时器T0计算等待的时间,确保时间的准确无误,同时根据等待时间的长短发出一个熄灯标志信号XDBZ。
当等待时间小于等于1小时,XDBZ=0,等待时间显示灯亮;
当等待时间大于1小时,XDBZ=1,等待时间显示不亮。
通过XDBZ来计算不同时间段的等待费用。
等待计费模块DDJF:
在等待标志信号DDBZ和熄灯标志信号XDBZ控制下,进行等待费用DDFY的计费操作。
当DDBZ=1且XDBZ=0时,按1元/5分钟,即20分/分钟计费;
当DDBZ=0且XDBZ=1时,按20元/小时,即33分/分钟计费。
输出数据选择模块SCXZ:
根据单片机发出的数据传输选择控制信号SEL,选择有关计算处理结果传输给单片机。
第3章硬件及软件实现
3.1传感器及其测量系统
3.1.1传感器的选择
测速,首先要解决是采样的问题。
使用单片机进行测速,可以使用简单的脉冲计数法。
只要转轴每旋转一周,产生一个或固定的多个脉冲,将脉冲送入单片机中进行计算,即可获得转速的信息。
常用的测速元件有霍尔传感器、光电传感器和光电编码器。
里程测量传感器的选择也有以下几种方案:
使用光敏电阻对里程进行测量、利用编码器对车轮的圈数进行测量、利用霍尔传感器对里程进行测量、利用干簧管型传感器测量里程。
光敏电阻对光特别敏感,当白天行驶时,外界光源将导致光敏电阻发出错误信号;
光敏电阻对环境的要求相当高,如果光敏或发光二极管被泥沙或灰尘所覆盖,光敏电阻就不能再进行准确测量;
而编码器必须安装在车轴上,安装较为复杂;
霍尔元件或干簧管不但不受天气的影响,即使被泥沙或灰尘覆盖也不会有影响,而且安装方便。
所以本设计采用霍尔元件对里程与速度进行测量,既简单易行,又经济适用。
使用霍尔传感器获得脉冲信号,其机械结构也可以做得较为简单,只要在转轴的齿轮盘上粘上一粒磁钢,霍尔元件固定在前叉上,当车子转动时霍尔元件靠近磁钢,就有信号输出,转轴旋转时,就会不断地产生脉冲信号输出。
如果在齿轮盘上粘上多粒磁钢,可以实现旋转一周,获得多个脉冲输出。
在粘磁钢时要注意,霍尔传感器对磁场方向敏感,粘之前可以先手动接近一下传感器,如果没有信号输出,可以换一个方向再试。
这种传感器不怕灰尘、油污,在工业现场应用广泛。
霍尔传感器是对磁敏感的传感元件,常用于信号采集的有A44E,该传感器是一个3端器件,外形与三极管相似,只要接上电源、地,即可工作,工作电压范围宽,使用非常方便。
A44E的外形如图2.1所示。
1-Vcc2-GND3-OUT
图2.1A44E外形图
本次设计信号的捕获采用的是霍尔传感器。
霍尔器件具有许多优点,它们的结构牢固、体积小、重量轻、寿命长、安装方便、功耗小、频率高(可达1MHz)、耐震动、不怕灰尘、油污、水汽及烟雾等的污染或腐蚀。
霍尔线性器件的精度高、线性度好;
霍尔开关器件无触点、无磨损、输出波形清晰、无抖动、无回跳、位置重复精度高。
取用各种补偿和保护措施的霍尔器件工作温度范围宽,可达-55℃~150℃。
按照霍尔器件的功能可将它们分为:
霍尔线性器件和霍尔开关器件,前者输出模拟量,后者输出数字量。
按被检测对象的性质可将它们的应用分为:
直接应用和间接应用。
前者是直接检测出受检测对象本身的磁场或磁特性,后者是检测受检对象上人为设置的磁场,用这个磁场来作被检测的信息的载体。
通过它,将许多非电、非磁的物理量例如力、力矩、位置、位移、速度、加速度、角度、角速度、转数、转速以及工作状态发生变化的时间等,转变成电量来进行检测和控制。
运用霍尔元件作为检测传感器,将霍尔传感器安装在靠近圆盘的固定位置上,并在圆盘上分别安装上8个磁钢,当磁钢转到霍尔附近时,霍尔元件的输出端输出低电平信号。
当转盘转动时,单片机可通过对脉冲信号的计数,从而能方便地测出转盘的运转速度。
具体结构与电路如图下图所示。
3.1.2霍尔传感器的测量原理
霍尔传感器是利用霍尔效应制成的一种磁敏传感器。
在置于磁场中的导体或半导体通入电流I,若电流垂直磁场B,则在与磁场和电流都垂直的方向上会出现一个电势差Uh,这种现象称为霍尔效应。
利用霍尔效应制成的元件称为霍尔元件。
因为它具有结构简单、频率响应宽、灵敏度高、测量线性范围大、抗干扰能力强以及体积小、使用寿命长等一系列特点,因此被广泛应用于测量、自动控制及信息处理等领域。
霍尔效应原理图如图3.1所示。
图3.1霍尔效应原理图
3.1.3集成开关型霍尔传感器
A44E集成霍尔开关由稳压器A、霍尔电势发生器(即硅霍尔片)B、差分放大器C、施密特触发器D和OC门输出E五个基本部分组成,如图3.2(a)所示。
(1)、
(2)、(3)代表集成霍尔开关的三个引出端点。
在电源端加电压Vcc,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍尔电势差VH输出,该VH信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。
当施加的磁场达到工作点时,触发器输出高电压(相对于地电位),使三极管导通,此时OC门输出端输出低电压,通常称这种状态为开。
当施加的磁场达到释放点时,触发器输出低电压,三极管截止,使OC门输出高电压,这种状态为关。
这样两次电压变换,使霍尔开关完成了一次开关动作。
工作点与释放点的差值一定,此差值称为磁滞,在此差值内,V0保持不变,因而使开关输出稳定可靠,这也就是集电成霍尔开关传感器优良特性之一。
传感器主要特性是它的输出特性,即输入磁感应强度B与输出电压V0之间的关系。
A44E集成霍尔开关是单稳态型,由测量数据作出的输出特性曲线如图3.2(b)所示。
测量时,在1、2两端加5V直流电压,在输出端3与1之间接一个2k的负载电阻,如图3.3所示。
图3.2集成开关型霍尔传感器
图3.3集成霍尔开关接线图
3.2单片机
单片机既是一个微型的计算机,它具有组成计算机系统的三个要素:
CPU、内存与I/O。
CPU:
运算或逻辑上的判断;
内存:
存放程序与数据;
I/O:
与外界沟通的桥梁。
图3.2.1单片机简图
3.2.18051单片机功能方块图
图3.2.28051单片机功能方块图
振荡及时序单元(OSC):
8051内部有晶体振荡电路,只要在外部加上石英振荡晶体,即可产生频率非常稳定的振荡信号,这个振荡信号正是8051的心脏,所有8051的时钟序列都以此振荡信号为基准。
内部数据存储器(DataMemory):
当程序在运行时,有些数据是经常在变动的,例如LED的显示状态或显示值等,它会因I/O测量的结果而变动,这些值就暂时放置在此区域中,供其他程序进一步读取,这也代表此区域是可以随时读写的。
8051系列的CPU提供128个字节可读写的数据存储单元,52系列的CPU则提供256个字节的数据存储单元,这个数据区域中有一段区域16个字节共128位是可以进行位寻址的,MCS—51系列的CPU有相当强的位处理指令,可以妥善且有效地运用该数据存储器,使用方法将在8051的指令说明中再详述。
内部程序存储器(Programmemory):
这段区域用于存放我们的应用程序,而且这部分一经确认后是永远不做修改的。
8051系列的CPU提供内部4096个字节(4KB)的程序存储器,8052系列的CPU则提供2倍即8192个字节(8KB)的程序存储器,而8031和8032则不含此单元。
此单元可以使CPU选择由内部的程序区启动或由外部的程序区启动,内部的程序区启动具有保护功能,后者成本较为低廉。
在8051系统中特地将程序区和数据区分隔开,两者最大的差异是后者可以读取和写入,简而言之,PROGRAMMEMORY就是ROM,DATAMEMORY则是RAM。
定时/计数器(Timer/Counter):
51系列的CPU有2个定时/计数器,而52系列CPU则有3个定时/计数器,每个定时/计数器又有多种模式可供选择。
串行接口(SerialPort):
8051可通过此接口与外部的计算机等设备连线交换信息,也可以通过此接口进行I/O的扩充。
并行输入/出端口(ParelledI/O):
不论是8051或8052单片机都有4个输入/出端口,总共有32个输入/出,而且每个点都可以单独定义成输入或输出。
控制总线(BusControl):
当程序的空间超出MSC—51系列内存程序空间的限制时,会通过本单元的控制线路向外部送出地址线信号和控制信号,同时当程序执行MOVX@DPTR,A指令时,代表对外部数据内存做写入的运行,此时也要靠本单元送出必要的控制信号,才能达成外部READ与WRITE的运行请求。
8051运算处理单元(Core):
这是整个单片机的控制处理核心,它读取程序码,经过计算及处理后,将结果送到各个寄存器或输入/输出端口上,并且接受内部和外部的中断信号,然后执行特定的中断服务程序。
只要加入电源并且石英晶体开始运行后,本单元就一直不停地工作着,通常我们所谓的死机是指本单元跳入一个未知没有出口的循环中执行,而不是指CPU停止一切的运行,不再执行任何程序。
累加器(Accumulator):
累加器是众多寄存器中最重要的一个寄存器,通常以简写Acc代表累加器,8051的指令中有许多指令和Acc寄存器有关,也有多个指令非通过Acc不可,基本上,8051的指令中赋予Acc累加器的权限最大。
Intel公司建议程序的执行尽量以Acc为主。
B寄存器(BRegister):
B寄存器是一个一般用途的工作寄存器,当8051使用乘除指令时,则一定要通过B寄存器来做运算。
中断优先顺序控制寄存器(IPC,InterruptPriorityControl):
这个寄存器中存放中断时的优先顺序表,若对应的位设成1时,代表中断有较高的中断优先权。
允许中断控制寄存器(IEC,InterruptEnableControl):
此寄存器内含系统允许中断的中断源设置值,8051共有5个中断可供选择,8052则有6个中断源,IEC寄存器内另有一个位简称
位,若
=0时就禁止系统所有的中断要求。
串行输出入缓冲寄存器(SBUF,SerialBuffer):
所有待送出或刚进入的串行数据值都存放在此寄存器中,8051的串行通信是非常简单的,只要一设置完通信协议后,再执行一个MOVSBUF,A指令,就可立即将并行数据值转化成串行数据送到外部。
串行通信控制寄存器(SCON,SerialControL或称UART):
此寄存器主要在设置串行通信的模式,当串行数据已经送完或数据已收妥时,会有对应的位被设置成1,这些位也可以当成中断要求信号,请求CPU执行特定的串行中断服务程序。
定时/计数控制寄存器(TCON,Timer/CounterControl):
这个寄存器可以控制定时/计数器的打开或关闭,若一经打开且计数到溢位时,TCON上亦有对应的位被设成1,CPU必须针对此位的状态,决定是否重新设置定时/计数值。
堆栈指标寄存器(SP,StackPointer):
8051利用SP指引最近一次存入堆栈内的地址,每当我们在程序中调用其他子程序时,原程序的返回地址就会自动存入内部DATAMEMORY组成的堆栈(Stack)中,而当子程序执行到RET指令时,CPU会自动由堆栈中取回原先存入的返回地址,继续执行原程序。
每当CPU将8位值存入堆栈时,我们称之为PUSH(推入),这时SP值会增加1,反之堆栈中取回8位值时,则称之为POP(提回),此时SP值会减少1。
在写8051单片机的控制程序时,在程序起始状态阶段一定要设置SP值,以便程序有足够的堆栈空间,也可以利用软件程序随时机动调整的堆栈指标SP的值。
特殊功能寄存器区(SFR,SpecialFunctionRegister)
8051单片机内部将多个寄存器统称成SFR,代表其特定的功能,甚至Port0、Port1、Port3也都是属SFR的成员之一,在这些SFR中有部分的寄存器可以进行位寻址,表4.1是这些SFR寄存器的整理,其中加(*)记号的寄存器可进行位寻址。
表3.1