汽车速度里程表的设计论文.docx
《汽车速度里程表的设计论文.docx》由会员分享,可在线阅读,更多相关《汽车速度里程表的设计论文.docx(28页珍藏版)》请在冰豆网上搜索。
汽车速度里程表的设计论文
汽车里程表课程设计论文
班级:
学号:
姓名:
指导老师:
摘要:
在车辆高速行驶的过程中,车速里程表是为驾驶员及时提供动态驾驶信息的重要仪表,它的好坏直接影响到车辆行驶安全。
而传统的车速里程表存在两大缺陷:
一是用软轴驱动的传统车速里程表在车辆高速行驶状态下,软轴高速旋转,由于软轴钢丝应力极限的限制,常常造成钢丝软轴的疲劳断裂,从而使车速里程表失效;二是由于软轴布线过长,出现形变过大和运动迟滞现象,导致动态指示迟钝或指示错误。
为了更加及时可靠的为驾驶员提供动态驾驶信息,保证车辆行驶安全,客服传统软轴驱动车速里程表故障率高、动态指示迟钝等问题,运用先进的电子技术、传感器测量技术和计算机智能技术,改进传统的里程表是非常必要的。
关键字:
单片机,霍尔传感器,车速里程表
前言
汽车是现代生活中不可或缺的一种重要交通工具,传统的指针式里程表伴随着汽车的诞生就一直为人们喜爱,不过,新生事物不会因传统的存在而停止它前进的步伐。
数码科技在今天已渗透到工业,农业,民用等产品的点点滴滴。
新概念的车速里程表最直观的变化就是用大屏幕的液晶取代指针式表盘,直接用数字显示速度和里程,以及其他一些诸如油耗、时钟、环境温度等参数,直观的呈现给使用者。
同时,它还具有成本低廉,显示清晰,稳定可靠等优点。
由于微处理机体积小,可以把它做到产品的内部,取代老式机械零件,缩小产品体积,增强功能,实现智能化。
因此被广泛地用在智能产品中。
Intel公司的MCS-51系列单片机近年来得到了广泛流行。
本文即介绍一种基于ES8086芯片的汽车速度与里程表的设计和实现。
本设计ES8086的运算和控制功能,采用串口液晶显示模块实时显示所测汽车的速度和里程设计方案。
由于使用了7段数码管显示模块,以及高效快速算法,因而可在节约系统资源和简化程序设计的基础上保证测量精度和系统实时性。
本文先对里程表设计中所需设备作详细介绍,再对设计中存在的问题进行了说明,对硬件部分和软件部分的设计和实现作认真的分析。
一任务设计
本实验的设计任务是基于试验仪系统中8253,七段LED数码管以及键盘等电路设计一个汽车运动模拟系统,要求如下:
(1)利用键盘模拟汽车运动控制
(2)速度有档可调
(3)七段LED显示汽车速度和里程
1.根据要求得出系统流程图如下
开始
汽车启动控制
速度档位调整
(速度加减控制)
里程记录
速度、里程显示
(七段LED)
刹车控制
结束
图1-1系统流程图
2.8253简介:
8253内部有三个计数器,分别称为计数器0、计数器1和计数器2,他们的机构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
执行部件实际上是一个16位的减法计数器,它的起始值就是初值寄存器的值,而初始值寄存器的值是通过程序设置的。
输出锁存器的值是通过程序设置的。
输出锁存器OL用来锁存计数执行部件CE的内容,从而使CPU可以对此进行读操作。
顺便提一下,CR、CE和OL都是16位寄存器,但是也可以作8位寄存器来用。
图1-28253
二功能扩展
经过对本课题的分析,发现可以用直流电机来模拟汽车运动,如此便可以通过对直流电机的控制来模拟汽车运动控制。
其中可以通过对直流电机的测速来获得“汽车速度”,通过对直流电机输入电压进而来控制电机转速,以此实现对汽车速度变档的模拟。
通过光电开关来测量电机转速,在这里简单说明测度。
霍耳效应:
1879年E.H.霍尔发现,如果对位于磁场(B)中的导体(d)施加一个电压(v),该磁场的方向垂直于所施加电压的方向,那么则在既与磁场垂直又和所施加电流方向垂直的方向上会产生另一个电压(UH),人们将这个电压叫做霍尔电压,产生这种现象被称为霍尔效应。
霍尔效应从本质上讲是运动的带电粒子在磁场中受洛仑兹力作用而引起的偏转。
当带电粒子(电子或空穴)被约束在固体材料中,这种偏转就导致在垂直电流和磁场的方向上产生正负电荷的积累,从而形成附加的横向电场。
通有电流I的金属或半导体板置于磁感强度为B的均匀磁场中,磁场的方向和电流方向垂直,在金属板的第三对表面间就显示出横向电势差UH的现象称为霍耳效应。
UH就称为霍耳电势差。
实验测定,霍耳电势差的大小和电流I及磁感强度B成正比,而与板的厚度d成反比。
霍尔转速传感器:
霍尔转速传感器的外形图和与磁场的作用关系如图2.1-1所示。
磁场由磁钢提供,所以霍尔传感器和磁钢需要配对使用。
霍尔传感器检测转速示意图如图2-2所示。
在非磁材料的圆盘边上粘贴一块磁钢,霍尔传感器固定在圆盘外缘附近。
圆盘每转动一圈,霍尔传感器便输出一个脉冲。
通过单片机测量产生脉冲的频率就可以得出圆盘的转速。
霍尔电流传感器本身已经存在滤波电路,输出无须再加装滤波,可直接供单片机的0~5V的AD采集或直接送到单片机的中断输入引脚,信号非常稳定,而且抗干扰能力很强。
霍尔电流传感器反应速度一般在7微妙,所以不用考虑单片机循环判断的时间。
若在圆盘上贴上多块磁钢,则圆盘每转一圈,输出的脉冲信号将相应增加,单位时间内测到的脉冲数将增多,测出的转速也将更加精细。
图2-1霍尔转速传感器的外形图
图2-2霍尔传感器检测转速示意图
该设计能实时地将所测的速度显示出来,同时也能够累计显示总里程数。
该速度里程表能将传感器输入到芯片的脉冲信号的宽度(传感器将车速转变成相应宽度的脉冲信号)实时地测量出来,然后通过单片机计算出速度和里程,再将所得的数据存储到串口数据存储器,并由串口液晶显示模块实时显示出所测速度。
本设计用两个按键来控制显示速度或里程。
考虑到信号的衰减、干扰等影响,在信号送入单片机前应对其进行放大整形,然后再输入到单片机进行测速。
单片机利用定时器T0的控制功能测出输入信号的周期后,再利用单片机的算术运算功能将周期转换成速度,同时每秒钟进行一次里程累计,从而计算出总里程。
最后将得出的速度、里程值存储在E2PROM中,并根据两个按键的选择情况来显示速度或里程。
为了方便计算要显示数据值的段码,可再将其转换成压缩的BCD码,然后通过查表将要显示的数据值中每一位的压缩BCD码转换成8段码送到显示缓冲区,最后经串口送至液晶显示模块以显示所测的速度或里程。
三设计电路
3.1转速测量原理
本转速测量实验采用反射式光电开关,通过计数转盘通断光电开关产生的脉冲,计算出转速
(1)反射式光开关工作原理:
光电开关发射光,射到测量物体上,如果强反射,如图1,光电开关接收到反射回来的光,则产生高电平1;弱反射,如图2,光电开关接收不到反射回来的光,则产生弱电平0。
(2)实验方法:
本实验转速测量用的转盘在下表面做成如图3样子的转盘,白部分为强反射区,黑部分为弱反射区,转盘每转一圈,产生4个脉冲,每1/4秒计数出脉冲数,即得到每秒的转速。
(演示程序中,LED显示的是每秒钟转速)
图1强反射
图2弱反射
图3转盘
图3-1测速元件
3.2实验电路设计
主机连线说明:
B3区:
CS、A0
——
A3区:
CS1、A0
B3区:
INT、INTA
——
ES8688:
INTR、INTA
C5区:
CS、A0、A1
——
A3区:
CS2、A0、A1
C5区:
GATE0、GATE1
——
C1区:
VCC
C5区:
CLK0
——
B2区:
31250Hz
C5区:
CLK1
——
B2区:
1M
C5区:
OUT0
——
B3区:
IR0
F3区:
CS
——
A3区:
CS3
F3区:
OUT
——
E2区:
IN1
E2区:
OUT1
——
F1区:
CTRL
F1区:
REV
——
B3区:
IR7
E5区:
CLK
——
B2区:
2M
E5区:
CS、A0
——
A3区:
CS5、A0
E5区:
A、B、C、D
——
G5区:
A、B、C、D
图3-2霍尔传感器检测转速示意图
图3-3LED显示模块电路图
图3-4放光管电路原理图
JP65:
发光管控制接口,0-灯亮,1-灯灭
图3-5按键电路原理图图3-6开关电路原理图
JP74:
按键控制接口;按下-0信号,松开-1信号JP80:
开关控制接口;闭合-0信号,断开-1信号
四控制方法
整个程序的设计以STAR系列实验仪和PC机为平台,其中速度和里程的计算都采取了近似处理。
本系统软件采用模块化设计方法。
整个系统由初始化模块、电机转速控制模块、电机转向显示模块、频率测量模块、速度,里程显示模块其他功能模块组成。
4.1汽车速度控制
汽车速度控制实际是对直流电机转速的控制,该模块由按键、8086和DAC0832数模变换芯片组成。
通过键盘来调整直流电机的输入电压值,8086输入的数据输出到DAC0832数模变换芯片,通过数模变换,转换成实际的电压驱动直流电机。
从而达到对电机转速的控制,进而模拟汽车速度控制。
可以通过对转速的控制来实现汽车启动、刹车以及加减档的控制:
1)启动控制
实现汽车的启动即给汽车一个初始速度,如下实现:
(按下按键0启动)
Key0:
CMPVOLTAGE,14H
JNZNT4
MOVAL,28H;给予初始速度
JNBKey0_1
MOVAL,0FFH
Key0_1:
MOVVOLTAGE,AL
CALLDAC0832;
JMPMain2
2)刹车控制
刹车是通过将电机转速降到0,如下实现:
(按下按键0刹车)
Key1:
CMPAL,1
JAKey2
MOVAL,14H
JNBKey1_1
MOVAL,0FFH;最大
Key1_1:
MOVVOLTAGE,AL
CALLDAC0832;D/A
JMPMain2
3)加速控制
加速控制是通过将转速按一定值增加,如下实现:
(按下按键2加速)
Key2:
CMPAL,2
JAKey3
CMPVOLTAGE,14H
JEMain2
MOVAL,VoltageOffset
ADDAL,VOLTAGE
CMPAL,VOLTAGE
JNBKey2_1
MOVAL,0FFH;最大
Key2_1:
MOVVOLTAGE,AL
CALLDAC0832;D/A
JMPMain2
4)减速控制
(按下按键3加速)
Key3:
CMPAL,3
JAKey4
CMPVOLTAGE,14H
JNAMain2
MOVAL,VOLTAGE
SUBAL,VoltageOffset
JNBKey3_1
XORAL,AL;最小
Key3_1:
MOVVOLTAGE,AL
CALLDAC0832;D/A
JMPMain2
4.2速度、里程记录控制
本设计中速度和里程是通过中断计时的方式来记录的。
其中速度是可以通过键盘来改变,而且在每次中断的时候刷新。
而通过每一秒的速度叠加就可以得到里程。
实现如下:
INChalfsec;记录里程
CMPhalfsec,2
JNZCountInt1
CMPVOLTAGE,14H
JBNT3
MOVAL,MILE
ADDAL,VOLTAGE
SUBAL,14H
MOVMILE,AL
4.3速度、里程显示控制
本设计中速度和里程的数据由八位七段数码管显示模块显示,其中高4位中三位显示速度,第四位中三位显示里程。
--------------------------里程显示--------------------------
PUSHBX
PUSHAX
MOVAL,MILE
;MOVBL,1000
;DIVBL
;MOVbuffer+3,AL
MOVBL,100
DIVBL
MOVbuffer+2,AL
MOVAL,AH
MOVAH,00H
MOVBL,10
DIVBL
MOVbuffer+1,AL
MOVbuffer,AH
;--------------------------转测显示--------------------------
MOVAL,VOLTAGE;给0832送的数据
;PUSHAX
MOVAH,00H
CMPVOLTAGE,0
JNZNT
JMPNT2
NT:
MOVBL,14H
SUBAL,BL
NT2:
MOVBL,100
DIVBL
MOVbuffer+6,AL
MOVAL,AH
MOVAH,00H
MOVBL,10
DIVBL
MOVbuffer+5,AL
MOVbuffer+4,AH
;MOVbuffer,0
;MOVbuffer+1,0
;MOVbuffer+2,0;
MOVbuffer+3,10H
MOVbuffer+7,10H
五程序代码
;***************数据定义******************
.MODELTINY
EXTRNDisplay8:
NEAR,SCAN_KEY:
NEAR,GetKeyA:
NEAR
IO8259_0EQU0F000H
IO8259_1EQU0F001H
Con_8253EQU0E003H
T0_8253EQU0E000H
T1_8253EQU0E001H
DA0832EQU0D000H
VoltageOffsetEQU2;0832调整幅度
.STACK200
.DATA
bufferDB8DUP(0);显示缓冲区,8个字节
buffer1DB8DUP(0);显示缓冲区,8个字节
VOLTAGEDB0;转换电压数字量
CountDW0;一秒转动次数
NowCountDW0;当前计数值
kpTimeDW0;保存上一次采样时定时器的值
bNeedDisplayDB0;需要刷新显示
halfsecDB0;0.5秒计数
bFlashDB0;设置时是否需要刷新
MILEDB0
.CODE
START:
MOVAX,@DATA
MOVDS,AX
MOVES,AX
NOP
MOVbNeedDisplay,1;显示初始值
MOVVOLTAGE,14H;输入初始值
MOVCount,0;一秒转动次数
MOVNowCount,0;当前计数值
MOVkpTime,0;保存上一次采样时定时器的值
CALLDAC0832;初始D/A
CALLInit8253
CALLInit8259
CALLWriIntver
STI
;*********************按键控制*****************
MAIN:
CALLGetKeyA;按键扫描
JNBNT5
CMPAL,0
JAKey1
;--------------------按下0键启动-----------------
Key0:
CMPVOLTAGE,14H
JNZNT4
MOVAL,28H
JNBKey0_1
MOVAL,0FFH;最大
Key0_1:
MOVVOLTAGE,AL
CALLDAC0832;D/A
JMPMain2
;--------------------1号键按下刹车-----------------
Key1:
CMPAL,1
JAKey2
MOVAL,14H
JNBKey1_1
MOVAL,0FFH;最大
Key1_1:
MOVVOLTAGE,AL
CALLDAC0832;D/A
JMPMain2
;--------------------2号键按下加速-----------------
Key2:
CMPAL,2
JAKey3
CMPVOLTAGE,14H
JEMain2
MOVAL,VoltageOffset
ADDAL,VOLTAGE
CMPAL,VOLTAGE
JNBKey2_1
MOVAL,0FFH;最大
Key2_1:
MOVVOLTAGE,AL
CALLDAC0832;D/A
JMPMain2
NT4:
JMPMAIN
NT5:
JMPMain1
;--------------------3号键按下减速-----------------
Key3:
CMPAL,3
JAKey4
CMPVOLTAGE,14H
JNAMain2
MOVAL,VOLTAGE
SUBAL,VoltageOffset
JNBKey3_1
XORAL,AL;最小
Key3_1:
MOVVOLTAGE,AL
CALLDAC0832;D/A
JMPMain2
;--------------------4号键按下清零-----------------
Key4:
CMPAL,4
JAMain2
CMPVOLTAGE,14H
JNEMain2
MOVMILE,0
;MOVMILE,AL
CALLDAC0832;D/A
JMPMain2
Main1:
CMPbNeedDisplay,0
JZNT4
MOVbNeedDisplay,0;1s定时到刷新转速
Main2:
CALLRateTest;计算转速/显示
JMPMAIN;循环进行实验内容介绍与测速功能测试
;****************************显示*****************************
RateTest:
MOVAX,Count
MOVBL,10
DIVBL
CMPAL,0
JNZRateTest1
MOVAL,10H;高位为0,不需要显示
RateTest1:
MOVbuffer,AH
MOVbuffer+1,AL
;--------------------------里程显示--------------------------
PUSHBX
PUSHAX
MOVAL,MILE
;MOVBL,1000
;DIVBL
;MOVbuffer+3,AL
MOVBL,100
DIVBL
MOVbuffer+2,AL
MOVAL,AH
MOVAH,00H
MOVBL,10
DIVBL
MOVbuffer+1,AL
MOVbuffer,AH
;--------------------------转测显示--------------------------
MOVAL,VOLTAGE;给0832送的数据
;PUSHAX
MOVAH,00H
CMPVOLTAGE,0
JNZNT
JMPNT2
NT:
MOVBL,14H
SUBAL,BL
NT2:
MOVBL,100
DIVBL
MOVbuffer+6,AL
MOVAL,AH
MOVAH,00H
MOVBL,10
DIVBL
MOVbuffer+5,AL
MOVbuffer+4,AH
;MOVbuffer,0
;MOVbuffer+1,0
;MOVbuffer+2,0;
MOVbuffer+3,10H
MOVbuffer+7,10H
LEASI,buffer
LEADI,buffer1
MOVCX,8
REPMOVSB
LEASI,buffer
CALLDisplay8;显示转换结果
POPAX
POPBX
ANDAL,0FH
MOVbuffer+4,AL
MOVAL,VOLTAGE
ANDAL,0F0H
RORAL,4
MOVbuffer+5,AL
MOVbuffer+6,0
RET
Timer0Int:
PUSHAX
PUSHDX
INChalfsec;记录里程
CMPhalfsec,2
JNZCountInt1
CMPVOLTAGE,14H
JBNT3
MOVAL,MILE
ADDAL,VOLTAGE
SUBAL,14H
MOVMILE,AL
NT3:
MOVbNeedDisplay,1
MOVhalfsec,0
;MOVbNeedDisplay,1
MOVAX,NowCount
SHRAX,1
SHRAX,1
MOVCount,AX;转一圈产生4个脉冲,Count=NowCount/4
MOVNowCount,0
MOVDX,IO8259_0
;JMPTimer0Int2
MOVAL,20H
OUTDX,AL
POPDX
POPAX
IRET
CountInt:
PUSHAX
PUSHDX
MOVDX,Con_8253
MOVAL,40H
OUTDX,AL;锁存
MOVDX,T1_8253
INAL,DX
MOVAH,AL
INAL,DX
XCHGAL,AH;T1的当前值
XCHGAX,kpTime
SUBAX,kpTime
CMPAX,100
JBCountInt1;前后二次采样时间差小于100,判断是干扰
INCNowCount
Timer0Int2:
PUSHAX
PUSHBX
PUSHDX
MOVAL,00H
ADDAL,VOLTAGE
MOVBL,100
DIVBL
MOVbuffer+2,AL
MOVAL,AH
MOVAH,00H
MOVBL,10
DIVBL
MOVbuffer+1,AL
MOVbuffer,AH
CMPAH,0
JBCountInt1
CountInt1:
MOV