基于51单片机的步进电机控制_第1页
基于51单片机的步进电机控制_第2页
基于51单片机的步进电机控制_第3页
基于51单片机的步进电机控制_第4页
基于51单片机的步进电机控制_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

本科毕业设计(论文)基于51单片机的步进电机控制TheControlOfSteppingMotorBasedOn51SingleChipMicrocomputer基于51单片机的步进电机控制摘要:进电动机是一种将电脉冲信号转换线位移或成角位移的精密执行元件,具有快速停止和起动的特点。其指令脉冲和驱动速度能严格同步,具有较高的重复定位精度,并能实现平滑速度调节和正反转。它的步距和运行速度不受电源电压波动及负载的影响,因而被广泛应用于速度控制、数模转换和位置控制系统。本文在分析了斩波恒流细分驱动原理、步进电机的驱动特性和混合式步进电机驱动芯片ULN2003AN的性能、结构的基础上,结合AT89C52单片机,设计出了混合式步进电机驱动电路。关键词:步进电机;AT89C52单片机;ULN2003AN驱动.中图分类号:TP271TheControlOfSteppingMotorBasedOn51SingleChipMicrocomputerAbstract:Steppingmotorsisakindofwillconvertangulardisplacementorelectricalimpulsessignallinedisplacementofprecisionactuator,havefaststopandstartcharacteristics.Thedrivingspeedandinstructionspulsecanstrictlysynchronization,whichhashighrepositioningprecision,andcanrealizethepositive&negativeandsmoothadjustablespeed.Itsoperationspeedandstepdistancefromsupplyvoltagefluctuationandloadeffect,whichhavebeenwidelyappliedinanalog-to-digitalconversion,speedcontrolandthepositioncontrolsystem.Basedontheanalysisofthesteppermotordrivingcharacteristics,achopperconstant-currentsubdivideddrivingprincipleandhybridsteppingmotordrivechipULN2003ANtheperformance,structureinthefoundation,theunionAT89C52singlechipcomputer,designedahybridsteppingmotordrivercircuit.Keywords:Steppingmotor;AT89C52singlechipcomputer;ULN2003ANdriver.Classification:TP271 目次摘要 I目次 Ⅲ1绪论 11.1课题研究的目的和意义 11.2国内外研究概况 11.3课题主要研究内容 22步进电机原理介绍 32.3步进电机的概述 32.1步进电机的工作原理 32.2步进电机24BYJ48的相关电气参数 43总体设计思路 53.1方案与设计思路 53.2总框图 54硬件选型与硬件电路的设计 74.1步进电机的驱动 74.2单片机的选取 74.3转速信号采集方案 84.4测速模块 84.5液晶LCD1602显示模块 94.6按键电路设计 104.7时钟电路 115程序设计 125.1主程序 125.2LCD及档位显示程序 135.3正反转流程图 145.4启动与停止流程图 156调试与故障分析 166.1软件编写及调试 166.2调试过程及相关显示结果 166.3故障分析及解决方法 187总结 19参考文献 20附件A 21附件B 22附件C 23附件D 24学位论文数据集 331绪论1.1课题研究的目的和意义1.1.1研究的目的在现代工业和经济生活中,随着工业自动化的发展,电机的应用也越来越广泛,日益成为我们日常生活中不可缺少的一部分,无论是交通工具,还是家用电器都离不开电机的运转[1]。步进电机作为电机的一种,可以靠开路控制做精确的定位,在一些重要的领域有着普通电机不可替代的作用[1]。普遍应用于电脑的外设及工业生产的自动化机具设备中,如NC车床、切割机,此外机器人的各个关节控制也大量的使用步进电机[1]。

