当前位置:文档之家› 基于单片机的速度里程表设计

基于单片机的速度里程表设计

湖南工业职业技术学院毕业实践任务书系名称电气工程系专业及班级学生姓名 ________________________学号 ________________________毕业实践题目:基于单片机的汽车里程表设计指导教师(签字):教研室主任(签字):系主任(签字):2008年 1 月20 日毕业实践课题及任务湖南工业职业技术学院毕业实践开题报告书系专业湖南工业职业技术学院毕业实践考核表系专业目录实验原理。

3 方案论证和选择。

3 所用设备、器材。

3 硬件方案(完整的电路原理图)。

4 软件方案(程序流程图,源程序(含注释))。

10 调试过程。

13 运行结果及分析。

16 实验的收获体会及建议。

17 组长对本人及组员评价。

17 参考文献:作者、名称、出版社、出版日期。

17实验原理:本设计能实时地将所测的速度与累计里程数显示出来,主要是将传感器输入到单片机的脉冲信号的频率(传感器将不同车速转变成不同频率的脉冲信号)实时地测量出来,考虑到信号的衰减、干扰等影响,在信号送入单片机前应对其进行放大整形。

本设计用两个按键来控制显示速度或里程。

单片机利用定时器T0的控制功能测出输入信号的周期后,再利用单片机的算术运算功能将周期转换成速度,同时每秒钟进行一次里程累计,从而计算出总里程。

最后将得出的速度、里程值存储在EEPROM中,并根据两个按键的选择情况来显示速度或里程。

为了方便计算要显示数据值的段码,可再将其转换成压缩的BCD码,然后通过查表将要显示的数据值中每一位的压缩BCD码转换成8段码送到显示缓冲区,最后经串口数据存储器送至LED显示模块以显示所测的速度或里程。

本设计的里程数的算法是一种大概的算法(假设在一定时间内汽车是匀速行进,平均速度与时间的乘积即为里程数)。

设计时,应综合考虑测速精度和系统反应时间。

本设计用测量脉冲频率来计算速度,因而具有较高的测速精度。

在计算里程时取了汽车的理想状态。

实际中,误差控制在几米之内,相对于整个里程来说不是很大。

为了保证系统的实时性,系统的速度转换模块和显示数据转BCD码模块都采用快速算法。

另外,还应尽量保证其他子模块在编程时的通用性和高效性。

本设计的速度和里程值采用8位显示,并包含两个小数位。

方案论证和选择本速度里程表设计以单片机和光电传感器为核心。

传感器将不同车速转变成的不同频率的脉冲信号输入到单片机进行控制与计算,再采用LED模块进行显示,使得速度里程数据能直观的显示给使用者。

所用设备、器材组成本速度里程表由信号预处理电路、A T89C51单片机、串口液晶显示电路、串口数据存储电路和系统软件组成。

其中信号预处理电路包含信号放大、波形变换和波形整形。

信号预处理电路中的放大器用于对待测信号进行放大,以降低对待测信号的幅度要求;波形变换和波形整形电路则用来将放大的信号转换成可与单片机接口的TTL信号;通过单片机的设置可使INT0引脚能够对内部定时器T0的工作进行控制,这样能精确地测出加到INT0引脚的正脉冲数(即测出脉冲信号的周期);设计中速度显示采用LED模块,所得的数据采用I2C总线并通过EEPROM来存储,因而节省了所需单片机的口线和外围器件,同时也简化了显示部分的软件编程系统软件包括单片机和LED模块的初始化模块、LED模块的写数据/命令子模块、周期测量模块、速度里程计算模块、数据存储模块、速度和里程显示数据转BCD码模块、显示数据消多余零模块、数据显示模块以及实时中断服务模块等,系统的原理框图如图1所示。

图1 系统的原理框图硬件方案(完整的电路原理图)一、系统硬件设计1 信号预处理电路信号预处理电路如图3所示,系统的信号预处理电路由二级电路构成,第一级是由开关三极管组成的零偏置放大器,采用开关三极管可以保证放大器具有良好的高频响应。

当输入信号为零或负电压时,三极管截止,电路输出高电平;而当输入信号为正电压时,三极管导通,此时输出电压随着输入电压的上升而下降,这使得速度里程表既可以测量任意方波信号的频率,也可以测量正弦波信号的频率。

