2.1.3 计费开始提示
当出租车载上乘客并起步后,将空车指示牌扳倒时,空车指示牌里的指示灯熄灭,并有语音或灯光提示信号。
DISPLAYP3.0-P3.1P0P2.2-P2.083DATASELSDBZSTARTLCBZDDBZXDBZWCLKSCLK传感器时钟信号P2.3P2.7P2.4P2.5P2.6复位MCUFPGARESETP1.0-P1.5显示切换确定修改启动空车牌
图2.2 总体原理框图
2.2 功能模块设计
根据系统的设计要求,将整个测控FPGA系统CZJFXT分为七个模块,它们分别是:分频器模块FPQ,等待判别模块DDPB,里程计算模块LCJS,里程计费模块LCJF,等待计时模块DDJS,等待计费模块DDJF,输出数据选择模块SCXZ。
分频器模块FPQ:将外部时钟信号SCLK(设计时假设为1024HZ)经过适当分频后,产生1HZ的系统工作用基准时钟信号CLK1HZ,供给系统中的有关模块计时用。
等待判别模块DDPB:根据速度传感器脉冲信号WCLK和分频器产生的基准时钟信号CLK1HZ,计算单位时间里WCLK的脉冲个数(每㎞产生1000个脉冲信号,即每米产生1个脉冲信号),亦即出租车行驶速度,从而判别出租车是否处于等待状态,发出等待标志信号DDBZ。当速度大于12㎞/H,即速度大于200M/MIN时,出租车处于运行状态,这时等待标志DDBZ=0;当速度小于等于12㏎/H,即速度小于等于200M/MIN时,出租车处于等待状态,这时等待标志DDBZ=1。该模块的VHDL程序设计可分为三个进程:60S周期性跳变信号产生进程,每分钟行驶距离计算进程,等待标志判别进程。等待标志判别进程就是比较每分钟WCLK脉冲个数与等待状态WCLK脉冲临界个数200的大小,从而确定DDBZ的赋值。
里程计算模块LCJS:根据速度传感器脉冲信号WCLK和等待标志DDBZ,对出租车行驶的里程数XSLC进行计算,同时发出里程标志信号LCBZ和里程计费标志信号JFBZ。如果LCBZ=1,说明行驶距离超过2㎞,里程计费启动;如果LCBZ=0,说明没超过2㎞,按起价计费,每行驶1㏎应计费1次,并且计费的启动信号应是某一时刻,因此每行驶1㎞,计费标志信号JFBZ应跳变1次。该模块的VHDL程序设计可分为两个进程:里程计算及标志
1
产生进程,产生计费信号进程。产生计费信号进程就是每行驶10百米(即1㎞)JFBZ由低电平0变为1,经过一个系统时钟周期后JFBZ又回复到低电平0,里程计费模块LCJF就是在JFBZ脉冲信号的上升沿到来时进行计费的加法操作。
里程计费模块LCJF:在计费标志信号JFBZ,等待标志信号DDBZ,里程标志信号LCBZ和时段标志信号SDBZ等信号的控制下,计算行驶里程超过2㎞以上里程的费用LCFY。该模块的VHDL程序是通过由多个条件控制的加法进程来完成里程计费的,里程计费的条件是在DDBZ=0,并且在JFBZ的上升沿根据SDBZ分别进行加法计费操作。当SDBZ=1时,表示在06:00~23:00时段,其单价SD1为1.4元/㎞;当SDBZ=0时,表示其他时段,其单价SD2为1.8元/㎞。如果LCBZ=1,说明行驶距离超过2㎞,里程计费启动;如果LCBZ=0,说明没超过2㎞,按起价计费。
等待计时模块DDJS:在等待标志信号DDBZ和基准时钟信号CLK1HZ的控制下,进行等待时间DDSJ的计算,其中DDSJ的低8位表示等待时间的秒数,DDSJ的高8位表示等待时间的分钟数,同时根据等待时间的长短发出一个熄灯标志信号XDBZ。当等待时间小于等于1小时,XDBZ=0,等待时间显示灯亮;当等待时间大于1小时,XDBZ=1,等待时间显示不亮。该模块的VHDL程序是通过一个多层嵌套的加法进程来完成等待计时的。
等待计费模块DDJF:在等待标志信号DDBZ和熄灯标志信号XDBZ控制下,进行等待费用DDFY的计费操作。该模块的VHDL程序包括两个进程:60S周期性跳变信号产生进程,等待费用计算进程。等待费用计算的条件是在DDBZ=1并且在60S周期性跳变信号T60S的上升沿,根据XDBZ分别进行加法计费操作。当DDBZ=1且XDBZ=0时,按1元/5分钟,即20分/分钟计费;当DDBZ=0且XDBZ=1时,按20元/小时,即33分/分钟计费。
输出数据选择模块SCXZ:根据单片机发出的数据传输选择控制信号SEL,选择有关计算处理结果传输给单片机。
2
第3章 硬件及软件实现
3.1 传感器
传感器通常是指能感受并能按一定规律将所感受的被测非电量(包括物理量、化学量、生物量等)转换成便于处理与传输的电量(一般为电量,也有少数为其他物理量,如光信号)的器件或装置。
光电传感器是把光信号转换为电信号的传感器,光电传感器的种类极多。它们共同的特点是响应速度快,易于实现非接触测量,非常适于与计算机接口。 3.1.1 光电传感器电路设计
光电传感器工作时,大致应用了三种效应:通过光子与物质的相互作用能直接得到电信号的量子效应;光被物质吸收变成热量后,利用热电转换得到电信号的热效应;光作为一种电磁波,直接与物质相互作用,从而感应出电信号的波动相互作用效应。
反射式光电传感器是用来检测黑白线条的,如图3.1.1(a)所示
由于黑白物体的反射系数不同,利用反射光可以使光敏三极管实现导通和断开,调节传感器与被测对象之间的距离,使光敏三极管只能接受到白色物体反射回来的光束。而黑色物体的反射系数小,所反射回来的光束很弱,光敏三极管无法接受到反射光。 从而实现对黑白线条的检测。
还要在输出信号处加个控制电路,如图3.1.1(b)起隔离强信号和方波整形的作用.
(a)
(b)
图3.1.1 反射式光电传感器
3
3.1.2车轮光电开关检测电路
由于要测出出租车的运行速度,每1千米产生1000个脉冲信号并计算出单位时间里的脉冲个数,转换成车轮所转的圈数,即产生脉冲数的多少。在该设计中采用在车轮的转盘上安装一个3条黑白线均匀的圆盘,再用光电开关来检测,如下图4.1.2所示,当出租车运动时,车轮转动,光电传感器利用接收黑白电平时输出的高低电平,当光电传感器检测到黑色条纹时,输出高电平给单片机,相反当检测到白色条纹时输出低电平,从而把连续输出高低电平转化为脉冲数,也就把电机转动时带动有黑白线的圆盘黑白条数转换成脉冲数,从而测试出出租车运行速度。
+5R1+5光电传感器1KU1R211KIOB2 or IOB3Te74HC14Optoisolator1 图3.1.2 光电检测电路
用一张贴有黑色胶带的白纸,让光电传感器离纸不到5cm的平面上与胶带垂直经过,看计数是否与所经过的的胶带数目相等,若多次测试都是吻合的,则此光电传感器良好.
3.2 单片机
单片机既是一个微型的计算机,它具有组成计算机系统的三个要素:CPU、内存与I/O。 CPU:运算或逻辑上的判断; 内存:存放程序与数据; I/O:与外界沟通的桥梁。
Memory 内存 CPU中央处理器I/O 输入/出设备 图3.2.1 单片机简图
4
3.2.1 8051 单片机功能方块图
EA EXTRNAL INTERRUPTS INT1 INT0 EXTRNAL INTERRUPTTIMER0 定时/计数ETC ON-CHIP PROGRAM MEMORY 4K/(8K) ON-CHIP RAM 128/(256) Bytes (TIMER2) TIMER1 COUNTER INPUTS INTERRUPT CONTROL 中断TIMER1 (TIMEROM RAM CPU 8051 CORE 指令分析 控制总线 并行接口 串行接口 OSC 振荡与时序 BUS CONTROL 4 I/O PROT SERIAL PORT WRRD PSENALE P0 P2 P1 P3 TXD RXD 图3.2.2 8051 单片机功能方块图 振荡及时序单元(OSC):
8051内部有晶体振荡电路,只要在外部加上石英振荡晶体,即可产生频率非常稳定的振荡信号,这个振荡信号正是8051的心脏,所有8051的时钟序列都以此振荡信号为基准。 内部数据存储器(Data Memory):
当程序在运行时,有些数据是经常在变动的,例如LED的显示状态或显示值等,它会因I/O测量的结果而变动,这些值就暂时放置在此区域中,供其他程序进一步读取,这也代表此区域是可以随时读写的。8051系列的CPU提供128个字节可读写的数据存储单元,52系列的CPU则提供256个字节的数据存储单元,这个数据区域中有一段区域16个字节共128位是可以进行位寻址的,MCS—51系列的CPU有相当强的位处理指令,可以妥善且有效地运用该数据存储器,使用方法将在8051的指令说明中再详述。 内部程序存储器(Program memory):
这段区域用于存放我们的应用程序,而且这部分一经确认后是永远不做修改的。8051系列的CPU提供内部4096个字节(4KB)的程序存储器,8052系列的CPU则提供2倍即8192个字节(8KB)的程序存储器,而8031和8032则不含此单元。此单元可以使CPU选择由内部的程序区启动或由外部的程序区启动,内部的程序区启动具有保护功能,后者成本较为低廉。在8051系统中特地将程序区和数据区分隔开,两者最大的差异是后者可以读取和写入,简而言之,PROGRA MMEMORY就是 ROM,DATA MEMORY则是
5