




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
...wd......wd......wd...题目:简易步进电机控制步进电机控制摘要:本设计采用ATMEL公司DIP-40封装的AT89S52单片机实现对四相步进电机的手动和按键控制。由单片机产生的脉冲信号经过分配后分解出对应的四相脉冲,分解出的四相脉冲经驱动电路功率放大后驱动步进电机的转动。转速的调节和状态的改变由按键进展选择,此过程由程序直接进展控制。通过键盘扫描把选择的信息反响给单片机,单片机根据反响信息做出相应的判断并改变输出脉冲的频率或转动状态信号。电机转动的不同状态由液晶LCD1602显示出来。而设计的扩展局部可以通过红外信号的发射由另一块单片机和红外线LED完成,用红外万能接收头接收红外信号,可以实现对电机的控制进展红外遥控。
关键字:四相步进电机单片机功率放大LCD1602目录步进电机控制…………………1摘要……………1关键字…………1前言………………31系统总体方案设计及硬件设计……………41.1步进电机……………………41.1.1步进电机的种类………41.1.2步进电机的特点………41.1.3步进电机的原理………51.2控制系统电路设计…………71.3液晶显示LCD1602…………71.4AT89S52核心部件及系统SCH原理图……91.5LN2003A驱动………………102软件设计及调试………………132.1程序流程…………………132.2软件设计及调试…………143扩展功能说明…………………154设计总结………………………165设计源程序……………………166附录……………21参考文献…………22附2:系统原理图及实物图…………………23前言步进电机广泛应用于对精度要求比拟高的运动控制系统中,如机器人、打印机、软盘驱动器、绘图仪、机械阀门控制器等。目前,对步进电机的控制主要有由分散器件组成的环形脉冲分配器、软件环形脉冲分配器、专用集成芯片环形脉冲分配器等。分散器件组成的环形脉冲分配器体积比拟大,同时由于分散器件的延时,其可靠性大大降低;软件环形分配器要占用主机的运行时间,降低了速度;专用集成芯片环形脉冲分配器集成度高、可靠性好,但其适应性受到限制,同时开发周期长、需求费用较高。步进电机是微特电机的一种,其作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。随着微电子和计算机技术的开展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。同时步进电动机是一种将脉冲信号变换成相应的角位移(或线位移)的电磁装置,是一种特殊的电动机。一般电动机都是连续转动的,而步进电动机则有定位和运转两种根本状态,当有脉冲输入肘步进电动机一步一步地转动,每给它一个脉冲信号,它就转过一定的角度。步进电动机的角位移量和输入脉冲的个数严格成正比,在时间上与输入脉冲同步,因此只要控制输入脉冲的数量、频率及电动机绕组通电的相序,便可获得所需的转角、转速及转动方向。在没有脉冲输入时,在绕组电源的鼓励下气隙磁场能使转子保持原有位置于定位状态。步进电机以广泛应用在生产实践的各个领域。它最大的应用是在数控机床的制造中,因为步进电机不需要A/D转换,能够直接将数字脉冲信号转化成为角位移,所以被认为是理想的数控机床的执行元件。早期的步进电机输出转矩比拟小,无法满足需要,在使用中和液压扭矩放大器一同组成液压脉冲马达。随着步进电动机技术的开展,步进电动机已经能够单独在系统上进展使用,成为了不可替代的执行元件。除了在数控机床上的应用,步进电机也可以并用在其他的机械上,比方作为自动送料机中的马达,作为通用的软盘驱动器的马达,也可以应用在打印机和绘图仪中。伴随着不同的数字化技术的开展以及步进电机本身技术的提高,步进电机将会在更多的领域得到应用。1系统总体方案设计及硬件设计本设计系统中主要围绕AT89S52以实现四相步进电机的转动控制〔步进电机正转、反转以及转动速度〕以及液晶LCD1602的显示为目的:1.1步进电机步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反响式步进电机(VR)、永磁式步进电机(PM)和混合式步进电机(HB)。步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进展控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其根本原理作用如下:(1)控制换相顺序通电换相这一过程称为脉冲分配。例如:混合式步进电机的工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断,这就是所谓脉冲环形分配器。(2)控制步进电机的转向如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。(3)控制步进电机的速度如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。1.1.1步进电机的种类步进电机分永磁式〔PM〕、反响式〔VR〕、和混合式〔HB〕三种。永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度或15度;反响式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等兴旺国家80年代已被淘汰;混合式步进是指混合了永磁式和反响式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为0.72度。这种步进电机的应用最为广泛。1.1.2步进电机的特点1.精度高一般的步进电机的精度为步进角的3-5%,且不累积。可在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反转控制及制动等,这是步进电动机最突出的优点2.过载性好其转速不受负载大小的影响,不像普通电机,当负载加大时就会出现速度下降的情况,所以步进电机使用在对速度和位置都有严格要求的场合;3.控制方便步进电机是以“步〞为单位旋转的,数字特征比拟明显,这样就给计算机控制带来了很大的方便,反过来,计算机的出现也为步进电机开辟了更为广阔的使用市场;4.整机构造简单传统的机械速度和位置控制构造比拟复杂,调整困难,使用步进电机后,使得整机的构造变得简单和紧凑。1.1.3步进电机的原理图1是一种四相可变磁阻型的步进电机构造示意图。这种电机定子上有八个凸齿,每一个齿上有一个线圈。线圈绕组的连接方式,是对称齿上的两个线圈进展反相连接,如图中所示。八个齿构成四对,所以称为四相步进电机。图1它的工作过程是这样的:当有一相绕组被鼓励时,磁通从正相齿,经过软铁芯的转子,并以最短的路径流向负相齿,而其他六个凸齿并无磁通。为使磁通路径最短,在磁场力的作用下,转子被强迫移动,使最近的一对齿与被鼓励的一相对准。在图1(a)中A相是被鼓励,转子上大箭头所指向的那个齿,与正向的A齿对准。从这个位置再对B相进展鼓励,如图1中的(b),转子向反时针转过15°。假设是D相被鼓励,如图1中的(c),则转子为顺时针转过15°。下一步是C相被鼓励。因为C相有两种可能性:A—B—C—D或A—D—C—B。一种为反时针转动;另一种为顺时针转动。但每步都使转子转动15°。电机步长(步距角)是步进电机的主要性能指标之一,不同的应用场合,对步长大小的要求不同。改变控制绕组数(相数)或极数(转子齿数),可以改变步长的大小。它们之间的相互关系,可由下式计算:Lθ=360P×N式中:Lθ为步长;P为相数;N为转子齿数。在图1中,步长为15°,表示电机转一圈需要24步。四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按适宜的时序通电,就能使步进电机步进转动。图1是该四相反响式步进电机工作原理示意图。图2四相步进电机步进示意图开场时,开关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方向转动。四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图3.a、b、c所示:a.单四拍b.双四拍c八拍图3.步进电机工作时序波形图对步进电机四个绕组依次实现如下方式的循环通电控制:
单四拍运行:正转A-B-C-D;反转D-C-B-A
双四拍运行:正转AB-BC-CD-DA;反转DC-CB-BA-AD单双八拍运行:正转A-AB-B-BC-C-CD-D-DA1.2控制系统电路设计步进电机控制设计采用AT89S52单片机作为控制机构的核心〔如图4〕。通过对键盘的输入与操作实现对步进电机的控制。当电源开通的时候,步进电机就会按照默认设置的转速方式转动。步进电机的正反转及转速由按键控制选择,当按键按下,步进电机实现正转或反转及加速或减速状态。AT89S52AT89S52单片机独立按键键盘步进电机驱动LCD1602显示扬声器〔扩展)红外发射电路(扩展〕时钟和复位电路图7控制系统1.3液晶显示LCD1602液晶LCD-1602说明:1.简介工业字符型液晶,能够同时显示16x02即32个字符。〔16列2行〕注:为了表示的方便,后文皆以1表示高电平,0表示低电平。2.管脚功能1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VDD接5V电源正极第3脚:V0为液晶显示器比照度调整端,接正电源时比照度最弱,接地电源时比照度最高〔比照度过高时会产生“鬼影〞,使用时可以通过一个10K的电位器调整比照度〕。第4脚:RS为存放器选择,高电平1时选择数据存放器、低电平0时选择指令存放器。第5脚:RW为读写信号线,高电平(1)时进展读操作,低电平(0)时进展写操作。第6脚:E(或EN)端为使能(enable)端。第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。3.操作控制操作控制表3.1操作读状态写指令读数据写数据3.2输入RS=0,RW=1,E=1RS=0,RW=0,D0-7=指令码,E=H脉冲RS=1,RW=1,E=1RS=1,RW=0,D0-7=数据,E=H脉冲注:关于E=H脉冲——开场时初始化E为0,然后置E为1,脉冲大于0.5us,下降沿有效。4.字符集1602液晶模块内部的字符发生存储器〔CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比方大写的英文字母“A〞的代码是01000001B〔41H〕,显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A〞。因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。以下是1602的16进制ASCII码表地址:读的时候,先读左边那列,再读上面那行,如:感慨号!的ASCII为0x21,字母B的ASCII为0x42〔前面加0x表示十六进制〕。[编辑本段]指令集1602通过D0-D7的8位数据端传输数据和指令。显示模式设置:(初始化)00110000[0x38]设置16×2显示,5×7点阵,8位数据接口;显示开关及光标设置:(初始化)00001DCBD显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效)000001NSN=1(读或写一个字符后地址指针加1&光标加1),N=0(读或写一个字符后地址指针减1&光标减1),S=1且N=1(当写一个字符后,整屏显示左移)s=0当写一个字符后,整屏显示不移动数据指针设置:数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)其他设置:〔01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。图8液晶LCD16021.4AT89S52核心部件及系统SCH原理图AT89S52单片机功能特性描述:AT89S52是美国ATMEL公司生产的低功耗、高性能CMOS8位单片机,片内含8kbytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序存储器既可在线编程〔ISP〕也可用传统方法进展编程及通用8位微处理器于单片芯片中,ATMEL公司的功能强大,低价位AT89S51单片机可以提供许多高性价比的应用场合,可灵活应用于各种控制领域。AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断构造,全双工串行口片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停顿工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停顿,直到下一个中断或硬件复位为止。图9SCH原理框图1.5LN2003A驱动ULN2003的内部构造和功能ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTLCOMS,由达林顿管组成驱动电路。ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE约1V左右,耐压BVCEO约为36V。用户输出口的外接负载可根据以上参数估算。采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。通常单片机驱动ULN2003时,上拉2K的电阻较为适宜,同时,COM引脚应该悬空或接电源。ULN2003是一个非门电路,包含7个单元,但独每个单元驱动电流最大可达350mA.资料的最后有引用电路,9脚可以悬空。比方1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。uln2003的作用:ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。输入5VTTL电平,输出可达500mA/50V。ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。该电路的特点如下:ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器。ULN2003是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。图10ULN2003A引脚图及功能ULN2003是高耐压、大电流、内部由七个硅NPN达林顿管组成的驱动芯片。经常在以下电路中使用,作为:1、显示驱动2、继电器驱动3、照明灯驱动4、电磁阀驱动5、伺服电机、步进电机驱动等电路中。ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行。ULN2003的封装采用DIP—16或SOP—16ULN2003A在各种控制电路中常用它作为驱动继电器的芯片,其芯片内部做了一个消线圈反电动势的二极管。ULN2003的输出端允许通过IC电流200mA,饱和压降VCE约1V左右,耐压BVCEO约为36V。输出电流大,故可以直接驱动继电器或固体继电器(SSR)等外接控制器件,也可直接驱动低压灯泡。ULN2003可以驱动7个继电器,具有高电压输出特性,并带有共阴极的续流二极管使器件可用于开关型感性负载。每对达林顿管的额定集电极电流是500mA,达林顿对管还可并联使用以到达更高的输出电流能力。ULN2003A中每对达林顿管的基极都串联有一个2.7kΩ的电阻,可直接与TTL或5VCMOS器件连接。ULN2003可以并联使用,在相应的OC输出管脚上串联几个欧姆的均流电阻后再并联使用,防止阵列电流不平衡。2.在输入口输入高电平时﹐输出口为低电平﹐但是在输入端输入低电平时﹐输出端怎么还是低电平ULN2003A的输出构造是集电极开路的,所以要在输出端接一个上拉电阻,在输入低电平的时候输出才是高电平。在驱动负载的时候,电流是由电源通过负载灌入ULN2003A的。图11ULN2003A驱动电路图ULN2003一般用来驱动大电流的装置,如继电器,LED灯等,在驱动继电器这种装置时,COM端最好接上电源,以用来泄放继电器线圈的反向电动势。显示电路主要包括大型LED数码管BSI20-1(共阳极,数字净高12cm)和高电压大电流驱动器ULN2003,大型LED数码管的每段是由多个LED发光二极管串并联而成的,因此导通电流大、导通压降高。ULN2003是高压大电流达林顿晶体管阵列电路,他具有7个独立的反相驱动器,每个驱动器的输出灌电流可达500mA,导通时输出电压约1V,截止时输出电压可达50V。ULN2003的1~7脚为信号输入脚,依次对应的输出端为16~10脚,8脚为接地端。当驱动电源电压为+12V时,假设要求数码管每段导通电流为40mA,则每段的限流电阻为50Ω。则一块ULN2003恰好驱动一个LED数码管的7段。大数码管采用共阳极接法,低电平有效。锁存器输出的电平经NPN三极管9014反相后,再由ULN2003放大后推动大数码管显示。2软件设计及调试
2.1程序流程LCD初始LCD初始工作方式设置显示状态设置清屏输入方式设置返回LCD初始化光标定位显示字符完毕开场图12LCD初始化流程图图13液晶显示控制程序流程图开场开场LCD初始化LCD1602显示字设定定时器初值设定〔设定按键〕判断LCD是否可写入LCD液晶显示单片机P0.1-P0.3延时脉冲斩波输出返回定时器T0定时中断按键定时器T1定时中断按键外部T0计数中断按键外部T1计数中断按键P2.3=1P1=0x01清屏P2.3=0P1=0x01清屏RunSpeed-2RunSpeed+2DoSpeed液晶显示的速度计算后清屏返回C51库调用C语言各函数设置及定义图14程序总流程2.2软件设计及调试软件设计:根据要求,可以将程序分为以下几个部份:键盘输入程序设计本系统使用的键盘较少且比拟特殊,因此采用独立式键盘〔定时器定时内部T0、T1中断及外部计数T0、T1中断〕接口设计。独立式键盘适用于按键数量较少的场合。独立键盘工作原理:通过上拉电阻接到+5V上。无按键,处于高电平状态,有键按下电平为低。在消除抖动影响上是可以采用了软件消抖方法:在第一次检测到有键按下时,执行一段延时子程序后〔约10ms〕,再确认电平是否仍保持闭合状态电平,如果保持闭合状态电平,则确认真正有键按下,进展相应处理工作,消除了抖动的影响。〔2〕步进电机运行步数控制程序此方案采用单相和双相交差通电处理方式。此方法具有运行速度稳定,运行步数准确无误等优点。调试:本电路经调试符合题目要求,各项技术指标均到达设计的目的。具体操作控制方法如下:〔1〕步进电机正转既此时液晶显示CW:RUNSTATE:CW。〔2〕步进电机反转即液晶显示:RUNSTATE:CCW。〔3〕步进电机加速按键:步进电机转速加快且显示的转速加大〔4〕步进电机减速按键:液晶显示速度变小电机转速减慢。3扩展功能说明通过红外信号的发射由另一块单片机和红外线LED完成,用红外万能接收头接收红外信号,可以实现对电机的控制进展红外遥控。本电路设计包括max232接口通信电路,可以通过串口线直接与电脑相连接。可利用PC机强大功能编写PC软件来控制、验证、改善控制系统性能。利用以有的单片机系统,作为下位机,选用一台微机作为上位机,可以用VB语言编写一个系统软件,这样可以基于PC的控制系统提高电机的控制功能。由于联动插补算法较复杂,有大量浮点运算,对实时性要求又较高,选用PC来完成插补运算和数值运算。同时可利用丰富的PC软件来改善控制系统的图形显示、动态仿真、编程和诊断功能。这样更有利于操作,大大提高步进电机运行的可靠性。另外电路中还增加了与电机同步的脉冲输出和方向控制电路〔OC输出〕,可以方便的与专用的步进电机驱动器相联接。4设计总结步进电机可在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反转控制及制动等,这是步进电动机最突出的优点。步进电机的性能在很大程度上取决于步进电机控制系统,而步进电机控制系统由步进电机控制器、驱动器、系统软件等几局部组成,控制系统的每一局部对步进电机的运行性能息息相关。一台好的步进电机控制器就能表达出步进机在控制方面上的优越性能。所以我选择这样的毕业设计课题,并且能通过此次设计来提高自己软件编制和硬件电路设计的能力。在我完成这次毕业设计的过程中,当看到自己将专业知识用于解决实际的问题时,那份成就感和喜悦感是难以形容的。但是,在实际的编程以及调试程序过程中,我发现自己所应该学的太多太多。光靠自己在书本上所学过的这点知识是远远不够的,真正地认识到了工作就是学习的道理。采用此设计的步进电机驱动系统,在驱动二相或四相混合式步进电机时运动平稳,速度快,噪音低,控制精高,而且可选整步半步驱动。外观采用铝镁合金,散热性好,价格低廉,可广泛应用于需要驱动电流小于2A的混合式两相或四相步进电机的系统中。5设计源程序〔清单〕#include"reg51.h"intdelay();//判断LCD是否可以写入即忙否〔P1.7〕voidinti_lcd();//液晶LCD1602初始化voidshow_lcd(int);//液晶读显示voidcmd_wr();//LCD写控制程序voidShowState();//LCD状态显示即速度显示voidclock(unsignedintDelay);//延时程序voidDoSpeed();//计算速度voidmotor_CCW();//电机正转voidmotor_CW();//电机反转voidkey();//固定档位按键#defineucharunsignedchar//无符号字符定义ucharcodeCW[4]={0x01,0x02,0x04,0x08};//正转表ucharcodeCCW[4]={0x08,0x04,0x02,0x01};//反转表#defineRIGHT_RUN1//正转值#defineLEFT_RUN0//反转值sbitRS=0xA0;sbitRW=0xA1;sbitE=0xA2;//LCD1602RSRWE脚分别接于P2.0P2.1P2.2sbitP0_0=P0^0;sbitP0_1=P0^1;sbitP0_2=P0^2;sbitP0_3=P0^3;sbitP2_3=P2^3;sbitP1_7=P1^7;sbitP3_0=P3^0;//单片机的管脚定义#definesfrP1=0x90;#definesfrP0=0x80;//存放器定义charSpeedChar[]="SPEED(n/min):";charStateChar[]="RUNcharSTATE_CW[]="CW";charSTATE_CCW[]="CCW";//显示数组charSPEED[3]="050";//初始速度设定unsignedintRunSpeed=50; //初始速度值unsignedcharRunState=RIGHT_RUN;//运行状态main()//主程序{ /*定时器设置*/ TMOD=0x66; //定时器0,1都为计数方式;方式2; EA=1; //开总中断开启 TH0=0xff; //定时器T0初值FFH; TL0=0xff; ET0=1;//T0中断开启 TR0=1; //定时器T0开启 TH1=0xff; //定时器T1初值FFH; TL1=0xff; ET1=1; TR1=1;//T1中断开启 IT0=1; //脉冲方式 EX0=1; //开外部中断0:加速 IT1=1; //脉冲方式 EX1=1; //开外部中断1:减速inti_lcd(); DoSpeed();ShowState();while(1){ if(P2_3==1)motor_CW();//电机正转elseif(P2_3==0)motor_CCW();//电机反转} }/*步进电机正转/********************************************************/voidmotor_CW(){uchari;{for(i=0;i<4;i++)//一个周期转30度{P0=CW[i];//取数clock(RunSpeed);//脉冲延时}}}/*步进电机反转/********************************************************/voidmotor_CCW(){ucharj;{for(j=0;j<4;j++)//一个周期转30度{P0=CCW[j];//取数据clock(RunSpeed);//脉冲延时}}}//定时器0中断程序:正转voidt_0(void)interrupt1{ RunState=RIGHT_RUN; P2_3=1;P1=0x01;//清屏cmd_wr();ShowState();}//定时器1中断:反转voidt_1(void)interrupt3{ RunState=LEFT_RUN;P2_3=0;P1=0x01;cmd_wr();ShowState();}//中断0:加速程序voidSpeedUp()interrupt0{if(RunSpeed>=12)RunSpeed=RunSpeed-2;DoSpeed();P1=0x01;cmd_wr();ShowState();}//中断1:减速程序voidSpeedDowm()interrupt2{if(RunSpeed<=100)RunSpeed=RunSpeed+2;DoSpeed();P1=0x01;cmd_wr();ShowState();}voidkey(){if(P3_0==0)RunSpeed=70;DoSpeed();P1=0x01;cmd_wr();ShowState();}intdelay()//判断LCD是否忙{inta;start:RS=0;RW=1;E=0;for(a=0;a<2;a++);E=1;P1=0xff;if(P1_7==0)return0;elsegotostart;}voidinti_lcd()//设置LCD方式{P1=0x38;//液晶模式设置cmd_wr();//写命令delay();P1=0x01;//去除cmd_wr();delay();P1=0x0f;//光标,显示开启cmd_wr();delay();P1=0x06;cmd_wr();delay();P1=0x0c;cmd_wr();delay();}voidcmd_wr()//写控制字{RS=0;RW=0;E=0;E=1;}voidshow_lcd(inti)//LCD显示子程序{P1=i;//将数据经P1口送入液晶显示RS=1;RW=0;E=0;E=1;}voidShowState()//显示状态与速度{inti=0;while(SpeedChar[i]!='\0'){delay();show_lcd(SpeedChar[i]);i++;}delay();P1=0x80|0x0d;cmd_wr();i=0;while(SPEED[i]!='\0'){delay();show_lcd(SPEED[i]);i++;}delay();P1=0xC0;cmd_wr();i=0;while(StateChar[i]!='\0'){delay();show_lcd(StateCha
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论