基于CPLD的出租车计价器设计

2024-07-13

基于CPLD的出租车计价器设计(11篇)

1.基于CPLD的出租车计价器设计 篇一

0 引言

出租车作为城市交通中独特的交通工具,在城市交通运营中具有不可替代的重要作用。出租车司机最关心计价器的营运数据管理是否方便,而乘客往往最在意出租车计价计费是否合理。为了减少出租车司机和乘客间不必要的误会,设计既能准确计价又能方便使用的计价器显得非常重要。

科技在不断发展,社会在快速进步,出租车计价系统也需不断地得到优化。文中以嵌入式单片机AT89C51为主控MCU,设计多功能出租车智能计价器。此计价器能够按实际情况综合计价,并将乘车用时、行驶里程和乘车费用等重要信息显示出来,具有功能更齐全、系统更稳定、使用更方便等优势。出租车智能计价系统总体设计

利用AT89C51作为单片机核心器件设计的智能计价系统,使用方便、灵敏性好,其强大的控制处理功能和可扩展功能为设计电路提供了很好的选择。利用其I/O端口及其控制的多功能特点,采用按键控制进行分屏显示,实现基本乘车计价和信息显示功能。

在系统硬件设计中,以AT89C51单片机为控制中心,外接A44E霍尔传感器信号采集模块、时钟模块、按键模块、显示模块以及掉电保护存储模块。其中,选用A44E霍尔传感器信号采集模块可将磁感应转换为脉冲信号,从而计测出行车里程;时钟模块采用DS1302芯片,设置标准时钟;掉电存储模块采用AT24C02芯片,以确保掉电时数据自动保存在存储单元;当系统重新上电时,能自动读取数据;按键模块采用四个按键控制,可实现分屏显示功能;显示模块采用8位LED数码管进行显示。系统软件设计

2.1 系统主程序

在主程序模块中,不仅需要完成参量和接口的初始化设计、出租车起步价和单价的设置以及中断、计算等操作,还应设置启动/清除标志、里程以及价格寄存器,并对其进行初始化。最后,为实现寄存器中内容的完整性及精确性,主程序应能分别完成启动、清除、计程及计费等操作。

当出租车起步运行时,计价器同时启动开始计价,根据里程寄存器中的存储数据进行运算并判别行驶路程是否超过起步价的里程。若已超过起步价里程,则根据里程值、单价数和起步价等来综合计算当前的乘车费用;当处于等待时段时,若无脉冲输入,不产生中断,一旦等待时间超过预设时间则会把等待超标费用另加到乘车总费用中,并显示相关信息。

2.2 系统模块程序

系统模块程序主要包括五个服务程序:显示子程序、里程计数中断、定时中断、中途等待中断和按键服务程序。各服务程序介绍如下:

(1)显示子程序。由于采取的是分屏数据显示方式,因此需要用到4 款显示子程序:时、分、秒的显示,金额单价的显示,路程单价的显示以及标准时间的显示。

(2)里程计数中断。霍耳传感器每输出一个低电平信号便中断一次,当里程计数器计满1000个里程脉冲时,便将当前计数送至里程计数中断服务程序,并将当前行车里程及相关数据传至行车里程与乘车费用寄存器中。

(3)定时中断。在定时中断服务程序中,设置一次中断时间为50ms,20 次中断时间为1s,计满1s后将数据送到相应显示单元实时显示。

(4)中途等待中断。在计数状态下霍耳开关无信号输出时,片内定时器启动。等待计时每达到5分钟,就会在当前金额基础上自动加上中途等待费用。等待结束后计价系统自动转换到正常计价程序。

(5)按键服务程序。按键服务采取查询模式,设置在主程序中。当无按键按下时,单片机循环运行主程序;按键被按下,则转向运行相应子程序,并进行其他操作处理。系统仿真与功能实现

3.1 仿真软件Proteus简介

Proteus仿真软件是英国Labcenter Electronics公司设计开发的EDA工具,它不但拥有其它工具软件的仿真功能,而且可仿真微处理器和相关外围设备。Proteus软件功能强大:拥有Proteus电子设计工具,就等同搭建了一个电子设计和分析平台。利用功能强大的Proteus仿真软件,我们可以实现对电路的仿真,以确定方案是否可行,并且可使设计过程流畅。

3.2 电路功能仿真

首先通过Proteus平台搭建电路,然后在KEIL中编写相应代码,并将生成的HEX文件在Proteus平台单片机模型中加载,便可看到仿真效果。系统实验及结果分析

按原理图进行焊接,确保接线无误后。对实物进行调试与实验。实验结果表明,利用AT89C51主控,霍尔传感器进行采集,AT24C02进行掉电存储保护,配以程序,就能较好地实现出租车智能计价功能。结论

文中设计的出租车智能计价系统能够实时存储相关数据,并通过8位LED数码管分屏显示存储数据,实现基本的计价功能。本系统对乘车中可能出现的情况考虑较全面,能根据白天、夜晚、中途等待等不同情况来调节单价,从而达到出租车智能计价的目的。当然,要达到大规模的实际应用要求,还需不断改进和完善系统综合性能指标,以达到实际应用要求。

2.基于CPLD的出租车计价器设计 篇二

随着社会的进步,出租车已经越来越贴近生活,成为我们重要的交通工具,影响着我们现在的生活出行,出租文化已成为一种显著的文化,成为社会生活必不可少的组成部分。出租汽车服务行业和出租汽车计价器紧密相关,计价器计价的公平与否,直接关系到运营者和消费者的经济利益。本文在综合不同时段、不同天气、不同场景下,介绍一种以霍尔传感器为基础,MCS51单片机为控制核心的简易出租车计价系统,设计出一简易出租车计价系统。

系统整体方案设计

系统整体由电源电路、MCS51单片机控制电路、键盘控制电路、霍尔传感器电路、时钟电路、掉电存储电路、显示电路组成,如图1所示。

系统硬件电路设计

A44E集成开关型霍耳传感器电路

为准确测量出租车行驶里程,本系统采用A44E集成开关型霍耳传感器进行测距,汽车连轴器按圆周间隔嵌入磁钢,用霍尔传感器集成芯片A44E检测并输出脉冲,得到的标准脉冲信号送入单片机的定时T1口记录霍尔传感器产生的脉冲数,根据汽车轮胎周长,即可计算出行驶里程。霍尔传感器集成芯片A44E有信号转换、电压放大、整形输出等功能,为增加其抗干扰的能力,经过74LS14对信号整形后再通过光耦送入单片机T1口。如图2所示。

数据显示单元电路

在单片机应用系统中常用的显示器主要有发光二极管、数码显示器(简称LED显示器)和液晶显示器(简称LCD显示器)。LCD显示器具有耗电少、成本低廉、配置简单灵活、安装方便、耐振动、使用寿命长等优点。鉴于出租车计价器要求较为简单,本系统采用LCD1602液晶显示模块,电路如图3所示。

时钟电路设计

时钟模块是用于数据记录,特别是对某些具有特殊意义的数据点的记录,在本系统中时钟模块主要为计价器提供精准的时间计时及不同时间的单价转换提供依据。若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源。故在系统中采用时钟芯片DS1302与单片机相连,该接口电路简单,电路稳定,数据输入/输出脚、同步脉冲输入脚、片选脚分别接单片机模拟串口脚即可。实际上,在调试程序时可以不加电容器,只加一个32.768kHz的晶振即可实现所需的功能。电路如图4所示。

数据存储电路

数据存储主要用于存储当前已设定的单价信息,系统断电后当前设定单价不丢失,并且存储已载乘客消费信息。本设计中采用的是AT24C02。设计电路如图5所示。

AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址(实验板中直接接地的只有一块器件);第8脚和第4脚分别为正、负电源。第5脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送,SDA和SCL都需要和正电源间各接一个5.1kΩ的电阻做为上拉电阻。第7脚为WP写保护端,接地时允许芯片执行一般的读写操作,接电源端时不允许对器件写。AT24C02中带有片内地址寄存器,每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写,所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。

系统软件设计

