搜档网
当前位置:搜档网 › 课程设计基于51单片机对电动机的测速

课程设计基于51单片机对电动机的测速

课程设计基于51单片机对电动机的测速
课程设计基于51单片机对电动机的测速

目录

摘要 (2)

一、设计题目与要求 (3)

1 、选择实现转速测量的方法 (3)

(1)根据测量方法分类 (3)

(2)根据工作原理分类 (4)

(3)几种具体的测量方法 (5)

(4)光电开关具体的类型 (5)

2 、测量系统的构成 (6)

(1)信号拾取 (6)

(2)整形倍频 (7)

(3)单片机模块 (8)

三、硬件电路设计 (9)

1 .原理分析 (9)

(1)显示部分 (9)

(2)复位电路 (10)

(3)信号 (10)

(4)单片机时钟 (11)

四、系统程序设置与调试 (12)

1、单片机控制部分硬件调试 (12)

2、数码管LED电路调试 (12)

3、发送部分硬件电路调试 (12)

(1)秒信号的产生 (14)

(2)数码管的显示 (14)

4、系统流程 (16)

五、程序调试 (16)

1 .基于Keil的程序调试 (16)

实验总结 (21)

原理图 (22)

附录 (23)

摘要

直流电机转速作为直流电机的一项重要技术指标,在各个应用场合都有重要的研究价值,是其他大部分技术参数的计算来源,因此,准确测量直流电动机的转速具有重要的研究意义和理论价值。

目前,在工程实践中,经常会遇到各种需要测量转速的场合。对于工业测试,水利,机械等方面,转速是重要的控制参数之一。尤机在工业测试系统中,大部分旋转仪器需要测定目前的转速,对机械设备进行故障预防。因此,如何利用先进的数字技术和计算机技术改造传统的工业技术,提高监控系统的准确性,安全性,方便性是当前工业测控系统必须解决的一个问题。

转速测量方法较多,而模拟量的采集和模拟处理一直是转速测量的主要方法,这种测量方技术已不能适应现代科技发展的要求,在测量范围和测量精度上,已不能满足大多数系统的使用。随着大规模及超大规模集成电路技术的发展,数字系统测量得到普遍应用,特别是单片机对脉冲数字信号的强大处理能力,使得全数字量系统越来越普及,其转速测量系统也可以用全数字化处理。在测量范围和测量精度方面都有极大的提高。

模拟检测:即利用测速电机作为发电机,通过检测反电势E的大小和极性可得到转速N 和电机转向,采用这种方法直接可以得到转速N和输出电压的特性曲线,直观,但也有很多不足,比如在高速和低速情况下实际输出偏离理想特性。

数字检测技术:即通过分析数字信号产生的一系列脉冲间接获取电机转速。如光电旋转编码器是将检测圆盘划分为等距的三个同心圆,最外环和次外环分别用等距的黑白条纹分开,且最外环和次外环的缝隙位置相位差为90度,用于判断电机的转速,最内环只有一个黑条纹,用作定位脉冲或者是复位脉冲,利用光电编码器输出的脉冲可以计算转速,具体的又可分为M法,T法和M\T法。

一、设计题目与要求

电动机转速测量

1. 实现对电动机转速的测量。

2. 实时显示直流电动机转速的实际测量值。

设计任务:利用光电接近传感器和单片机技术设计、制作一个显示电动机转速的速度测定系统。测量范围约为750~3000r/s,尽可能地提高测量误差,用4位LED数码管显示速度。

二、方案选定

1 、选择实现转速测量的方法

(1)根据测量方法分类

测速方法

数字测速方法目前有比较常用的三种:M法、T法和M/T法。

测周期法“T法”

在给定的角位移距离内,通过测量这一角位移的时间来进行测速的方法,称测周法,即“T”法若使用霍尔传感器时,可累计传感器输出的脉冲数,测量达到给定的脉冲数所需的时间。则转速n可由下式表示:n=X/t (r/min)

其中x为给定的脉冲数;t为达到给定的脉冲数所需的时间,单位min

由“T”法脉宽测量可知“T”法测量精度的误差主要有两个方面,一是两脉冲的上升沿触发时间不一致而产生的;二是计数和定时起始和关闭不一致而产生的。因此要求脉冲的上升沿(或下降沿)陡峭和计数和定时严格同步。测周法在低转速时精度较高,但随着转速的增加,精度变差,有小于一个脉冲的误差存在[5]。

高速时M小,量化误差大,随着转速的降低误差减小,所以T法测速适用于低速段与M 法恰好相反。

测频法“M法”

在一定测量时间T内,测量霍尔传感器产生的脉冲数m1来测量转速,这种以测量频率来实现测量转速的方法,称测频法,即“M”法。

转速n可由下式表示:

n=X/t (r/min)

其中t为给定的测量时间,单位min; x为测量的脉冲数;

在该方法中,测量精度是由于定时时间T和脉冲不能保证严格同步,以及在T内能否正好测量外部脉冲的完整的周期,可能产生的1个脉冲的量化误差。设置的时间过短,测量精度会受到一定的影响[6]。因此,为了提高测量精度,T要有足够长的时间。

在上式中,Z和T均为常值,因此转速n正比于脉冲个数M。高速时M大,量化误差小,随着转速的降低误差增大,转速过低时M将小于1,测速装置便不能正常工作。所以M法测速只适用于高速段。

