一、方案设计1.1 功能要求1. 用前4位数码管实时显示里程数(Z),单位为公里,最后一位为小数位;用后4位数码管时时显示金额数(J),单位为元,最后一位为小数位。
2. 规定出租车单程价格为2元/公里,往返则价格为1.5元/公里;单程/往返分别由“单程”按键和“往返”按键设定。
3. 车速<5公里/小时的时间累积为总等待时间T(分钟),每5分钟等待时间相当于里程数增加1公里。
4. 起步公里数为3公里,价格为8元;若实际运行大于3公里,按“设计任务2”计算价格。
5. 必须充分利用比赛指定的硬件平台上的资源进行设计。
6. 用单片机控制电机转动,并用光电传感器检测转盘转动模拟车速,车速与转盘转速成正比。
转盘转速为5转/秒对应车速为5公里/小时,转盘转速为50转/秒对应车速为50公里/小时,依此类推。
7. 要求公里数检测误差不超过±10%。
8. 到达目的地后,按“暂停”键,计价器可暂停计价。
9. 按“清除”键,计价器能将记录数据(里程、等待时间与价格等)自动清0。
10.按“查询”键,能自动显示总等待时间T,再按下该键回到显示里程数、金额状态。
1.2系统工作原理及其组成出租车计价是根据车所行驶的路程以及乘客乘车的方式综合决定的。
出租车行驶总路程可以通过车轮的周长乘车轮旋转圈数得到。
即可计算得到车轮旋转几周出租车能行驶一公里的路程。
因此,使用槽型光耦的目的就是方便地计量车轮旋转的圈数。
可在车轮转轴涂上白色条纹,其余部分涂成黑色,发光管照射转轴。
当转轴转动时,反光与不反光交替出现,所以槽型光耦间断地接收光的反射信号,输出电脉冲。
再经过整形电路,输出标准TTL信号。
输出的脉冲信号被接入到STC89C52单片机系统中,通过计算接收到的脉冲个数,计算出当前所行驶的路程。
同时,根据不同的收费标准,选择相应的起步价、单价等收费标准进行计算。
HD 7279管理键盘和数码显示,通过键盘能够实现启动、暂停、停止计价器、切换显示当前的行驶里程和需支付的车费。
出租车计价器用于记录里程、等待时间、是否往返、起步公里数与价格的关系,它能有效地避免司机与乘客间的矛盾,保障双方的利益。
模拟出租车计价器能根据总里程数、总等待时间长短、是否往返、起步公里数的情况作出相应报价等。
当然实际的出租车计价器还具有能打印出车票等功能。
总体模块如图1.2所示。
图1.2 电路的组成部分二、硬件设计2.1 单片机最小系统单元主控机系统采用了Atmel 公司生产的 STC89C52单片机,它含有256 字节数据存储器,内置8K 的电可擦除FLASH ROM,可重复编程,大小满足主控机软电容组成系统的内部时钟电路。
2.2 光电开关单元传耦合器以光为媒介输电信号。
它对输入、输出电信号有良好的隔离作用,所以,它在各种电路中得到广泛的应用。
目前它已成为种类最多、用途最广的光电器件之一。
光耦合器一般由三部分组成:光的发射、光的接收及信号放大。
输入的电信号驱动发光二极管(LED),使之发出一定波长的光,被光探测器接收而产生光电流,再经过进一步放大后输出。
这就完成了电—光—电的转换,从而起到输入、输出、隔离的作用。
由于光耦合器输入输出间互相隔离,电信号传输具有单向性等特点,因而具有良好的电绝缘能力和抗干扰能力。
又由于光耦合器的输入端属于电流型工作的低阻元件,因而具有很强的共模抑制能力。
所以,它在长线传输信息中作为终端隔离元件可以大大提高信噪比。
在计算机数字通信及实时控制中作为信号隔离的接口器件,可以大大增加计算机工作的可靠性。
而槽型光耦为中断槽隙透视式光电传感器。
①.槽型光耦的特点:信号单向传输,输入端与输出端完全实现了电气隔离,输出信号对输入端无影响,抗干扰能力强,工作稳定,无触点,使用寿命长,传输效率高。
光耦合器是70年代发展起来产新型器件,现已广泛用于电气绝缘、电平转换、级间耦合、驱动电路、开关电路、斩波器、多谐振荡器、信号隔离、级间隔离、脉冲放大电路、数字仪表、远距离信号传输、脉冲放大、固态继电器(SSR)、仪器仪表、通信设备及微机接口中。
在单片开关电源中,利用线性光耦合器可构成光耦反馈电路,通过调节控制端电流来改变占空比,达到精密稳压目的。
②.槽型光耦的工作原理:槽隙两边分别装有红外发射器和接收器。
当槽内无物体时,红外发射管的光直接照在硅光敏三极管的窗口上,从而产生大的电流输出;当有物体经过槽隙时,切断了光路,阻挡了信号的传输,这时光敏三极管无输出,这样可以辨别物体的有无。
③.槽型光耦的应用:(1) 在逻辑电路上的应用光电耦合器可以构成各种逻辑电路,由于光电耦合器的抗干扰性能和隔离性能比晶体管好,因此,由它构成的逻辑电路更可靠。
(2) 作为固体开关应用在开关电路中,往往要求控制电路和开关之间要有很好的电隔离,对于一般的电子开关来说是很难做到的,但用光电耦合器却很容易实现。
(3) 在触发电路上的应用将光电耦合器用于双稳态输出电路,由于可以把发光二极管分别串入两管发射极回路,可有效地解决输出与负载隔离地问题。
(4) 在脉冲放大电路中的应用光电耦合器应用于数字电路,可以将脉冲信号进行放大。
(5) 在线性电路上的应用线性光电耦合器应用于线性电路中,具有较高地线性度以及优良地电隔离性能。
(6) 特殊场合的应用光电耦合器还可应用于高压控制,取代变压器,代替触点继电器以及用于A/D电路等多种场合。
光电脉冲的转换电路如图2.2所示:图2.2光电脉冲的转换电路槽型光耦用VCC=5V电源(如图2-2),可以安装在出租车车轮处。
当出租车在行进过程中,则车轮就会不断对它遮挡,从而产生一系列脉冲。
由于这些脉冲可能会被干扰,或者电平不稳定,因此就需要增加一个三级管(Q1)对信号进行放大。
而74LS14是作为反相器的功能来使用,可以使OUT口输出的脉冲符合TTL 电平,直接可输入到STC89C52的INT0口。
计算:由于槽型光耦中的二极管的导通电压为0.7V,流过的电流为10mA,而电压源为5V电压,故R1两端电压为U=4.3V,流过的电流为I=10mA,因此R1=U/I=4.3V/10mA=430Ω≈500Ω。
而上拉电阻R2是用来限流,故R2≥10KΩ,故R2=10KΩ。
设计中以槽型光耦作为传感器元件,并且在实现阶段用函数信号发生器模拟光电传感器实现计程脉冲的形成。
2.3 键盘调整单元当单价等信息需要进行修改时,就要用到键盘进行修改。
由于调节信息不多,故采用4个独立键盘即可,分别实现显示金额和公里数、清零、暂停、单程和往返功能等作用。
键盘采用4*4矩阵按键,接在STC89C52的P3口,当有键按下时,相对应的接口被置0。
矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O 线作为列线组成的键盘。
在行线和列线的每一个交叉点上,设置一个按键。
电路原理图如图2.3所示,行线接P3.0~P3.3,列线接P3.4~P3.7。
S8:按1次,显示金额和公里数;按2次,进入调整中途等待计价。
S9:对上一次的计费进行清零,为下次载客准备。
S10:停止计价,方便客户查看金额。
S11:实现单程和往返单价的切换。
图2.3 键盘调整单元接线图2.4 7279键盘、显示接口采用HD7279芯片构成键盘显示电路,HD7279是一片具串行接口的,可同时驱动8位共阴式数码的智能显示驱动芯片,该芯片同时还可以连接多达64键的键盘矩阵,单片即可完成LED显示、键盘接口的全部功能。
DIG0~DIG7和SA~S G键盘的列线和行线端口,用来完成对键盘的监视,译码和键值的识别。
DIG0~DIG7为8个LED管的位驱动输出端,SA~SG分别为LED数码管的A段~G段的输出端,DP为小数点的驱动输出端。
HD7279与单片机仅需4跟接口线,其中的CS为片选信号,当单片机访问HD7279即读键号或写指令时,应将片选端置为低电平,低电平有效。
CLK为数据串行传送的同步时钟输入端,时钟的上升沿表示数据有效。
DATA为串行数据端,当向HD7279发送数据时,DATA为输入端;当HD7279输出键盘代码时,DATA为输出端。
KEY为按键信号输出端,在无键按下时为高电平;而有键按下时此引脚变为低电平并且一直保持到键释放为止。
在64阵列键盘中每个键的键码是用十六进制表示的,可用读键盘数据指令读出,其范围是00H~3FH。
HD7279需要一外接的RC震荡电路以供系统工作,其典型值R=1.5kΩ,C=15 pF。
RESET为复位端。
该端口由低电平变成高电平并保持25ms即复位结束。
HD7 279A片内具有驱动电路,它可以直接驱动LED数码管,使外围电路变得简单可靠。
HD7279键盘、显示接口电路如图2-4:图2.4 7279键盘显示接口电路三、软件设计软件是单片机系统的灵魂,根据设计的要求,在本系统中主要有主程序、中断服务程序和键盘显示子程序、计算子程序等。
在主程序中主要完成了寄存器的初始化部分以及对键盘和显示的控制。
3.1系统主程序在主程序模块中,需要完成对各参量和接口的初始化、出租车起价和单价的初始化以及中断、计算、循环等工作。
另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。
然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。
当汽车运行起来时,就启动计价,根据里程寄存器中的内容计算和判断行驶里程是否已超过起步价公里数。
若已超过,则根据里程值、每公里的单价数和起步价数来计算出当前的总金额,并将结果存于总金额寄存器中;中途等待时,无脉冲输入,不产生中断,当时间超过等待设定值时,开始进行计时,并把等待价格加到总金额里,然后将总金额、里程和单价、往返价格送数码管显示出来。
程序流程如图3.1所示。
、、图3.1 主程序流程图3.2 中断程序每当光电传感器输出一个低电平信号就使单片机中断一次,当里程计数器对里程脉冲计满3600次时,进入里程计数中断服务程序中,里程变量加一。
主函数中总金额也相应地变化。
在中途等待中断程序中,每1ms产生一次中断,将由当前里程计算出速度值送入某个缓存变量,每5分钟将缓存变量中的值和当前速度值比较,当汽车小于设定的车速,光电传感器5分钟输出信号,当前速度值小于缓存变量内的值,则进入等待计时,每5分钟记一次价格。
如图3.2图3.2 中断服务程序3.3 计算程序计算程序根据里程数分别进入不同的计算公式。
如果里程大于3公里,则执行公式:总金额=起步价+(里程-3)*单价+等待时间*等待单价;否则,执行公式:总金额=起步价+等待时间*等待单价;程序框图如3.3所示。
图3.3 计算程序框图3.4 显示程序程序利用定时器每1ms产生一次中断,相应变量置位,点亮一个数码管,显示一位数据,利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人眼暂留现象,即可实现显示。