系统上电后采用手动单片机复位,按下S1键完成复位。当出租车载客时,司机按下S2开始键,系统检测霍尔传感器脉冲信号并开始计价;根据不同时间段、不同场合、不同天气下,按下S3键改变每公里计算单价;乘客下车时按下S4键计价结束;按下S5键切换屏幕显示。屏幕显示分为以下几个部分:第一屏显示总价、里程、每公里单价;第二屏显示当前时间;第三屏显示行车过程中总共等待时间即停车时间。

设出租车行驶m公里,每公里花费s元,行车过程中等待时间为t,计价显示费用S,那么,当m大于初始公里数时:

当m小于等于初始公里数时,

整体流程图如图6所示。

结论

51单片机程序在KeiL C51 uVision下编写,利用Proteus进行仿真,结果如图7所示。

利用函数信号发生器代替霍尔传感器产生PWM波输入单片机p3.5口,利用debug调试,结果如图8所示。

经实验仿真结果证明,该出租车计价器能够达到设计要求,给出了各功能单元的设计方法,详细分析了其中的原理。并通过了真实的实验验证,满足出租车分时、分场景计价功能。该系统设计简单,成本低,具有广阔的市场前景。

摘要:在分析现有出租车计价器的基础上,介绍一种以MCS51单片机为控制核心,采用A44E集成开关型霍耳传感器进行测距,LCD1602液晶显示模块作为费用显示,采用DS1302实时时钟电路模块、AT24C02外部数据存储模块等,设计出一简易出租车计价系统。本文给出了硬件电路及主程序流程,阐述了软、硬件设计过程中关键技术的处理方法。经Proteus软件仿真表明:该系统功能运行稳定,计费准确,满足出租车分时、分场景计价功能,能够达到实际应用目的。

关键词:MCS51,霍尔传感器,计价器,DS1302,AT24C02

参考文献

[1]陈伟宏,肖卫初,邱飚.基于Proteus的多功能出租车计价器设计[J].重庆工学院学报.2009,(06):45-49

[2]王波.基于Proteus+AT24C02出租车计价器设计[J].西安航空技术高等专科学校学报,2011,(05):56-60

[3]张颖.多功能出租车计价器的设计[J].广西轻工业,2009,(09):38-43

[4]凌璟.基于VHDL的出租车计价器设计[J].自动化应用,2010,(02):109-113

[5]邱丽芳,李益华.出租车税控计价器的设计[J].电子仪器仪表,1999,(03):90-94

[6]张雄伟.单片机的原理与开发应用(第三版)[M].2003:78-81

[7]孟中.基于EDA层次化设计方法的出租车计费器设计[J].现代电子技术,2011,(16):35-40

[8]王翠.基于FPGA的出租车计价系统设计[J].现代电子技术.2012,(05):112-115

[9]蓝厚荣.单片机驱动L E D数码管的方法[J].电气时代,2008,(04):132-137

3.基于CPLD的出租车计价器设计 篇三

关键词:出租车 计价器检定 常见问题

中图分类号:U463.7 文献标识码:A 文章编号:1672-3791(2014)08(a)-0242-01

随着出租车的数量的不断攀升,人们在对出租车计价器进行检定的过程中,应该严格检查计价器、空车牌以及传感器线路等设施,严厉禁止出租车车主针对计价器传感器线路采取私自乱接脉冲信号等不良现象,避免侵害广大消费者的合法权益。最近几年,社会上常常在发生部分出租车司机利用检定前后更换轮胎的手段,损害消费者的切身利益,同时我国现行的《出租车汽车计价器》的检定规程,却未明确规定所检定的出租车轮胎应和检定的车辆车型保持充分相符。此外,一些装有电子车速仪器的出租车,在进行出租车计价器安装的过程中,摒弃了计价器传感器,而是使用电子分频器引用电子车速里程表的脉冲信号,这样的做法是显然不正确的,因此应予以彻底改正。以下笔者将通过本文,针对出租车计价器检定中的常见问题进行阐述。

1 出租车计价器检定过程中总结的相关问题

在对出租车计价器使用误差进行检定的过程中,需要明确所检定的计价器常数(K)和出租车的特征系数(W)之间是否具有一致性。K指的是出租车计价器为正确显示出租车1公里路程所必须接收的脉冲数,而出租车计价器的常数K又是能够进行调整的。W指的是出租车每行驶1公里发动机通过脉速轮传送到出租车计价器的信号数。若是在实际生活中K值大小等于W数值,那么这就说明车辆的行程得到了正确的显示,但若是他们之间存在一定的误差值,便说明出租车的实际里程未能得到正确的显示,这时出租车计价器的K值应进行必要的调整,并以无限接近W数值为目标。在对出租车计价器进行日常检定的过程中,有时可能会发现同一种型号的两辆车,应用同一款计价器,但所检定出来的结果却相距甚远。这其中的问题除了包括出租车自身状况以外,还有一些其他的影响因素。

1.1 更换脉速轮带来的相应问题

有一部分出租车驾驶员私自进行更换脉速轮,这便因此更变了出租车的实际特征系数,安装两种外形大小相同,然而齿数却不同的脉速轮,出租车车辆驱动的实际转速并不会因此而受到任何改变,但自身的实际转速却会出现一定改变。这样出租车在行程计价的过程中便会因此而存在一定的误差,最终也将影响消费者的合法权益。

1.2 出租车检定前后更换计价器带来的相应问题

出租车车主一车两机或者拥有不同型号的多辆车,这在实际检定工作中是经常面临的问题之一。出租车车主在实际运营的时候,使用经人工处理的计价器,而在出租车检定之前便又会更换上原有的计价器,这样便躲过了检定人员的现场检定。这样,在实际管制过程中不仅给相关管理部门带来了一些麻烦,同时更损坏了检定部门的声誉,其中最根本的问题就是没有与之相适应的规章制度。

1.3 出租车检定前后更换轮胎带来的相应问题

消费者在乘坐出租车时,往往会经常遇到恶意坑害的状况,这主要是由于出租车司机对于自身利益的考虑。他们在检定前后更换了和原来车型号不一致的车轮,然而实际上并没有相关规定要求车轮与车型必须高度相符,这便使出租车司机在这方面钻了空子,也将为损害消费者的合法权益留下一定的隐患。

1.4 出租车计价器本机检定带来的相应问题

目前,出租车检定规程当中未能明确规定本机检定的检定周期,而只是明确了使用误差检定的检定周期。单纯使用误差检定并不能够全面、系统地把握出租车计价器的准确性,这主要是因为计程、计时以及低速切换响应时间等问题也是影响金额结算的主要因素。例如,空车牌是出租车计量器的重要构成要素,若空车牌牢固程度不够时,很多出租车司机通常会将空车牌稍微向下压,这时若是有乘客上车将空车牌翻转,实际上出租车计价器已经提前进行计价状态,这种情况若是乘客不予以注意,便会支付了额外的不应支付的费用,这一过程中便出现了欺骗消费者的行为。此外,针对出租车计价器的使用年限,并没有相关规定作出要求,这样便会时常出现出租车更换多次以后仍旧使用原有计价器的情况,这就可能会造成计价器由于内部零件老化等问题带来计价不准确的问题。这种问题的出现主要是由于相应的规章制度以及鉴定规程存在一定的漏洞。

2 应对出租车计价器检定问题的相关措施

为了使出租车计价器发挥其自身正常功能,保护消费者合法权益,以及遏制相关规章制度和检定规程被恶意篡改,因此应提出切实可行的办法进行完善。

(1)规定汽车生产厂家在选择发动机时,脉速轮的配置需按照车辆型号和发动机匹配一致的原则,防止发动机在通过脉冲轮传送数出现改变的情况。若条件允许的情况下,可以在脉速轮与大动脉相连处选取铅封的方式。

(2)使用切实可行的办法控制出租车计价器连接插头等重要部位,避免部分出租车车主在检定前后以更换计价器的方式损害消费者的利益。

(3)在有关规章制度中明确规定严禁更换与出租车本身型号不相符的轮胎。

(4)在有关规章制度以及检定规程中,明确出租车计价器的使用年限以及本机检定周期和报废条件等。

3 结语