测频测周法M/T法

所谓测频测周法,即是综合了“T”法和“M”法,一方面象“M”法那样在对传感器发出的脉冲计数的同时,也象“T”法那样计取脉冲的时间,通过计算即可得出转速值。测频测周法分别对高、低转速具有的不同精度,利用各自的优点而产生的方法,精度位于两者之间。

设高频时钟脉冲的频率为f,则准确的测速时间T=M/f,而电动机转速为n=60M1f/(ZM2)。本设计中采用了M法进行测速。有如下测速方案:

方案:

利用单片机外部中断引脚计数。即通过单片机外部中断信号,在中断程序对电机转速脉冲信号进行计数,测量电机转速。将传感器电路的输出端CKMOT与单片机外部中断引脚相连,

用于输入计数脉冲,设定单片机T0为定时器,定时器时间为1秒,并定义一个外部中断变量作软件计数器。电机每转一周(CKMOT输出一个脉冲信号)中断信号产生一次中断请求,CPU响应中断后在中断程序中对软件计数器作加1运算。当定时器T0计时1秒到时,停止中断计数,软件计数器计数值为电机当前的转速。

通过误差和精度分析可知,M法适合于高速测量,当转速越低,产生的误差会越大。T 法适合于低速测量,转速增高,误差增大。M/T这种转速测量方法的相对误差与转速n无关,只与晶体振荡产生的脉冲有关,故可适合各种转速下的测量。因此,在实际操作时往往采用一种称变M/T的测量方法,即所谓变M/T法,在M/T法的基础上,让测量时间T c始终等于转速输入脉冲信号的周期之和。基于M法测量速度,电路和程序均较为简单,且可以在一定的条件下满足精度的要求采用M/T法测速时,应保证高频时钟脉冲计数器与旋转编码器输出脉冲计数器同时开启与关闭,以减小误差,只有等到编码器输出脉冲前沿到达时,两个计数器才同时允许开始或停止计数。

由于M/T法的计数值M1和M2都随着转速的变化而变化,高速时,相当于M法测速,最低速时,M1=1,自动进入T法测速,因此,M/T法测速能适用的转速范围明显大于前两种,是目前广泛应用的一种测速方法。

测量方法比较

P为圆光栅编码器每转一圈发出的转速脉冲信号的个数;fc为T法中已知频率值(填充被测频率相邻两个脉冲的间隔);n是电机每分钟的转速;Ttach为圆光栅测速脉冲周期;e是圆光栅编码器的制造误差。

(2)根据工作原理分类

转速测量方法可以主要分为3类:

◆机械rpm转速测量

通过机械测量传感器采集数据,是最古老的rpm转速测量方法。传感器采集到的转速资料,还要通过仪器内部的电子分析。这种测量方法仍被应用,但大多数用于20至10000rpm 的低转速测量。这种测量方法在测量过程中依赖于接触压力,其最大的缺点是加载运动不连续。另外,机械转频闪法测量rpm转速不可应用于细微物体,如果转动率过高,易发生滑走情况。

◆采用反射原理的电力转速测量法(光学rpm转速测量法)

测量仪器发射出的红外线经固定在待测目标上的反射条反射后,即携带上有关转速信息。测量仪器接收反射波后,经过处理即可得到转速。这种测量方法虽然要比机械rpm测量法先进,但是并非所有持待测目标上都可以安装反射条。

◆频闪rpm转速测量法

按照频闪原理,当高速闪光的频率和目标的rpm转速(移动)同步时,在观察者的眼中,目标是静静止的。同其它的测量方法如机械法或光学传感器法直比,频闪原理的优点显而易见:这种方法可以用于测量小型目标或不便触及部位的rpm,而不需要在待测目标上固定反射条。例如,如用于生产过程测量时,便不需中止。测量范围:100至20000rpm。除了测量

rpm 转速外,频闪测量法还可用于振动分析和动作监控。

对于不同形式的测量方法其测量范围如图3-10所示:

RPM

1000,

1,10100机械式光学式频闪式

图3-10 不同形式的测量范围

(3)几种具体的测量方法

基于霍尔传感器的直流电机转速测量

霍尔传感器具有许多优点,它们的结构牢固,体积小,重量轻,寿命长,安装方便,功耗小,频率高(可达1MHz ),耐震动,不怕灰尘、油污、水汽及盐雾等的污染或腐蚀。 霍尔线性传感器的精度高、线性度好;霍尔开关传感器无触点、无磨损、输出波形清晰、无抖动、无回跳、位置重复精度高(可达μm 级)。其中取用了各种补偿和保护措施的霍尔器件的工作温度范围可以很宽,可达-55℃~150℃。

基于上述优点霍尔传感器产业发展应用大致分为:直接应用和间接应用。

前者是直接检测出受检测对象本身的磁场或磁特性,其中最具特色的当推是霍尔电流、电压类传感器/变送器,它们已成为当今电子测量领域中应用最多的传感器件之一,是测量控制电流、电压的新一代工业用电量传感器,是一种新型的高性能电气隔离检测元件,被广泛用于电力、电子、交流变频调速、逆变装置、电子测量和开关电源等诸多领域以及逆变焊机,发电及输变电设备,电气传动,数控机床等工业产品上,它正在逐步替代传统的互感器和分流器,并具有精度高、线性好、频带宽、响应快、过载能力强和不损失测量电路能量等优点。 于光电传感器的电机转速测量

