电机测速与控制论文
毕业设计(论文)
题
专
班
学
姓目:业:级:号:名:电机测速与控制09221贺宗建
指导老师:成都电子机械高等专科学校
二〇一二年五月
摘要
转速是指作圆周运动的物体在工业生产中,常会遇到各种需要测量转速的场合,
在单位时间内所转过的圈数, 其大小及变化往往意味着机器设备运转的正常与否, 因此, 转速测量一直是工业领域的一个重要问题。例如在发动机、电动机、机床主轴等旋转设备的运转和控制中,常需要实时监控其转速以便随时调整生产方案。在使用模拟技术制作测速表时,常用测速发电机的方法,即利用传感器测得电机转动脉冲,利用脉冲计算每分钟点击转速。
这次设计内容包含知识全面,在测量系统中能学到关于测量转速的传感
器采样问题,单片机部分的内容,显示部分等各个模块的通信和联调。全面了解单片机和信号放大的具体内容。进一步锻炼我们在信号采集,处理,显示方面的实际工作能力。
关键词:电动机单片机传感器
设计要求:
1、采用单片机作为控制器实现电机的测速、加速、减速控制;
2、测速结果在液晶屏或者LED 上显示;
3、液晶屏上同时能显示实时时钟;
目录
概述···························································3单片机AT89C51简介·············································4复位电路······················································7晶振电路·······················································10按键控制模块·················································11显示部分设计····················································13管脚接线························································13指令功能························································13时钟实时显示功能················································14电机驱动·······················································15四相步进电机工作原理············································16传感器选择·····················································17霍尔传感器·····················································17光电传感器·····················································18转速测量方法····················································19转速测量原理····················································19系统软件设计··················································20主程序初始化····················································20程序框图························································22调试步骤·······················································26全电路仿真······················································29总结····························································30致谢····························································30参考文献························································31
···················································32附录程序代码·······
概述
目前测量电机转速的方法很多,按照不同的理论方法,先后产生过模拟测速法(如离心式转速表、用电机转矩或者电机电枢电动势计算所得)、同步测速法(如机械式或闪光式频闪测速仪)以及计数测速法。计数测速法又可分为机械式定时计数法和电子式定时计数法。传统的电机转速检测多采用测速发电机或光电数字脉冲编码器,也有采用电磁式(利用电磁感应原理或可变磁阻的霍尔元件等)、电容式(对高频振荡进行幅值调制或频率调制)等,还有一些特殊的测速器是利用置于旋转体内的放射性材料来发生脉冲信号.
其中应用最广的是光电式,光电式测系统具有低惯性、低噪声、高分辨率和高精度的优点.加之激光光源、光栅、光学码盘、CCD器件、光导纤维等的相继出现和成功应用,使得光电传感器在检测和控制领域得到了广泛的应用。而采用光电传感器的电机转速测量系统测量准确度高、采样速度快、测量范围宽和测量精度与被测转速无关等优点,具有广阔的应用前景。
晶振电路LCD 显示单
复位电路电机驱动片机转速采集
按键控制
加速
减速显示转换实时时钟实现模块
设计整体思路框图
各部分模块的功能:
①单片机:整个设计的核心部分,对各个模块进行控制,对数据进行处理。②晶振电路:提供基准频率。
③复位电路:对单片机进行初始化处理。
④控制模块:对需要实现的功能进行控制与转换切换。
⑤显示模块:通过液晶显示器LCD 对转速、时钟进行显示。
⑥电机驱动:用放大电路对电机进行驱动,使电动机运转。
⑦转速采集:通过传感器采集电机转速信号送入单片机处理。
⑧时钟模块:实现时钟显示的核心,具有计时功能。
单片机AT89C52介绍
AT89C51是一种带8K 字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU 和闪烁存储器组合在单个芯片中,ATMEL 的AT89C52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
这是常用的一种单片机,型号为AT89C52,它将计算机的功能都集成到这个芯片内部去了,就这么一个小小的芯片就能构成一台小型的电脑,因此叫做单
片机。
AT89C51芯片
它有40个管脚,分成两排,每一排各有20个脚,其中左下角
标有箭头的为第1脚,然后按逆时针方向依次为第2脚、第3脚……第40脚。
在40个管脚中,其中有32个脚可用于各种控制,比如控制小灯的亮与灭、控制电机的正转与反转、控制电梯的升与降等,这32个脚叫做单片机的“端口”,在单片机技术中,每个端口都有一个特定的名字,比如第一脚的那个端口叫做“P1.0”。
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.0RXD(串行输入口)
●P3.1TXD(串行输出口)
●P3.2/INT0(外部中断0)
●P3.3/INT1(外部中断1)
●P3.4T0(记时器0外部输入)
●P3.5T1(记时器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 的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。复位电路
MCS-51单片机复位电路是指单片机的初始化操作。单片机启运运行时,都需要先复位,其作用是使CPU 和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。
复位电路
①复位功能:
复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
单片机的复位是由外部的复位电路来实现的。片内复位电路是复位引脚RST 通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。复位电路通常采用上电自动复位(如图(a))和按钮复位(如图
(b))两种方式。
RC 复位电路
②单片机复位后的状态:
单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器
PC=0000H,这表明程序从0000H 地址单元开始执行。单片机冷启动后,片内RAM 为随机值,运行中的复位操作不改变片内RAM 区中的内容,21个特殊功能寄存器复位后的状态为确定值。
PSW=00H,表明选寄存器0组为工作寄存器组;SP=07H,表明堆栈指针指向片内RAM 07H 字节单元,根据堆栈操作的先加后压法则,第一个被压入的内容写入到08H 单元中;Po-P3=FFH,表明已向各端口线写入1,此时,各端口既可用于输入又可用于输出。IP=×××00000B,表明各个中断源处于低优先级;IE=0××00000B,表明各个中断均被关断;系统复位是任何微机系统执行的第一步,使整个控制芯片回到默认的硬件状态下。
51单片机的复位是由RESET 引脚来控制的,平则执行芯片内部的程序代码,若为低电平便会执行外部程序。51单片机在系统复位时,将其内部的一些重要寄存器设置为特定的值,至于内部RAM 内部的数据则不变。此引脚与高电平相
51单片机即进入芯片内部复位状态,接超过24个振荡周期后,而且一直在此状态下等待,直到RESET 引脚转为低电平后,才检查EA 引脚是高电平或低电平,若为高电
晶振电路
晶振是晶体振荡器的简称,在电气上它可以等效成一个电容和一个电
阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低分其中较低的频率是串联谐振,较高的频率是并联谐振。
AT89C51单片机内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为30μF。在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。
晶振有一个重要的参数,那就是负载电容值,选择与负载电容值相等的并
联电容,就可以得到晶振标称的谐振频率。
晶振电路
按键控制
控制模块采用74LS148优先编码器,其为8线-3线优先编码器,共有54/74148和54/74LS148两种线路结构型式,将8条数据线(0-7)进行3线(4-2-1)二进制(八进制)优先编码,即对最高位数据线进行译码。利用选通端(EI)和输出选通端(EO)可进行八进制扩展。
通过按键实现LCD 显示电机转速和实时时钟切换,同时通过按键实现
加速、减速控制。
优先编码器实物图
0-7编码输入端(低电平有效)
,EI 选通输入端(低电平有效),
A0、A1、A2编码输出端(低电平有效),GS 宽展端(低电平有效),EO 选通输出端。
优先编码器管脚
H-高电平L-低电平X-任意
优先编码器功能表
此设计中占用第4、5、6、7线输入,当任意端口按键按下有低电平输入,都将通过P1口输给单片机处理。译码结果:
减速按键-4口:011加速按键-5口:010时钟按键-6口:001转速按键-7口:000
显示部分设计
(1)液晶显示简介:
本设计显示部分采用lcd1602显示芯片,1602芯片字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD。
管脚接线功能:
第1脚:VSS为地电源第2脚:VDD接5V 正电源
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K 的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS 和RW 共同为低电平时可以写入指令或者显示地址,当RS 为低电平RW 为高电平时可以读忙信号,当RS 为高电平RW 为低电平时可以写入数据。
第6脚:E端为使能端,当E 端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。第15~16脚:空脚
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码
指令功能:
指令1:清显示,指令码01H,光标复位到地址00H位置指令2:光标复位,光标返回到地址00H
指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效
指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电
平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁
指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平
时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符(有些模块是DL:高电平时为8位总线,低电平时为4位总线)
指令7:字符发生器RAM地址设置指令8:DDRAM地址设置
指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接
收命令或者数据,如果为低电平表示不忙。
指令10:写数据指令11:读数据
(2
)动态显示仿真
时钟实时功能实现
本设计时钟显示通过DS1302芯片完成。它可以对年、月、日、周日、时、
分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302与CPU 的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。实际上,在调试程序时可以不加电容器,只加一个32.768kHz 的晶振即可。
DS1302与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM 数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入),D0=1,指定读操作(输出)。
在DS1302的时钟日历或RAM 进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK 周期的上升沿输入数据字节,或在下8个SCLK 周期的下降沿输出数据字节。
DS1302与RAM 相关的寄存器分为两类:一类是单个RAM 单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM 寄存器,在此方式下可一次性读、写所有的RAM 的31个字节。
DS1302抓图
电机驱动:
在设计中采用光电传感器采集信号,这种传感器是把旋转轴的转速变为相应频率的脉冲,然后用测量电路测出频率,由频率值就可知道所侧转速值。这种测量方法具有传感器结构简单、可靠、测量精度高的特点。是目前常用的一种测量转速的方法。
本设计采用单片机输送4路信号,通过反向处理送入ULN2003A 芯片,
ULN2003A 芯片主要功能是放大,由于产生的电压信号很小,所以要进行放大处理,一般要放大至少1000倍(≥60dB),然后再进行信号处理工作。通过P2口4个端口提供4相电,经过反向输入ULN2003A
芯片处理放大以驱动电机转动。
电机驱动抓图
四相步进电机工作原理:
四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。下图是该四相反应式步进电机工作原理示
意图。
步进电机工作原理示意图
开始时,开关SB 接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A 相绕组磁极产生错齿。
当开关SC 接通电源,SB、SA、SD断开时,由于C 相绕组的磁力线和1、
4号齿之间磁力线的作用,使转子转动,1、4号齿和C 相绕组的磁极对齐。而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种
工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图a、b、
c
所示:
步进电机工作时序波形图
传感器选择:
转速测量的方案选择, 一般要考虑传感器的结构、安装以及测速范围与环境条件等方面的适用性; 再就是二次仪表的要求, 除了显示以外还有控制、通讯和远传方面的要求。经过我和同组同学查资料、构思和自己的设计,总体电路我们有两套设计方案,部分重要模块也考虑了其它设计方法,经过分析,从实现难度、熟悉程度、器件用量等方面综合考虑,我们才最终选择了光电传感器。
霍尔传感器
霍尔传感器是利用霍尔效应进行工作的。其核心元件是根据霍尔效应原理制成的霍尔元件。本文介绍一种泵驱动轴的转速采用霍尔转速传感器测量。
传感器的定子上有2个互相垂直的绕组A 和B, 在绕组的中心线上粘有霍尔片HA 和HB , 转子为永久磁钢, 霍尔元件HA 和HB 的激励电机分别与绕组A 和B 相连, 它们的霍尔电极串联后作为传感器的输出。
霍尔转速传感器的结构原理图
霍尔转速传感器的接线图
缺点:采用霍尔传感器在信号采样的时候,会出现采样不精确,因为它是靠磁性感应才采集脉冲的,使用时间长了会出现磁性变小,影响脉冲的采样精度。
光电传感器
整个测量系统的组成框图如图所示。从图中可见,转子由一直流调速电机驱动,可实现大转速范围内的无级调速。转速信号由光电传感器拾取,使用时应先在转子上做好光电标记,具体办法可以是:将转子表面擦干净后用黑漆(或黑色胶布)全部涂黑,再将一块反光材料贴在其上作为光电标记,然后将光电传感器(光电头)固定在正对光电标记的某一适当距离处。光电头采用低功耗高亮度LED ,光源为高可靠性可见红光,无论黑夜还是白天,或是背景光强有大范围改变都不影响接收效果。光电头包含有前置电路,输出0—
5V 的脉冲信号。接到单片机89C51的相应管脚上,通过89C51内部定时/计时器T0、T1
及相应的程序设计,组成一个数字式转速测量系统。
测量系统的组成框图
优点:这种方案使用光电转速传感器具有采样精确,采样速度快,范围广的特点。
转速测量方法
被测物
传感器
测速原理图
单片机
LCD 显示
计数测速法又可分为机械式定时计数法和电子式定时计数法。本设计采用单片机和光电传感器组成的高精度转速测量系统,其转速测量方法采用的是电子式定时计数法。
对转速的测量实际上是对转子旋转引起的周期脉冲信号的频率进行测量。在频率的工程测量中,电子式定时计数测量频率的方法:
在一定时间间隔t 内, 计数被测信号的脉冲重复变化次数N , 则被测信号的频率f 可表示为:
f =N/t
转速测量原理
转速测量系统,多采用光电传感器,从转轴上预先粘贴的一个标志上获得一转一个转速脉冲,随后利用电子倍频器和测频方法实现转速测量。可以在微处理
器的参与下,通过测量转轴的转动一圈截获一次光电脉冲信号,换算出转轴的频率或转速。即通过速度传感器,将转速信号变为电脉冲,利用微机在单位时间内对脉冲进行计数,再经过软件计算获得转速数据。即:
V=N/(mT)
◆V———转速、单位:转/分钟;
◆N———采样时间内所计脉冲个数;
◆T———采样时间、单位:分钟;
◆m———每旋转一周所产生的脉冲个数。
如果m=60,那么1秒钟内脉冲个数N 就是转速n, 即:
V=N/(mT)=N/60×1/60=N
系统软件设计
硬件电路完成以后,进行系统软件设计。首先要分析系统对软件的要
求,然后进行软件的总体的设计,包括程序的总体设计和对程序的模块化设计。按整体功能分为多个不同的模块,单独设计、编程、调试,然后将各个模块装配联调,组成完整的软件。
根据设计的要求,单片机的任务是:内部进行计数,在计算出速度后
显示。软件编程用C 语言完成的,需要能掌握C 语言,还要熟练AT89C51单片机。从程序流程图、编写程序、编译,到最后的调试,是很复杂的。
主程序初始化
(1).定时器的初始化
AT89C51有两个定时器/计数器T0和T1,每个定时器/计数器均可设置
成为16位,也可以设置成为13位进行定时或计数。计数器的功能是对T0或T1外来脉冲的进行计数,外部输入脉冲负跳变时,计数器进行加1。
定时功能是通过计数器的计数来实现的,每个机器周期产生1个计数
脉冲,即每个机器周期计数器加1,因此定时时间等于计数个数乘以机器周期。定时器工作时,每接收到1个计数脉冲(或机器周期)则在设定的初值基础上
自动加1,当所有位都为1时,再加1就会产生溢出,将向CPU 提出定时器溢出中断申请。当定时器采用不同的工作方式和设置不同的初值时,产生溢出中断的定时值和计数值将不同,从而可以适应不同的定时或计数控制。
定时器有4种工作方式:方式0、方式1、方式2和方式3。
工作方式寄存器TMOD 的设定:GATE C/TM1-M0GATE C/TM1M0TMOD 各位的含义如下:
◆GATE:门控位,用于控制定时/计数器的启动是否受外部中断请求信号的影响。
◆C/T:定时或计数方式选择位,当C/T=1时工作于计数方式;当C/T=0时工作
于定时方式。
M1、M0为工作方式选择位,用于对T0的四种工作方式,T1的三种工作方式进行选择,选择情况如下表:M1M0=00为方式0;M1M0=01为方式1;
表5-1
MO M1M1、M0为工作方式选择位工作
方式
1
[1**********]位定时/计数器16位定时/计数器8位自动重置定时/计数器两个8位定时/计数器(只有T0有)方式说明
(2)中断允许控制
MCS-51单片机中没有专门的开中断和关中断指令,对各个中断源的允许和屏蔽是由内部的中断允许寄存器IE 的各位来控制的。中断允许寄存器IE 的字节地址为A8H,可以进行位寻址.
◆EA:中断允许总控位。EA=0,屏蔽所有的中断请求;EA=1,开放中断。◆ET2:定时器/计数器T2的溢出中断允许位
◆ES:串行口中断允许位。
◆ET1:定时器/计数器T1的溢出中断允许位。
◆EX1:外部中断INT1的中断允许位。
◆ET0:定时器/计数器T0的溢出中断允许位。
◆EX0:外部中断INT0的中断允许位
主程序框图:
开始
中断初始化液晶初始化设置初始时间读取时钟时间显示子程序
外中断0子程序:(按键按下信号) 外中断0
保存状态
返回
外中断1子程序:(电机转动一圈产生一个下降沿信号)外中断1
读定时器T0的初值计
算电机1圈的转速,变
量value 保存清零定时器T0的初值,
为计算下1圈的转速准备。
把value 拆成3位数,
返回
定时器T1中断子程序:(电机换相信号)定时器T1
定时器T1重赋初值
控制电机变相时间的
变量change 自加
置Change>=设的转速N
Y
清零change ,电机
改变状态。
返回
显示子程序:
显示子程序
按键信号
显示速度显示时间加速3减速
加速处理减速处理
返回
用KEIL 实现联机调试的步骤
keil 除了可以编写、编译和仿真执行来调试用户程序外,还可以通过串口实现联机调试,即通过单步、断点看代码在硬件上的执行效果。步骤如下:使用的是AT89C51CC03单片机,keil版本是Keil C51V9.00。
1、用KEIL 建立工程项目文件,编程、编译调试用户程序,保证软件执行进行没什么问题。
2、修改KEIL 安装点keil/c51/FlashMon目录下与单片机型号一致的配置文件config.inc,主要是根据实际情况修改cpu_clock和code_start两个参数值,我改为12M 和0E000H。
3、重新编译该目录下的程序,生成新的调试程序Monitor.HEX,如果没有重新生成,把选项create HEX file 勾上。
4、运行FLIP程序,将Monitor.HEX 烧进单片机中,起始地址为0E000H,即SBV=E0、BLJB 选上、BSB=0、EB=FF
5、点击Start Application 按钮执行Monitor.HEX 程序
6、运行keil,打开工程项目文件,修改调试参数,即菜单project-->optionfor target,选debug 页,点击右边的use keil monitor 51driver,点击seting 按钮,选择串口和波特率,注意,要和烧片子时用的波特率一致,一般用9600。需要注意的是,如果串口为自动方式(即除了三根通信线外,还接了RTS 和DTR),需要将RTS 和DTR 设置为inactive
7、编译好程序,点击debug 菜单下的调试命令,可以单步执行,可以设置断点,可以全速运行,这时候实际使用单片机硬件运行程序,可以看到执行效果,如显示、按键响应等。这种情况下可以调试程序实际执行的效果。
8、如果不设置断点,全速运行用户程序,则用户程序和实际运行一致,keil会失去对用户程序的控制,无法中断用户程序的执行(只有按reset 才能中断用户程序运行了)
9、发现问题可退出调试状态,修改程序,重新编译,然后再次进入调试状态,单步或设置断点进行调试。注意,全速运行时不能中断,否则退不出(强行退出的后果是monitor 的状态不对,无法再次进入联机调试状态)。
10、退出调试后,无论是按reset 还是通过flip 程序的start application 按钮,都无法再次执行monitor 程序,此时执行的是用户程序,要想继续调试,只能擦除
flash ,重新将monitor 烧进单片机。
全部编译没有错误和警告,那么软件的编写就完成了,并且生成了十六进制HEX 单片机可用文件。
程序编译成功:
程序编译
当硬件放置完,画好电路图后,双击单片机,弹出一个对话框,找到开始在Keil 里面生成的HEX 文件,单击OK
显示切换抓图
全电路仿真
总
快了采样的速率,具有较好的实时性。
结
采用单片机技术来实现转速的测量,可以提高转速测量的精确度,并且加
基于单片机的转速测量系统,具有硬件电路简单,程序简单和运算速度
快,测速范围广,抗干扰性能好的特点。在设计的信号处理电路中经过滤波,能够进一步减少误差,使测速精度得到提高。
通过这次毕业设计,我深深懂得了要不断把所学知识学以致用,也发现了自己的知识薄弱,还需通过自身不断努力,不断提高自己的分析问题、解决问题的能力,同时也提高了我的专业技能,拓展了我的专业知识面,使我更加体会到要想完成一件事必须认真、踏实、勤于思考、和谨慎稳重。
致谢
经过长时间的忙碌,毕业设计已经接近尾声,通过这次学校组织的毕业设计,端正了自己学习的态度,锻炼了自己独立动手的能力,在此,我要感谢每一个帮助过我的人。
首先,我要感谢的是我的指导教师曾一江老师。曾老师平日里工作繁多,三年里都是曾老师亲自执教,为这次的毕业设计奠定了知识基础,在毕业设计的制作中都给予我悉心的指导和帮助。另外,她的治学严谨和科学研究的精神也是我永远学习的榜样,并将积极影响我今后的学习和工作。
再次,我要感谢的是我的同学沈小平同学和同组同学邓先均同学,在我毕业设计期间,他们给了我不少的关心和帮助,特别是沈小平同学,如果没有他的悉心指导与帮助,我想这次的毕业设计不会完成的如此顺利。
理论与实践的结合,是对知识较好牢固掌握的一种方法,这次的毕设就有这种理念。学校真是高瞻远瞩,因为就在前几天,我刚刚到即将工作的公司报到了,接触了自己将来的工作岗位,把知识与实践相结合是多么的重要啊!!所以作为毕业生的我表示深切感谢.这次毕业设计机会真的是难得与重要。.最后我要感谢的是我亲爱的成都电子机械高等专科学校,感谢您三年来的培养。
主要参考文献
1.《单片机原理及接口技术》曾一江科学出版社
2.《单片机C 语言应用100例》王东锋董冠强电子工业出版社3.《单片机C 语言应用程序设计》戴佳戴卫恒刘博文电子工业出版社4.《单片机C 语言与PROTUES 仿真技能实训》刘娟中国电力出版社5.《传感器及应用》
王煜东编
机械工业出版社
. 机械工业出版社
6. 《电力拖动自动控制系统-运动控制系统》陈伯时
7. 《一种高精度实时电机转速测量新方法》马全权,强盛齐齐哈尔大学学报8. 《. 传感器原理及应用. 北京航空航天大学出版社》王雪文. 张志勇9. 《模拟集成电路应用. 西北工业大学出版社》王秀杰,张畴先
成都电子机械高等专科学校附录:程序代码Main
#include#include"lcd1602.h" #include"ds1302.h"
uchar phase; uchar second ; uchar change ; uchar state ; uchar speed=40;
uchar speed_up,slow_down;
uchar mot_spee1[]={"The Speed is "};uchar mot_spee2[]={"000r/min"};
//uchar four_single[]={0x01,0x02,0x04,0x08};
uchar four_double[]={0x0c,0x06,0x03,0x09};
void init_break(){
TMOD=0x11;TH0=0x00;TL0=0x00;
TH1=(65536-5000)/256;TL1=(65536-5000)%256;ET0=1;ET1=1;IT0=1;EX0=1;IT1=1;EX1=1;EA=1;TR0=1;TR1=1;}
void main(){
init_break();lcd_init();set_time();while(1)
电气与电子工程系毕业设计论文
//电机4相的变换//时间的计数
//设置电机转速的中断标志//中断源的选择状态//电机初始的速度//电机的加速与减速
//单4拍模式//双4拍模式
//中断初始化函数
//定时5ms
{
read_time();display();}}
void int0()interrupt0{
state=P1;}
void int1()interrupt2{
uchar value ; //电机的转速value=60000000/(second*65536+TH0*256+TL0)+1;second=0;TH0=0x00;TL0=0x00;
mot_spee2[4]=value/100+'0';mot_spee2[5]=value%100/10+'0';mot_spee2[6]=value%100%10+'0';}
void timer()interrupt1{
second++;}
void timer1()interrupt3{
TH1=(65536-5000)/256;TL1=(65536-5000)%256;change++;
if(change>=speed){
change=0;
P2=four_double[phase];//P2=single_four[phase];
phase=++phase&0x03;}}
//定时5ms
//电机以双4拍的模式转动//电机以单4拍的模式转动
Ds1302
#include
#include#include"ds1302.h"
extern uchar clk_xian1[];//存放时钟的数据extern uchar clk_xian2[];uchar time[]={12,3,28,17,46,30};
uchar write_add[]={0x8c,0x88,0x86,0x84,0x82,0x80};//年月日时分秒的地址(写)uchar read_add[]={0x8d,0x89,0x87,0x85,0x83,0x81};//年月日时分秒的地址(读)void write_byte(uchardat) {
uchar i;
for(i=0;i
clk=0;
io=dat&0x01;dat=dat>>1;clk=1;}}
void write(ucharadd,uchar date) {
rst=0;_nop_();clk=0;_nop_();rst=1;_nop_();
write_byte(add);write_byte(date);rst=0;_nop_();clk=1;io=1;}
uchar read(ucharaddr) {
uchar i,temp; rst=0;
//从数据的低位开始写
_nop_();clk=0;_nop_();rst=1;_nop_();
write_byte(addr);for(i=0;i
clk=0;
temp=temp>>1;if(io)
temp=temp|0x80;clk=1;}rst=0;_nop_();//clk=0;_nop_();//clk=1;_nop_();//
io=0;_nop_();io=1;
return temp;
}
void set_time(){
uchar i,j;
for(i=0;i
j=time[i]/10;
time[i]=time[i]%10;time[i]=time[i]+j*16;}
write(0x8e,0x00);for(i=0;i
write(write_add[i],time[i]);}
write(0x8e,0x80);}
void read_time()
//数据转换成BCD 码
//去除写保护
//加上写保护
{
uchar i;
for(i=0;i
time[i]=read(read_add[i]);}
clk_xian1[7]=time[0]%16+'0';clk_xian1[6]=time[0]/16+'0';clk_xian1[10]=time[1]%16+'0';clk_xian1[9]=time[1]/16+'0';clk_xian1[13]=time[2]%16+'0';clk_xian1[12]=time[2]/16+'0';clk_xian2[7]=time[3]%16+'0';clk_xian2[6]=time[3]/16+'0';clk_xian2[10]=time[4]%16+'0';clk_xian2[9]=time[4]/16+'0';clk_xian2[13]=time[5]%16+'0';clk_xian2[12]=time[5]/16+'0';
}
Lcd1632
#include
#include"lcd1602.h"
extern uchar state ; extern uchar speed ;
extern uchar speed_up,slow_down;extern uchar mot_spee1[];extern uchar mot_spee2[];uchar *t1,*t2;
uchar clk_xian1[]="Date:00-00-00"; uchar clk_xian2[]="Time:00:00:00"; void delay(uchari) {
uchar j,m;
for(j=0;j
for(m=0;m
}
//时钟数据送入液晶
//电机初始的速度//电机的加速与减速
//换屏显示//初始时钟
void write_com(ucharcom) {
rs=0;rw=0;P0=com;delay(5);e=1;delay(5);e=0;}
void write_data(uchardate) {
rs=1;rw=0;P0=date;delay(5);e=1;delay(5);e=0;}
void lcd_init(){
write_com(0x38);write_com(0x06);write_com(0x0c);write_com(0x01);}
void basic_display(){
uchar i;
write_com(0x80);for(i=0;*t1!=0;i++){
write_data(*t1);t1++;}
write_com(0xc0);for(i=0;*t2!=0;i++){
write_data(*t2);t2++;
成都电子机械高等专科学校电气与电子工程系毕业设计论文
}}
void display(){
switch(state){
case 0:t1=&mot_spee1;t2=&mot_spee2;break; case 1:t1=&clk_xian1;t2=&clk_xian2;break; case 2:speed_up=1;state=0;case 3:slow_down=1;state=0;}
if(speed_up){
speed--; speed_up=0;}
if(slow_down){
speed++;
slow_down=0;}
basic_display();}
break; break; //电机的加速处理
//电机的减速处理