由于放大器的放大功能降低了对待测信号的幅度要求,因此,系统能对任意大于0.5V的正弦波和脉冲信号进行测量。

预处理电路的第二级采用74LS14把放大器生成的单相脉冲转换成与COMS电平相兼容的方波信号(如图4所示),同时将输出信号加到单片机的P3.2口上。

图3 信号预处理电路图图4 施密特触发器对脉冲的整形利用施密特触发器状态转换过程中的正反馈作用,可以把边沿变化缓慢的周期性信号变换为边沿很陡的矩形脉冲信号。

输入的信号只要幅度大于VT+,即可在施密特触发器的输出端得到同等频率的矩形脉冲信号。

从传感器得到的矩形脉冲经传输后往往发生波形畸变。

当传输线上的电容较大时,波形的上升沿将明显变坏;当传输线较长,而且接受端的阻抗与传输线的阻抗不匹配时,在波形的上升沿和下降沿将产生振荡现象;当其他脉冲信号通过导线间的分布电容或公共电源线叠加到矩形脉冲信号时,信号上将出现附加的噪声。

无论出现上述的那一种情况,都可以通过用施密特反相触发器整形而得到比较理想的矩形脉冲波形。

只要施密特触发器的VT+和VT-设置得合适,均能受到满意的整形效果。

2 EEPROM AT24C02的应用AT24C02是CMOS 2048位串行EEPROM,在内部组织成256×8位。

AT24C02的特点是具有允许在简单的二线总线上工作的串行接口和软件协议。

如图5所示,在本设计中用芯片AT24C02的SDA端与单片机的P3.7口相连,SCL 端与单片机的P3.5口相连。

因为在这个I2C总线上只有一个器件,所以把AT24C02的地址设为000,即把A0、A1、A2都接地。

单片机计算出来的里程数据通过SDA、SCL向AT24C02输送数据。

单片机首先向AT24C02发送写信号,当确认后从单片机内部的数据储存单元提取数据然后向AT24C02的内部地址传送数据。

当显示里程时,单片机首先向AT24C02发送读信号,然后确认后,单片机从AT24C02内部的地址向单片机的读出单元字节读出数据,供显示所用。

图5 AT24C02与单片机的接口电路图3显示部分本设计的显示模块包括MC14511BCP、CD4076、74LS138和8个LED显示管等器件。

MC14511是将锁存、译码、驱动三种功能集于一身的“三合一”器件。

锁存器的作用是避免在计数过程中出现跳数现象,便于观察和记录。

用译码器将BCD码转换成7段码,再经过大电流反相器,驱动共阴极LED数码管。

译码器属于非时序电路,其输出状态与时钟无关,仅取决于输入的BCD码。

74LS138的作用相当于位选的功能,当C,B,A的输入分别为“000、001、010、011、100、101、110、111”时分别选择不同的MC14511,从而在不同位上显示不同的数字和小数点。

CD4076是CMOS 4位三态输出D寄存器,通过74LS138的Y6,Y7来控制其CP的工作,从而使CD4076来控制小数点显示。

图6是显示模块图6 显示模块框图图7为系统显示部分的电路。

系统中用74LS138的Y0~Y5选择MC14511以驱动LED显示,Y6、Y7来控制CD40756的CP,从而达到以CD4076的Q1~Q4控制小数点的显示,另一个CD4076只用到其Q1和Q2,图中字符相对应的地方表示其引脚相连。

8图7 系统显示部分的电路二、原理原理图电路见图1,由检测传感器、单片机电路和数码显示电路等部分组成。

图1软件方案(程序流程图,源程序(含注释))系统的软件设计1 系统软件框图如图8所示,本系统软件采用模块化设计方法。

整个系统由初始化模块、频率测量模块、速度,里程计算模块、数据转BCD码模块、速度显示模块、里程显示模块、数据存储,读取模块、定时器中断服务模块以及其他功能模块组成。

图8 系统软件框图2 数据处理待测信号经预处理电路后加至单片机的P3.4(T0)引脚可为单片机测量信号频率提供有效的输入信号。

单片机通过检测P3.4引脚电平来决定是否启动测量频率程序。