目前,光电开关已被用作物位检测、液位控制、产品计数、宽度判别、速度检测、定长剪切、孔洞识别、信号延时、自动门传感、色标检出、冲床和剪切机以及安全防护等诸多领域。此外,利用红外线的隐蔽性,还可在银行、仓库、商店、办公室以及其它需要的场合作为防盗警戒之用。

(4)光电开关具体的类型

● 漫反射式光电开关:它是一种集发射器和接收器于一体的传感器,当有被检测物体经过

时,物体将光电开关发射器发射的足够量的光线反射到接收器,于是光电开关就产生了开关信号。当被检测物体的表面光亮或其反光率极高时,漫反射式的光电开关是首选的检测模式

● 镜反射式光电开关:它亦集发射器与接收器于一体,光电开关发射器发出的光线经过反

射镜反射回接收器,当被检测物体经过且完全阻断光线时,光电开关就产生了检测开关信号。

● 对射式光电开关:它包含了在结构上相互分离且光轴相对放置的发射器和接收器,发射

器发出的光线直接进入接收器,当被检测物体经过发射器和接收器之间且阻断光线时,光电开关就产生了开关信号。当检测物体为不透明时,对射式光电开关是最合适的检测装置。

● 槽式光电开关:它通常采用标准的U 字型结构,其发射器和接收器分别位于U 型槽的两

边,并形成一光轴,当被检测物体经过U型槽且阻断光轴时,光电开关就产生了开关量信号。槽式光电开关比较适合检测高速运动的物体,并且它能分辨透明与半透明物体,使用安全可靠。

光纤式光电开关:它采用塑料或玻璃光纤传感器来引导光线,可以对距离远的被检测物体进行检测。通常光纤传感器分为对射式和漫反射式。

光电开关把发射端和接收端之间光的强弱变化转化为电流的变化以达到探测的目的。由于光电开关输出回路和输入回路是电隔离的(即电缘绝),所以它可以在许多场合得到应用。光电传感器具有线性度好、分辨率高、噪音小和精度高、无触点、无机械碰撞、响应快、控制精度高,而且能识别色标等优点,在此我们选择光电转速传感器来进行转速的检测。

其原理就是一个小型发电机。转轴旋转时产生电压,电压的大小与转速成正比(非线性),可用一个具有与转速对应刻度的电压表测量这个电压。

本课题中使用的光电开关是根据光敏二极管工作原理制造的一种感应接收光强度变化的器件,当它发出的光被目标反射或阻断时,则接收器感应出相应的电信号。它包含调制光源,由光敏元件等组成的光学系统、放大器、开关或模拟量输出装置,其工作原理如图5所示。光电式传感器由独立且相对放置的光发射器和收光器组成。当目标通过光发射器和收光器之间并阻断光线时,传感器输出信号。它是效率最高、最可靠的检测装置。槽形(U形)光电开关是对射式的变形,其优点是无须调整光轴。

图5 光电传感器原理图

以上两种是常用的转速测量装置。此外还有傅立叶变换用于电机转速的测量、基于单片机无线电机转速测量系统、基于光电码盘的的高精度电机转速测量等方法。

综合以上所述,本次课程设计选用计数式,光电传感器,M/T法(频率/周期法)测量电动机转速,适用于中、高速测量。

2 、测量系统的构成

图1 转速测量框图

(1)信号拾取

转速信号拾取是整个系统的前端通道,目的是将外界的非电参量,通过一定方式转换成

电量,这一环节可以通过敏感元件、传感器或测量仪表等来实现。方法如下:

●通过敏感元件拾取被测信号

敏感元件体积小,可以根据用户及环境要求做成各矛中形状的探头,它能将被测的物理量变换成电流、电压,只要选择合适的元件参数。如R、L、c设计相应的电路,便能完成这种对应关系。这种方法设计难度大,信号稳定度差,在模拟处理系统中不宜采用。

●通过传感器拾取信号

由专业人员将敏感元件和相应的测量电路、传递机构以适当的形式制成不同类型、不同用蔓堕查兰堡主堂篁堡三

处的传感器,根据原理输出电量。该电量可以是模拟量或数字量,现代传感器还可以输出开关量,用于数字逻辑电路。

●通过测量仪表拾取被测信号

目前有许多测量仪表用于各种测量中,有大信号输出、有BcD码输出等,但价格昂贵,

专业性强,一般不适合通用系统。

通用的转速测量系统大都采用一种俗称“码盘”的传感装置,将圆形的码盘固定在转轴上,码盘上有若干规则排列的小孔,用光电偶来输出电信号,以反映转速对应关系,即是将转轴的速度以脉冲形式反映出来,通常有两种形式:

1)模拟量量化后经A仍转换,由数字量反映角度,供单片机计算处理,得出转速。

2)直接由脉冲来反应转轴的角度,用每转产生的脉冲经单片机处理得出转速。

此处使用74HC14

74HC14是一款高速CMOS器件,74HC14引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC14遵循JEDEC标准no.7A。74HC14实现了6路施密特触发反相器,可将缓慢变化的输入信号转换成清晰、无抖动的输出信号。

应用:波形、脉冲整形器

非稳态多谐振荡器

单稳多谐振荡器

兼容JEDEC标准no.8-1A

ESD保护:

HBM EIA/JESD22-A114-A超过2000 V