总而言之,在实际出租车计价器检定工作中,通常不只是存在以上问题,因此应该尽量全面考虑来自各方面的影响因素,把可能存在的所有问题编制到具体的工作规章制度当中,明确随意更改计价器的严重后果,这在某种程度上会起到遏制问题出现的效果,在完善相关制度的同时也能够有效防止很多经济矛盾的出现。这样广大消费者在消费过程中也能更明确,出租车市场也能够实现更加长远发展,最终也将对促进我国社会主义和谐社会的发展起到积极作用。

参考文献

[1]代羽,刘胜春.出租车计价器抗干扰问题研究[J].品牌与标准化,2011(10).

[2]王素琴,张晓燕,徐燕,怎样排除和解决出租车计价器的外围故障[J].工业计量,2007(1).

[3]姜继生.浅谈出租汽车计价器K值的调整方法[C]//江苏计量测试学术论文集(2009).2009.

4.基于CPLD的出租车计价器设计 篇四

市政府办公室收到北林区政府《关于为城区范围内出租车统一安装计价器有关事宜的请示》(北政发„2011‟72号)后,按照王国俊副市长批示意见,积极与相关部门对接,充分征求部门意见,对市区出租车统一安装计价器工作进行了深入调研,现将有关情况汇报如下:

一、市区出租车市场运价基本情况。目前,我市城区共有出租车2932台,均未安装计价器,出租车运营过程中多是约定俗成定价或协议运价,由于出租车运价不规范,乘客和营运车辆之间关于计费的分歧争论不断,拒载现象时有发生。随着我市城区规模不断扩大,市区出租车行驶距离逐渐增加,安装出租车计价器已势在必行。为切实维护乘客和出租车业主的权益,规范出租车市场运营,2011年6月1日市政府第四次市长办公会议决定在城区范围内统一安装出租车计价器,并交由北林区政府具体负责。

二、市区出租车计价器安装工作进展情况。按照第四次市长办公会议要求,北林区政府、市物价局监督管理局、市质量技术监督局、市交通运输局等单位做了大量的前期工作。市物价局召开了绥化城区出租车运价标准听证会,拟定了基价里程、基本租价和计程租价(其中基价里程为2.5公里,基本租价为 5.00元,计价里程普通型出租车和标准型出租车分别为1.60元∕公里和1.70元∕公里,每500米计价一次,不足500米按500米计算)。市质量技术监督局已购置出租车计价器检定装置,对相关人员进行了培训,待申请省里建标后,即可开展工作。市地税局向省地税局进行了汇报,并与省国税票证厂取得联系,做好了出租车统一发票的印刷准备。北林区政府会同市交通局、市运管处就出租车计价器安装工作拿出了初步意见,并形成《关于为城区范围内出租车统一安装计价器有关事宜的请示》(北政发„2011‟72号)上报市政府,待市政府同意后即可组织实施。

三、对市区出租车统一安装计价器工作的几点建议。在综合北林区政府和各相关部门意见的基础上,针对市区统一安装出租车计价器的实际情况,特提出以下几点建议:

(一)尽快确定出租车运价。作为安装出租车计价器的先决条件,出租车运价必须提早确定下来。建议市物价局将绥化城区出租车运价标准听证会拟定的运价标准,尽快提交市政府常务会议议定,确定后立即以文件形式下发,保证出租车计价器安装工作的顺利进行。

(二)选定计价器型号。综合北林区政府、市地税局和市质量技术监督局的意见,出租车计价器型号不宜过多,应确定在2-3种,且必须使用统一规格的票据以便于税务部门后续税收和发票管理。质量方面生产厂家应具有制造计量器具许可证,同时获得国家质检总局的认可,生产的产品通过“ccc”强制认 证。建议北林区政府在与市地税局、市质量技术监督局进一步沟通协商,将出租车计价器型号和使用发票的规格确定后,采取公开招标的方式指定1-2个出租车计价器生产厂家。

(三)适当减免出租车计价器检定费用。鉴于北林区政府提出的 “质监部门收取计价器安装前整机首次鉴定费用45元,安装后检定费用45元,共计90元”的建议,与市质监局提出的首次检定费用收取115元(向出租车计价器生产企业收取),检定周期定为1年每年收费45元的收费标准有较大差异。建议北林区政府与市质监局做好进一步协商,根据实际情况并参照与我市同等规模城市安装出租车计价器的成功经验,合理确定出租车计价器检定费用。

5.单片机出租车计价器源程序 篇五

设计并制作一台出租车计价器。调试时采用10Hz方波信号模拟,每个方波代表10m。基本要求:

(1)不同情况具有不同的收费标准

白天 1元/公里 晚上 2元/ 公里 途中等待(30s)1元/30s

(2)数据输出(6位LED数码管显示)

单价输出2位 路途输出2位 总金额输出2位

(3)按键(3个)

启动计价开关 数据复位(清零)白天/晚上转换

3.4.1模块1:系统设计

(1)分析任务要求,写出系统整体设计思路

通过分析,需要实现四个主要的功能模块,分别为脉冲计数模块、定时器计时模块、按键的处理以及

数码管动态扫描等功能。

定时器计时模块主要完成途中等待(即没有脉冲来时)30秒的计时。在启动键按下后,定时器就不停的计时,只要有脉冲来就将计时的值清除为零。如果没有脉冲来,当计时超过30秒时,相应的总金额要

按照收费标准计价。

中断的管理:尽管中断有嵌套以及优先级的功能,但是由于定时器已经使用一个了中断资源,脉冲检测不宜再采用中断方式,而是采用查询方式。由于需要不停的要清除30秒的计时,因此,脉冲的计数不

采用定时器的计数方式。

启动键触发定时器开始工作,而定时器的运行可以作为脉冲计数的标志,只要定时器计时在运行,每来一个中断都应该计数。

主程序完成键盘的扫描和按键的处理,查询脉冲产生的中断,并完成脉冲的计数。每个脉冲代表10米,则当计数到100时表示1千米的距离,相应的总金额要按照收费标准计价

(2)选择单片机型号和所需外围器件型号,设计单片机硬件电路原理图

采用MCS51系列单片机At89S51作为主控制器,外围电路器件包括数码管驱动、独立式键盘、复位电

路等。硬件电路原理图如图3-9所示。

图3-11 出租车计价器的硬件电路原理图

数码管驱动采用2个四联共阴极数码管显示,由于单片机驱动能力有限,采用74HC244作为数码管的驱动。在74HC244的7段码输出线上串联100欧姆电阻起限流作用。

独立式按键使用上提拉电路连接,在没有键按下时,输出高电平。P0口用于输出7段LED共阴极显示代码,P2口用于输出低电平有效的位选码。0~9的7段LED共阴极显示代码:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH。

(3)分析软件任务要求,写出程序设计思路,分配单片机内部资源,画出程序流程图

软件的任务要求包括定时器的设置、按键的扫描、按键的功能处理、脉冲的计数、路途等待超30秒的计

时以及总金额的计算等。

程序设计的思路:使用中断方式对定时器的溢出进行计数实现30秒的计时。主程序采用查询外部中断标志实现脉冲的计数,由于每个脉冲代表10m,因此,当脉冲计数超过100时,计价器按照收费标准计价。主程序在初始化变量和定时器参数设置之后,进入一个循环结构,循环扫描键盘、查询脉冲的中断、数码管的动态扫描等功能,当脉冲的中断标志被查询到,若路途等待时间未超30秒时,要及时将路途等待时间的值清除为零。主程序的流程图如图3-12所示。

图3-12 出租车计价器的主程序流程图

中断服务程序主要实现计时功能,当启动键按下之后,定时器开始工作,用一个变量对定时器溢出中断的次数进行计数,达到计时功能,该变量在每次脉冲到来时被清零(在主程序中清零),当脉冲长时间没有来,则当该变量计数超过30秒时,总金额按照途中等待计费标准进行计价。中断程序的流程图如图

3-13所示。

图3-13 出租车计价器的中断服务程序流程图

(4)设计系统软件调试方案、硬件调试方案及软硬件联合调试方案

软件调试方案:伟福软件中,在“文件新建文件”中,新建C语言源程序文件,编写相应的程序。在“文件新建项目”的菜单中,新建项目并将C语言源程序文件包括在项目文件中。

