找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 17753|回复: 3
打印 上一主题 下一主题
收起左侧

基于单片机的转速测量系统设计

[复制链接]
跳转到指定楼层
楼主
ID:434646 发表于 2018-11-27 23:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
【摘要】 介绍了一种基于AT89C51单片机平台,采用光电传感器实施电机转速测量的方法,硬件系统包括脉冲信号产生、脉冲信号处理和显示模块,并采用C语言编程,结果表明该方法具有简单、精度高、稳定性好的优点。介绍了该测速法的基本原理、实现步骤和软硬件设计

1.概述


    • 1.1 数字式转速测量系统的发展背景
       目前国内外测量电机转速的方法很多,按照不同的理论方法,先后产生过模拟测速法(如离心式转速表、用电机转矩或者电机电枢电动势计算所得)、同步测速法(如机械式或闪光式频闪测速仪)以及计数测速法。计数测速法又可分为机械式定时计数法和电子式定时计数法。传统的电机转速检测多采用测速发电机或光电数字脉冲编码器,也有采用电磁式(利用电磁感应原理或可变磁阻的霍尔元件等)、电容式(对高频振荡进行幅值调制或频率调制)等,还有一些特殊的测速器是利用置于旋转体内的放射性材料来发生脉冲信号.其中应用最广的是光电式,光电式测系统具有低惯性、低噪声、高分辨率和高精度的优点.加之激光光源、光栅、光学码盘、CCD 器件、光导纤维等的相继出现和成功应用,使得光电传感器在检测和控制领域得到了广泛的应用。而采用光电传感器的电机转速测量系统测量准确度高、采样速度快、测量范围宽和测量精度与被测转速无关等优点,具有广阔的应用前景。

1.2 本设计课题的目的和意义
     在工程实践中,经常会遇到各种需要测量转速的场合, 例如在发动机、电动机、卷扬机、机床主轴等旋转设备的试验、运转和控制中,常需要分时或连续测量和显示其转速及瞬时转速。要测速,首先要解决是采样问题。在使用模技术制作测速表时,常用测速发电机的方法,即将测速发电机的转轴与待测轴相连,测速发电机的电压高低反映了转速的高低。为了能精确地测量转速外,还要保证测量的实时性,要求能测得瞬时转速方法。因此转速的测试具有重要的意义。
     这次设计内容包含知识全面,对传感器测量发电机转速的不同的方法及原理设计有较多介绍,在测量系统中能学到关于测量转速的传感器采样问题,单片机部分的内容,显示部分等各个模块的通信和联调。全面了解单片机和信号放大的具体内容。进一步锻炼我们在信号采集,处理,显示发面的实际工作能力。


2.转速测量系统的原理



    • 2.1转速测量方法
转速是指作圆周运动的物体在单位时间内所转过的圈数,其大小及变化往往意味着机器设备运转的正常与否,因此,转速测量一直是工业领域的一个重要问题。按照不同的理论方法,先后产生过模拟测速法(如离心式转速表) 、同步测速法(如机械式或闪光式频闪测速仪) 以及计数测速法。计数测速法又可分为机械式定时计数法和电子式定时计数法。本文介绍的采用单片机和光电传感器组成的高精度转速测量系统,其转速测量方法采用的就是电子式定时计数法。
对转速的测量实际上是对转子旋转引起的周期脉冲信号的频率进行测量。在频率的工程测量中,电子式定时计数测量频率的方法一般有三种:
①测频率法:在一定时间间隔t ,计数被测信号的重复变化次数N ,则被测信号的频率fx 可表示为
f x =Nt(1)
②测周期法:在被测信号的一个周期内,计数时钟脉冲数m0 ,则被测信号频率fx = fc/ m0 ,其中, fc 为时钟脉冲信号频率。
③多周期测频法:在被测信号m1 个周期内, 计数时钟脉冲数m2 ,从而得到被测信号频率fx ,fx 可以表示为fx =m1 fcm2, m1 由测量准确度确定。
电子式定时计数法测量频率时,其测量准确度主要由两项误差来决定:一项是时基误差;另一项是量化±1误差。当时基误差小于量化±1 误差一个或两个数量级时,这时测量准确度主要由量化±1 误差来确定。对于测频率法,测量相对误差为:
Er1 =测量误差值实际测量值×100 % =1N×100 % (2)
由此可见,被测信号频率越高, N 越大, Er1就越小,所以测频率法适用于高频信号(高转速信号) 的测量。对于测周期法,测量相对误差为:
Er2 =测量误差值实际测量值×100 % =1m0×100 % (3)
对于给定的时钟脉冲fc , 当被测信号频率越低时,m0 越大, Er2就越小,所以测周期法适用于低频信号(低转速信号) 的测量。对于多周期测频法,测量相对误差为:
Er3 =测量误差值实际测量值100%=1m2×100 % (4)
    从上式可知,被测脉冲信号周期数m1 越大, m2 就越大,则测量精度就越高。它适用于高、低频信号(高、低转速信号) 的测量。但随着精度和频率的提高, 采样周期将大大延长,并且判断m1 也要延长采样周期,不适合实时测量。