近些年来,由于步进电机的控制精度不断提高,越来越多有较高控制精度要求的系统也开始采用步进电机,步进电机的应用范围进一步扩大。对于小功率步进电机,一般采用单片机与专用步进电机驱动器联合工作的方式,单片机产生脉冲,控制停启、正反转,变速等,专用步进电机驱动器则进行脉冲环形分配及功率驱动,这种控制方式降低成本,缩小体积,简单方便,易于实现,随着微电子和计算机技术的发展,步进电动机的需求量与日俱增,研制步进电机驱动器及其控制系统具有十分重要的意义[3]。1.1.2研究的意义步进电动机是用电脉冲信号进行控制,将电脉冲信号转换成相应的角位移或线位移的微电动机,它最突出的优点是可以在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反转控制及制动等,并且用其组成的开环系统既简单、廉价,又非常可行,因此在打印机等办公自动化设备以及各种控制装置等众多领域有着极其广泛的应用[3]。同时,步进电机在工业控制生产以及仪器上应用十分广泛。通常都要对一些机械部件平移和转动,对移动的位移和角度控制要求较高,一般的电机很难实现对位置和角度的精确控制,在一些智能化要求较高的场合,用模拟芯片控制器及信号发生器来控制有一定局限性,而用单片机控制步进电机可以改善性能,步进电机能实现精确的角度和转数,具有良好的步进特性,最适合数字控制。在工控设备中得到了广泛的应用。而单片机具有芯片体积小,兼容性强,低电压地,低功耗等特点,使单片机成为驱动步进电机的最佳空盒子单元。所以单片机控制步进电机系统控制精度高,运行稳定,得以广泛运用。随着微电子和计算机技术的发展,步进电动机的需求量与日俱增,研制步进电机驱动器及其控制系统具有十分重要的意义[4]。1.2国内外研究概况步进电机最早是在1920年由英国人发明的。我国步进电机的研究及制造起始于本世界50年代后期,从50年代后期到60年代后期,主要是高等院校和科研机构为研究一些装置而使用或开发少量产品。中国在文化大革命中已经生产和应用,例如江苏、浙江、北京、南京、四川都生产,而且都在各行业使用,驱动电路所有半导体器件都是完全国产化的,当时是全分立元器件构成的逻辑运算电路,还有电容耦合输入的计数器,触发器,环形分配器[3]。70年代初期,步进电机的生产和研究都有所突破,除反映在驱动器设计方面的长足进步以外,对反应式步进电机本体的设计研究发展到一个较高的水平,70年代中期至80年代中期为成品发展阶段,新品种高性能电动机不断被开发。至80年代中期以来,由于步进电机精确模型做了大量研究工作,各种混合式步进电机及驱动器作为产品广泛利用[5]。国外在大功率的工业设备驱动上,目前基本不使用大扭矩步进电动机,因为从驱动电路的成本,效率,噪音,加速度,绝对速度,系统惯量与最大扭矩比来比较,比较不划算,还是用直流电动机,加电动机编码器整体技术和经济指标高[4]。一些少数高级的应用,就用空心转杯电机,交流电机。国外在小功率的场合,还使用步进电机,例如一些工业器材,工业生产装备,打印机,复印件,速印机,银行自动柜员机。国外用许多现代的手段将步进电机排挤出驱动应用,除了前面提到的旋转编码器,打印机还使用光电编码带或感应编码带配合直流电动机,实现闭环直线位移控制[5]。国内过去是用大力矩步进电动机实现机床数控,有实力的公司现在也采用交流电动机驱动数控机床,在驱动设备的主要差距,是国外对交流电动机的控制理论与工程分析和应用能力强,先进的控制理论作为软件,写在控制器内部[6]。总的来说,步进电机是一种简易的开环控制,对运用者的要求低,不适合在大功率的场合使用。在卫星、雷达等应用场合,中国在文化大革命后期,就生产了力矩电机,就生产了环形力矩电机,在高品质的控制场合,有时还不能使用步进电机[6]。步进电机的细分控制,在改革开放初期,国内就已经基本掌握,这与交流电动机的矢量控制相比,难度要低得多[7]。1.3课题主要研究内容本论文所选的步进电机是四相五线步进电机,采用的方法是利用单片机控制步进电机的驱动。步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接受到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,它的旋转是以固定的角度一步一步运行的[7]。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的[8]。本次毕业设计就是通过改变脉冲频率来调节步进电机的速度的,并且通过数码管显示其转速的级别。另外通过单片机实现它的正反转、加减速,步进电机可以作为一种控制用的特种电机,利用其没有积累误差的特点,广泛应用于宏开环控制。2步进电机的原理介绍2.1步进电机的概述2.1.1相数产生不同对极N、S磁场的激磁线圈对数,常用m表示。2.1.2拍数完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数,比如说本次设计中使用的24BYJ48有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)。2.1.3步距角对应一个脉冲信号,电机转子转过的角位移用θ表示。θ=360度(转子齿数J*运行拍数),以常规二相,转子齿为50齿电机为例。四拍运行时步距角为θ=360度/(50*4)=1.8度(俗称整步),八拍运行时步距角为θ=360度/(50*8)=0.9度(俗称半步)。2.1.4信号分配四相步进电机按照其通电方式的不同,可以分为单四拍,双四拍和双八拍三种工作方式。单四拍与双四拍的步距角相等,均为11.25度,而八拍的步距角则是单四拍与双四拍的一半,5.625度。单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)。这里选取的是双相八拍的工作方式。2.2步进电机的工作原理步进电机是一种将电脉冲转化为角位移或线位移的执行机构。说的通俗点:当步进驱动芯片接收到一个脉冲信号,它就驱动步进电机按给定方向转动一个固定的角度(及步进角)[9]。可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。本次设计是采用步进电机28BYJ48型四相八拍步进电机,电压为DC5V—DC12V。当对电机施加一连串连续不断的控制脉冲时,它可以持续不断地转动[9]。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)[10]。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)[11]。其相序分配表和接线指示图分别如图2-1和图2-2:图2-1相序分配表图2-2接线指示图2.3步进电机24BYJ48的相关电气参数1.额定电压:12VDC(另有电压:5V、6V、24V)2.相数:43.减速比:1/64(另有减速比:1/16、1/32)4.步距角:5.625°/645.驱动方式:4相8拍6.直流电阻:200Ω±7%(25℃)(按客户要求而定:80、130欧姆)7.空载牵入频率:≥600Hz8.空载牵出频率:≥1000Hz9.牵入转矩:≥34.3mN.m(120Hz)10.自定位转矩:≥34.3mN.m11.绝缘电阻:>10MΩ(500V)12.绝缘介电强度:600VAC/1mA/1S13.绝缘等级:A14.温升:<50K(120Hz)15.噪音:<40dB(120Hz)16.重量:大约40g17.未注公差按:GB1804-m3总体设计思路3.1方案与设计思路因为步进电机的控制是通过脉冲信号来控制的,将电脉冲信号转变为角位移或线位移的开环控制元件。所以怎样产生这个脉冲信号和产生怎样的信号是电机控制的关键。用单片机来产生这个脉冲信号,通过单片机的P1口输出脉冲信号,因为所选电机是四相的,所以只需要P1口的低四位P1.0~P1.3分别接到电机的四根电线上。定时器定时来调整电机的转速,通过键盘的按钮,就可以改变定时初值从而改变了电机的转速,单片机上P3.2~P3.5连的是按键,这里键盘上的K1键为启动与停止键,K2键为减速键,K3键为加速键,K4键为方向转换键。P0以及P2.0~P2.2口接LCD1602,可以显示当前的电机转速、运行状态、运行方向和档位。3.2总框图本系统主要有控制单元、驱动模块、显示模块、按键模块、复位电路、晶振电路等模块组成。具体结构见3-1框图图3-1总体设计方框图驱动模块主要是放大电流以驱动步进电机工作,复位电路采用驱动模块主要是放大电流以驱动步进电机工作,复位电路采用上电复位的方式,晶振电路为单片机提供时钟信号,显示模块主要显示文字说明、步进电机的运行状态、档位、正反转等,按键模块采用的是独立按键。4硬件选型与硬件电路的设计4.1步进电机的驱动驱动模块我们使用集成驱动芯片ULN2003,该芯片是高耐压、大电流达林顿管由七个硅NPN达林顿管组成。该电路的特点如下:ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据[12]。ULN2003工作电压高,工作电流大,灌电流可达500mA,并且能够在关键时承受50V的电压,输出还可以在高负载电流并行运行[13]。其7、6、5、4管脚分别对应接到单片机的P1.0~P1.3,具体如图4-1:图4-1步进电机驱动及其接口图4.2单片机的选取目前市面上的通用型单片机种类很多,且适合不同应用场合的新产品不断出现,但目前的应用状况,以8位中档MCS-51系列单片机的应用最为普遍。基于这次课程设计的要求不高,我们可以选用51系列或52系列单片机,其有可靠性高,易于扩展以及实用性好等特点,完全可以满足我们的控制要求。其图如下4-2:图4-2AT89C52单片机4.3转速信号采集方案方案一:使用光电码盘。优点测量比较精确。缺点:调试很复杂,程序量大。方案二:采用光电开关。优点:调试简单,只需要MCU在单位时间内计算输入MCU的脉冲数,就能通过简便的程序计算出转速。缺点:误差较大,码盘的缺口很难控制宽度。综上,采用光电开关进行转速信号采集较为合理。4.4测速模块本次课程设计通过光电码盘来对步进电机测速。光电开关是由红外对管和一个码盘组成。红外对管一边是发射一边是接收。模块工作时发射管不断发出红外光,当没有障碍物遮挡红外发射管发送给接收管的红外光时,接收管接模块输出低电平,指示灯不亮;当有障碍物遮住红外发射管发送给接收管的红外光时,模块输出高电平,指示灯亮。在单片机中设定T0定时器和T1计数器,把光电码盘输出端连在P2.6在一定的时间内测出T1采集到的脉冲,然后再推算出电机的速度。图4-3为电路原理图图4-3测速电路原理图4.5液晶显示模块LCD显示模块是把LCD显示屏、背景光源、线路板和驱动集成电路等部件构造成一个整体作为一个独立部件使用,只留一个接口与外部通信。显示模块通过这个接口接收显示的命令和数据,并按指令和数据的要求进行显示,外部电路通过这个接口读出显示模块的工作状态和显示数据。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大