在 “项目编译”菜单中将C源文件编译,检查语法错误及逻辑错误。在编译成功后,产生以 “*.hex”和“*.bin” 后缀的目标文件。

硬件调试方案:在设计平台中,将单片机的P1.0-P1.2分别与3个独立式键盘通过插线连接起来,将P3.2与脉冲信号源连接起来。

在伟福中将程序文件编译成目标文件后,将下载线安装在实验平台上,运行“MCU下载程序”,选择相应的flash 数据文件,点击“编程”按钮,将程序文件下载到单片机的Flash中。

然后,上电重新启动单片机,检查所编写的程序是否达到题目的要求,是否全面完整地完成试题的内容。3.4.2 程序设计

/*晶振:11.0592M T1-250微秒溢出中断一次;P3.2(int0)-中断100次,查询IE0置位,P1^0为启动键;P1^1为清除键;P1^2为白天/晚上的切换键 变量的定义: key_val: 返回按键的值 255-无键

T1_cnt: 定时器溢出数计数

cnt_30: 30秒钟的计时

cnt_distance: 计算路程

cnt_cost: 总金额

state_val: 状态:0-白天 1 夜晚

cost_val[3]: 收费标准:白天单价cost_val[0]=1元/公里;晚上单价cost_val[1]=2元/公里; 等待单价cost_val[2]=1元/30s

led_seg_code:数码管7段码 */ //-------------------#include “reg51.h” unsigned char data cnt_30,cnt_distance,cnt_cost;unsigned int data T1_cnt,D_cnt;unsigned char data key_val,key_val_old;unsigned char data state_val;char code cost_val[3]={1,2,1};char code led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//led_seg_code[0-9]代表0-9 //-------延时-----------------void delay(unsigned int i)//延时 { while(--i);} //-------初始化变量------------------void init_variant()//初始化一些变量的内容 {unsigned char i;cnt_30=0;//30秒的计时 D_cnt=0;//脉冲的个数 cnt_distance=0;//距离的计数

cnt_cost=0;//保存总价格 } //-------扫描键盘-----------------unsigned char scan_key(){ unsigned char i,k;i=P1;if(i==0xff){ k=255;} //无键按下

else //有键按下

{ delay(10);//延时去抖动

if(i!=P1){k=255;} else { switch(i){ case 0xfe: k=0;break;//P1.0按下,启动键

case 0xfd: k=1;break;//P1.1按下,清除键

case 0xfb: k=2;break;//P1.2按下,切换键

} } } return k;} //-------数码管动态扫描-------------void led_show(){unsigned char i,k;

//-----显示单价----k=cost_val[state_val];i=k%10;//暂存个位 P0=led_seg_code[i];P2=0xbf;delay(10);i=k%100/10;P0=led_seg_code[i];P2=0x7f;delay(10);//-----显示距离------k=cnt_distance;i=k%10;//暂存个位 P0=led_seg_code[i];P2=0xf7;delay(10);i=k%100/10;P0=led_seg_code[i];P2=0xef;delay(10);//-----显示总价格-----------k=cnt_cost;i=k%10;//暂存个位 P0=led_seg_code[i];P2=0xfe;delay(10);i=k%100/10;P0=led_seg_code[i];P2=0xfd;delay(10);} //-------计时----------------void timer1()interrupt 3 //T1中断 { T1_cnt++;if(T1_cnt>3999)//如果计数>3999, 计时1s { T1_cnt=0;if(cnt_30<30)//没有超过30秒,继续计时

{cnt_30++;} else //超过30秒,途中等待计价

{cnt_30=0;cnt_cost=cnt_cost+cost_val[2];} } } //---------主程序----------------

main(){//初始化各变量 T1_cnt=0;state_val=0;key_val_old=255;init_variant();//初始化51的寄存器

TMOD=0x20;//用T1计时 8位自动装载定时模式,不用T0 TH1=0x19;//250微秒溢出一次;250=(256-x)*12/11.0592-> x= 230.4 TL1=0x19;EA=1;//开中断 ET1=1;

TR1=0;//定时器T0 TCON=0x01;//Int0中断取边沿触发模式 while(1){ key_val=scan_key();// 255;// if(key_val!=key_val_old){ key_val_old=key_val;if(key_val!=255){ switch(key_val){ case 0: //启动键

TR1=1;//启动计时,TR1=1为启动了的标志

break;case 1: //清除键

init_variant();//清除变量

TR1=0;//关闭定时器

break;case 2: //白天/黑夜的切换

if(state_val==0){state_val=1;} else {state_val=0;} break;} } } if(IE0==1&& TR1==1)//每来1个脉冲,中断一次