MM EIA/JESD22-A115-A超过200 V

温度范围-40~+85 ℃ -40~+125 ℃

主要参数:

典型电源电压:5.0V

正向输入阀值电压:VT+=1.6V

负向输入阀值电压:VT-=0.8V

驱动电流:+/-5.2mA

传输延迟:12ns @5V

逻辑电平:CMOS

引脚:14

封装类型:DIP

(2)整形倍频

前向通道中,从传感器输出的信号必须转换成计算机输入要求的信号,由于信号调节电路与传感器的选择,现场干扰程度等,都会影响信号的质量。而脉冲信号的上升沿和下降沿对数字电路的触发尤为重要,若要将转速脉冲信号直接加到计数器或外部中断的输入端,并利用其上升沿来触发进行计数,则必须要求输入的信号有陡峭的上升沿或下降沿。处理方法

上可以用触发器电路来整形。而倍频电路主要用于解决低转速时测量精度问题。及码盘的刻度误差而造成的精度下降问题。方法是在每转中增加脉冲的个数(码盘的线程数)来提高精度。但在高转速时,由于脉冲个数的增加,限制了最高转速测量量程,这个问题可用单片机控制来动态处理解决,兼顾高低转速的测量精度。

(3)单片机模块

根据系统功能要求以及单片机硬件电路设计思路对单片机模块进行设计,要使单片机准确的测量电机转速,并且使测出的数据能显示出来,所以整个单片机部分分为传感器电路、时钟电路、复位电路、执行元件以及显示电路五个部分。

●处理执行元件:

单片机我们采用AT89C51(其引脚图如图4-1),AT89S51单片机最小系统由AT89S51单片机及其外围电路组成 AT89S51单片机在高温环境中稳定性好,支持在线编程ISp,无需专用的编程器,方便调试.AT89S51单片机对很多嵌入式控制应用提供了一个高灵活有效的解决方案。它的作用使形成用于产生超声波的40KHZ信号、形成必要的时序、控制LCD字符的显示。P3.2为接受霍尔传感器脉冲信号输入端P18和P19为单片机自身的11.0592MHZ晶振P9是复位信号一个电容构成。P0.0~P0.7输出转速数码管显示信号P2.0-P2.3引脚对应液晶显示屏的位选通信号LED数码管的选通与否。将霍尔元件采集到的信号传输给单片机P3.2

1

后单片机将转速传输给四连排LED数码管显示电路

图4-1 AT89C51引脚图

●显示方式:

方案一:静态显示方式

所谓静态显示就是指无论是多少位数码管,同时处于显示状态。

当数码管处于静态显示方式时,所有位选线(数码管的公共端)连接在一起,而各个数码管的段选线(数码管上各笔段的引出线)是相互分离的。

静态显示的优点是:数码管显示无闪烁,亮度高,软件控制比较容易;缺点是:需要的硬件电路较多(每一个数码管都需要一个锁存器),如果在全国大学生电子设计竞赛中使用,将造成很大的不便,同时由于所有数码管都处于被点亮状态,所以需要的电流很大,当数码管的数量增多时,对电源的要求也就随之增高。所以,在大部分的硬件电路设计中,很少采用静态显示方式。

方案二:动态显示方式

所谓动态显示,是指无论在任何时刻只有一个数码管处于显示状态,每个数码管轮流显示。当数码管处于动态显示时,所有位选线分离,而每个数码管的各条段选线

相连。当需要显示数字或字符时,需要将所有数码管轮流点亮,这时对每个数码管的点亮周期有了一个较严格的要求:由于发光体从通入电流开始点亮到完全发光需要一定的时间,叫做响应时间,这个时间对于不同的发光材质是不同的,通常情况下为几百微秒,所以数码管的刷新周期(所有数码管被轮流点亮一次的时间)不要过短,这也与数码管的数量有关,一般的数码管的刷新周期应控制在5ms~10ms,即刷新率为200Hz~100Hz,这样既保证了数码管每一次刷新都被完全点亮,同时又不会产生闪烁现象。

动态显示的优点是:硬件电路简单(数码管越多,这个优势越明显),由于每个时刻只有一个数码管被点亮,所以所有数码管消耗的电流较小;缺点是:数码管亮度不如静态显示时的亮度高,例如有8个数码管,以1秒为单位,每个数码管点亮的时间只有1/8秒,所以亮度较低;如果刷新率较低,会出现闪烁现象;如果数码管直接与单片机连接,软件控制上会比较麻烦等。

由于本课题需要需要数码管个数较多,为节约i/o端口综合比较采用动态显示更合适。

所谓动态显示,就一位一位地轮流点亮各位显示器(扫描),对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。调整电流和时间参数,可实现亮度较高较稳定的显示。若显示器的位数不大于8位,则控制显示器公共极电位只需8位口(称为扫描口),控制各位显示器所显示的字形也需一个8位口(称为段数据口)。本次设计要求的转速测量范围60r/min-36000r/min,所以只需要5位数码管即可。5位共阴极显示器和AT89C51的接口逻辑如图4-7所示。AT89C51的P0口作为段数据口,接上拉电阻到显示器的各个段;P2口作为扫描口,经同相驱动器7407接显示器公共极。

三、硬件电路设计

1 .原理分析

图2 单片机系统测量转速原理图

(1)显示部分