小写、常用的符号和日文假名等,每一个字符都有一个固定的代码。用户对模块写入适当的控制命令,即可完成清屏、显示、地址设置等操作[14]。故本系统采用LCD1602模块,P0接液晶的数据传送口D0~d7,P2.0~P2.2接液晶的控制端口RS(RS=0时输入指令,RS=1时输入数据)、R/W(R/W=0时向LCD写入指令和数据,当R/W=1是向LCD读取信息)、EN(使能信号,1时读取信息1→0时执行指令)。其接线图如图4-3:图4-3液晶与单片机接口原理图4.6按键电路设计键盘接口按不同标准有不同分类方法,按键盘排布,可以分为独立方式(一组相互独立的键盘)和矩阵(一行列组成矩阵)方式。此次设计只用到了四个按键,故可采用独立按键,P3.2~P3.5分别接到K1~K4。其原理图如下图4-4:图4-4按键与单片机接口原理图当K1按下时,步进电机开始运行或停止;当K2按下时,步进电机开始加速;当K3按下时,步进电机开始减速;当K4按下时,步进电机开始改变转向。按键抖动的消除采用软件消抖实现。4.7时钟电路时钟电路是微型计算机的心脏,它控制着计算机的工作节奏。CPU就是通过复杂的时序电路完成不同的指令功能的[15]。51单片机的时钟信号可以由两种方式产生:一种是内部方式,利用芯片内部的振荡电路,产生时钟信号:另一种为外部方式,时钟信号由外部引入[16]。本系统采用外部方式,时钟电路晶振频率为11.0592MHz,其原理图如图4-5:图4-5时钟电路原理图5程序设计5.1主程序进入主程序,首先是对LCD进行初始化,然后依次进行键盘扫描,调用步进电机相关数据显示子函数,若检测到有键按下,则进去相应的处理。流程图如下图5-1:图5-1主程序流程图开始对LCD初始化,接下来通过循环扫描的方式进行按键扫描,当检测到K1按下时,运行状态在启停之间转换;当检测到K2按下时,步进电机减速同时档位在非十档的时候加一;当检测到K3按下时,步进电机加速同时档位在非零档的时候减一;当检测到K4按下时,步进电机转向变换一次。5.2LCD及档位显示程序此次设计使用1602液晶显示步进电机运行状态,其效果比用数码管显示要更加明了,也更容易读取相关状态和数据。液晶上显示有电机运行的状态(RUNNING或STOP)、当前档位(DW)、运行方向("<<"或">>")以及其运转速度(r/min)。其显示原理如下图5-2:图5-2液晶显示流程图5.3正反转流程图步进电机的正反转用K4控制,初始化电机为顺时针转,即“》”,每当按下K4键,电机转向改变,具体流程图如下图5-3:图5-3正反转流程图5.4启动与停止流程图启动与停止是用K1键来控制的,初始化标志位on_off==0,档按下K1,即将on_off置1,每当按下k1,都将在启动与停止间切换,具体流程图如下图5-4:图5-4启动与停止流程图6调试与故障分析6.1软件编写及调试此次编程及调试是用keil软件进行的,程序的编写及调试步骤如下:根据步进电机24BYJ48的相序,编好正反转相序表,这个是关键,不能编错。2.定义各个变量及相关液晶显示符:ucharcodecdis0[]={"WELCOMETO"};ucharcodecdis1[]={"STEPPINGMOTOR"};ucharcodecdis2[]={"CONTROLSYSTEM"};ucharcodecdis3[]={"STOP"};ucharcodecdis4[]={"DW:"};ucharcodecdis5[]={"RUNNING"};ucharcodecdis6[]={"r/min"};定义各个按键:sbitK1=P3^2;//运行与停止sbitK2=P3^3;//加速sbitK3=P3^4;//减速sbitK4=P3^5;//方向转换sbitBEEP=P3^6;//蜂鸣器编写各个子程序。编写主程序,进入主程序即开始进行键盘扫描及调用液晶显示。定时器T0的中断服务程序,进入中断,若满足条件,即向步进电机送8个脉冲。6.2调试过程及相关显示结果将程序下载到单片机中,LCD初始化显示如图6-1:图6-1LCD初始化仿真图之后进入步进电机初始化的画面显示,电机运行状态显示为STOP,档位为5档,开机转速为2.66r/min,如图6-2:图6-2仿真图按下启动键K1后,转向显示出显示"》",即电机顺时针转,显示如下图6-3:图6-3仿真图按K2键一次,档位加一,高位档为10档,此时对应电机转速为最慢,为1.33r/min,如图6-4:图6-4仿真图按下K3键一次,档位减一,低位档为1档,也是电机转速最快的档,为13.32r/min,显示效果如图6-5:图6-5仿真图6.3故障分析及解决方法故障一:首先在设计总体方案时,思路上出现了一些问题,我首先是想在中断里完成许多应在中断之外完成的事,经过老师的指点,后来想清楚了。只在中断中给电机送相序码,并设定了一个参数对电机的转速进行调控。故障二:由于编写程序的经验不多,在计算电机转速,并将其显示在液晶时,遇到了一些问题,速度转换公式是找出来了,但怎样将其小数点表示出来,困惑了好久,最后还是请教了同学,才搞定。故障三:在仿真时首先液晶没有接上拉电阻,液晶上显示不出来,我以为是程序方面出了问题,后来尝试接了上拉电阻,就能够正常显示了。7总结经过这么多天的努力,终于完成了毕业设计基本设计要求,在这段期间中也学到了很多东西,将课堂上学到的理论知识运用于实践操作中,这也是毕业前对自己的一次检验,使我受益匪浅。经过了解这次控制要求不是很高,选用51系列或52系列单片机完全能够满足设计需求,最终选用的AT89C52。接下来就是如何去驱动电机硬件和接口分配的问题。对于步进电机之前没有接触过,所以我上网查了很多关于步进电机的资料,了解了它基本工作原理以及如何去实现其驱动和控制。接下来的主要问题就是怎么编写程序去实现控制它。因为以前只编写过一些几十行的小程序,对较大的程序我不是很有把握,所以这次程序的编写和调试对我来说是一个的挑战。在编写过程中遇到了很多问题,没遇到一个问题我就请教同学和老师,还参考了一些别人的编程经验,最终完成了程序的编写。这次的编程经历让我积累了一定的经验。在做仿真的时候也遇到了一些困难,首先LCD完全没有显示,经过反复尝试后知道是我没接上拉电阻的缘故,接上之后就好了。之后是电机也不能运行,最后我减小了脉冲频率,才使得电机正常运转,这个仿真过程让我更加熟悉了Proteus软件。这次毕业设计我认识到,只学好课本的知识是不够的,更重要的是我们要能将所学的知识运用到实践中来,理论与实践相结合这将是我们有更加深刻的理解,所以在今后的学习生活中,我们应该更加注意将理论与实践相结合,达到学以致用的目的。通过这次毕业设计,我也了解到了自己的知识的匮乏,体会到了学海无涯的含义,所以在以后的学习中,要更加全面的,脚踏实地,一步一个脚印地去学习。这次毕业设计能得以顺利完成,还要感谢我的指导老师黄镇海的帮助,在指导老师和同学的帮助下,很多问题都得到了很好地解决。总之,学到了很多,感受很深,是一次很好的经验积累和设计经历。参考文献[1]钱志良.步进电机控制系统的设计[J].苏州大学学报.2005,8(3):42-44.[2]李海滨、片春媛、许瑞雪.单片机技术课程设计与项目实例[J].中国电力出版社.2007,22(5):52-54.[3]刘国永、陈杰平.单片机控制步进电机系统设计[J].安徽技术师范学院学报.1993,33(4):62-67.[4]郭宏.步进电动机驱动器的发展概况及趋势[J].厦门大学学报,2004,17(4):35-41.[5]王迎旭.单片机原理及及应用[M].北京:机械工业出版社.2002.152-154.[6]张迎新.单片微型计算机原理、应用及接口技术[M].北京:国防工业出版社.2005.263-268[7]郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社.2001.112-115.[8]蔡明文,冯先成编著.单片机课程设计[M].北京:华中科技大学出版社.1998.214-219.[9]周向红.51系列单片机应用与实践教程[M].北京:北京航天航空大学出版社.2003.351-355.[10]张家生.电机原理与拖动基础[M].北京:北京邮电大学出版社.2006.111-115.[11]马淑华,王凤文,张美金.单片机原理与接口技术[M].北京:北京邮电大学出版社.2007.365-369.[12]顾德英,张健,马淑华.计算机控制技术[M].北京:北京邮电大学出版社.2006.255-258.[13]华成英,童诗白.模拟电子技术基础[M].北京:高等教育出版社.2008.134-136.[14]张靖武,周灵彬.单片机系统的PROTEUS设计与仿真[M].北京:电子工业出版社.2007.258-261.[15]王晓明,胡晓柏.电动机的单片机控制[M].北京:航空航天大学出版社.2002.358-362.[16]刘宝延,程树康.步进电动机及其驱动控制系统[M].北京:北京邮电大学出版社.1997.322-321.[17]胡健.单片机原理实训教程[M].北京:电子工业出版社.2004.29-31.附件A系统原理图附件B开发板实物图附件C元器件清单序号名称标号参数1电阻R22K2电阻R44.7K3电阻R110K4排阻RES910K5电容C110UF6晶振JT11.0592MHZ7电阻R3208同步电机M28BYJ489电容C330P10电容C230P11电容C4104P12电容C5470UF13三极管Q855014单片机U1AT89C5215电机插件J1CON516电源插孔J2DC_117液晶显示器LCDLCD160218电机驱动集成电路U2ULN2003A19按钮K16X6X520按钮K36X6X521按钮K46X6X522按钮K26X6X523蜂鸣器BUZZ5V有源附件D源程序#include<reg51.h>//51芯片管脚定义头文件#include<intrins.h>//内部包含延时函数_nop_();#defineucharunsignedchar#defineuintunsignedint#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};ucharcodeFFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};//正转相序编码表ucharcodeREV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};//反转相序编码表sbitK1=P3^2;//运行与停止sbitK2=P3^3;//加速sbitK3=P3^4;//减速sbitK4=P3^5;//方向转换sbitBEEP=P3^6;//蜂鸣器sbitLCD_RS=P2^0;sbitLCD_RW=P2^1;sbitLCD_EN=P2^2;biton_off=0;//运行与停止标志bitdirection=1;//方向标志ucharcodecdis0[]={"WELCOMETO"};ucharcodecdis1[]={"STEPPINGMOTOR"};ucharcodecdis2[]={"CONTROLSYSTEM"};ucharcodecdis3[]={"STOP"};ucharcodecdis4[]={"DW:"};ucharcodecdis5[]={"RUNNING"};ucharcodecdis6[]={"r/min"};ucharcodecdis7[]={"RATE:"};ucharm,v=0,q=0,j;ucharrate=5;//预设定速度档uchardata_temP1,data_temp2,data_temp3,data_temp4;uintzs,data_temp;/*****************************************************/voiddelay(uintt)//延时t毫秒函数{uchark;while(t--){for(k=0;k<125;k++){}}}/********************************************************/voiddelayB(ucharx)//x*0.14MS{uchari;while(x--){for(i=0;i<13;i++){}}}/********************************************************/voidbeep() //蜂鸣器{ucharj;for(j=0;j<100;j++){delayB(4);BEEP=!BEEP;//BEEP取反}BEEP=1;//关闭蜂鸣器delay(170);}/********************************************************/bitlcd_busy()//检查LCD是否为忙状态,lcd_busy为1时,忙,等待。为0时,闲,可写指令与数据。{bitresult;LCD_RS=0;LCD_RW=1;LCD_EN=1;delayNOP();result=(bit)(P0&0x80);LCD_EN=0;return(result);}/********************************************************/voidlcd_wcmd(ucharcmd)//写指令数据到LCD,*RS=L,RW=L,E=高脉冲,D0-D7=指令码。{while(lcd_busy());LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();P0=cmd;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;}/********************************************************/voidlcd_wdat(uchardat)//写显示数据到LCD,RS=H,RW=L,E=高脉冲,D0-D7=数据。{while(lcd_busy());LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;}/********************************************************/voidlcd_init()//LCD初始化设定{delay(30);lcd_wcmd(0x38);//16*2显示,5*7点阵,8位数据delay(5);lcd_wcmd(0x38);delay(5);lcd_wcmd(0x38);delay(5);lcd_wcmd(0x0c);//显示开,关光标delay(5);lcd_wcmd(0x06);//移动光标delay(5);lcd_wcmd(0x01);//清除LCD的显示内容delay(5);}/********************************************************/voidlcd_pos(ucharpos)//设定显示位置{lcd_wcmd(pos|0x80);//数据指针=80+地址变量}/********************************************************/voidLCD_init_DIS()//LCD1602初始显示子程序{delay(10);//延时lcd_init();//初始化LCD lcd_pos(0);//设置显示位置为第一行的第1个字符m=0;while(cdis0[m]!='\0'){//显示字符WELCOMElcd_wdat(cdis0[m]);m++;} delay(2000); lcd_wcmd(0x01); //清屏 delay(5); //清屏以后的这个延时不能少,给LCD一定的缓冲,否则下一条指令不一定被执行lcd_pos(0x10);//设置显示位置为第一行的第17个地址m=0;while(cdis1[m]!='\0'){//显示字符lcd_wdat(cdis1[m]);m++;}lcd_pos(0x50);//设置显示位置为第二行第1个字符m=0;while(cdis2[m]!='\0'){lcd_wdat(cdis2[m]);//显示字符m++;} for(j=0;j<16;j++) { lcd_wcmd(0x18); delay(300); }delay(3000);//延时lcd_wcmd(0x01); //清屏 lcd_pos(0x00);//设置显示位置为第一行的第1个字符m=0;while(cdis3[m]!='\0'){//显示字符STOPlcd_wdat(cdis3[m]);m++;}lcd_pos(0x08);//设置显示位置为第一行第9个字符m=0;while(cdis4[m]!='\0'){lcd_wdat(cdis4[m]);//显示字符DWm++;}for(m=0;m<2;m++){lcd_pos(0x0e+m);//显示方向符号lcd_wdat(0x2d);} lcd_pos(0x47); //显示小数点lcd_wdat(0x2e);m=0; lcd_pos(0x4a); //显示字符r/minwhile(cdis6[m]!='\0'){lcd_wdat(cdis6[m]);m++;} m=0; lcd_pos(0x40); //显示字符RATE:while(cdis7[m]!='\0'){lcd_wdat(cdis7[m]);m++;}}/********************************************************/voiddata_conv()//档位数据转换子程序{data_temP1=data_temp/10;//高位if(data_temP1==0){ data_temP1=0x20; //高位为0不显示 }else{data_temP1=data_temP1+0x30; }data_temp2=data_temp%10;//低位data_temp2=data_temp2+0x30;}/********************************************************/voiddata_conv1()//转速数据转换子程序{data_temP1=data_temp/1000; //整数位第一位 if(data_temP1==0){ data_temP1=0x20; //高位为0不显示 }else{data_temP1=data_temP1+0x30; }data_temp2=data_temp%1000/100;//整数位第2位data_temp2=data_temp2+0x30;data_temp3=data_temp%100/10; //小数位第一位 data_temp3=data_temp3+0x30; data_temp4=data_temp%10; //小数位第二位 data_temp4=data_temp4+0x30;}/********************************************************/voiddata_dis()//数据显示子程序{data_temp=rate;//显示档位data_conv();lcd_pos(0x0b);lcd_wdat(data_temP1);lcd_pos(0x0c);lcd_wdat(data_temp2); zs=1332/rate; //转速换算公式:zs=13.32/rate; data_temp=zs; //显示转速 data_conv1(); lcd_pos(0x45);lcd_wdat(data_temP1); lcd_pos(0x46);lcd_wdat(data_temp2); lcd_pos(0x48);lcd_wdat(data_temp3); lcd_pos(0x49);lcd_wdat(data_temp4);}/********************************************************/voidmotor_DR()//显示运行方向符号{if(direction==1)//正转方向标志{for(m=0;m<2;m++){lcd_pos(0x0e+m);//显示方向符号lcd_wdat(0x3e); //显示>>号}}else{for(m=0;m<2;m++)//反转方向标志{lcd_pos(0x0e+m);//显示方向符号lcd_wdat(0x3c);//显示<<号}}}/********************************************************/voidmotor_RUN()//显示运行状态{if(on_off==1){TR0=1;lcd_pos(0);//设置显示位置为第一行的第1个字符m=0;while(cdis5[m]!='\0'){lcd_wdat(cdis5[m]);//RUNNINGm++;}motor_DR();}else{TR0=0;P1=0x0f;lcd_pos(0);//设置显示位置为第一行的第1个字符m=0;while(cdis3[m]!='\0'){ lcd_wdat(cdis3[m]);//STOPm++; }motor_DR(); for(m=0;m<2;m++){lcd_pos(0x0e+m);//显示--lcd_wdat(0x2d); }}}/*******************************************************main()//主程序{LCD_init_DIS();TMOD=0x01;//T0定时方式1TH0=(65536-1100)/256;//赋初值TL0=(65536-1100)%256;EA=1; //开启总中断ET0=1; //开放定时器T0的中断P1=0x0f;while(1){if(K1==0) //运行与停止{delay(5); //消抖 if(K1==0) {beep();while(K1==0);//等待键释放on_off

温馨提示

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

最新文档

评论

0/150

提交评论