基于单片机的电机转速测量系统设计_第1页
基于单片机的电机转速测量系统设计_第2页
基于单片机的电机转速测量系统设计_第3页
基于单片机的电机转速测量系统设计_第4页
基于单片机的电机转速测量系统设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机课程设计题 目 基于单片机的电机转速测量系统设计 学院名称 电气工程学院 指导教师 * 班 级 电力*班 学 号 * 学生姓名 * 2012年1 月5 日摘 要在工程实践中,经常会遇到各种需要测量转速的场合,测量转速的方法分为模拟式和数字式两种。模拟式采用测速发电机为检测元件,得到的信号是模拟量。数字式通常采用光电编码器,霍尔元件等为检测元件,得到的信号是脉冲信号。随着微型计算机的广泛应用,特别是高性能价格比的单片机的出现,转速测量普遍采用以单片机为核心的数字式测量方法。本设计主要用STC89C51作为控制核心,由光电传感器、1620A-1液晶显示屏,直流电机构成。详细介绍了单片机的测量转速系统及单片机控制转速系统。充分发挥了单片机的性能。本文重点是测量速度并显示在液晶屏上。最后系统调试,通过仿真软件proteus验证方案的正确性后,再进行实物的测试,经过不断的调试最终得出正确的结果。关键字:STC89C51(单片机); 转速; 传感器;控制引言11 系统方案提出和论证22 系统功能概述32.1 光电传感器简介42.2 系统要求及主要内容52.3 系统技术指标53 系统总体设计63.1 硬件电路设计思路63.2 软件设计思路64 硬件电路设计74.1 单片机模块74.1.1 处理执行元件84.1.2 时钟电路114.1.3 复位电路124.1.4 显示电路135软件设计165.1 单片机转速程序设计思路及过程165.1.1 单片机程序设计思路175.1.2 单片机转速计算程序184.2 程序设计194.3 C语言程序206 系统调试276.1 硬件调试276.2 软件调试286.3 综合调试306.4 故障分析与解决方案307 结论与经验31参考文献32致 谢33附 录34引言 智能化转速测量可以对电机的转速进行测量,电机在运行的过程中,需要对其平稳性进行监测,适时对转速的测量有效地可以反映电机的状况。 本系统主要由传感器,单片机STC89C51构成。可以对转速进行测量,测量的转速精度较高,实现对电机转速的测量。 单片机的英文名称是Micro Controller unit,缩写为MCU,又称为微控制器,它是一种面向控制的大规模集成电路芯片。它具有功能强、体积小、可靠性高、应用简单灵活,因而使用非常广泛,有力地推动各行业的技术发展和更新换代。 本文首先在第二章绪论介绍了此系统的功能、技术指标以及主要内容等;在第三章论述了总体设计过程,确定了技术指标及器件的选择;第四章着重描述了系统硬件电路设计、硬件设计框图及所使用的各种芯片功能与特性;在第四章中重点剖析了软件设计的过程;最后在第六章中具体论述单片机、电平转换电路、通信的处理及调试。由于本人水平有限,加之时间仓促,论文中难免会有错误和不足之外,不够理想、许多方面还需要继续完善和改进。在此特别感谢我的指导老师*老师的大力指导。 1 系统方案提出和论证 转速测量的方案选择一般要考虑传感器的结构、安装以及测速范围与环境条件等方面的适用性;再就是二次仪表的要求,出了显示以外还有控制、通讯和远传方面的要求。本说明书中给出两种转速测量方案,经过我和队友查资料、构思和自己的设计,总体电路我们有两套设计方案,部分重要模块也考虑了其它设计方法,经过分析,从实现难度、熟练程度、器件用量等方面综合考虑,我们才最终选择了一个方案。下面就看下我们对两套设计方案的简要说明。 方案一:霍尔传感器测量方案霍尔传感器是利用霍尔效应进行工作,其核心元件是根据霍尔效应原理制成的霍尔元件。本文介绍一种泵驱动轴的转速采用霍尔转速传感器测量。霍尔转速传感器的结构原理图如图3.8。 图3.8霍尔转速传感器的结构图 传感器的定子上有2个互相垂直的绕组A和B相连,在绕组的中心线上粘有霍尔片HA和HB,转子为永久磁钢,霍尔元件HA和HB的激磁电机分别与绕组A和B相连,它们的霍尔电极串联作为传感的输出。缺点:采用霍尔传感器在信号采样的时候,会出现采样不精确,因为它是靠磁性感应才采集脉冲的,使用时间长了会出现磁性变小,影响脉冲的采样精度。 方案二:光电传感器 整个测量系统转子由一直流调速电机驱动,可实现大转速范围的无级调速。转速信号由光电传感器拾取,使用时应在转子上做好光电标记,具体办法可以是:将转子表面擦干净后用黑漆(或者黑色胶布)全部涂黑,再将一块反光材料贴在其上作为光电标记,然后将光电传感器(光电头)固定在正对光电标记的某一适当距离处。光电投采用低功耗亮度LED,光源为高可靠性可见光,无论黑夜还是白天,或者是背景光强、有大范围改变都不影响接收效果。光电头包含有前置电路,输出0-5V的脉冲信号。接到单片机89C51的相应管脚上,通过89C51内部定时器/计数器T0、T1及相应的程序设计,组成一个数字式转速测量系统。优点这种方案使用光电传感器具有采用精确,采样速度快、范围广的特点。综上所述,方案二使用的光电传感器来作为设计的最佳方案。2 系统功能概述 功能: 系统主要实现功能是:STC89C51单片机接收光电传感器传来的脉冲信号,单片机根据外部中断,以及内部定时器进行记数计算出电机转速送到LED显示,并通过输出PWM波控制电机的转速。记录各时段的转速,画出V-T坐标图。组成及框图: 传感器电路、转速测量、液晶显示、PWM控制电路等将在以下章节作详细地设计。系统硬件电路如图2.1。输出PWM单 片 机 AT89C51传感器 驱动电路直流电机液晶显示图2.1 系统硬件电路 应用:从实用的角度看,评价一个系统实用价值的重要标准,就是这个系统对社会生活和科技观念有多大的贡献。转速测量系统具有大范围、高精度等优点、测量速度快,这种系统将会有良好的应用。2.1 光电传感器简介光电传感器是采用光电元件作为检测元件的传感器。它首先把被测量的变化转换成光信号的变化,然后借助光电元件进一步将光信号转换成电信号。光电传感器一般由光源、光学通路和光电元件三部分组成。光电检测方法具有精度高、反应快、非接触等优点,而且可测参数多,传感器的结构简单,形式灵活多样,因此,光电式传感器在检测和控制中应用非常广泛。光电传感器是各种光电检测系统中实现光电转换的关键元件,它是把光信号(红外、可见及紫外光辐射)转变成为电信号的器件。光电式传感器是以光电器件作为转换元件的传感器。它可用于检测直接引起光量变化的非电量,如光强、光照度、辐射测温、气体成分分析等;也可用来检测能转换成光量变化的其他非电量,如零件直径、表面粗糙度、应变、位移、振动、速度、加速度,以及物体的形状、工作状态的识别等。光电式传感器具有非接触、响应快、性能可靠等特点,因此在工业自动化装置和机器人中获得广泛应用。近年来,新的光电器件不断涌现,特别是CCD图像传感器的诞生,为光电传感器的进一步应用开创了新的一页。本设计仿真中的直流电机为带光电传感器的电机。图2.1光电传感器工作电路图2.2 系统要求及主要内容 将光电传感器产生的脉冲信号输出入到单片机的定时器0口,单片机工作在内部定时器工作方式0,对周期信号进行内部记数,调用计算公式算出转速,调用显示程序显示在液晶屏上。 主要内容: (1)单片机部分主要完成电机转速的测量 (2)LED部分主要是把转速显示出来,显示范围0-6000r/min (3) 输出PWM波控制电机转速 (4) 传感器电路模块2.3 系统技术指标系统主要完成以下功能:测量系统:(1) 设计并制作单片机的转速测量的硬件系统;(2) 用C语言完成转速测量的软件系统;(3) 要求把转速显示在液晶屏;(4) 可以自己行控制电机在一个稳定的转速上;根据系统要实现的功能以及要求,要实现单片机的转速测量主要是各个模块的设计,定时器记数功能、以及LED驱动。单片机可通过编程控制外围部件,能实现较高的自动化程度。以它为系统核心的控制模块可实现主从控制,完成预定的任务。3 系统总体设计3.1 硬件电路设计思路硬件设计的任务是根据总体设计要求,在选择的机型的基础上,具体确定系统中所要使用的元器件,设计出系统的原理框图、电路原理图。89C51单片机通过T0输入传感器的脉冲信号,中断0口输出PWM波,P1口、P2口接LED动态显示。转速测量部分的硬件设计思路:本次设计单片机部分的硬件框图如 图2.1所示。CPU执行单元显示电路复位电路 时钟电路 图3.1 单片机部分硬件框图 具体详细的叙述将在下面的章节中逐一介绍。3.2 软件设计思路 软件需要解决的是定时器0的记数,由于测量的转速范围大,所以低速和高速都要考虑在内,关键在于一个四字节除三字节程序的实现。显示部分、需要有一个二进制到十进制的转化程序,以及转换成非压缩BCD 的程序后、才能进行调用查表程序送到显示。 软件工作流程:光电传感器利用光电电效应产生一周期脉冲向单片机的T0计数器(P3.4)口发送脉冲信号,定时器工作在内部定时,TH0、TL0设定初值为0,作为除数的低两字节,利用软件记数器、定时器0中断的次数作为除数高字节。中断完毕读取内部记数值作为除数,调用除法程序计算转速,再对二进制数进行一系列变换后调用查表显示程序,显示在液晶屏上。 转速部分软件设计思路: STC89C51单片机的P3.4口接收传感器的信号。主要编写两个定时中断服务程序TO、T1,读取记数值的三个字节,并再次清0记数初值以便下次的记数和计算。后调用查表程序送显示。4 硬件电路设计 硬件的功能由总体设计所规定,硬件设计的任务是根据总体设计要求,在选择的机型的基础上,具体确定系统中所要使用的元器件,设计出系统的电路原理图,必要时做一些部件实验,以确定电路图的正确性,以及工艺结构的设计加工、印制板的制作、样机的组装等。 整个单片机测量转速系统为单片机控制模块、光电传感器模块、发送模块,各个模块都承担着各自的任务。 设计单片机模块,考虑到单片机本身的外围电路较多,所以在单片机模块方面需要极为小心。在整个电路设计时要考虑电平转换电路,具体每一部分的设计将在以下章节中详细分析。4.1 单片机模块根据系统功能要求以及单片机硬件电路设计思路(如图3.1)对单片机模块进行设计,要使单片机准确的测量电机转速,并且使测出的数据能显示出来,所以整个单片机部分分为传感器电路、时钟电路、复位电路、执行元件以及显示电路五个部分。4.1.1 处理执行元件单片机我们采用STC89C51(其引脚图如图4.1),相较于INTEL公司的8051它本身带有一定的优点。STC89C51是一种带4K字节闪烁可编程可擦除只读存贮器的低电压,高性能CMOS 8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的STC89C51是一种高效微控制器, AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。图4.1 STC89C51引脚图主要特性:与MCS-51 兼容4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源 可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路管脚说明:(1)VCC:供电电压;(2)GND:接地;(3)P0口:P0口为一个8位漏极开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。(4)P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。(5)P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。(6)P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为STC89C51的一些特殊功能口,如下表3.1所示:(7)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。(8)ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。表3.1 P3口的第二功能引 脚第二功能信 号 名 称P3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7RXDTXDINT0INT1T0T1WRRD串行数据接收串行数据发送外部中断0请求外部中断1请求定时器/计数器0计数输入定时器/计数器1计数输入外部RAM写选通外部RAM读选通P3口同时为闪烁编程和编程校验接收一些控制信号。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 (9)/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 (10)/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。(11)XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。(12) XTAL2:来自反向振荡器的输出。振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石英振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。芯片擦除:整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,STC89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。4.1.2 时钟电路时钟电路是计算机的心脏,它控制着计算机的工作节奏。MCS-51单片机允许的时钟频率是因型号而异的典型值为12MHZMCS-51内部都有一个反相放大器,XTAL1、XTAL2分别为反相放大器输入和输出端,外接定时反馈元件以后就组成振荡器,产生时钟送至单片机内部的各个部件。STC89C51是属于CMOS8位微处理器,它的时钟电路在结构上有别于NMOS型的单片机。CMOS型单片机内部(如STC89C51)有一个可控的负反馈反相放大器,外接晶振(或陶瓷谐振器)和电容组成振荡器,图3.2为CMOS型单片机时钟电路框图。振荡器工作受/PD端控制,由软件置“1”PD(即特殊功能寄存器PCON.1)使/PD0,振荡器停止工作,整个单片机也就停止工作,以达到节电目的。清“0”PD,使振荡器工作产生时钟,单片机便正常运行。图中SYS为晶振或陶瓷谐振器,振荡器产生的时钟频率主要由SYS参数确定(晶振上标明的频率)。电容C1和C2的作用有两个:其一是使振荡器起振,其二是对振荡器的频率f起微调作用(C1、C2大,f变小),其典型值为30pF。图4.2 CMOS型单片机时钟电路框图4.1.3 复位电路计算机在启动运行时都需要复位,使中央处理器CPU和系统中的其它部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51单片机有一个复位引脚RST,它是史密特触发输入(对于CHMOS单片机,RST引脚的内部有一个拉低电阻),当振荡器起振后该引脚上出现2个机器周期(即24个时钟周期)以上的高电平,使器件复位,只要RST保持高电平,MCS-51保持复位状态。此时ALE、PSEN、P0、P1、P2、P3口都 输出高电平。RST变为低电平后,退出复位,CPU从初始状态开始工作。单片机采用的复位方式是自动复位方式。对于MOS(STC89C51)单片机只要接一个电容至VCC即可(见图3.3)。在加电瞬间,电容通过电阻充电,就在RST端出现一定时间的高电平,只要高电平时间足够长,就可以使MCS-51有效的复位。RST端在加电时应保持的高电平时间包括VCC的上升时间和振荡器起振的时间,Vss上升时间若为10ms,振荡器起振的时间和频率有关。10MHZ时约为1ms,1MHZ时约为10ms,所以一般为了可靠的复位,RST在上电应保持20ms以上的高电平。RC时间常数越大,上电RST端保持高电平的时间越长。若复位电路失效,加电后CPU从一个随机的状态开始工作,系统就不能正常运转。图4.3 上电复位电路4.1.4 显示电路 4.4 LCD1602液晶屏(1)1602LCD主要技术参数 显示容量为162个字符; 芯片工作电压为4.55.5V; 工作电流为2.0mA(5.0V); 模块最佳工作电压为5.0V; 字符尺寸为2.954.35(WH)mm。(2)接口,信号说明1602LCD采用标准的14引脚(无背光)或16引脚(带背光)接口,各引脚接口说明见表 1602液晶接口引脚定义编号符号引脚说明编号符号引脚说明1VSS电源地9D2Date I/O2VDD电源正极10D3Date I/O3VL液晶显示偏压信号11D4Date I/O4RS数据/命令选择端(V/L)12D5Date I/O5R/W读/写选择端(H/L)13D6Date I/O6E使能信号14D7Date I/O7D0Date I/O15BLA背光源正极8D1Date I/O16BLK背光源负极1、2 组电源 一组是模块的电源 一组是背光板的电源 均为5V 供电。2、VL 是调节对比度的引脚调节此脚上的电压可以改变黑白对比度3、RS 是很多液晶上都有的引脚 是命令/数据选择引脚 该脚电平为高时表示将进行数据操作;为低时表示进行命令操作。4、RW 也是很多液晶上都有的引脚 是读写选择端 该脚电平为高是表示要对液晶进行读操作;为低时表示要进行写操作。5、E 同样很多液晶模块有此引脚 通常在总线上信号稳定后给一正脉冲通知把数据读走,在此脚为高电平的时候总线不允许变化。6、D0D7 8 位双向并行总线,用来传送命令和数据。7、BLA是背光源正极,BLK是背光源负极。(3)控制器接口说明 基本操作时序见表 基本操作时序读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数据输入RS=H,R/W=L,D0D7=数据,E=高脉冲输出无对此液晶操作主要有以下几种方法。1 写命令(包括但不限于初始化、调节显示位置、清除显示)2 写数据 (把一个字符的ASC 码写入液晶使其显示)3 读忙信号(液晶乃低速设备,每次操作前应该测试忙信号,确定其不忙时再操作)(4)1602LCD的指令码(命令码)此液晶上电的时候需要初始化 典型的指令码是38H,也就是上电的时候需要 调用 void write_cmd(unsigned char command)这个函数写指令码,用法是write_cmd(0x38);执行完这个函数可以把液晶初始化成16x2 显示5x7 的点阵8 位总线接口。以下指令码用法相同。此液晶支持的指令码有 指令码功能00111000设置162显示,57点陈,8位数据接口解释:就是0x38 的命令 指令码功能00001DCBD=1 开显示;D=0 关显示C=1 显示光标;C=0 不显示光标B=1 光标闪烁;B=0 光标不显示000001NSN=1 当读或写一个字符后地址指针加一,且光标加一N=0 当读或写一个字符后地址指针减一,且光标减一S=1 当写一个字符,整屏显示左移(N=1) 或右移(N=0),以得到光标不移动而屏幕移动的效果。S=1 当写一个字符,整屏显示不移动解释:第一行指令主要能完成的功能是控制液晶显示否,光标显示否,光标闪烁否?共有以下8 种指令0000100008H关液晶显示 光标不闪烁 不显示光标位置0000100109H关液晶显示 光标不闪烁 显示光标位置000010100AH关液晶显示 光标不闪烁 不显示光标位置000010110BH关液晶显示 光标不闪烁 显示光标位置000011000CH开液晶显示 光标不闪烁 不显示光标位置000011010DH开液晶显示 光标不闪烁 显示光标位置000011100EH开液晶显示 光标不闪烁 不显示光标位置000011110FH开液晶显示 光标不闪烁 显示光标位置解释:第二行指令主要能完成的功能是写完字符光标或屏幕移动方向指令码功能80H+地址码(0-27H,40H-67H)设置数据地址指针解释:用该指令码可以把光标移动到想要的位置这是虚拟的液晶显示图 表示2 行16 列显示 方框中的数字表示当前位置的指针80H81H82H83H84H85H86H87H88H89H8AH8BH8CH8DH8EH8FHC0HC1HC2HC3HC4HC5HC6HC7HC8HC9HCAHCBHCCHCDHCEHCFH例如: 只要调用write_cmd(0x82) ;函数就能把光标挪到第1 行第3 列的位置指令码功能01H显示清屏:1.数据指针清零 2.所有显示清零02H显示回车:1数据指针清零5软件设计 本章重点阐述测量转速的汇编语言。以及软件设计的过程。 软件需要解决的是单片机中断服务程序的设计、计算程序的设计、显示部分的程序设计以及在我们这里非重点介绍的通信程序设计。5.1 单片机转速程序设计思路及过程单片机测量转速可以分为若干模块,然后在主程序中调用各个模块, 流程图如图5.1所示。开始初 始 化计算程序 数值转换 字符调用显 示 程 序返 回图 5.1主程序流程图5.1.1 单片机程序设计思路计算转速公式: n=N/MTc (r/min)n 转速、单位:转/分钟N 采样时间内所计脉冲个数Tc 采样时间、单位:分钟M 每旋转一周所产生的脉冲数(通常指测速码盘的齿数)如果M=60,那么一秒钟内产生的脉冲个数N就是转速n,即:n= =N通常M为60其中,N是内部定时器的计数值,为三字节,分别由TH0,TL0,VTT构成;Tc为时基,由于采用11.0592M的晶振,所以Tc不在是1um,而是12M/11.0592M约为1.08um,带入上面公式,即可得到转速的精确计算公式: N=60*/12N=/N再将化为二进制存入单片机的内存单元。下面我们将介绍除数是如何获得的:单片机的转速测量完成,定时器T0作为内部定时器,外部中断来的时候读取TH0,TL0,并同时清零TH0、TL0,使定时器再次循环计内部脉冲。此外,对于低速情况下,我们还要设定一个软件计数器VTT,当外部中断还没来而内部定时器已经溢出,产生定时器0中断时,增加VTT,作为三字节中的高字节。三字节组成除数,上面的常数为四字节,所以计算程序实际上就是调用一个四字节除三字节商为两字节(最高转速6000r/min足够)的程序。为液晶屏显示出来,需将二进制转换为十进制,在将十进制转换为十六进制,才能调用查表程序,最后送显示。5.1.2 单片机转速计算程序由于本次设计的系统要实现的功能是将光电传感器的信号送到单片机的外部中断口,再对周期方波进行内部计数,调用计算程序把转速测出来。可以说是核心部分,流程图如图4.2所示:开 始被除数初始化读取定时值调用除法程序返 回 图5.2 计算程序流程图计算程序中又再次调用了除法程序,这里的除法为四字节除三字节商为两字节,除法的程序的编程思想可以和手工计算的除法相似,比较减法的思想,流程图如图5.3所示具体程序见附录。5.2 程序设计根据以上设计思路和各个模块的流程图即可编写出本次课程设计的程序,注意其中各个模块间的参数传递以及堆栈指针等问题,程序设计的任务即可完成,写出初始的程序,再进行上机调试,这些我们将具体在下章中加以详细叙述。开始电机转速是否在设定转速范围内给电机的转速赋初值控制PWM计算速度标志是否为1计算速度是否T0继续计数否是调用显示图5.3显示程序流程图5.3 C语言程序#include#define uchar unsigned char#define uint unsigned intsbit input=p32;sbit E=p27; /1602使能引脚sbit RW=p26; /1602读写引脚sbit RS=P25; /1602数据/命令选择引脚sbit key1=p34;sbit pwm=p10;unsigned char cycle; /定义周期 该数字X基准定时时间 如果是10 则周期是100.1ms unsigned char pwm_on; /定义高电平时间uchar count=0;int count_2=0;int sudu=0;/*名称:delay()*功能:延时,延时时间为10ms*del*输入:del*输出:无/void delay() int i ,j; for(i=0;i=100;i+) for(j=0;j=20;j+);/*名称:enable(uchar del)*功能:1602命令函数*输入:输入的命令值*输出:无/void enable(uchar del)P0=del;RS=0;RW=0;E=0;delay();E=1;delay();/*名称:write(uchar del)*功能:1602写数据函数*输入:需要写入1602的数据*输出:无/void wrote(uchar del) P0=del; RS=1; RW=0; E=0; delay(); E=1; delay();/*名称:L1602_init()*功能:1602初始化*输入:无*输出:无/void L1602_init(void) enable(0x01); enable(0x38); enable(0x0c); enable(0x06); enable(0xd0);/*名称:L1602_char(uchar hang ,uchar lie ,char sign)*功能:改变液晶中某位的值,如果要让第一行,第五个字符显示b,调用该函数如下 L1602_char(1,5,b)*输入:行,列,需要输入1602的数据*输出:无/ void L1602_char(uchar hang ,uchar lie ,char sign) uchar a; if(hang =1) a=0x80; if(hang =2) a=oxc0; a=a+lie-1; enable(a); write(sign);/*名称:1602_string(uchar hang ,uchar lie ,uchar *p)*功能:改变液晶屏中某位的值,如果要让第一行,第五个字符开始显示 ab cd ef,调用该函数如下 L1602-string(1,5,ab cd ef;)*输入:行,列,需要输入1602的数据*输出:无/void L1602-string(uchar hang, uchar lie,uchar *p) uchar a; if (hang=1) a = 0x80; if (hang=2) a = 0xc0; a = a + lie - 1 enable(a); while(1) if (*p = 0) break; write(*p); p+; /*名称:outside-Init()*功能:外部中断0 的初始化*输入:无*输出:无/void outside-Init(void) EX0 = 1; /开外部中断0 IT0 = 1; /负边沿触发 EA = 1; /开总中断/*名称:Outside-Init()*功能:外部中断0的中断处理*输入:无*输出:无/void Outside-Init(void) interrupt 0 EX0 = 0; if (input = 0 ) /对按键进行抗干扰处理 count+; /TR0=1;EX0 = 1;/*名称:main()*功能:外部中断实验主程序*输入:无*输出:无/Void main (void) int a, b, c, d; L1602-init(); outside-init(); TMOD |=0x01; /定时器设置 1ms in 12M crystal TH0=(65536-1000)/256; TL0=(65536-1000)%256; /定时1ms IE=0x83; /打开中断 TR0=1; CYCLE=10; /时间可以调整 这个是10步调整 周期100ms 8位 PWM 就是256步 PWM-ON=6; while(1) if(!KEY1) delay(); if(!KEY1) PWM-ON+; if (PWM-ON=9)PWM-ON=0; a = sude/1000; b = (sudu - a*1000)/100; c = (sudu - a*1000- b*100)/10; d = sudu -a*1000- b*100 -c*10; L1602-char(1,5,a+0x30); L1602-char(1,6,b+0x30); L1602-char(1,7,c+0x30); L1602-char(1,8,d+0x30); void time(void) interrupt 1 using 1 static unsigned char count-1; TH0=(65536-1000)/256; TL0=(65536-1000)%256; /定时1ms if (count-1=PWM-ON ) PWM = 1; /灯灭 count-1+;if (count-1 = CYCLE) count-1 = 0; count-2+; if(PWM-ON!=0) /如果左右时间是0 保持原来状态 PWM = 0; /灯亮 if (count-2 = 10) count-2 = 0; sudu = Count; count = 0; 6 系统调试电路调试是整个系统功能否实现的关键步骤,我们将整个调试过程分为三大部分:硬件调试、软件调试和综合调试。6.1 硬件调试硬件调试主要是针对我的转速测量系统的单片机硬件电路分别进行调试。这一部分硬件调试主要分成两大块:上电前的调试和上电后的调试。上电前的调试:在上电前,我们必须确保电路中不存在断路或短路情况,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。在这部分调试中主要使用的工具是万用表,用来完成检测电路中是否存在虚焊或者短路情况等。特别是数码管的连接部分,proteus制作的原理图与实际的封装不一样,需要我们注意连线。有些在电路板上没法连接的线路,要用短接线把接好,对照着原理图部分,一部分一部分地用万用表测量,注意焊点之间,确保焊点没有短接在一起,同时注意焊点的美观,确保没有开路以及短路的现象出现。上电后的调试:在确保硬件电路正常,无异常情况(断路或短路)方可上电调试,上电调试的目的是检验电路是否接错,同时还要检验原理是否正确,在本次课程设计中,上电调试主要是转速测量系统的单片机控制部分、数码管点亮部分、光电传感器部分和直流电机转动部分的硬件调试。(1)单片机控制部分硬件调试:这一部分调试主要是检查时钟电路、复位电路是否接对,单片机的电源以及地是否接好,以及其他的一些管脚的接法。看单片机通电后能否可以正常工作等这一系列问题。(2)数码管LED电路调试:由于数码管采用的是动态扫描的方式点亮的。数码管的公共端(COM)接在三极管驱动再接到单片机的P2口作为位选信号,段选是接在P1口。电路上电检查三极管是否接上电源和地让其正常工作。在这一前提下,查看数码管能否点亮。只需要接仿真机上编写一个小程序让5位LED全亮,或者让它们其中的某位点亮,也可以显示不同的数字,根据要求给P1口,P2口分别赋值。即可检查数码管的硬件电路是否正确,即可判断显示驱动电路整个完整,首先排除这里的故障。(3)光电管部分的电路调试:用万用表检测光电管输出端口的电压,分别测光电管被遮盖和未被遮盖的情况。检测这两种的情况下,输出的电压是否存在较大的压差,以排除光电传感器的故障。(4)直流电机的测试:将直流电机直接加在电源的正负极,检测电机是否正常转动,排除电机故障。6.2 软件调试单片机程序调试思路:单片机部分调试工作的完成主要应用keil c软件来完成,这一部分工作首先将转速测量系统中的各个模块计算程序中的除法程序、双字节的二-十进制数制转换程序,压缩BCD码十进制数转换为非压缩BCD码的程序以及显示部分程序调试好,不断调试,不断修改直到正确为止。keilc软件是一种非常实用的多窗口编辑、调试软件。 keilc软件全面支持汇编语言,C语言。调试主要方法和技巧:通常一个调试程序应该具备至少四种性能:跟踪、断点、查看变量、更改数值。(1)跟踪调试调试应用程序所提供的重要性能也许就是跟踪应用程序。跟踪应用程序使用户能够在运行应用程序时,看到PC指针在应用源代码程序中的确切位置,keilc提供以下方法对程序的执行进行跟踪。跟踪型单步执行一条源语句程序。但是,如果调用一函数,则进入函数中,再执行函数的第一条源语句行前停止。通过型单步仅执行下一条源语句程序,然后又停止。如果是调用一函数,运行完整个函数并停止在函数返回处。(2)断点调试如果已知程序中某块代码实际运行正常的情况下,仍用跟踪调试方法,将大大浪费时间,而且很枯燥,因此调试中第二个重要工具是在源代码中预定处设置断点,大多数调试程序通过使用断点中止程序执行。注意:如果用户调试高级语言,因为系统要占用2个断点,所以可设置的断点数为最大断点个数减2。keilc调试软件还提供一次性断点:执行到光标所在行。如果用户按热键F4,调试程序继续执行程序代码,直到它到达光标行处或调试程序遇到另一个断点。(3)查看变量显然,通过一系列指令查看应用程序,了解导致某一错误的执行也是一种非常有效的方法。keilc软件提供了以下几种方法对变量进行查看。 通过添加观察项菜单可以将用户希望观察的变量添加到观察窗口中,长期进行观察。用户程序在单步或断点停下时,将更新变量的取值。 用户可以直接移动鼠标到相应的变量名上,点击鼠标左键,将出现一个提示窗口,显示这个变量的当前值。 用户还可以打开程序空间窗口、内部数据窗口、外部数据窗口进行数据块观察。(4)更改数值 如果用户在调试过程中了解到变量的内容(超值、未定义等)会对程序性能产生影响或引起异常时,立即更改变量的内容是很有效的方法,以确保该值在正确范围内不会产生错误。keilc软件提供一系列更改变量数值的方法,以便用户能检查程序对整个变量值范围的反应,而无需为设置每个值而重新加载调试。在更改对话框中用户输入要更改的取值,点击确定按钮。用户可以在输入框中输入十六进制或十进制数据。程序调试过程: 整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各个子程序模块进行分别调试。首先、要对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论