{ IE0=0;cnt_30=0;//30秒的计时清零

if(D_cnt<100)

{D_cnt++;} else //计数100次,每次10米,表示一公里

{D_cnt=0;cnt_distance=cnt_distance+1;

6.基于CPLD的出租车计价器设计 篇六

摘要:在介绍I2C总线协议的基础上,讨论了基于CPLD的系统中I2C总线的设计技术,并结合工程实例设计了I2C总线IP核,给出了部分源代码和仿真结果。

关键词:I2C总线 IP核 CPLD

I2C总线是PHILIPS公司推出的新一代串行总线,其应用日渐广泛?1~2?。目前许多单片机都带有I2C总线接口,能方便地实现I2C总线设计;对没有I2C总线的微控制器(MCU),可以采用两条I/O口线进行模拟。在以单片机为MCU的系统中很容易实现I2C总线的模拟扩展,有现成的通用软件包可以使用?2~3?。

对有些基于CPLD的系统,要与带有I2C总线接口的外围器件连接,实现起来相对复杂一些。为实现系统中的I2C总线接口,可以另外引入单片机,也可以采用PCF8584或者PCA9564器件(PHILIPS公司推出的专用I2C总线扩展器)进行扩展,但这样会增加系统成本,使系统冗余复杂。像ALTERA、XILINX等一些大公司有专用的基于CPLD器件的I2C总线IP核,但这些IP核的通用性不强,需要的外围控制信号较多,占用系统很大的资源,因此直接采用这种IP核不可取。

鉴于此,依照I2C总线协议的时序要求,在基于CPLD的系统中开发了自己的I2C总线IP核。对于一些带有I2C总线接口的外围器件较少、对I2C总线功能要求较简单的CPLD系统,自主开发IP核显得既经济又方便。

(本网网收集整理)

1 I2C总线的协议

I2C总线仅仅依靠两根连线就实现了完善的全双工同步数据传送:一根为串行数据线(SDA),一根为串行时钟线(SCL)。该总线协议有严格的时序要求。总线工作时,由时钟控制线SCL传送时钟脉冲,由串行数据线SDA传送数据。总线传送的每帧数据均为一个字节(8 bit),但启动I2C总线后,传送的字节个数没有限制,只要求每传送一个字节后,对方回应一个应答位(Acknowledge Bit)。发送数据时首先发送数据的最高位(MSB)。

I2C总线协议规定,启动总线后第一个字节的高7位是从器件的寻址地址,第8位为方向位(“0”表示主器件对从器件的写操作;“1”表示主器件对从器件的读操作),其余的字节为操作的数据。总线每次传送开始时有起始信号,结束时有停止信号。在总线传送完一个或几个字节后,可以使SCL线的电平变低,从而使传送暂停。

图1列出了I2C总线上典型信号的时序,图2表示I2C总线上一次完整的数据传送过程。

依据I2C总线的传输协议,总线工作时的具体时序如下:

起始信号(S):在时钟SCL为高电平期间,数据线SDA出现由高电平向低电平的变化,用于启动I2C总线,准备开始传送数据;

停止信号(P):在时钟SCL为高电平期间,数据线SDA出现由低电平向高电平的变化,用于停止I2C总线上的数据传送;

应答信号(A):I2C总线的第9个脉冲对应应答位,若SDA线上显示低电平则为总线“应答”(A),若SDA线上显示高电平则为“非应答”(/A);

数据位传送:I2C总线起始信号或应答信号之后的第1~8个时钟脉冲对应一个字节的8位数据传送。在脉冲高电平期间,数据串行传送;在脉冲低电平期间,数据准备,允许总线上数据电平变化。

2 应用实例

2.1 实例模型介绍

现举某应用实例,要求对显示器的视频信号进行采集、处理和再显示,整个系统采用CPLD器件进行控制。信号采集采用A/D公司的专用视频采集芯片AD9883,该芯片在使用前需要依据实际的功能指标进行初始化。初始化过程依靠AD9883的SDA和SCL两引脚进行。在系统中用CPLD器件,ALTERA公司的EPM3256A,实现初始化:按照I2C总线协议向AD9883的19个内部寄存器(01H~13H)写入19组固定的`8位数据;第14H寄存器为只读型同步检测寄存器,仅用于检测几个关键的数据设置。

可见该I2C总线模型如下:单主操作,只实现简单的写和读操作(亦可只有写操作,只是硬件调试的时候会麻烦些),写地址连续,没有竞争和仲裁,是很简单的I2C总线系统。由此设计了如图3所示的IP核。其中,RESET为复位信号,CLK为系统时钟。

为了软件仿真方便,把双向数据线SDA用分离的两条线模拟:SDA为数据输出,SDAACK为SDA的应答信号。软件仿真成功后,只要把SDA设置为双向,稍微修改一下程序就可以向CPLD器件下载,进行实际应用。

对AD

9883内部地址连续的寄存器进行初始化,I2C总线上传输的时序信号依次为:开始信号(S);从器件地址和写操作位(SLAW);内部寄存器基地址(Base Address);写入基地址的数据(Data0);写入下一地址(Base Address+1)的数据(Data1);写入地址(Base Address+2)的数据(Data2);……;写入地址(Base Address+18)的数据(Data18);停止信号(P)。

针对AD9883,如果电路中的A0引脚?55#?接电源,则SLAW=“10011001”;Base Address=“00000001”,Data0~Data18是依据实际需要写入的初始化数据。

2.2 IP核程序的编写

整个程序用VHDL语言编制,SCL输出时钟的设计是基于CLK输入时钟的64分频的。程序由三个状态组成:开始(START)、转换(SHIFT)和应答(ACK)。状态定义如下:

type states is ?start?shift?ack??

signal my_states ?states?

下面给出部分进程的源代码以供参考。

2.2.1开始信号的产生

PROCESS?clk?

if clk’event and clk=‘1’ then

TWCR<=DATAIN?

SCL<=‘1’?

else

TWCR<=?others=>‘0’??

end if?

if TWCR=“10000000” then ――比较寄存器TWCR的开始

值设置(由用户决定)

STRB<=‘1’?

end if?

if STRB=‘1’ then ――开始条件

INT<=INT+“000001”? ――INT为时钟脉冲计数

if INT<=“011000” then ――产生SDA的下降沿

SDA<=‘1’?

else

SDA<=‘0’?

end if?

if INT>=“011110” then ――STRB归0,保证只产生

一次开始信号

STRB <=‘0’?

INT<=“000000”?

end if?

end if?

等所有的初始化数据传输完毕后即产生停止信号,过程与上面相类似,在此省略。

2.2.2 数据转换过程

数据转换过程采用移位传输,传输8位之后即进入应答状态。

when shift=>

if cnt=“010000” then ――cnt为clk脉冲计数,由

实际的时钟频率决定cnt的值

COUNT<=COUNT+“0001”? ――COUNT为数据移位个

数计数?MSR为移位寄存器

MSR<=MSR?6 downto 0?&txtag?

txtag<=‘0’?

if COUNT=“1000” then

my_states<=ack?

TACK<=‘1’? ――TACK为应答标志位

else

SDA<=MSR?7??

my_states<=shift?

TACK<=‘0’?

end if?

end if?

图4 数据传输仿真波形 图5 SDA非应答时的仿真波形

2.2.3 数据输入

一般情况下,I2C总线传输的数据要由外部ROM或其它专门的数据存储区来存储,但在数据相对固定且数据量不是很大的情况下,可以将初始化的数据写在程序中,这样可减少频繁的数据交换,简化操作。AD9883的初始化数据就属于这种情况,可以通过检测应答信号来改变输入的值。程序如下:

PROCESS?clk? ――数据输入

if clk’event and clk=‘1’ then

CASE ackint IS ――ackint为应答计数,每应答

一次,输入改变一次

when “00000”=> DATAIN<=“10000000”?

when “00001”=> DATAIN<=“01010010”?

when “00010”=> DATAIN<=“11010000”?

……

when “10010”=> DATAIN<=“00000000”?

when “10011”=> DATAIN<=“00000000”?

when others=> DATAIN<=“ZZZZZZZZ”?

END CASE?

end if?

2.3 仿真结果

把自主开发的IP核置于MAX+PLUS II 10.0开发环境下,选用EPM3128ATC100-10器件,经过编译、调试与仿真,证明该程序符合设计要求。图4是模拟产生开始信号并传输两组二进制数据“10011001”和“10101010”(十进制表示为153和170)的仿真波形。图5是传输数据“10011001”后没有应答时的仿真结果,此时总线处于暂停状态。

7.基于CPLD的出租车计价器设计 篇七

关键词:出租车计价器 (taximeter) ,脉冲信号,传感器

0 引言

出租车计价器 (taximeter) 是指用于公共租用车辆中的里程和时间的计算器, 是一种计量仪器, 连续累加并指示出租车行程中任意时刻乘客应付费用的总数。

出租车计价器作为一种法定的国家计量机具, 是各地出租车营运必须配备的车载电子设备。

由于出租车计价器对里程的计量是通过传感器取得脉冲信号实现计量, 因此出现了一些利用某些手段干扰脉冲信号, 以达到计价器多计里程多收费的作弊现象。常见的有用脉冲发生器或加装小电动机加快脉冲信号的传出量, 以控制一段时间内计价器多计里程。针对以上情况, 本文提出了一种对出租车计价器的里程脉冲实现安全计量的设计。

1 设计思路

出租车计价器的里程计量是通过计程传感器取得, 目前出租车计价器的传器主要是利用磁电感应原理设计的干簧管或霍尔开关器件的传感器。出租车计价器计程的过程是当出租车行驶, 由出租车车轮带动传感器的转轮转动, 传感器的转轮上有永久型的小磁钢, 每当小磁钢随转轮转动经过一次霍尔开关器件, 霍尔开关器件接通与闭合一次, 就产生一个相应脉冲信号。车轮行驶一定单位的里程就产生相应数量的脉冲信号。例:若某一车型出租车每行驶1公里, 其传感器传出1000个计数脉冲信号, 则此出租车“K”值可设为100。按0.1公里计程时, 每获得100个脉冲信号, 比较其相应K值就可记录出租车行驶了0.1公里。而一些作弊者往往会利用在比较K值的计程正常脉冲里加进高速的干绕脉冲, 以使出租车计价器多计脉冲, 达到多计里程多收费。

本文提出的对出租车计价器脉冲安全计量设计的原理是在原计程传感器基础上, 在出租车计价器的里程传感器内 (霍尔开关器件连接到计价器主机之间) 增加一片PIC的CMOS单片机及相应电路的设计。由PIC单片机对霍尔开关器件产生的脉冲进行处理, 将一个计数脉冲编码为一个固定的16bit位编码脉冲值, 再传给计价器主机, 16位的编码脉冲值通过脉冲宽度实现0与1区分。当计价器主机的主MCU接收到16位的编码脉冲, 用软件方法测脉宽与解码后, 与预先设定在计价器主机内的固定的16位值比较, 若相同表示收到计程传感器一个正确计数脉冲可计入, 否则就不是正确计数脉冲不计入。此设计通过对出租车计价器主机与传感器在软件与硬件上的共同改造, 可有效防止利用非正常毛刺脉冲信号干扰计程传感器或更换其它作弊传感器的行为。

计数脉冲加密具体方案为将一个计数脉冲编码成16位的二值信号, 以脉冲宽度的不同代表不同的二值信号。规定高电平脉冲为有效的码值信号, 较窄的高电平脉冲为1 (最大脉宽140us) , 较宽的高电平脉冲为0 (最大脉宽800us) , 共使用16bit位的二值信号, 整个16位的二值信号最大宽度为10ms, 顶头加上一个较宽的高电平脉冲作引导。

编码信号示意图, 如图1所示:“ () ”中为脉宽典型值, 传感器编码时就按典型值的脉冲宽度以16位编码代表一个脉冲传出给计价器主机解码, 判断是否计入此脉冲。

2 设计实现

出租车计价器安全计量的设计原理图如图2所示, 其计量脉冲分为两步:

1) 出租车计价器的传感器对计量脉冲编码, 传到计价器主机

出租车计价器的传感器内霍尔开关 (A3144E) 每产生一个计数脉冲, 就会导通形成一个工作电压激活传感器内PIC10F200芯片运行一次程序。由PIC10F200通过PLUSE接口向计价器主机传出这一个计数脉冲的16位编码值, 即PIC10F200的软件运行是由霍尔开关 (A3144E) 产生的计数脉冲控制的, 当产生一次脉冲就触发PIC10F200运行一次程序, PIC10F200的程序将计到的一次脉冲以一个16位编码的波形发给计价器主机。

2) 计价器主机接收编码, 判断正确性后计量脉冲:

计价器主机的51系列MCU通过程序改进设计, 实现对接收编码, 判断正确性后计量脉冲。其过程是计价器主机的MCU内预先设定一个用于比较的16位编码, 通过对接收到的PIC10F200芯片传出的编码值测量脉宽值及判断, 形成了计价器主机对PIC10F200芯片传出的编码值解码的16位编码值与计价器主机内预先设定的16位编码一一对应的比较条件。比较若相同表示收到计程传感器一个正确计数脉冲可计量, 否则就不是正确计数脉冲不计量。所以在此情况下, 偷换或改装其它的非编码传感器是传不出正确编码脉冲值的, 从而防止了利用计程传感器脉冲计数进行作弊的行为。

本文设计采用MICROCHIP公司的6引脚8位闪存芯片PIC10F200作为传感器脉冲的编码芯片, 其主要优点是尺寸小、成本低, 非常适合用在传感器设计的狭小套管内。出租车计价器主机通过改进内部主MCU的软件设计, 可实现测量脉宽值解码及判断脉冲值, 而无须增加额外的硬件开销。

对出租车计价器脉冲安全计量设计的传感器脉冲编码芯片与计价器主机内解码的芯片都是由程序控制的MCU, 双方程序可定时对预定的脉冲编码值进行动态更换。由于比较的脉冲编码值是不固的, 能防止试图探测脉冲编码进行干扰的作弊行为, 最大可能的防止了利用出租车计价器的计程传感器脉冲计数进行作弊的行为。

3 结论

本文提出对出租车计价器计程传感器与计价器主机在硬件与软件上加以改造设计。其设计是一种通过传感器内对每个霍尔开关器件所产生的计数脉冲进行编码, 向计价器主机传出脉冲编码, 计价器主机收到脉冲编码以后进行解码判断, 是否是正常计程脉冲, 再做里程累计的安全计量方法。此方法是作为防止利用计价器计程传感器脉冲计数作弊的一种创新的技术手段。

参考文献

8.基于CPLD的出租车计价器设计 篇八

关键词:出租车计价器 不确定度及不确定度分量 评定

中图分类号:U469文献标识码:A文章编号:1674-098X(2011)01(b)-0240-02

1 测量方法(依据JJG517-2009《出租汽车计价器检定规程》)

出租汽车计价器使用误差是在一种驱动式的,模拟汽车在地面行驶并测量行驶距离的检定装置上测得。检定时,将计价器显示金额跳变所代表的距离数值与检定装置计数器所显示的距离示值相比较,得出计价器使用误差值的大小,即被检设备使用误差值等于被检设备显示金额跳变所代表的距离与检定装置计数器所对应显示的相对真值之差。

2 数学模型

δ=D-Ds(1+е)=D -Ds-Ds·e

式中:δ为被检计价器的使用误差;

D为计价器显示金额跳变所代表的汽车行驶距离;

Ds为计价器检定装置计数器对应显示的相对真值;

е为轮胎修正值。

3 方差和传播系数

依:

有:

=c 2(D)u 2(D)+c 2(Ds)u2(Ds)+c 2(e)u 2(e)

其中传播系数:c(D)==1

c(Ds)=≈-1;

c(e)==-D s。

4 标准不确定度一览表(表1)

5 计算分量标准不确定度

5.1 人为因素引入的不确定度分量

由于计数是在计价器显示金额的跳变瞬间读取,检定人员观察跳变时的视觉、听觉、手动滞后等因素,造成采样数据的不准确,统计人员中的不同情况平均误差为2~3r(1m/r),一般按最短起算距离2000m算其相对误差为:

2.5/2000=0.125%

在测量范围内有相等的出现概率:

=0.125%/=0.072%

估计其具有50%的可靠性,故自由度为:

=(1/2)×(50%)-2=2

5.2 由测量重复性得到的分量

测量重复性是计价器本身受到其有关因素的影响和检定装置本身显示值的变化引起,用检定装置检定同一国内装有同一计价器的车辆10次,得出标准偏差最大不超过0.84r(即0.84转),按最短起算距离2000m计算最大相对偏差为:

s=0.84/2000=0.042%

=s=0.042%

=10-1=9

与计价器有关的不确定度分量为:

=+

==0.083%

自由度为:

=(0.083%)4/[(0.072%)4/2+(0.042%)4/9]=3

5.3 由检定装置计数器的极限误差0.1%±1r引起的不确定度分量

按最短起算距离2000m计算,为:

(2+1)/2000=0.15%

该误差属于均匀分布,故:

=0.15%/=0.086%

具有25%的可靠性,故其自由度为:

=(1/2)×(25%)-2=8

5.4 检定装置主滚轮直径测量极限误差0.2%,属于正态分布,故:

=0.2%/2.3=0.085%

具有10%的可靠性,故其自由度为:

=(1/2)×(10%)-2=50

与检定装置有关不确定度分量为:

=+

==0.12%

自由度为:

=(0.12%)4/[(0.086%)4/8+(0.085%)4/50]=26

5.5 轮胎修正值测量误差引起的不确定度

轮胎修正值为:

e=A/B-1

式中:A——为主滚轮上测量出的左右驱动轮胎转5r的平均值,m;

B——为地面上测量出的左右驱动轮胎转5r的平均值,m;

同样的道理:

=c2(A)+c2(B)

c(A)==1/B

c(B)==-A/B2

A值测量是在1m情况下测量,其极限误差为:

0.1mm/1000mm=0.01%

B值测量是在10m情况下测量,其极限误差为:

1.3mm/1000mm=0.013%

属于均匀分布,故=0.01%/,=0.013%/,代入上式可求出:

=(1/B)2+(-A/B2)2

由于A与B近似相等,故:

=(1/B)

=(1/B)×0.01%

其具有15%的可靠性,故:

=(1/2)×(15%)-2=22

6 合成不确定度

=()2+()2+()2

=+(-1)2+(-Ds)2

因为Ds=A≈B,则有:

(δ)==0.15%

7 有效自由度

=(0.15%)4/[(0.083%)4/3+(0.12%)4/26+(0.01%)4/22]=21

0.95(21)=2.09

8 扩展不确定度

U0.95=p()·c(δ)

=t0.95(21)·c(δ)

=2.09×0.15%

=0.31%

参考文献

[1]白雪.计量测试技术,2007,2.

[2]李慎安编著.测量结果不确定度的估计和表达[M].中国计量出版社,1997,5.

[3]陳奕钦.测量不确定度“,93国际指南”应用举例[M].中国计量出版社,1998,2.

9.基于CPLD的出租车计价器设计 篇九

关键词:出租车计价器,计量检定,注意问题

1 出租车计价器的作用及计量检定意义

出租车计价器是一种全面计量的工具, 用来计量出租车出行时间以及根据行车里程传感器传送的信号来计算行车里程。综合行车时间与里程计算并显示出乘客打的需要支付的费用。出租车计价器的制作与规格受国家严格管理, 因为出租车计价器的使用关系到出租车运营商、出租车司机以及乘客的三方利益, 所以说出租车计价器的使用是民生所关注的话题之一。出租车计价器在计量检定中必须做到公开透明, 公正精确, 确保各方的神圣利益。出租车计价器在计量检定中应该注意一些问题, 笔者在本文通过向读者介绍这些应该注意的问题, 目的是使大家对于出租车计价器国家计量检定规程以及出租车计价器国家行业标准有一个更加清晰、深刻的认识。通过明确这些问题从而尽量避免这些问题, 使得出租车计价器在使用上更加可靠、安全。

2 对出租车计价器本机误差的检查

对出租车计价器本机误差的价差要符合我国计量检定部门的相关规定。具体而言, 在检定出租车计价器本机误差时要按照国家计量检定规程的要求, 包括检查出租车计价器的计程误差、计时误差等。按照国家计量检定规程进行检查一般不会出疏漏。需要强调的是, 我国各地出租车价格不同, 如起步价不同, 每公里价格不同等等。在使用缩距法计算车价时, 计价器跳价所转过的转数要根据当地的价格按照相应的比例进行转换计算。

3 对于计价器中从属功能的检查

3.1 查询功能

查询功能的内容由地方部门规章制度所规定, 因此要严格检查由地方部门规章规定的各种查询功能。

3.2 空车灯

出租车计价器在计量检定中需要注意对空车灯语音报话器的检查。具体而言, 报话的内容要符合地方相关部分的规章要求, 还要检查报话器是与计价器联动使用还是独立工作使用的。

3.3 打印机

打印机是出租车计价器十分重要的一个从属设备, 因此要对其进行严格的检查。具体包括三个方面, 笔者分述之: (1) 检查打印机的内容以及各式是否符合当地相关部门的规章制度要求; (2) 检查打印机的打印内容与计价器上的显示内容是否一致, 格式是否规范, 正确; (3) 检查打印机所打印的内容与计价器在时间上是否具有一致性。或者说, 打印机所打印出信息必须与计价器上所显示的信息具有同时性。

3.4 IC卡

IC卡同样是出租车计价器中一个十分重要的附属设备, 对IC卡的检查要符合相关制度规定, 除此之外, 在检定中还需要注意如下几项问题: (1) , 检查IC卡的使用是否符合当地对计价器的要求; (2) , 检查IC卡是否能够正常使用。

4 对于计价器传统功能的检查

计价器的部分功能是在国家与地方的相关制度文件中没有规定的, 为了防止出租车司机作弊牟利, 形成了一种传统的规定, 对于这些规定的内容也要进行严格的检查。之所以是我们检定出租车计价器需要格外注意的问题, 就是在于这种传统的规定在我国各地是不一样的, 有些地区在检查时容易忽视。笔者在此详述如下: (1) 计价器的切换功能是否正常; (2) 出租车计价器是否具备周期检定控制的功能; (3) 出租车计价器是否具备对传感器脉冲的正常检查机制。

5 计价器软件编制中表现在使用上的应注意问题

出租车计价器本机的程序一般是C语言编制, 由于程序本身的限制, 出租车计价器在使用的过程之中会出现难以预料的问题。因此, 对于出租车计价器软件编制中表现在使用上的问题要格外地注意。具体而言包括以下几个方面:

5.1 按钮之间的相互作用

在出租车计价器检定中除了检查每一个单独按钮是否正常工作, 还要检查这些按钮关联起来后能否正常工作, 也就是说, 当计价器上的按钮被意外乱按的时候, 计价器能否正常工作。这是为了照顾出租车司机的疏忽在程序设计上所特别需要注意的事项。

5.2 变价

在一般的情况下, 各地相关部门均有规定基本公里 ( 如3km, 在起步价的里程范围内) 和单程起始公里 ( 如10km) 。如果这两者设定的公里数差距比较大, 双程计程误差 ( 包括昼返、 夜返) 检定在单程起始公里内完成时, 就必须要另加检定: 双程计程误差 ( 包括昼返、夜返) 检定至单程起始公里后, 计价器是否还是按双程价计价。

5.3 昼夜切换时单价的变化情况

正常情况下, 各地所规定的夜间运价和日间运价是不同的, 这是为了照顾出租车司机的切身利益而考虑的设计的。所以, 在夜间与日间的运价切换模式上需要格外注意检查工作。检查出租车的计价器能否顺利完成夜间与日间运价的正常切换。在运价切换的过程之中还有许多特殊的情况需要考虑, 检定人员要充分考虑。

6 结束语

总而言之, 我们应该对出租车计价器在计量检定中所应该注意的问题有一个清晰地认识, 认识到对于本机上不属于计量性能的功能以及计量范围内的从属设备的功能检查的重要性。在出租车计价器使用中还要考虑一些现实社会中约定俗成的事例。总之, 注意出租车计价器在计量检定中的问题都是为了出租车计价器能够更加安全、可靠、高效地使用。

参考文献

[1]中华人民共和国国家计量检定规程, JJG517—1998《出租汽车计价器》[S].

[2]中华人民共和国城镇建设行业标准, CJ5024—1997《电子式出租汽车计价器》[S].

[3]吴承琦.出租汽价器用技手册[K].北京:中国量出版社, 2003.

10.基于CPLD的异步串行通信设计 篇十

由于许多微处理器都没有异步串行口, 为了实现异步串行通信, 需要使用专用串行通信芯片, 电路设计比较复杂。随着复杂可编程逻辑器件 (CPLD) 的发展, 按照异步串行通信的协议, 采用VHDL语言编程, 可以将异步串行通信功能集成到CPLD内, 也就是用软件的方法实现硬件的功能, 既减少了元器件数量、简化了电路, 又提高了设计的可靠性。软件编程采用的VHDL硬件描述语言, 设计灵活, 调试简单, 可以先通过计算机进行仿真, 再投入实际使用, 可大大降低设计的风险性。

1 异步串行通信基本原理

所谓异步串行通信是指具有不规则数据段传送特性的串行数据传输。异步通信数据帧的第一位是起始位, 在通信线上没有数据传送时处于逻辑“1”状态。当发送设备要发送一个字符数据时, 首先发出一个逻辑“0”信号, 这个逻辑低电平就是起始位。起始位通过通信线传向接收设备, 当接收设备检测到这个逻辑低电平后, 就开始准备接收数据位信号。因此, 起始位所起的作用就是表示字符传送开始。当接收设备收到起始位后, 紧接着就会收到数据位。数据发送完之后, 可以发送奇偶校验位。奇偶校验位用于有限差错检测, 通信双方在通信时需约定一致的奇偶校验方式。就数据传送而言, 奇偶校验位是冗余位, 但它表示数据的一种性质, 这种性质用于检错, 虽有限但很容易实现。在奇偶位或数据位之后发送的是停止位。停止位是一个字符数据的结束标志。

2 复杂可编程逻辑器件 (CPLD)

复杂可编程逻辑器件—CPLD (Complex Programmable Logic Device) , 是从PAL的GAL器件发展出来的器件, 相对而言规范大, 结构复杂, 属于大规模集成电路范围。是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台, 用原理图、硬件描述语言等方法, 生成相应的目标文件, 通过下载电缆将代码传送到目标芯片中, 实现设计的数字系统。

3 VHDL语言

VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language, 诞生于1982年。1987年底, VHDL被IEEE和美国国防部确认为标准硬件描述语言。VHDL主要用于描述数字系统的结构、行为、功能和接口。除了含有许多具有硬件特征的语句外, VHDL的语言形式、描述风格和句法十分类似于一般的计算机高级语言。

4 异步串行通信设计

4.1 总体框图

本设计规定的数据帧格式为:1位起始位, 8位数据位, 1位停止位, 无校验位;波特率为9600bps;系统时钟频率为1.8432MHz。程序主要包括波特率发生器、发送电路和接收电路三个部分。程序的功能框图如图1所示。

4.2 波特率发生器

波特率发生器实际上就是一个分频器, 主要是根据要求的串行口波特率, 将系统时钟进行分频, 分别产生发送时钟和接收时钟。发送时钟的频率与串行口波特率相同。由于串行数据帧与接收时钟是异步的, 为了实现接收时钟与接收数据帧的同步, 需要采用高速率时钟对接收数据进行采样, 一般选择16倍于波特率的时钟频率作为接收时钟。本设计中, 系统时钟 (1.8432MHz) 12次分频后得到接收时钟 (153600Hz) , 再将接收时钟16次分频后得到发送时钟 (9600Hz) 。

4.3 发送电路

4.3.1 发送电路原理

发送电路相对比较简单, 当有发送请求时, 按照发送时钟的时序, 在上升沿时刻依次发送起始位、8位数据和停止位。需要说明的是, 8位数据的发送顺序是先发送低位后发送高位。发送电路的时序图如图2所示。

4.3.2 发送电路设计

发送电路采用Moore型状态机的方式设计, 包括:空闲、发送起始位、发送数据位和发送停止位四个状态。发送电路的状态图如图3所示。

空闲状态:初始状态为空闲状态, 只有在空闲状态下, 才能检测是否有发送请求, 当检测到有发送请求时, 将8位数据装入发送移位寄存器, 进入发送起始位状态。

发送起始位状态:发送一位起始位, 进入发送数据位状态。

发送数据位状态:依次发送8位数据, 当8位数据全部发送完成后, 进入发送停止位状态。

发送数据位状态:发送一位停止位, 表示一帧数据发送完成, 再次进入空闲状态。

4.4 接收电路

4.4.1 接收电路原理

接收时钟在每个时钟周期都对接收数据进行采样, 当检测到当前数据位为“0”而前一个数据位为“1”时, 即表示检测到了起始位。为了保证读取数据的可靠性, 每个数据位均在中间点进行采样, 在检测到起始位后, 延迟8个接收时钟周期, 开始依次读取起始位、数据位和停止位, 两次读取的间隔为16个接收时钟周期。为了能够接收连续两帧数据中的后一帧, 读取到停止位的下一个时钟周期 (而不是延迟8个时钟周期) 即开始检测起始位。接收电路的时序图如图4所示。

4.4.2 接收电路设计

接收电路同样采用Moore型状态机的方式设计, 包括:空闲、接收起始位、接收数据位和接收停止位四个状态。接收电路的状态图如图5所示。

空闲状态:初始状态为空闲状态, 不断对数据进行采样, 检测起始位, 一旦检测到起始位, 即进入接收起始位状态。

接收起始位状态:接收一位起始位, 并对起始位的有效性进行判别, 若为虚假起始位, 则返回空闲状态, 若确认起始位有效, 则进入接收数据位状态。

接收数据位状态:依次接收8位数据, 当8位数据全部接收后, 进入接收停止位状态。

接收停止位状态:接收一位停止位, 表示一帧数据接收完成, 将8位数据送接收缓存, 再次进入空闲状态。

5 结语

本文对异步串行通信的工作原理、电路设计进行了分析, 采用VHDL语言编程, 在CPLD上实现了异步串行通信功能。该设计为固定波特率和数据帧结构, 无需微处理器进行额外设置, 操作简单, 使用方便。在实际工程应用中, 还可以根据需求, 在此基础上增加波特率设置、数据帧结构设置、地址译码等电路, 实现多路、波特率和数据帧结构可设置的异步串行通信。

摘要:异步串行通信技术在电子通信设备中被广泛使用。随着复杂可编程逻辑器件 (CPLD) 的发展, 按照异步串行通信的协议, 采用VHDL语言编程, 可以将异步串行通信功能集成到CPLD内, 也就是用软件的方法实现硬件的功能, 既减少了元器件数量、简化了电路, 又提高了设计的可靠性。

11.基于CPLD的单片机接口设计 篇十一

关键词:CPLD,单片机,总线,接口

1 基于CPLD的单片机接口分类

基于CPLD的单片机接口通常有两种, 分别是总线方式和独立方式。

1.1 总线方式

单片机以总线方式与CPLD进行数据与控制信息通道具有许多优点。

(1) 速度快。其通信工作时序属于纯硬件行为, 只需要通过发出一条单字节的指令就能完成所需要的读/写时序。

(2) 节省CPLD芯片的I/O口线。通过在译码器中设置足够的译码输出, 并安排足够的锁存器, 就能够仅通过O口线在FPGA与单片机之间进行各种数据的控制与信息交换。

(3) 相对于独立方式, 编程更加的简单, 而且具有较高的控制性。

(4) 在CPLD中通过逻辑切换, 单片机更容易与SRAM或ROM接口。

1.2 独立方式

独立方式几乎适用与所有单片机, 通过独立接口能够实现与CPLD之间的通信, 其通信的时序方式能够根据所设计的软件自由变换, 具有较高的灵活性。其最大的特点是CPLD中的逻辑接口可以自由设定读/写时序。CPLD的逻辑设计与接口的单片机程序设计可以分布进行, 具有较强的独立性。

2 接口设计

2.1 基于总线结构的接口设计

单片机与CPLD之间可以根据用户需要的不同, 而采取多种不同的接口方式, 本文提出了一种基于总线结构的接口设计方案, 采用三总线结构, 如下图所示:

双向数据总线完成数据传输, 单项控制总线及地址总线利用CPLD对其外围对象进行控制。例如经典的51系列单片机与Ateral公司的EPM7064接口, 单片机是通过CPLD对地址进行锁存、译码, 使地址编码能够得到灵活的扩展。

上图单片机接口为双向数据总线, 该接口与CPLD的通用I/O接口连接, 能够实现数据以及低8位地址的传送;控制总线主要包括单片机的读写控制总线及地址的锁存信号ALE (Address Lock Enable) 。控制总线与地址总线通过CP0LD的全局输入信号引脚输入, 主要包括了Globle Clk、Global Clear、Global OE及Ded.Input。这些全局信号与CPLD里面的所有单元进行连接, 具有较高的相应速度, 能够保证所有信号到宏单元之间的传输延迟保持在相当短的时间范围内。

2.2 总线接口设计

在CPLD中, 我们设计了一个总线接口模块及一个寄存器单元及外部接口模块, 总线接口模块主要负责单片机与CPLD的总线接口逻辑, 同时还要对寄存器单元及外部接口模块进行操作。上图中的整个总线接口逻辑模块将单片机的三总线信号编码成五个信号进行输出, 这五个信号分别是addr16、RD_EN、WR_EN、Din、Dout。

总线接口模块又被分为三个小模块, 码模块。三态缓冲模块主要用于实现与单片机P0口进行连接;锁存器模块主要是通过利用ALE信号对单片机所输出的低8位地质进行锁存。利用其下降沿将低8位地址锁存到CPLD的地质锁存器当中, 当ALE将低8位地址通过P0及三态缓冲器进行锁存的同时, 高8位地质已精未定建立于P2口, 然后利用编码器模块将两组地质组合成一个16位地址。同时根据单片机的控制信号编码成RD_EN与WR_EN使能信号。

2.3 单片机接口VHDL实现

在单片机总线接口设计中, 采用VHDL语言来实现。通过使用VHDL语言编写该接口, 能够使接口具有更强的模块化能力以及良好的可读性, 且所写程序的可移植性较高。但是, 在进行接口程序编写时应该注意在完成数据读取之后, 应对数据总线进行释放, 以避免总线发生冲突。其主要程序代码如下:

3 结论

本文实现了基于CPLD的单片机接口设计, 在设计过程中通过利用VHDL语言来实现单片机接口, 更加接近日常的行为用于习惯, 方便进行错误的查找几纠正。同时该语言语法较为严谨, 能有效避免设计人员思维的偏差而出现的系统错误。

在设计过程中, 由于基于CPLD进行译码, 它将可编程逻辑器件作为单片机的高速地址缓存, 进行译码以及存储数据。这样有效的减少了过多的连线, 使整个系统结构更为简洁, 促进了整个系统效率的提高。另外, 由于CPLD器件的驱动电压很小, 还能有效的缓解能源消耗所带来的问题。

参考文献

[1]程耕国, 刘涛.CPLD扩展51单片机寻址范围[J].微计算机信息, 2006 (, 2) :185-186.

上一篇:小学新教材语文古诗诵读篇目下一篇:五年级单元作文:我最喜爱的一件物品