根据以上的讨论,考虑到实际应用中需要测量的转速范围很宽,上述的转速测量方法难以满足要求,因此,研究高精度的转速测量方法,以同时适用于高、低转速信号的测量,不仅具有重要的理论意义,也是实际生产中的需要。



    • 2.2转速测量原理
一般的转速长期测量系统是预先在轴上安装一个有60 齿的测速齿盘,用变磁阻式或电涡流式传感器获得一转60 倍转速脉冲,再用测频的办法实现转速测量。而临时性转速测量系统,多采用光电传感器,从转轴上预先粘贴的一个标志上获得一转一个转速脉冲,随后利用电子倍频器和测频方法实现转速测量。不论长期或临时转速测量,都可以在微处理器的参与下,通过测量转轴上预留的一转一齿的鉴相信号或光电信号的周期,换算出转轴的频率或转速。即通过速度传感器,将转速信号变为电脉冲,利用微机在单位时间内对脉冲进行计数,再经过软件计算获得转速数据。即:
n=N/ (mT)                  (1)
◆n ———转速、单位:转/ 分钟;
◆N ———采样时间内所计脉冲个数;
◆T———采样时间、单位:分钟;
◆m ———每旋转一周所产生的脉冲个数(通常指测速码盘的齿数) 。
如果m=60, 那么1 秒钟内脉冲个数N就是转速n, 即:
n=N/ (mT) =N/60 ×1/60=N         (2)
◆通常m为60。
在对转速波动较快系统或要求动态特性好而精度高的转速测控系统中,调节周期一般很短,相应的采样周期需取得很小,使得脉冲当量增高,从而导致整个系统测量精度降低,难以满足测控要求。提高采样速率通常就要减小采样时间T, 而T 的减小会使采到的脉冲数值N 下降,导致脉冲当量(每个脉冲所代表的转速) 增高,从而使得测量精度变得粗糙。通过增加测速码盘的齿数可以提高精度,但是码盘齿数的增加会受到加工工艺的限制,同时会使转速测量脉冲的频率增高,频率的提升又会受到传感器中光电器或磁敏器或磁电器件最高工作频率的限制。凡此种种因素限制了常规智能转速测量方法的使用范围。而采用本文所提出的定时分时双频率采样法,可在保证采样精度的同时,提高采样速率,充分发挥微机智能测速方法的优越性及灵活性。

                                图2.1 系统原理图

各部分模块的功能:
①传感器:用来对信号的采样。
②放大、整形电路:对传感器送过来的信号进行放大和整形,在送入单片机进行数据的处理转换。
③单片机:对处理过的信号进行转换成转速的实际值,送入LED
④LED显示:用来对所测量到的转速进行显示。

3.系统方案提出和论证
       转速测量的方案选择,一般要考虑传感器的结构、安装以及测速范围与环境条件等方面的适用性;再就是二次仪表的要求,除了显示以外还有控制、通讯和远传方面的要求。本说明书中给出两种转速测量方案,经过我和伙伴查资料、构思和自己的设计,总体电路我们有两套设计方案,部分重要模块也考虑了其它设计方法,经过分析,从实现难度、熟悉程度、器件用量等方面综合考虑,我们才最终选择了一个方案。下面就看一下我们对两套设计方案的简要说明。



    • 方案一:  霍尔传感器测量方案