4位显示器,在AT89C41RAM存贮器中设置四个显示缓冲器单元30H-34H,分别存放4位显示器的显示数据,AT89C41的P2口扫描输出总是只在一位为低电平,即4位显示器中仅有一位公共阴极为低电平,其它位为高电平,AT89C41的P0口相应位(阴极为低)的显示数据的段数据,使该位显示出一个字符,其它们为暗,依次地改变P2口输出为高的位,P0口输出对应的段数据,4位显示器就显示出由缓冲器中显示数据所确定的字符。LED显示显示显示显示管管管管数码管中有8个发光二极管,其中7个发光二极管长条段状,可组成数字字形,1个发光二极管为点状,形成小数点,所以有时称为七段码。七段数码管引脚编码从左下脚开始,分别为第1引脚、第2引脚...。七段数码管的8个发光二极管分别命名为a、b、c、d、e、f、g、dp;“com”为8个LED的公共引脚。按照公共引脚的接法,七

段数码管分共阳极和共阴极两种。共阳极的七段数码管将所有LED的正极连接在公共引脚,接到电源线。当某一个LED负极为低电平时,发亮;为高电平时,变暗。共阴极的七段数码管将所有LED的负极连接在公共引脚,接到地线。当某一个LED正极为高电平时,发亮;为低电平时,变暗。

(2)复位电路

计算机在启动运行时都需要复位,使中央处理器CPU和系统中的其它部件都处于一个确定的初始状态,并从这个状态开始工作。

MCS-51单片机有一个复位引脚RST,它是史密特触发输入(对于CHMOS单片机,RST引脚的内部有一个拉低电阻),当振荡器起振后该引脚上出现2个机器周期(即24个时钟周期)以上的高电平,使器件复位,只要RST保持高电平,MCS-51保持复位状态。此时ALE、PSEN、P0、P1、P2、P3口都输出高电平。RST变为低电平后,退出复位,CPU从初始状态开始工作。

单片机采用的复位方式是自动复位方式。对于MOS(AT89C51)单片机只要接一个电容至V CC 即可(见图4-3)。在加电瞬间,电容通过电阻充电,就在RST端出现一定时间的高电平,只要高电平时间足够长,就可以使MCS-51有效的复位。RST端在加电时应保持的高电平时间包括V CC的上升时间和振荡器起振的时间,V ss上升时间若为10ms,振荡器起振的时间和频率有关。10MHZ时约为1ms,1MHZ时约为10ms,所以一般为了可靠的复位,RST在上电应保持20ms以上的高电平。RC时间常数越大,上电RST端保持高电平的时间越长。

若复位电路失效,加电后CPU从一个随机的状态开始工作,系统就不能正常运转。

图4-3 上电复位电路

(3)信号

光电传感器接受到的信号。

本设计中采用对射式光电传感器测量电机转速。当不透光的物体挡住发射与接收之间的间隙时,开关管关断,反之打开。

测装置按照发动机上传感器的实际安装位置进行安装。将信号盘固定在电动机转轴上,光电转速传感器正对着信号盘。测量头由光电转速传感器组成,而且测量头两端的距离与信号盘的距离相等。测量用器件封装后,固定装在贴近信号盘的位置,当信号盘转动时,光电元件即可输出正负交替的周期性脉冲信号。信号盘旋转一周产生的脉冲数,等于其上的齿数。因此,脉冲信号的频率大小就反映了信号盘转速的高低。该装置的优点是输出信号的幅值与转速无关,而且可测转速范围大,一般为1r/s~104 r/s以上,精确度高。

所谓计数是对外部事件进行计数。外部事件的发生以输入脉冲表示,因此,计数功能的本质就是对外来脉冲进行计数。T0(P3.4)和T1(P3.5)两个信号引脚,分别是这两个计数器计数输入端,外部输入的脉冲在负跳变时有效,进行计数器加一(加法计数)操作。

前一个机器周期S5P2拍节对外部计数脉冲进行采样,如果采样为高电平,则后一个机器周期采样为低电平,即为一个有效的计数脉冲。在下一个机器周期S3P1进行计数。可见,采样计数脉冲是在两个机器周期内进行的。因此,计数脉冲的频率不能高于振荡脉冲频率的1/24。当然,传感器的信号变化的频率400Hz远远小于这个值。

因此,测量方法可以这样:用T0做测量脉冲数的计数器;用T1定一段时间,在这段时间内测量的脉冲数为N,则转速为N*60/(4*T1)。因为N个脉冲在(N-1)~(N+1)个周期里出现,所以最大误差为±60/(4*T1),最大相对误差为±1/N*100%。显然,N越大相对误差越小,即转速越快,这种方式测量相对误差就越小。

图3 光电传感器原理

(4)单片机时钟

时钟电路是计算机的心脏,它控制着计算机的工作节奏。MCS-51单片机允许的时钟频率是因型号而异的典型值为12MH Z

MCS-51内部都有一个反相放大器,XTAL1、XTAL2分别为反相放大器输入和输出端,外接定时反馈元件以后就组成振荡器,产生时钟送至单片机内部的各个部件。AT89C51是属于CMOS8位微处理器,它的时钟电路在结构上有别于NMOS型的单片机。

