毕业设计 基于51单片机电子式里程表的设计


🔥 毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是:基于51单片机电子式里程表的设计

1  硬件单元电路设计

1.1 传感器的设计

汽车开动后,监测传感器对汽车转轴的转动进行采样,将脉冲采样信号输入到单片

机管脚,单片机的定时计数器T1工作于计数器方式,累计脉冲个数,根据一段时间内的脉冲个数和车轮的大小,就可以由单片机计算出运行的速度和公里数,并驱动显示器进行显示。

1.1.1传感器的选择

转速是指每分钟内旋转轴转动的圈数。机械式转速仪和电模拟式测速仪已经无法满足自动化程序日益提高的需要,它们只能测量精度不高的转速,而且输出不能直接供计算机使用,因此,非接触式的光电数字转速仪表就越来越广泛地得到应用。

光电传感器是采用光电元件作为检测元件的传感器。它首先把被测量的变化转换成光信号的变化,然后借助光电元件进一步将光信号转换成电信号。光电传感器一般由光源、光学通路和光电元件三部分组成。光电检测方法具有精度高、反应快、非接触等优点,而且可测参数多,传感器的结构简单,形式灵活多样,因此在检测和控制领域内得到广泛应用。 

由于采用光电传感器,可以实现非接触测量。光电式转速测量仪表比较容易作为高频脉冲频率传感器。例如,可在每转中发出几万脉冲,因此分辨率高,可测极低的转速,测量范围几乎可从零转开始。其次这种测量方法一般对转轴的附加载荷都很小,不会影响被测对象的正常旋转,光电式转速传感器工作在脉冲状态下,它是将转轴的转速变换成相应频率的脉冲,然后测出脉冲频率就可以测得转速值。这种测速方法具有传感器结构简单、可靠、测量精度高等优点。

光电转速传感器的性能可归纳如下:

(1)传感器采用无接触测量,不增加被测物旋转力矩,测量小里矩的旋转物能获得很高的精度。

(2)光电传感器是利用光波作为媒介来实现转速测量的,抗电磁干扰能力强,如果采用调制光源或调制型发光器件,传感器还可具有抗外界杂光干扰能力。

(3)传感器利用光电效应方便地将转速换成电量信号。故此类传感器测量范围宽、非接触检测距离远,随着激光技术的发展,使光电检测技术获得了新发展,能达到超远距离的测量。

(4)光电传感器易受环境雾尘,粉尘、油尘、水雾及杂光的影响。

经过比较,由于光电传感器的结构简单、可靠、测量精度高等优点,因而本设计中选用了光电传感器。

1.1.2 光电传感器的选择

光电传感器的类型

按照光电传感器中光电元件输出电信号的形式可以将光电传感器分为模拟式和脉冲式两大类。

(1)模拟式光电传感器

这种传感器中光电元件接受的光通量随被测量连续变化,因此,输出的光电流也是连续变化的,并与被测量呈确定的函数关系。    

(2)脉冲式光电传感器

在这种传感器中,光电元件接受的光信号是断续变化的,因此光电元件处于开关工作状态,它输出的光电流通常是只有两种稳定状态的脉冲形式的信号,多用于光电计数和光电式转速测量等场合。

通过两种形式的光电传感器比较,我选用了脉冲式光电传感器,因其多用于光电计数和光电式转速测量等场合。

脉冲式光电转速传感器从光路系统看,有透射式和反射式两种。

(1)透射式光电传感器

这种仪表的测量盘装在被测转轴上,在它旁边装有不动的读数盘。测量盘沿外缘圆周刻有等距径向透明光缝,在读数盘上刻有同样间距的透光缝隙,当测量盘随被测轴一起转动时,每转过一个缝隙,由光源射来的光线就将照射到光敏元件上一次,这个光脉冲将引起光敏元件的输出电脉冲,在孔数一定时,该列电脉冲数就和转速成正比。电脉冲经测量电路整形放大后再送入频率计计数和显示,经核算或标定后,就可以得到一个便于测量计数的信号,此时被测转速为