霍尔传感器是利用霍尔效应进行工作的?其核心元件是根据霍尔效应原理制成的霍尔元件。本文介绍一种泵驱动轴的转速采用霍尔转速传感器测量。霍尔转速传感器的结构原理图如图3.1, 霍尔转速传感器的接线图如图3.2 。
 传感器的定子上有2 个互相垂直的绕组A 和B, 在绕组的中心线上粘有霍尔片HA 和HB ,转子为永久磁钢,霍尔元件HA 和HB 的激励电机分别与绕组A 和B 相连,它们的霍尔电极串联后作为传感器的输出。

图3.1 霍尔转速传感器的结构原理图

                      图3.2方案霍尔转速传感器的接线图

缺点:采用霍尔传感器在信号采样的时候,会出现采样不精确,因为它是靠磁性感应才采集脉冲的,使用时间长了会出现磁性变小,影响脉冲的采样精度。



    • 方案二: 光电传感器
整个测量系统的组成框图如图3.3所示。从图中可见,转子由一直流调速电机驱动,可实现大转速范围内的无级调速。转速信号由光电传感器拾取,使用时应先在转子上做好光电标记,具体办法可以是:将转子表面擦干净后用黑漆(或黑色胶布) 全部涂黑,再将一块反光材料贴在其上作为光电标记,然后将光电传感器(光电头) 固定在正对光电标记的某一适当距离处。光电头采用低功耗高亮度LED ,光源为高可靠性可见红光,无论黑夜还是白天,或是背景光强有大范围改变都不影响接收效果。光电头包含有前置电路,输出0—5V的脉冲信号。接到单片机89C51的相应管脚上,通过89C51内部定时/计时器T0、T1及相应的程序设计,组成一个数字式转速测量系统。

                      图3.3  测量系统的组成框图

优点:这种方案使用光电转速传感器具有采样精确,采样速度快,范围广的特点。
综上所述,方案二使用光电传感器来作为本设计的最佳选择方案。

4.系统硬件设计
随着超大规模集成电路技术提高,尤其是单片机应用技术以及功能强大,价格低廉的显著特点,是全数字化测量转度系统得一广泛应用。出于单片机在测量转速方面具有体积小、性能强、成本低的特点,越来越受到企业用户的青睐。对测量转速系统的硬件和编程进行研究,设计出一种以单片机为主的转速测量系统,保证了测量精度。



    • 4.1 转速信号采集
在设计中采用光电传感器采集信号,这种传感器是把旋转轴的转速变为相应频率的脉冲,然后用测量电路测出频率,由频率值就可知道所侧转素值。这种测量方法具有传感器结构简单、可靠、测量精度高的特点。是目前常用的一种测量转速的方法。
从光源发出的光通过测速齿盘上的齿槽照射到光电元件上,使光电元件感光。测速齿盘上有30个齿槽,当测速齿槽旋转一周,光敏元件就能感受与开孔数相等次数的光次数。对于被测电机的转速在90—1700r/min的来说,每转一周产生30个电脉冲信号,因此,传感器输出波形的频率的大小为:         
                    45Hz≤f≤850Hz    (1)
测速齿盘装在发射光源(红外线发光二极管)与接收光源的装置(红外线接收二极管)之间,红外线发光二极管(规格IR3401)负责发出光信号,红外线接收三极管(规格3DU12)负责接收发出的光信号,产生电信号,每转过一个齿,光的明暗变化经历了一个正弦周期,即产生了正弦脉冲电信号。
图4.1所示为转速传感器电路,由于红外光不可见,无法用肉眼识别发光信号是否在工作,故将红外线的输出回路串接了一个普通光电二极管作为判别光源发生回路是否为通路。所选用的红外二极管IR3401,在正向工作电流为20mA时,其导通电压为1.2—1.5V,所选用的发光二极管的正向压降一般为1.5—2.0V,电流为10--20Ma。R的计算公式为:
计算得:Rmin=425Ω;Rmin=465Ω。设定中所选阻值为430Ω(Rmin≤R≤Rmax)。
   转速传感器输出电压幅度在0—1.6mV呈正弦波变化,由此可见,红外线接收三极管的光信号转化为电信号的电压Uo很微弱(一般为mV量级),需要进行信号处理.

                       图4.1  转速传感器电路图