CMOS型单片机内部(如AT89C51)有一个可控的负反馈反相放大器,外接晶振(或陶瓷谐振器)和电容组成振荡器,图4-2为CMOS型单片机时钟电路框图。振荡器工作受/PD端控制,由软件置“1”PD(即特殊功能寄存器PCON.1)使/PD=0,振荡器停止工作,整个单片机也就停止工作,以达到节电目的。清“0”PD,使振荡器工作产生时钟,单片机便正常运行。图中SYS为晶振或陶瓷谐振器,振荡器产生的时钟频率主要由SYS参数确定(晶振上标明的频率)。电容C1和C2的作用有两个:其一是使振荡器起振,其二是对振荡器的频率f起微调作用(C1、C2大,f变小),其典型值为30pF。

图4-2 CMOS型单片机时钟电路框图

四、系统程序设置与调试

硬件电路设计完毕,即进行程序设计,在程序设计之前,首先要确定定时器的工作方式,方式控制字,确定串行口的工作模式等,下面分别讨论。

硬件调试主要是针对我的转速测量系统的单片机硬件电路分别进行调试。这一部分硬件调试主要分成两大块:上电前的调试和上电后的调试。

上电前的调试

在上电前,我们必须确保电路中不存在断路或短路情况,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。在这部分调试中主要使用的工具是万用表,用来完成检测电路中是否存在断路或者短路情况等。

特别是数码管的连接部分,有PROTEL制作的PCB确保要和原理图上的图一致,有些在电路板上没法连接的线路,要用短接线把接好,对照着原理图部分,一部分一部分地用万用表测量,注意焊点之间,确保焊点没有短接在一起,同时注意焊点的美观,确保没有开路以及短路的现象出现。

上电后的调试

在确保硬件电路正常,无异常情况(断路或短路)方可上电调试,上电调试的目的是检验电路是否接错,同时还要检验原理是否正确,在本次课程设计中,上电调试主要只转速测量系统的单片机控制部分、数码管点亮部分、和上位机通信是的电平转换和串口通信部分的硬件调试。

1、单片机控制部分硬件调试:

这一部分调试主要是检查时钟电路、复位电路是否接对,单片机的电源以及地是否接好,以及其他的一些管脚的接法。看单片机通电后能否可以正常工作等这一系列问题。

2、数码管LED电路调试:

由于数码管采用的是动态扫描的方式点亮的。数码管的公共端(COM)接在7407驱动再接到单片机的P2口作为位选信号,字型是接在P0口。电路上电检查7407是否接上电源和地让其正常工作。在这一前提下,查看数码管能否点亮。只需要接仿真机上编写一个小程序让5位LED全亮,或者让它们其中的某位点亮,也可以显示不同的数字,根据要求给P0口,P2口分别赋值。即可检查数码管的硬件电路是否正确,即可判断显示驱动电路整个完整,首先排除这里的故障。

3、发送部分硬件电路调试:

这一部分电路硬件调试主要完成任务是使得通过HIN232CPE电平转换器转换前后的电平关系。可以用示波器和万用表检查电平转换前后的关系

本系统设计中,T0被用于计数,计数量大为好,可以获得较大的测量范围,因此,T0选定为工作方式1(16位的计数方式),设计中,没有使用外部控制端,仅用指令置位/清零TR0来进行计数的启动/停止,这样,电路较为简单,同时精度可达到要求,因此,T0采用自由计数的方式,不用预置初值。

本系统设计中,T1被用于数码管显示及形成闸门信号,由于系统中用到4位数码管,动态显示时,一组数码管显示的总时间以不超过20ms为宜,因此,这里选择T1的定时时间为5ms,4位数码管显示完毕,正好用于20ms,这里选用T1的工作状态。确定了定时/计数器T1的定时时间以后,就要计算定时初值,本系统用了12M的晶振,恰好是一个机器周期为1us,因此,5ms定时时间意味着只要计数5000次即可,由于定时/计数器T1是向上计数,因此,要化为16进制,并分别送入T1的高8位和低8位。这里,采用的keil汇编软件有较强的预处理功能,能够处理较复杂的运算,因此,程序中可写为:

MOV TH1,#HIGH(65536—5000)

MOV TL1,#LOW(65536—5000)

这里使用了两条指令#HIGH和#LOW,它们的用途分别是取其后括号中数值的高8位和低8位,因此,这两行语句的含义就是取65536—5000的高8位和低8位,写成65536—5000而不是写出其结果60536可以提高程序的维护性,直观地看到定时初值。由于89C51单片机在中断时,会附加延时3—8个周期,在满足一定条件的情形下,验证这个数值是否正确,可以在进入仿真调试时通过观察Keil提供的有关变量看到,如果不正确,可以根据实际情况略作调整,保证定时时间为5ms。

定时/计数器的方式控制字TMOD,其地址为89H,复位值00H,不可位寻址。根据本设计,TMOD的控制字应为00010101B(T1为定时器,T0为16位计数器)。

程序中用:

MOV TMOD,#00010101B

将控制字送入TMOD。

TCON地址88H,可进行位寻址,复位值00H。TF0、TF1分别为定时器T0和计数器T1的溢出标志位,TR0和TR1在正常情况下,都没有溢出标志,只有当计数值或定时值超过65536时,才能有溢出中断请求,这两位是由硬件置位和硬件清零,不需另行设置。可在T0和T1的溢出中断服务程序中,以供使用。TR1、TR0分别用于开启T1和T0的开关位,其中TR1由系统开启时,直接置位,打开T1,开始定时,经运行判断后,打开TR0。