当该引脚为高电平时,系统处于等待状态,要一直到该引脚出现低电平时才开始测频率。

我们可从硬件的铝盘上知道两个过孔之间在圆周上的距离。

而这个距离M正好为计算速度和距离起到了基本的数据储备作用。

同时可以从TL0寄存器知道在两秒内单片机检测到的N个脉冲。

而M×N所得到的正是这两秒内铝盘在圆周上所走得距离S。

(此时假设在这个两秒内车子是匀速前进的),距离S除以2s的时间,就可以大概的算出这2s 内铝盘的线速度。

再根据铝盘与汽车的轮子保持着一样的角速度,得到铝盘的线速度与轮子线速度的关系,从而算出汽车在这2s的平均速度。

至于里程的计算,根据速度计算的分析,在得到2s内铝盘在其圆周上走过的距离后。

根据它与汽车轮子的圆周走过的距离有一定比例关系(通过两者角速度一样的算法)可以通过单片机的算出汽车在这两秒内走过的路程S1。

把这个路程S1与存储器原来的里程数相加即可得到目前的总里程数。

通过单片机计算出来的速度和里程的数据,必须通过BCD码的转换才能输出给显示模块。

总里程数的显示是设定出现在电动汽车开动,单片机开机经过初始化后显示出来,这样以来用户可以清楚的知道自己的车子已经运行了多少公里了。

而速度的显示则是在计算出速度里程后立刻显示出来,体现实时性。

速度里程表——流程图程序:速度里程表——-程序程序的基本思路如流程图(速度里程表流程图)所示,,用定时器设定每一圈的时间。

里程记圈数,用记数总圈数除以一公里需要的圈数即要显示的公里数。

SDA BIT P1.7 ;I2C总线定义SCL BIT P1.6RST BIT P1.0KEY_INT BIT P3.2MTD EQU 40H ;发送数据缓冲器MRD EQU 49H ;接收数据缓冲区;定义器件地址,变ZLG7290 EQU 70H ;ZLG7290的器件地址ACK BIT 10H ;应答标志位SLA DATA 50H ;器件的从地址SUBA DA TA 51H ;器件的子地址NUMBYTE DATA 52H ;读/写的字节数变量ORG 8000HLJMP MAINORG 8100H;-------主程序如下:MAIN:MOV SP,#70HMOV TMOD,#56HMOV TL0,#0FFHMOV TH0,#0FFHMOV TL1,#0FEHMOV TH1,#0FFHSETB EASETB ET0SETB ET1CLR TR0CLR TR1BEGIN:JB P3.0,BEGINSETB TR1MOV R2,#03HMOV P1,#0FCHLOOP:JNB P3.1,MAINJMP LOOPINTT0:INC R2MOV 30H,R2XRL 30H,#0FFHMOV P1,30HRETIINTT1:CLR ET1SETB TR0RETICLR R STLCALL DELAYSETB RSTLCALL DELAYMAINLOOP:JB T0,KEY_HANDLESJMP MAINLOOPKEY_HANDLE:MOV SLA,#ZLG7290 ;指定器件地址MOV SUBA,#01H ;指定子地址MOV NUMBYTE,#01H ;发送2字节数据LCALL IRDNBYTE ;调用写2字节数据程序LCALL DELAYMOV R7,#08HMOV A,P1MOV R6,#60HHANDLELOOP:MOV MTD,R6MOV MRD,APUSH ACCMOV 30H,R7MOV MTD+1,MRDMOV SLA,#ZLG7290 ;指定器件地址MOV SUBA,#07H ;指定子地址MOV NUMBYTE,#02H ;发送2字节数据LCALL IWRNBYTE ;调用写2字节数据程序LCALL DELAYUSING 2MOV R7,30HPOP ACCINC R6DJNZ R7,HANDLELOOPSJMP MAINLOOPDELAY:MOV R7,#80HMIN: DJNZ R7,YS500RETYS500: LCALL YS500USLJMP MINYS500US:MOV R6,#80HDJNZ R6,$RETDELAY1: MOV R7,#20HDJNZ R7,$RET$INCLUDE(VI2C_ASM.INC) ;包含VIIC软件包END调试过程运行结果及分析:程序运行没有错误,但是没有数据显示。

相关主题