(1) 光电传感器是应用非常广泛的一种器件,有各种各样的形式,如透射式、反射式等,基本的原理就是当发射管光照射到接收管时,接收管导通,反之关断。以透射式为例,如图4.1所示,当不透光的物体挡住发射与接收之间的间隙时,开关管关断,否则打开。为此,可以制作一个遮光叶片如图4.2 所示,安装在转轴上,当扇叶经过时,产生脉冲信号。当叶片数较多时,旋转一周可以获得多个脉冲信号。


        图4.2光电传感器的原理图                        图4.3 遮光叶片

(2)选用的传感器型号为SZGB-3(单向)
SZGB-3型传感器特点介绍如下:
1)供单向计数器使用,测量转速和线速度.
2)采用密封结构性能稳定.
3)光源用红外发光管,功耗小,寿命长.
4) SZGB-3, 20电源电压为12V  DC
SZGB-3型传感器主要性能介绍如下:
SZGB-3.型光电转速传感器,使用时通过连轴节与被测转轴连接,当转轴旋转时,将转角位移转换成电脉冲信号,供二次仪表计数使用。
1)输出脉冲数:60脉冲(每一转)
2)输出信号幅值:50r/min时300mV
3)测速范围:50---5000r/min
4)使用时间:可连续使用,使用中勿需加润滑油
5)工作环境:温度-10~40℃,相对湿度≤85%无腐蚀性气体         



    • 4.2转速信号处理电路设计
     转速信号处理电路包括信号放大电路、整形及三极管整形电路。由于产生的电压信号很小,所以要进行放大处理,一般要放大至少1000倍(≥60dB),然后在进行信号处理工作。信号放大装置选用运算放大器TL084作为放大电压放大元件,采用两级放大电路,每一级都采用反响比例运算电路如图4.4.设计的电压放大倍数为3000倍。其中第一级放大倍数为30,第二级放大倍数为100.放大后电压变化范围为0~4.8V。TL084采用12V双电源供电,由于电源的供电电压在一定范围内有副值上的波动,形成干扰信号。为起到消除干扰,实现滤波作用,故供电电源两端需接10UF的电容接地,电容选择金属化聚丙已烯膜电容。两级运放放大所采用的供电电源均采用此接法。

图4.4信号处理电路图

整形电路的主要作用是将正弦波信号转化为方波脉冲信号,正弦波信号电压的最大幅值约为4.8V,最小幅值为0V。整形电路设计的是一种滞回电压比较器,它具有惯性,起到抗干扰的作用。从而向输入端输入的滞回比较器。在整形电路的输入端接一个电容C7(103),起到的作用是阻止其他信号的干扰,并且将放大的信号进行滤波,解耦。R11和R17是防止电路短路,起到保护电路的作用。
一次整形后的信号基本上为±5V的电平的脉冲信号,在脉冲计数时,常用的是+5V的脉冲信号。如果直接采用-5V的脉冲计数,会增加电路的复杂性,故一般不直接使用,而是先进行二次整形。
第二次用三极管整形电路,当输出为-5V的信号时,三极管VT2(8050)的基-射极和电阻R18组成并联电路电流经过R18.R17,三极管VT2处于反向偏置状态,所以,VT2的集-射极未接通,故处于截止状态。电源回路由R19,三极管VT2的集-射极组成,采用单电源+12V供电,由于集射极截止,处于断路状态,故输出电压U0为V。当第一次整形输出为+5V的信号时,三极管VT2基-射极处于正向偏置状态,有电流I通过,故此时三极管的集-射极处于通路状态。电源电流流经电阻R19,三极管的集-射极到地端,由于集-射极导通时的电阻很小,可以忽略不计。电源电压主要在R19上,其输出电压约为0V。综上所述,三极管整形的电路的输入关系是:信号为-5V时,U0=+12V;信号为+5V时,U0=0V。



    • 4.3单片机AT89C51介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
   图4.5是常用的一种单片机,型号为AT89C51,它将计算机的功能都集成到这个芯片内部去了,就这么一个小小的芯片就能构成一台小型的电脑,因此叫做单片机。