在程序开始之前,首先进行变量的分配,使用EQU伪指令定义了一些符号变量,使得程序阅读时较为直观。程序的初始化,根据硬件电路的要求,将各硬件电路置于其规定的状态;根据需要,设置堆栈;对定时器、计数器、串行口等设置工作状态,预置初值等。

以下是程序定义变量及进行初始化的程序行。

DISPBUF EQU 5AH ;显示缓冲区从5AH开始,共4个单元。

SECCOUN EQU 59H ;秒计数器单元,用于累计T1的中断次数,每200个为一秒。

SPCOUN EQU 57H ;速度计时器单元57H和58H,高位在前(57H单元中)

COUNT EQU 56H ;显示时的计数器

SPCALC BIT 00H ;要求计算速度的标志,该位为1时主程序计算速度,然后

清该位

HIDDEN EQU 10 ;消隐码

; 以上分配变量

MOV SP, #5FH ;设置堆栈

MOV P1,#OFFH ;将P1置位高电平。

MOV P0,#0FFH ;将P0置位高电平。

MOV P2,#OFFH ;将P2置位高电平,以上三行熄灭所有LED及数码管。

MOV TMOD,#00010101B ;定时器T1工作于方式1,计数器T0工作方式1。

MOV TH1,#HIGH(65536-5000);设置T1初始值

MOV TL1,#LOW(65536-5000)

MOV TH0,#00H ;设置T0的计数初始值0

MOV TL0,#00H

SETB TR1 ;开启T1

SETB TR0 ;开启T0

SETB ET1 ;开定时器1中断

SETB EA ;允许单片机相应中断

定时计数器T1每5ms中断一次,用以进行数码管显示和每1秒读取一次计数器T0中的数值。

(1)秒信号的产生

中断产生后:

INC SECCOUN

MOV A,SECCOUN

CJNE A,#200,GO2

判断SECCOUN是否到达200了,如果到达200,则说明1秒时间已到,程序将关闭T0计数器,然后对T0中已记得的数据进行处理,然后再去进行显示,否则直接转去显示。这部分的程序流程图如图4所示。

(2)数码管的显示

数码管显示采用动态方式,即每次中断点亮一位数码管,依次循环。由于数码管共有4位,因此,每20ms即可轮流点亮每个数码管一次,利用人的视觉暂留现象,可以稳定地显示各位数码管的值。

图5是显示部份的流程图,从图中可以看出,程序中利用了一个显示计数器,该计数器的值在0~3之间变化,对应第一至第四位数码管,当计数值到4时,即回零。下面以显示计数器值等于2为例,加以说明。当显示计数器值等于2时,意味着此时应点亮第3位数码管去进行显示。程序中首先取显示缓冲区初值:

图4 秒信号子程序

MOV A,#DISPBUF

该值为5AH,加上显示计数器的值即5CH:

ADD A,COUNT

因此将从5CH中取出待显示数据:

MOV R0,A

MOV A,@R0

然后查字表码表,并将该字形码送往P0:

MOV DPTR,#DISPTAB

MOVC A,@A+DPTR

MOV P0,A

因为P0是段驱动。

下面是要点亮第3位数码管,程序中再次取计数值,即2,然后查位码:MOV A,COUNT

MOV DPTR,#BITTAB

MOVC A,@A+DPTR

位码的值:

BitTab: DB 0FDH, 0FEH, 0FBH, OF7H, 0EFH

图5 数码管显示流程图

因此,查出来的值是0FBH,即11111011,这个值被送往P2口:

ORL P2,#00001111B ;先将P2口的低4位置1(关闭原点亮的数码管)

ANL P2,A ;将查得的位码与P2相与,点亮相应的数码管

观察硬件,即可发现P2.2驱动第3位数码管,因此即实现了点亮第三位数码管的要求,而其他各位不被点亮。

这种处理方法使得该程序具有很强的通用性,只要改变计数值,改变位码表,即可用于不同位数、不同接法的数码管驱动。

4. 系统流程

本系统的主程序参考图6,在完成初始化工作以后,及循环等待,每1s时间到之后,

图6 主程序流程图

T1中断程序将会读取T0中的计数值,并将其放入约定的存储单元中,并且置位“要求计算”的标志,当该标志位为1时,主程序即转入计算,第一步将16进制数的结果转化为BCD码,第二步,将BCD码转化并送入显示缓冲区。

五、程序调试及仿真

1 .基于Keil的程序调试

源程序(基于汇编语言)

DISPBUF EQU 5AH ;显示缓冲区从5AH开始

SECCOUN EQU 59H ;秒计数单元,用于累计T1的终端次数,每200

个为一秒

SPCOUN EQU 57H ;速度计时器单元57H和58H,高位在前(57H

单元中)

COUNT EQU 56H ;显示时的计数器

SPCALC BIT 00H ;要求计算速度的标志,该位为1则主程序进

行速度计算,然后清该位

HIDDEN EQU 10 ;消隐码

ORG 0000H

AJMP START

ORG 001BH

JMP TIMER1 ;定时中断1入口

ORG 30H

START: MOV SP,#5FH ;设置堆栈

MOV P1,#0FFH ;将P1置位高电平

MOV P0,#0FFH ;将P0置位高电平

MOV P2,#0FFH ;将P2置位高电平,以上三行初始化,所有显示器D及数码管灭

