电子车速里程表的设计Word格式文档下载.docx
《电子车速里程表的设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《电子车速里程表的设计Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51引脚图如图2所示。
图2AT89C51引脚图
2.1.1AT89C51的主要特性
与MCS-51兼容;
4K字节可编程FLASH存储器;
寿命:
1000写/擦循环;
数据保留时间:
10年;
全静态工作:
0Hz-24MHz;
三级程序存储器锁定;
128×
8位内部RAM;
32可编程I/O线;
两个16位定时器/计数器;
5个中断源;
可编程串行通道;
低功耗的闲置和掉电模式;
片内振荡器和时钟电路[3]。
2.1.2AT89C51的管脚说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P0口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻[4]。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出[5]。
2.2霍尔速度传感器
2.2.1霍尔传感器工作原理
霍尔传感器是根据霍尔效应制作的一种磁场传感器霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。
后来发现半导体、导电流体等也有这种效应,而半导体的霍尔效应比金属强得多,利用这现象制成的各种霍尔元件,广泛地应用于工业自动化技术、检测技术及信息处理等方面。
霍尔效应是研究半导体材料性能的基本方法。
通过霍尔效应实验测定的霍尔系数,能够判断半导体材料的导电类型、载流子浓度及载流子迁移率等重要参数[6]。
2.2.2霍尔效应
如图3所示为霍尔效应示意图。
在半导体薄片两端通以控制电流I,并在薄片的垂直方向施加磁感应强度为B的匀强磁场,则在垂直于电流和磁场的方向上,将产生电势差为UH的霍尔电压。
图3霍尔效应示意图
2.2.3霍尔元件
根据霍尔效应,人们用半导体材料制成的元件叫霍尔元件。
它具有对磁场敏感、结构简单、体积小、频率响应宽、输出电压变化大和使用寿命长等优点,因此,在测量、自动化、计算机和信息技术等领域得到广泛的应用,原理图如图4所示。
图4霍尔效应原理图
2.3单片机最小系统及电路
单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。
对51系列单片机来说,最小系统一般应该包括:
单片机、晶振电路、上电复位电路。
下面给出一个51单片机的最小系统电路图[7],如图5所示。
图551单片机最小系统
复位电路:
由电容串联电阻构成,由图并结合“电容电压不能突变”的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且这个高电平持续的时间由电路的RC值来决定。
典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位。
所以,适当组合RC的取值就可以保证可靠的复位。
一般电容C取10uF,电阻R取8.2K。
也有其他取法的,原则就是要让RC组合可以在RST脚上产生不少于2个机周期的高电平。
如图5所示为复位电路。
图5复位电路
晶振电路:
典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作)。
2.4车速信号处理电路
车速里程表是用来指示汽车行驶速度和累计行驶里程的仪表,由车速表和里程表两部分组成,普通车速表一般为磁感应式,其结构如图6所示。
车速表主要由永久磁铁、铝罩、护罩、刻度盘和表针等组成,永久磁铁与主动轴紧固在一起,主动轴由来自变速器输出轴的挠性软轴驱动,指针、铝罩固接在中心轴上,刻度盘固定在表外壳上。
不工作时,铝罩在游丝的作用下,使指针位于“0”位。
当汽车行驶时,软轴驱动主动轴带动“U”形永久磁铁旋转,在铝罩上感应出电涡流而产生磁场,这个磁场与永久磁铁的旋转磁场相互作用产生钮矩,使铝罩向永久磁铁旋转方向转过一定角度,直到由游丝的弹力所产生的反方向扭矩与之平衡。
车速越高,产生的扭矩越大,指针在刻度盘上摆动的角度就越大,即指示的车速就越高。
里程表主要由蜗轮蜗杆和数字轮组成,当汽车行驶时,主动轴经三对蜗轮蜗杆驱动数字轮上的最右侧的第一个数字轮(一般为1/10Km),任一个数字轮与左侧相邻的数字轮传动比都为10:
1,这样显示的数字呈十进位递增,便自动累积了汽车总的行驶里程。
图6汽车速度里程表
由于霍尔元件具有在静止状态下感受磁场的能力,且结构简单,形小体轻,频带宽(可从直流到微波),动态特性好、动态范围大,寿命长和可进行非接触测量等优点,所以选择霍尔传感器作为本次设计的要素。
里程、速度等都是由霍尔元器件测量。
将所测的速度与累计里程数显示出来,主要是将传感器输入到单片机的脉冲信号的频率(传感器将不同车速转变成不同频率的脉冲信号)实时地测量出来,然后通过单片机计算出速度和里程,再将所得的数据存储到串口数据存储器,并由LED显示模块交替显示所测速度与里程。
由于车速信号为脉冲信号,由图7可知,此输入信号高电平不低于8V,低电平不高于0.3V。
因此将信号处理电路的门槛电压设计约为1.2V左右,以满足信号输入要求。
信号低于1.2V时,三极管不导通,F1端为低电平,从而实现了单片机的信号输入。
图7车速信号输入电路图
2.5显示电路
液晶显示模块具有体积小、功耗低、显示内容丰富等特点,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件了。
本里程表使用常见的1602字符型LCD模块。
1602可以显示2行16个字符,有8位数据总线D0-D7和RS、R/W、E三个控制端口,工作电压为5V,并且带有字符对比度调节和背光[8]。
LCD液晶显示模块如图8所示。
图8LCD液晶显示模块
本设计中采用7SEG-MPX8-CC-BLUE八位共阴极数码管(蓝色),显示速度和路程数据。
显示电路如图9所示。
图9显示电路
2.5系统原理图
速度里程表设计电路图如图10所示,控制器使用单片机AT89C51,霍尔传感器用信号发生器代替,矩形波触发器作为发生装置,用LED实现速度和里程的显示。
图10速度里程表计设计电路图
3系统的软件及程序设计
整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。
首先要根据系统的总体功能选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。
用C语言完成对设计的软件编程,程序先对各变量进行声明和定义,之后是延时子程序,在进行定时器、计数器的初始化。
在主函数中,先定义变量,程序的主体是由计数器产生的脉冲分别转换为速度和里程,并将各个位的数字送到对应的数码管的位,驱动显示[9]。
3.1主程序程序框图
系统程序主要采用顺序结构,包括主程序,延时子程序,速度、里程计算子程序和显示程序等。
单片机CPU接收到传感器感测到的脉冲(即锯齿波触发器产生的脉冲),并通过计数器对脉冲个数进行计数。
单片机执行运算程序对所记的脉冲个数运算后,得到速度和里程,经CPU处理后在显示程序的驱动下在显示器中显示[10]。
延时程序的作用是是输出数据在显示器上做短暂的停留,易于观察。
系统的主流程图与延时服务子程序如图11、12所示。
图11系统主流程图图12延时子程序图
函数名称:
主函数
说明:
因为用三位数码管表示速度,在里程小于2Km时速度增加,当里程大于2Km时,速度不变,保持在20Km/h。
当第9709个脉冲来临时要将计数器清零,并且速度也要清零。
3.2调试及仿真
Proteus中的电路仿真是在ISIS原理图设计模块中延续下来的,利用Proteus的交互式仿真功能,用户可以清楚的观察电路的工作情况。
Proteus原理图仿真分析的首要任务是从元件库中选取绘制电路所需元件,查找所需元件,将元件放置在绘图区,同时编辑元件的参数,然后连线。
再利用电器规则对设计进行检查直到通过其检查为止,在源代码通过编译无误后就可以进行仿真。
经软件调试-仿真器proteus调试通过,并烧录芯片,得到所要求的设计结果[11]。
如图11试验成功。
图11速度里程表仿真图
说明:
此时速度不变为20Km/h(后三位),里程为8.3Km(前三位)。
总结
该课题的主要任务是开发一个以MCS-51单片机为核心的电子车速度里程表。
本设计主要分为硬件部分和软件部分,硬件部分着重考虑硬件电路的简单性,故尽可能简化硬件电路,节省线路板的空间,达到硬件电路最优化设计。
软件采用C语言编写,采用模块化设计思想,程序可读性强。
通过仿真、实验验证了系统的可行,能满足设计要求,达到设计的指标,实现对自行车里程/速度的计算功能,并用LED显示。
通过这次课程设计,我不仅熟练的掌握了用protues绘制电路图的过程,更是学会了用Keil编写运行C语言的能力。
锻炼了自己分析问题,自己动手解决问题的能力。
这次课程设计不仅仅是对平时知识积累运用的过程,更是发现新知识、把知识应用到实践的过程。
致谢
在此次单片机的课程设计中,我经过不懈女里完成了这次的单片机课程设计。
我要感谢我的指导老师张具琴老师的热心指导和李文方老师的悉心教导。
在单片机的课程设计中,我知道了我还有好多不足之处,要想走的更远,只有更加努力地去学习,才能不断进步。
另外,通过这次课程设计,在张具琴老师一丝不苟的态度和认真指导之下,让我学到了好多课本上学不到的知识,明白了更多的道理。
最终我成功的完成了此次课程设计。
最后我要感谢我的大学任课老师和同学,谢谢一直有你们的陪伴,在此向各位老师以及同学们表示衷心的感谢!
参考文献
[1]李群芳.单片机原理接口技术与应用(第2版)[M].北京:
清华大学出版社,2010.
[2]李姿,宋洋.基于单片机的智能车速里程表的设计[J].黑龙江科技信息,2011,12.
[3]万福君,潘松峰,王秀梅.MCS-51单片机原理[M].北京:
清华大学出版社,2008.
[4]刘同法,陈忠平.单片机基础与最小系统实践[M].北京:
北京航空航天大学出版社.2008
[5]安宗权.电动电子车速里程表分频电路设计[J].自动化与仪器仪表,2001,5:
39-44.
[6]何宏.单片机原理与接口技术[M].北京:
国防工业出版社.
[7]楼然苗.51系列单片机设计实例[M].北京:
北京航空航天大学出版社.
[8]张迎新.单片机原理及应用(第二版)[M].北京:
电子工业出版社,2009.
[9]陈忠平,曹巧媛,曹琳琳.单片机原理及接口[M].北京:
清华大学出版社,2007.
[10]李勋,刘源,李静东.单片机实用教程[M].北京:
北京航空航天大学出版社,2006.
[11]郭天祥.新概念51单片机C语言教程[M].北京:
附录
主程序:
voidmain(void)
{
unsignedchari,j;
//定义循环控制变量
unsignedcharcnt=0;
unsignedinttemp=0;
unsignedinttab=0,wap=0,a;
//定义无符号整形变量
doubleway=0,sudu=0;
//定义浮点型数据,way表示路程,sudu表示速度
unsignedcharled[6];
//用来存放要显示数字的各位数字
init_timer1();
//计数器初始化
while
(1)
{
if((TH1==0x25)&
&
(TL1>
=0xed))//第9709个脉冲来临时将计数器清零
{
TH1=0x00;
TL1=0x00;
sudu=0;
//速度清零
}
temp=TH1;
temp=temp<
<
8;
//将TH1中数字左移8位再赋给temp
temp=temp|TL1;
//将TH1和TL1中数据合到一个整形变量temp中
way=temp*PI*DIA/1000.0;
//车子行驶的路程存入浮点型变量way中
while(p3_2==1);
//等待
变低
TR0=1;
while(p3_2==0);
变高
TR0=0;
a=TH0;
a=a<
a=a||TL1;
a=a*0.001;
sudu=2*PI/a;
wap=sudu*10;
}
//将速度数据转化为整形,最低位表示十分位,其次为个位,十位
tab=way*10;
//将路程数据转化为整形,最低位表示百米,其次表示千米,万米
函数名称:
延时子程序
延时子程序的功能是产生有一个延时,是得到的速度里程在数码管上显示。
voiddelay(unsignedintdat)//延时大小由形参的大小决定
{unsignedintk,j;
for(k=0;
k<
dat;
k++)
for(j=0;
j<
2000;
j++);
//空循环,耗时语句
}
}
显示程序
显示程序的功能是将单片机计算得到的结果在延时程序的作用在显示在数码管上。
led[0]=wap%10;
//速度十分位位上的数字存led[0]
led[1]=wap%100/10;
//得出速度个位上的数字存led[1]
led[2]=wap/100;
//得出速度十位上的数字存led[2]
led[3]=tab%10;
//得出里程百米上的数字存led[3]
led[4]=tab%100/10;
//得出里程千米上的数字存led[4]
led[5]=tab/100;
//得出里程十千米上的数字存led[5]
10;
j++)//在显示上消耗时间,使三个数码管显示不中断
for(i=0;
i<
6;
i++)
{
P2=led_bit[i];
//把led[i]表示的位置的位选通
if((i==1)||(i==4))
{
P0=led_num[led[i]]&
0x7f;
//把相应位置的数显式出来,带小数点//
else
P0=led_num[led[i]];
//把相应位置的数显式出来,不带小数点
}
delay
(1);
//延时一个微小时间