n= f/N

式中f——测得的脉冲频率;

N——每转脉冲数,它等于圆周上之缝数。

若在调制盘上开60个小孔,则可在1秒的记数值上直接读出转速大小。它可以测量1r/min的车速。如果开600个孔,则它的测量精度为0.1r/min。

(2)反射式光电传感器

在转轴上不便于安装测量转盘时,还可以采用在测量转轴上加反射镜的方法。在可能时,为了提高分辨率,可以在转轴圆周方向等距贴数块反射镜。只有光线入射时,转轴每转一周就有数次光反射作用。再用简单光学系统将反射光投到光敏元件上,就可以输出相应的电脉冲。其它部分与透射式一样,通过测脉冲频率就可以求出转速。

反射式转速表使用方便,它不给转轴带来附加载荷,可以在距被测物数十毫米外非接触地测量其转速,但要求转轴不能太细,便于贴反射镜,它适于测量的转速范围为30~4.8×

r/min。

通过比较,可知透射式光电传感器比反射式光电传感器的测量精度高,因而本设计中我采用了透射式光电传感器,并且采用了60条缝隙的测量盘。如图3.1所示,为透射式光电转速传感器的结构原理图。

图1.1 透射式光电转速传感器的结构原理

测量盘上具有相同间距的缝隙,当测量盘转动时,转过一条缝隙,光线便产生一次明暗变化,使光敏元件感光一次,用这种结构可以大大增加转盘上的缝隙数,因此使每转的脉冲数相应地增加。

1.1.3光电传感器的脉冲整形电路

施密特触发器在脉冲的产生和整形电路中应用很广。施密特触发器是一种能够把输入波形整形成为适合于数字电路需要的矩形脉冲的电路。而且由于具有滞回特性,所以抗干扰能力也很强。它可用于波形变换、脉冲整形以及脉冲幅度鉴别。下图3.2为其应用:

图1.2 施密特触发器的应用

根据以上施密特触发器的应用特性,因而用施密特触发器作为本系统的主要脉冲整

形元件。图3.3是本系统所采用的透射式光电测速脉冲整形电路图。每当旋转圆盘上的长方孔与光电开关上的透光孔重合,则光敏三极管受光而通过电流,使三极管饱和导通,故施密特触发器CD4093输出高电平,当圆盘转至透光孔被遮时,CD4093输出低电平。随着圆盘不停地转动,CD4093便输出脉冲序列。测出输出脉冲个数,结合圆盘每一周的孔数,使可算出旋转的转速及转角。图中的CD4093用于脉冲整形。

图1.3 透射式光电测速脉冲整形电路图

1.2 单片机与光电传感器的接口设计

单片机测量频率有两种方法:测频法和测周期法。测量频率就是在单位定时时间里对被测信号脉冲进行计数;测量周期是在被测信号周期时间里对其一基准时钟脉冲进行计数。测周期法常用于脉冲频率较低的场合,所以在本系统中我采用了测频法。

测量频率最简单的方法是将被测信号整形为脉冲,然后连接到单片机的定时器/记数器(T/C)的外部脉冲输入端,本系统中将被测信号脉冲AT89S51的T1端。可将AT89S51的一个T/C0用作定时器,另一个T/C1用作计数器。在T/C0定时时间里,由T/C1对频率脉冲进行计数。T/C1的计数值是单位定时时间里的脉冲个数。

1.3 单片机与外部存储器的接口设计

本系统采用的是串行EEPROM芯片24C16,24C16的1-3脚分别为器件编址端A0、A1、A2(用于与系统中的同类器件编码),4脚为电源地,5脚为I2C总线的数据线SDA,在系统中与单片机的P1.3口相接,6脚为I2C总线的时钟SCL,在系统中与单片机的P1.4口相接,7脚为测试输入端,在系统中接地,8脚为电源。当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平定义为“开始”信号;当SCL线为高电平时,SDA线发生低电平到高电平的跳变为“结束”信号。