MOV TMOD,#00010101B ;定时器T1工作于方式1,计数器T0工作方式1。

MOV TH1,#HIGH(65536-5000);设置T1初始值

MOV TL1,#LOW(65536-5000)

MOV TH0,#00H ;设置T0的计数初始值0

MOV TL0,#00H

SETB TR1 ;开启T1

SETB TR0 ;开启T0

SETB ET1 ;开定时器1中断

SETB EA ;允许单片机相应中断

LOOP: JNB SPCALC,LOOP ;如果未要求计算,转本身循环

;标号:MULD 功能:双字节二进制无符号数乘法

;入口条件:被乘数在R2、R3中,乘数在R6、R7中。

;出口信息:乘积在R2、R3、R4、R5中。

;影响资源:PSW、A、B、R2~R7 堆栈需求:2字节

MULD: MOV A,R3 ;计算R3乘R7

MOV B,R7

MUL AB

MOV R4,B ;暂存部分积

MOV R5,A

MOV A,R3 ;计算R3乘R6

MOV B,R6

MUL AB

ADD A,R4 ;累加部分积

MOV R4,A

CLR A

ADDC A,B

MOV R3,A

MOV A,R2 ;计算R2乘R7

MOV B,R7

MUL AB

ADD A,R4 ;累加部分积

MOV R4,A

MOV A,R3

ADDC A,B

MOV R3,A

CLR A

RLC A

XCH A,R2 ;计算R2乘R6

MOV B,R6

MUL AB

ADD A,R3 ;累加部分积

MOV R3,A

MOV A,R2

ADDC A,B

MOV R2,A

RET

MOV R2,SPCOUN

MOV R3,SPCOUN+1

MOV R6,#0

MOV R7,#5 ;测得的数据是每秒计数值,转为分(每一转测12

次,故乘5而非60)

CALL MULD

SETB TR1

;标号:HB2 功能:双字节十六进制整数转换成双字节BCD码整数

;入口条件:待转换的双字节十六进制整数在R6、R7中。

;出口信息:转换后的双字节BCD码整数在R2、R3、R4、R5中。

;影响资源:PSW、A、R2~R7 堆栈需求:2字节

HB2: CLR A ;BCD码初始化

MOV R3,A

MOV R4,A

MOV R5,A

MOV R2,#10H ;转换双字节十六进制整数

HB3: MOV A,R7 ;从高端移出待转换数的一位到CY中RLC A

MOV R7,A

MOV A,R6

RLC A

MOV R6,A

MOV A,R5 ;BCD码带进位自身相加,相当于乘2

ADDC A,R5

DA A ;十进制调整

MOV R5,A

MOV A,R4

ADDC A,R4

DA A

MOV R4,A

MOV A,R3

ADDC A,R3

MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整

DJNZ R2,HB3 ;处理完16bit

RET

MOV A,R4

MOV R6,A

MOV A,R5

MOV R7,A ;将乘得的结果送R6、R7准备转换

CALL HB2

MOV DISPBUF,R3 ;最高位

MOV A,R4

ANL A,#0F0H ;去掉低4位

SWAP A ;将高4位切换到低4位

MOV DISPBUF+1,A

MOV A,R4

ANL A,#0FH

MOV DISPBUF+2,A

MOV A,R5

ANL A,#0F0H

SWAP A

MOV DISPBUF+3,A

MOV A,R5

ANL A,#0FH

MOV DISPBUF+4,A

CLR SPCALC ;清计算标志

JMP LOOP

;主程序到此结束

TIMER1: PUSH ACC ;ACC入栈

PUSH PSW ;PSW入栈

SETB RS0 ;工作区1

JNB TR0,SETTR0 ;如果T0未运行,则开启T0

JMP GO1

SETTR0: SETB TR0

GO1: INC SECCOUN ;秒计数器加1

MOV A,SECCOUN

CJNE A,#201,GO2 ;如果未到1s则转(每到1s停1次,故数值为201)

CLR TR0 ;1s到了,则停止T0的运行

MOV SPCOUN,TH0

MOV SPCOUN+1,TL0 ;读取计数值

CLR A

MOV TH0,A

MOV TL0,A ;清计数器

SETB SPCALC ;要求主程序计算速度

MOV SECCOUN,#0 ;清秒计数器

GO2: INC COUNT ;用于显示的计数器

MOV A,COUNT

CLR C

SUBB A,#4

JZ N1

JMP N2

N1: MOV COUNT,#0

N2: MOV A,#DISPBUF

ADD A,COUNT

MOV R0,A ;指向当前要显示的显示缓冲区

MOV A,@R0 ;取第一个带显示数

MOV DPTR,#DISPTAB ;字形表首地址

MOVC A,@A+DPTR ;取字形码

MOV P0,A ;将字形码送P0位(段口)

MOV A,COUNT

MOV DPTR,#BITTAB ;字位表首地址

MOVC A,@A+DPTR

ORL P2,#00001111B

ANL P2,A

MOV TH1,#HIGH(65536-5000)

MOV TL1,#LOW(65536-5000)

POP PSW

POP ACC

RETI

BITTAB: DB 0FDH,0FEH,0FBH,0F7H,0EFH

;字模表 0 1 2 3 4 5 6 7 8 9 消隐

DISPTAB:DB 28H,7EH,0A4H,64H,72H,61H,21H,7CH,20H,60H,0FFH

END

相关主题