图4.5  AT89C51芯片

     它有40个管脚,分成两排,每一排各有20个脚,其中左下角标有箭头的为第1脚,然后按逆时针方向依次为第2脚、第3脚……第40脚。
在40个管脚中,其中有32个脚可用于各种控制,比如控制小灯的亮与灭、控制电机的正转与反转、控制电梯的升与降等,这32个脚叫做单片机的“端口”,在单片机技术中,每个端口都有一个特定的名字,比如第一脚的那个端口叫做“P1.0”。
AT89C51单片机的功能:
1.主要特性:
◆与MCS-51 兼容
◆4K字节可编程闪烁存储器
◆寿命:1000写/擦循环
◆数据保留时间:10年
◆全静态工作:0Hz-24Hz
◆三级程序存储器锁定
◆128*8位内部RAM
◆32可编程I/O线
◆两个16位定时器/计数器
◆5个中断源
◆可编程串行通道
◆低功耗的闲置和掉电模式
◆片内振荡器和时钟电路
2.管脚说明(图4.7):

图4.7 AT89C51管脚分布

●VCC:供电电压,
●GND:接地。                                                                  
●P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
●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)这是由于上拉的缘故。                                 
P3口也可作为AT89C51的一些特殊功能口。
P3口管脚备选功能:
●P3.0 RXD(串行输入口)
●P3.1 TXD(串行输出口)
●P3.2 /INT0(外部中断0)
●P3.3 /INT1(外部中断1)
●P3.4 T0(记时器0外部输入)
●P3.5 T1(记时器1外部输入)
●P3.6 /WR(外部数据存储器写选通)
●P3.7 /RD(外部数据存储器读选通)
●P3口同时为闪烁编程和编程校验接收一些控制信号。
● RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
●ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
●PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
●EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
●XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
●XTAL2:来自反向振荡器的输出。
3.振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
4.芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。



    • 4.4  最小系统的设计
    • 4.4.1复位电路(图4.8
MCS-51 单片机复位电路是指单片机的初始化操作。单片机启运运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。

图4.8复位电路

①复位功能:
复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
单片机的复位是由外部的复位电路来实现的。片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。复位电路通常采用上电自动复位(如图4.9 (a))和按钮复位(如图4.9(b))两种方式。

图4.9 RC复位电路

②单片机复位后的状态:
    单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容,21个特殊功能寄存器复位后的状态为确定值,见表1。      
     值得指出的是,记住一些特殊功能寄存器复位后的主要状态,对于了解单片机的初态,减少应用程序中的初始化部分是十分必要的。                                    
说明:表4-1中符号*为随机状态:

表4-1  寄存器复位后状态表

特殊功能寄存器

初始状态

特殊功能寄存器

初始状态

A

B

PSW

00H

00H

00H

TMOD

TCON

TH0

00H

00H

00H

SP

DPL

DPH

P0—P3

IP

IE

07H

00H

00H

FFH

***00000B

0**00000B

TL0

TH1

TL1

SBUF

SCON

PCON

00H

00H

00H

不定

00H

0********B

PSW=00H,表明选寄存器0组为工作寄存器组; SP=07H,表明堆栈指针指向片内RAM 07H字节单元,根据堆栈操作的先加后压法则,第一个被压入的内容写入到08H单元中;Po-P3=FFH,表明已向各端口线写入1,此时,各端口既可用于输入又可用于输出 。IP=×××00000B,表明各个中断源处于低优先级; IE=0××00000B,表明各个中断均被关断; 系统复位是任何微机系统执行的第一步,使整个控制芯片回到默认的硬件状态下。
51单片机的复位是由RESET引脚来控制的,此引脚与高电平相接超过24个振荡周期后,51单片机即进入芯片内部复位状态,而且一直在此状态下等待,直到RESET引脚转为低电平后,才检查EA引脚是高电平或低电平,若为高电平则执行芯片内部的程序代码,若为低电平便会执行外部程序。51单片机在系统复位时,将其内部的一些重要寄存器设置为特定的值,至于内部RAM内部的数据则不变。



    • 4.4.2 晶振电路
     晶振(图4.10)是晶体振荡器的简称,在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低分其中较低的频率是串联谐振,较高的频率是并联谐振。
AT89C51单片机内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为30μF。在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。晶体振荡电路如图3-6:
晶振有一个重要的参数,那就是负载电容值,选择与负载电容值相等的并联电容,就可以得到晶振标称的谐振频率。

                                               

图4.10晶振电路




    • 4.4.3  最小系统的仿真
最小系统的仿真图4.11

图4.11  最小系统的仿真

附最小系统仿真程序如下:
#include <AT89X51.h>
sbit LED=P1^0;             //定义LED接P1.0口//
void Delay ()              //延时函数//
{unsigned char i,j;
   for(i=255;i>0;i--)
     for(j=255;j>0;j--);
}
void main ()   
{while(1)
   {LED=0;             // LED灭//
    Delay ();             //返回延时函数//
    LED=1;               //LED亮//
    Delay ();            //反回延时函数//
   }
}



    • 4.5显示部分设计                                               
(1)许多电子产品上都有跳动的数码来指示电器的工作状态,其实数码管显示的数码均是由八个发光二极管构成的。每段上加上合适的电压,该段就点亮。
LED数码有共阳和共阴两种,把这些LED发光二极管的正极接到一块(一般是拼成一个8字加一个小数点)而作为一个引脚,就叫共阳的,相反的,就叫共阴的,那么应用时这个脚就分别的接VCC和GND。再把多个这样的8字装在一起就成了多位的数码管了。实物如图4.12

                          图4.12 数码管

共阳型(图4.13)就是八个发光管的正极都连在一起 ,作为一条引线.A~G段用于显示数字,字符的笔画,(dp显示小数点),每一段控制A~G~dp的亮与来。
内部结构:


图4.13 共阳型LCD

共阴型(图4.14)就是七个发光管的负极都连在一起 ,作为一条引线。A~G段用于显示数字,字符的笔画,(dp显示小数点),每一段控制A~G~dp的亮与来.
内部结构:

4.14 共阴型LCD

      数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。
静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

(2)段码表

表4-2为LED段码表

表4-2  LED段码表

显示字符
共阴极段选码
共阳极段选码
显示字符
共阴极段选码
共阳极段选码
0
1
2
3
4
3FH
06H
5BH
4FH
66H
C0H
F9H
A4H
B0H
99H
5
6
7
8
9
6DH
7DH
07H
7BH
6FH
92H
82H
F8H
80H
90H
(3)动态显示仿真(图4.15)

                            图4.15  动态显示仿真图

动态显示程序:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint mm=1234;            //显示1234//

uchar jj;
uchar code table[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};
delay(uint m)
{ uint i,j;
  for(i=m;i>0;i--)
     for(j=110;j>0;j--);
}
xian_shi()   
{ uchar qian,bei,shi,ge;
  qian=mm/1000;   
  bei=mm%1000/100;
  shi=mm%100/10;
  ge=mm%10;
  P2=0x80;
  P0=table[qian];
  delay(50);
  P2=0;
  P2=0x40;
  P0=table[bei];
  delay(50);
  P2=0;
P2=0x20;
  P0=table[shi];
  delay(50);
  P2=0;
P2=0x10;
  P0=table[ge];
  delay(50);
  P2=0;
}

5.系统软件设计
     硬件电路完成以后,进行系统软件设计。首先要分析系统对软件的要求,然后进行软件的总体的设计,包括程序的总体设计和对程序的模块化设计。按整体功能分为多个不同的模块,单独设计、编程、调试,然后将各个模块装配联调,组成完整的软件。
     根据设计的要求,单片机的任务是:内部进行计数,在计算出速度后显示。软件编程用C语言完成的,需要能掌握C语言,还要熟练AT89C51单片机。从程序流程图、编写程序、编译,到最后的调试,是很复杂的。下面作简单介绍:系统软件主程序的功能是完成系统的初始化、显示程序。



    • 5.1 主程序初始化
(1).定时器的初始化
                 AT89C51有两个定时器/计数器T0和T1,每个定时器/计数器均可设置成为16位,也可以设置成为13位进行定时或计数。计数器的功能是对T0或T1外来脉冲的进行计数,外部输入脉冲负跳变时,计数器进行加1。
     定时功能是通过计数器的计数来实现的,每个机器周期产生1个计数脉冲,即每个机器周期计数器加1,因此定时时间等于计数个数乘以机器周期。定时器工作时,每接收到1个计数脉冲(或机器周期)则在设定的初值基础上自动加1,当所有位都位1时,再加1就会产生溢出,将向CPU提出定时器溢出中断身请。当定时器采用不同的工作方式和设置不同的初值时,产生溢出中断的定时值和计数值将不同,从而可以适应不同的定时或计数控制。
   定时器有4种工作方式:方式0、方式2、方式2和方式3,在此对工作方式不做具体介绍。
工作方式寄存器TMOD的设定:

GATE

C/T

M1-

M0

GATE

C/T

M1

M0

TMOD各位的含义如下:
◆GATE:门控位,用于控制定时/计数器的启动是否受外部中断请求信号的影响。
◆C/T:定时或计数方式选择位,当C/T=1时工作于计数方式;当C/T=0时工作于定时方式。
M1、M0为工作方式选择位 ,用于对T0的四种工作方式,T1的三种工作方式进行选择,选择情况如下表5-1:M1M0=00为方式0;M1M0=01为方式1;   

表5-1   M1、M0为工作方式选择位

MO
M1
工作方式
方式说明
0
0
1
1
0
1
0
1
0
1
2
3
13位定时/计数器
16位定时/计数器
8位自动重置定时/计数器
两个8位定时/计数器(只有T0有)

(2)中断允许控制
MCS-51单片机中没有专门的开中断和关中断指令,对各个中断源的允许和屏蔽是由内部的中断允许寄存器IE的各位来控制的。中断允许寄存器IE的字节地址为A8H,可以进行位寻址.
表5-2 中断位寻址表
IE
D7
D6
D5
D4
D3
D2
D1
D0
(A8H)
EA

ET2
ES
ET1
EX1
ET0
EX0
◆EA:中断允许总控位。EA=0,屏蔽所有的中断请求;EA=1,开放中断。
◆ET2:定时器/计数器T2的溢出中断允许位
◆ES:串行口中断允许位。
◆ET1:定时器/计数器T1的溢出中断允许位。
◆EX1:外部中断 INT1的中断允许位。
◆ET0:定时器/计数器T0的溢出中断允许位。
◆EX0:外部中断 INT0的中断允许位。




    • 5.2主程序流程图程序流程图
①主程序流程图5.1

                                    


图5.1  流程图

②显示子程序流程图5.2

图5.2 显示子程序流程图

③定时计数子程序流程图5.3

图5.3  定时计数子程序流程图


总   结

采用单片机技术来实现转速的测量,可以提高转速的测量,可以提高转速测量的精确度,并且加快了采样的速率,具有较好的实时性。本文介绍的转速方法使用于高、低转速的测量,测量精确度与转速无关,因而具有较宽的应用范围和广阔的应用的前景。
    基于单片机的转速测量系统,具有硬件电路简单,程序简单和运算速度快,测速范围广,抗干扰性能好的特点。在设计的信号处理电路中经过滤波,能够进一步减少误差,是测速精度得到提高。

致    谢
经过几个月的忙碌,本次毕业设计已经接近尾声,通过这次学校组织的毕业设计,端正了自己学习的态度,锻炼了自己独立动手的能力,在此,我要感谢每一个帮助过我的人。  
首先,我要感谢的是我的导师杨帆老师。杨帆平日里工作繁多,但在我做毕业设计的每个阶段,都给予我悉心的指导和帮助。可以说,没有杨帆的悉心指导和帮助,我是不可能顺利完成我的毕业设计的。另外,他的治学严谨和科学研究的精神也是我永远学习的榜样,并将积极影响我今后的学习和工作。
再次,我要感谢的是我的同学赵星辉和舍友们在我毕业设计期间,他们给了我不少的关心和帮助。理论与实践的结合,是对知识较好牢固掌握的一种方法,这次的毕设就有这种理念.基于改变高分低能的现状.对于即将毕业的我们,社会更迫切需要的是能力而不是以往的高分.学校看出了这种现状,所以安排了毕业生的最后一门课:理论实践相结合.所以作为毕业生的我表示深切感谢.这次真的是机不可失,失不在来.最后我要感谢的是我亲爱的陕西理工学院的每一位老师和同学。
总之,感谢每一位关心过我,爱护过我的人。滴水之恩,当涌泉相报。

附录A系统总电路图


单片机源程序如下:


  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uint mm=1234;
  5. uchar code table[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};
  6. delay(uint m)
  7. { uint i,j;
  8.   for(i=m;i>0;i--)
  9.      for(j=60;j>0;j--);
  10. }
  11. xian_shi()   
  12. { uchar qian,bei,shi,ge;
  13.   uint jj;
  14.   jj=mm;
  15.   jj*=20;
  16.   //jj+=1;
  17.   qian=jj/1000;
  18.   bei=jj%1000/100;
  19.   shi=jj%100/10;
  20.   ge=jj%10;

  21.    P2=0x10;
  22.    P0=table[qian];
  23.    delay(1);
  24.   //P2=0;

  25.    P2=0x20;
  26.    P0=table[bei];
  27.    delay(1);
  28. //P2=0;

  29.    P2=0x40;
  30.    P0=table[shi];
  31.    delay(1);
  32.    //P2=0;

  33.    P2=0x80;
  34.    P0=table[ge];
  35.    delay(1);
  36.    //P2=0;

  37. }
  38. timer_init()  //定时器计数器初始化函数
  39. {   EA=1;
  40.     ET0=1;
  41.     ET1=1;
  42.     TMOD=0X51;
  43.     TH0=(65535-50000)/256;
  44.     TL0=(65535-50000)%256;
  45.     TH1=0;
  46.     TL1=0;
  47.     TR0=1;
  48.     TR1=1;                           
  49. }
  50. main()
  51. {   
  52.     timer_init();
  53.     P0=0;      //开始数码管不显示
  54.    while(1)            
  55.      {
  56.          xian_shi();
  57.          delay(2);  //数码管刷新时间单位毫秒
  58.      }
  59. }
  60. void timer0() interrupt 1
  61. {   TR0=0;
  62.     TR1=0;
  63.     TH0=(65535-50000)/256;
  64.     TL0=(65535-50000)%256;
  65.     mm=0;
  66.     mm|=TH1;
  67.     mm=(mm<<8)|TL1;
  68. //              mm-=55536;
  69.     TH1=0;
  70.     TL1=0;
  71.     TR0=1;
  72.     TR1=1;
  73. }
  74. void timer1() interrupt 3     //显示0000说明出错
  75. {   TR1=0;
  76.     TR0=0;
  77.     mm=0;  
  78.    // TH1=0;   
  79.    // TL1=0;   
  80.    // TR1=1;   
  81. }
复制代码


完整的Word格式文档51黑下载地址:

http://www.51hei.com/bbs/dpj-143354-1.html



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:549567 发表于 2019-5-28 19:42 | 只看该作者
请问一下,我按照你的图和程序做的,两个实验p2都是高阻态,请问是什么问题
回复

使用道具 举报

板凳
ID:549567 发表于 2019-5-28 19:44 | 只看该作者
请问我按照你的步骤连线,程序也没错,为什么我的p2端口都是高阻态?谢谢
回复

使用道具 举报

地板
ID:122123 发表于 2022-4-22 18:58 | 只看该作者
程序也没错,为什么我的p2端口都是高阻
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表