在5脚SDA,6脚SCL上分别接两个10K的上拉电阻,并外接了一个瓷介电容,当电源正常供电时给电容器充电,电源掉电时,利用电容器电流将单片机中的数据写入EEPROM中。

1.4 单片机与超速报警电路的接口设计

本部分采用一个蜂鸣器和一个红色发光二极管与单片机的P1.0口相接的报警实现方式,。若实时的车速值与单片机设定的最大车速值相比较,当车速值大于最大车速值时,通过单片机的软件中断请求,以1秒钟为周期,从而实现P1.0口高低电平的通断。

当P1.0口为高电平时,输出正5V的电压,使红色发光二极管得以导通。而且电流由另一条通路使NPN三极管导通,射极输出电流驱动蜂鸣器工作。当P1.0为低电平时,则不能使红色发光二极管和NPN三极管导通,因而不能工作。正因为P1.0口高低电平的通断作用,实现蜂鸣器的嘀嘀声及发光二极管的闪烁显示,从而实现了系统超速报警的功能。其电路图如下图3.6所示:

图1.6 超速报警电路图

1.5 单片机与键盘和7段显示器的接口设计

本系统的键盘输入部分,采用2个功能键,用这2个键,既可以选择显示是单班里程还是总里程。本系统采用的是常见的按钮开关。开关的接入方法是先将按钮开关的状态转变为逻辑电平,然后可直接接到单片机的某一条I/O线。但由于机械开关在状态转换时有信号的抖动,故在接入开关的同时,必须考虑防抖动的问题。其图3.7如下所示:

图1.7 键盘输入电路图

而七段LED显示器一般都是同时使用几个LED显示器,它有两种连用方法:一是每一位都用各自的8位输出口控制,在显示某一字符时,相应的段恒定发光或不发光,这种显示方法属于静态显示,它占用较多的I/O口线。二是动态显示,即将多个7段LED的段

选端复接在一起,只用一个8位输出控制段选,段选同时加到各个7段LED显示器上,通过控制各个显示器公共阳极/阴极轮流接电/接地的方法,逐一轮流地启动各个LED。这种方法中,只要恰当地选择点亮时间和时间间隔,就会给人以为是各位LED同时显示的假象。这里使用了一个6位和一个4位动态显示的共阳极数码管显示器。

其中LED显示器的段选码都由单片机的P0口连接控制,4位LED显示器的位选码由单片机的P2.6和P2.7口通过译码器74LS139控制,译码器74LS139对单片机的P2.6和P2.7口分时选通,这样任何一个时刻,都只有一位LED在点亮,也即动态扫描显示方式。74LS139是一个2-4译码器,它将单片机输出的地址信号译码后动态驱动相应的LED。但74LS139的电流驱动能力较小,为此,使用了未级驱动PNP三极管C9015作为地址驱动。6位LED显示器的位选码,则由单片机的P2.0至P2.5口控制。再通过软件编程,从而控制各自的7节LED是否被点亮(由于本模块电路较大,就没有在这里列出,但可以参考本作品的完整电路原理图)。

2  系统调试

本系统调试单元所使用的测试仪器仪表和工具:

(1)微机一台;

(2)示波器;

(3)万用表;

(4)直流稳压电源;

(5)单片机开发系统一套。

本装置的调试主要分为硬件调试、软件调试和整体调试三大部分。以下作具体介绍。

2.1  硬件单元电路调试

2.1.15V稳压电源

本装置使用单5V稳压直流电源供电。经过示波器测量5V稳压电源输出端,其交流部分电压的峰--峰值为6mV,符合本装置电源的要求,稳压电源调试完毕。

2.1.2光电传感器

光电传感器模块完全是硬件电路,为了达到预期的目的,先在面包板上进行了模拟,按照电路图的要求以及元器件的选取,接好了电路图,并在一小电机上安装了测量盘,接好+5V直流电源后,通过示波器的观测,发现随着电机转速的变化,示波器里的脉冲波形电压也在不停的正负跳变,并且脉冲宽度也不断的调整,反应速度相当的灵敏,至此,光电传感器模块调试成功。

2.1.3键盘输入和显示

在调试前,值得提到的是三极管的几个极的判断和数码管的a至g所对应的管脚的测试,这直接关系到此部分的成败。1、判断基极和管子类型(PNP或NPN)由于基极与发射极、基极与集电极,分别是两上PN结,它们之间的反向电阻值都很小,所以用万用表欧姆档(R×100或R×1K)测量时,先将任一表笔接到某一个认定的管脚上,一表笔先后接到其余两个管脚上。如果测量得到的阻值都很大(或都很小),然后对换表笔,重复上述测量时,阻值恰好与上述相反。都很小(或都很大)。则可断定所认定的管脚

为基极。若不符合上述结果,应另换一个认定管脚重新测量,直至符合上述结果为止。测量时注意管脚和表笔的极性。当黑表笔接在基极,红表笔分别接在其它两极时,测得的电阻值都较小,则可判定该三极管为NPN型,反之即为PNP型。2、判断集电极和发射极:判断集电极和发射极的基本原理是把三极管接成基本单管放大电路。利用测量管子的电流放大系数β的大小来判断集电极和发射极。对于常用的NPN型小功率硅管。若集电极接电源正极,发射极接电源负极,这时表针偏得较大。如果电压极性反接,则表针偏转就比较小。由此即可判断出集电极和发射极。另一种更可靠的办法是,当肯定被测为NPN型硅管后,将黑表笔接于一个待测的管脚,红表笔接另一个管脚,基极悬空,观察表针偏转情况。然后将黑表笔所接管脚与已断定的基极用手捏住(注意不能使其相碰,这时人体电阻相当于电阻Rb,比较测量出的阻值变化。然后更换黑、红表笔,再观察阻值变化。如前者的变化比较大,则前者黑表笔所接管脚就是集电极。红表笔所接管脚为发射极。如为PNP管子与上述情况相反。根据上面的方法,测得所使用的三极管是PNP管,其管脚平面对向自己,管脚从左到右为e,b,c。数码管脚的测试就显得比较简单:如果是共阴极的数码管就让位选接地,然后电亮其它的管脚,通过显示结果来断定引脚是a,b,c等,位选也是拿万用表的黑表笔去探试的。如果是共阳极的话就用红

表笔来探试位选,其他的与共阴极的一致。经过以上的判断,就能得到正确的管脚接入电路中。

键盘输入和显示是本作品的一个重要组成部分,其硬件调试花了不少的时间。当按键时,显示器能较好的转换,这部分基本上没有问题,但是显示部分的调试,当接好电源时,6位的LED显示器显示乱码,经过仔细的分析,查看电路板的线路,结果硬件电路没有错误,就只可能是软件上出现错误了,最后是因为显示器的公共端接线与软件的编程混乱了。而4位的LED显示器的第一位总是显示8,把驱动的三级管拆下来检查发现并不是三极管的问题,这花了比较长的时间,经过仔细的分析,结果发现是二-四译码器74LS139的问题,原因是用P2.6和P2.7口来驱动4位LED,而锁存端/EN接地,结果无论这两个口是否关断,都有一个LED是全部显示的,于是把锁存端/EN接到P1.7口,通过它来控制二-四译码器74LS139的开启,接通电源,4位LED显示器显示正常,经过硬件软件的一系列调试,终于把键盘输入和显示部分调试成功了。

2.1.4超速报警部分

超速报警部分也是整体电路中一个比较重要的部分,该模块的电路原理及其程序都比较简单。首先把超速报警的最大速度值设置在一个较小的范围,电路接好并烧入程序后,接通电源,通过小电机的旋转,可以测量出转速值,随着转速的增大,过了一段时间,就能听见硬件系统中的蜂鸣器传来的报警声,并且红色发光二极管也以1秒的周期闪烁,可见,本部分没有问题。这主要归于程序部分设计得比较合理,比较正确。

2.1.4数据存储部分

当系统运行了一段时间时,6位LED显示器上有了一点里程值,这时,把电源关掉,然后再启动电源。发现LED显示器上的里程值和刚才断电前的一致,这说明了里程的数据信息被完好的保存在EEPROM存储器芯片24C16中,保证了数据的安全可靠性。

2.2  软件程序调试

2.2.1软件系统设置

对于本系统而言,软件程序所实现的功能比较多,所以软件程序的调试显得相当的烦琐。整个程序是使用汇编语言,在Keil C51下编写调试完成的。Keil C51是美国Keil Software公司出品的51系列兼容单片机的软件开发系统,其中uVision与Ishell分别是

C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

本设计用的烧写器是倚天版开发套件中的烧写器。倚天版开发套件是51测试网在志强版开发套件的基础上开发的增强型编程试验一体化开发套件,适合于零基础,或者初中级单片机爱好者使用,并适合于单片机程序员的前期试验。它由一个多功能的51烧写器和一个具有扩展功能的多功能试验板组成。同时标配送2片试验用AT89S51,串行试验电缆,遥控器,1602液晶屏。通过它的这些设备还可以完成很多小试验。它采用的是并行通信口,用连接电缆将它连接到电脑打印口来下载烧写数据。烧写的过程为:假定要写入的文件是“test.hex”。首先,连接编程器主板到计算机并口。然后连接电源。编程器指示灯亮,将89S51插入ZIF插座,锁紧手柄。(请注意芯片的插入方向:缺口向上,朝扳手方向! 否则会损坏芯片)然后启动软件,鼠标单击在右边的“芯片”下拉框,选择好芯片类型,这里选“89C51。在“文件”菜单选择“打开Hex文件,找到“test.hex”文件,单击打开。窗口中显示文件内容,右下角显示校验和。单击写芯片按钮,编程器烧写指示灯亮,烧写完毕报告结果,写入之前会自动擦除芯片内容,写入完毕会自动校验。如果是需要加密,可以选择加密级别。到此为止整个软件程序调试环境就已经配好了。

2.2.2超速报警

本单元的调试过程中,我认为此部分的结构比较简单,因此在整体程序中直接调试。写好程序编译后单步执行,发现此部分的子程序正常,单独将此程序烧入单片机后接上硬件电路,一切正常,在设定的较低的报警值可以实现报警,此单元调试完毕。

2.2.3键盘输入与显示

本部分的调试比较困难,本单元的程序也是在最开始的时候写的,先写了一个键盘扫描与显示的子程序,就这两个部分来合起来进行调试。由于才接触到Keil C51,还不完全了解它的一些结构分支,只编译通过了就生成hex文件写入到单片机内,上电后什么都没有,经过仔细的检查发现单片机的/EA没有上电,接上电后才能访问内部ROM,即程序才能运行。解决硬件上的问题后接上电源,发现显示车速的四个显示位只有一个显示位能够显示,其他三位显示不听使唤,显示的为同一个数据,而且按了四次后再按键就没有反应了。

介于以上两点,按四次后再按键就没有反应很容易知道是程序要么陷入了死循环,要么就跳不回来了。因此先针对这点对程序进行了仔细的分析,在此过程中对Keil C51也有了更深入的认识和了解,懂得了如何单步执行程序,这给程序的调试带来了很大的方便,使得进度一度提高。不止这一点,Keil C51中提供一个与C51单片机一样的4个I/O口,可以调用其I/O窗口出来,如果硬件上需要输入就从相应的I/O口输入对应的数据,这给程序的调试也带来了极大的方便,通过它和Keil C51开发工具里单步执行的register窗口(寄存器窗口)所提供的数据能很容易地分析问题的所在。

对于显示车速的四个显示位老是有三个显示位是相同,一位显示正常的问题,花费了我大量的时间来调试,开始以为是硬件上的问题,经过仔细检查验证发现硬件并没有

问题,那问题就转移到了软件身上。通过大量的单步执行程序,也没有发现什么逻辑或语法错误,经过和老师同学的讨论,疑惑是程序的扫描间隔时间太短,修改扫描时间后还是一样的结果,本模块的调试就在这里给卡住了。实在找不到问题错在哪里的时候,就只好从最小的软、硬件模块来一步步调试,在调试到每一位的显示时,发现了问题的所在。最初的程序的代码为:

ORG     0100H

MOV    SCON,#00H           ;串行口工作方式0

MAIN:   MOV    R3,#00H              ;字型码初始地址

LOOP:   MOV    R4,#0E8H             ;循环显示某个字符

DELAY:  ACALL  DISPLAY              ;显示

           DJNZ    R4,DELAY           ;延时时间未到继续

           INC     R3                    ;显示下个字符

           CJNE    R3,#0AH,LOOP      ;未显示到“9”继续  

AJMP     MAIN                 ;返回主程序   

DISPLAY: CLR     P2.0

           CLR      P2.1                  ;选中第一位

           ACALL   DISP                  ;显示

           ACALL   DELAY1              ;延时10ms

SETB     P2.1                 ;选中第二位

ACALL   DISP    

ACALL   DELAY1

SETB     P2.1                  ;选中第三位

CLR      P2.0

ACALL   DISP

ACALL   DELAY1 

SETB     P2.0                    ;选中第四位

SETB     P2.1

ACALL   DISP

ACALL   DELAY1

RET

DISP:      MOV     A,R3

MOV     DPTR,#TABLE

MOVC    A,@A+DPTR           ;查表  

MOV     BUFF,A                ;送发送缓冲器

WAIT:     JNB      TI,WAIT               ;等待串行中断

CLR      TI                      ;清中断标志

RET

DELAY1:  MOV     R6,#10H                ;延时子程序

LOOP1:    MOV     R7,#38H

LOOP2:    DJNZ     R7,LOOP2

            DJNZ     R6,LOOP1

            RET

TABLE:    DB   0C0H,0F9H,0A4H,0B0H,99H

            DB   92H,82H,0F8H,80H,90H

        END

从上面的程序代码可看出,该显示子程序并没有语法或是逻辑上的错误,这也是在

调试过程中我始终不知道怎么就显示不了预期的结果,后来在调一位一位显示的时候,

我就连续调用显示子程序,没有移位显示,当时用的位选是80H,想实现的功能是只有一位点亮,奇怪的是点亮的是另外的三位,而且显示的结果为这三位所显示的数字为同一个数字8,这个时候我知道了问题的所在,是由于位选错误,本来是想点亮一位结果三位都给点亮了,当我把位选改为7FH时,发现显示正常,修改后植入键盘扫描与显示子程序,再按键输入,发现按键转换正常,本单元调试成功。

2.2.4数据存储部分

首先在Keil C51上编译了24C16的读写程序,没有发现错误。接着把程序烧入单片机后,启动电源,让系统正常运行,当系统运行了一段时间后,6位LED显示器上有了一点里程值,这时,把电源关掉,然后再启动电源。发现LED显示器上的里程值和刚才断电前的一致,这说明了里程的数据信息被完好保存在EEPROM存储器芯片24C16中,此部分程序没有问题。

2.3 整体调试

通过初步的分析设计,局部调试电路,这有利于问题的分析和解决,不会造成问题的积累,而且不会因为一个小问题而进行整体电路的检查,从而可以节约大量的调试时间。软件编程中,首先完成单元功能模块的调试,然后进行系统调试,整体上与硬件调试的方法差不多。接着就可以进行整体调试了。整体调试是最重要的一部分,经过前面步骤的硬件和软件调试,再进行整体调试,没有发现错误,系统正常运行,调试成功。

如果学弟学妹们在毕设方面有任何问题,随时可以私信我咨询哦,有问必答!学长专注于单片机相关的知识,可以解决单片机设计、嵌入式系统、编程和硬件等方面的难题。
愿毕业生有力,陪迷茫着前行!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值