资源描述
题 目: 简易步进电机控制 步进电机控制摘要:本设计采用ATMEL公司DIP40封装的AT89S52单片机实现对四相步进电机的手动和按键控制。由单片机产生的脉冲信号经过分配后分解出对应的四相脉冲,分解出的四相脉冲经驱动电路功率放大后驱动步进电机的转动.转速的调节和状态的改变由按键进行选择,此过程由程序直接进行控制.通过键盘扫描把选择的信息反馈给单片机,单片机根据反馈信息做出相应的判断并改变输出脉冲的频率或转动状态信号。电机转动的不同状态由液晶LCD1602显示出来。而设计的扩展部分可以通过红外信号的发射由另一块单片机和红外线LED完成,用红外万能接收头接收红外信号,可以实现对电机的控制进行红外遥控.关键字:四相步进电机 单片机 功率放大 LCD1602目录步进电机控制1摘要1关键字1前言31系统总体方案设计及硬件设计41。1步进电机41.1。1 步进电机的种类41。1.2步进电机的特点41.1。3 步进电机的原理51。2控制系统电路设计71.3 液晶显示LCD160271。4 AT89S52核心部件及系统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-BCD,通电控制脉冲必须严格按照这一顺序分别控制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相有两种可能性:AB-CD或AD-CB.一种为反时针转动;另一种为顺时针转动。但每步都使转子转动15°.电机步长(步距角)是步进电机的主要性能指标之一,不同的应用场合,对步长大小的要求不同。改变控制绕组数(相数)或极数(转子齿数),可以改变步长的大小。它们之间的相互关系,可由下式计算:L360 P×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-BCD;反转D-C-BA 双四拍运行:正转ABBC-CD-DA;反转DCCBBAAD单双八拍运行:正转A-AB-BBCC-CDDDA1.2 控制系统电路设计步进电机控制设计采用AT89S52单片机作为控制机构的核心(如图4)。通过对键盘的输入与操作实现对步进电机的控制。当电源开通的时候,步进电机就会按照默认设置的转速方式转动。步进电机的正反转及转速由按键控制选择,当按键按下,步进电机实现正转或反转及加速或减速状态。AT89S52单片机独立按键键盘步进电机驱动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)端. 第714脚:D0D7为8位双向数据端。 第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。3.操作控制操作控制表 3。1操作 读状态 写指令 读数据 写数据 3。2输入 RS=0,RW=1,E=1 RS=0,RW=0, D0-7=指令码,E=H脉冲 RS=1,RW=1,E=1 RS=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位数据端传输数据和指令。显示模式设置: (初始化)0011 0000 0x38 设置16×2显示,5×7点阵,8位数据接口;显示开关及光标设置: (初始化)0000 1DCB D显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效)0000 01NS N=1(读或写一个字符后地址指针加1 &光标加1), N=0(读或写一个字符后地址指针减1 光标减1),S=1 且 N=1 (当写一个字符后,整屏显示左移)s=0 当写一个字符后,整屏显示不移动 数据指针设置:数据首地址为80H,所以数据地址为80H+地址码(027H,4067H)其他设置:(01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。图8 液晶LCD16021。4 AT89S52核心部件及系统SCH原理图AT89S52单片机功能特性描述:AT89S52 是美国 ATMEL 公司生产的低功耗、高性能 CMOS8 位单片机,片内含 8k bytes 的可系统编程的 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,适用于TTL COMS,由达林顿管组成驱动电路. 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 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。 图10 ULN2003A引脚图及功能ULN2003 是高耐压、大电流、内部由七个硅NPN 达林顿管组成的驱动芯片。 经常在以下电路中使用,作为:1、显示驱动2、继电器驱动3、照明灯驱动4、电磁阀驱动5、伺服电机、步进电机驱动等电路中。ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它 能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受 50V 的电压,输出还可以在高负载电流并行运行。ULN2003 的封装采用DIP-16 或SOP16 ULN2003A在各种控制电路中常用它作为驱动继电器的芯片,其芯片内部做了一个消线圈反电动势的二极管.ULN2003的输出端允许通过IC 电流200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。输出电流大,故可以直接驱动继电器或固体继电器(SSR)等外接控制器件,也可直接驱动低压灯泡.ULN2003可以驱动7个继电器,具有高电压输出特性,并带有共阴极的续流二极管使器件可用于开关型感性负载。每对达林顿管的额定集电极电流是500mA,达林顿对管还可并联使用以达到更高的输出电流能力.ULN2003A中每对达林顿管的基极都串联有一个2.7k的电阻,可直接与TTL或5V CMOS器件连接.ULN2003可以并联使用,在相应的OC输出管脚上串联几个欧姆的均流电阻后再并联使用,防止阵列电流不平衡。2. 在输入口输入高电平时输出口为低电平但是在输入端输入低电平时输出端怎么还是低电平?ULN2003A的输出结构是集电极开路的,所以要在输出端接一个上拉电阻,在输入低电平的时候输出才是高电平。在驱动负载的时候,电流是由电源通过负载灌入ULN2003A的. 图11 ULN2003A驱动电路图ULN2003一般用来驱动大电流的装置,如继电器,LED灯等,在驱动继电器这种装置时,COM端最好接上电源,以用来泄放继电器线圈的反向电动势.显示电路主要包括大型LED数码管BSI201(共阳极,数字净高12 cm)和高电压大电流驱动器ULN2003,大型LED数码管的每段是由多个LED发光二极管串并联而成的,因此导通电流大、导通压降高。ULN2003是高压大电流达林顿晶体管阵列电路,他具有7个独立的反相驱动器,每个驱动器的输出灌电流可达500 mA,导通时输出电压约1 V,截止时输出电压可达50 V。ULN2003的17脚为信号输入脚,依次对应的输出端为1610脚,8脚为接地端。当驱动电源电压为+12 V时,若要求数码管每段导通电流为40 mA,则每段的限流电阻为50。则一块ULN2003恰好驱动一个LED数码管的7段。大数码管采用共阳极接法,低电平有效。锁存器输出的电平经NPN三极管9014反相后,再由ULN2003放大后推动大数码管显示。2 软件设计及调试2。1 程序流程LCD初始工作方式设置显示状态设置清屏输入方式设置返回LCD初始化光标定位显示字符结束开始图12 LCD初始化流程图 图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 软件设计及调试软件设计:根据要求,可以将程序分为以下几个部份:(1) 键盘输入程序设计 本系统使用的键盘较少且比较特殊,因此采用独立式键盘(定时器定时内部T0、T1中断及外部计数T0、T1中断)接口设计。独立式键盘适用于按键数量较少的场合。独立键盘工作原理:通过上拉电阻接到+5V上。无按键,处于高电平状态,有键按下电平为低。在消除抖动影响上是可以采用了软件消抖方法:在第一次检测到有键按下时,执行一段延时子程序后(约10ms),再确认电平是否仍保持闭合状态电平,如果保持闭合状态电平,则确认真正有键按下,进行相应处理工作,消除了抖动的影响。 (2) 步进电机运行步数控制程序 此方案采用单相和双相交差通电处理方式。此方法具有运行速度稳定,运行步数准确无误等优点.调试:本电路经调试符合题目要求,各项技术指标均达到设计的目的.具体操作控制方法如下:(1)步进电机正转既此时液晶显示CW:RUN STATE:CW 。(2)步进电机反转即液晶显示:RUN STATE:CCW 。 (3)步进电机加速按键:步进电机转速加快且显示的转速加大(4)步进电机减速按键:液晶显示速度变小 电机转速减慢。3 扩展功能说明通过红外信号的发射由另一块单片机和红外线LED完成,用红外万能接收头接收红外信号,可以实现对电机的控制进行红外遥控。本电路设计包括max232接口通信电路,可以通过串口线直接与电脑相连接。可利用PC机强大功能编写PC软件来控制、验证、改善控制系统性能.利用以有的单片机系统,作为下位机,选用一台微机作为上位机,可以用VB 语言编写一个系统软件,这样可以基于PC的控制系统提高电机的控制功能。由于联动插补算法较复杂,有大量浮点运算,对实时性要求又较高,选用PC来完成插补运算和数值运算.同时可利用丰富的PC软件来改善控制系统的图形显示、动态仿真、编程和诊断功能。这样更有利于操作,大大提高步进电机运行的可靠性.另外电路中还增加了与电机同步的脉冲输出和方向控制电路(OC输出),可以方便的与专用的步进电机驱动器相联接.4 设计总结步进电机可在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反 转控制及制动等,这是步进电动机最突出的优点.步进电机的性能在很大程度上取决于步进电机控制系统,而步进电机控制系统由步进电机控制器、驱动器、系统软件等几部分组成,控制系统的每一部分对步进电机的运行性能息息相关.一台好的步进电机控制器就能体现出步进机在控制方面上的优越性能。所以我选择这样的毕业设计课题,并且能通过此次设计来提高自己软件编制和硬件电路设计的能力。在我完成这次毕业设计的过程中,当看到自己将专业知识用于解决实际的问题时,那份成就感和喜悦感是难以形容的。但是,在实际的编程以及调试程序过程中,我发现自己所应该学的太多太多。光靠自己在书本上所学过的这点知识是远远不够的,真正地认识到了工作就是学习的道理。采用此设计的步进电机驱动系统,在驱动二相或四相混合式步进电机时运动平稳,速度快,噪音低,控制精高,而且可选整步半步驱动。外观采用铝镁合金,散热性好,价格低廉,可广泛应用于需要驱动电流小于2A的混合式两相或四相步进电机的系统中。5 设计源程序(清单)#include "reg51。h" int delay(); /判断LCD是否可以写入即忙否(P1.7)void inti_lcd(); /液晶LCD1602初始化void show_lcd(int); /液晶读显示void cmd_wr(); /LCD写控制程序void ShowState(); /LCD状态显示即速度显示void clock(unsigned int Delay) ; /延时程序void DoSpeed(); /计算速度void motor_CCW(); /电机正转void motor_CW(); /电机反转void key(); /固定档位按键#define uchar unsigned char /无符号字符定义uchar code CW4=0x01,0x02,0x04,0x08; /正转表uchar code CCW4=0x08,0x04,0x02,0x01; /反转表#define RIGHT_RUN 1 /正转值#define LEFT_RUN 0 /反转值sbit RS=0xA0;sbit RW=0xA1;sbit E=0xA2; /LCD1602RS RW E脚分别接于P2。0 P2。1 P2。2sbit P0_0=P00;sbit P0_1=P01;sbit P0_2=P02;sbit P0_3=P03;sbit P2_3=P23;sbit P1_7=P17;sbit P3_0=P30; /单片机的管脚定义define sfr P1=0x90;define sfr P0=0x80; /寄存器定义char SpeedChar=”SPEED(n/min):”;char StateChar=”RUNSTATE:"char STATE_CW=”CW";char STATE_CCW=”CCW”; /显示数组char SPEED3="050”; /初始速度设定unsigned int RunSpeed=50;/初始速度值unsigned char RunState=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(); /电机正转 else if(P2_3=0) motor_CCW(); /电机反转 /步进电机正转/*/void motor_CW()uchar i; for (i=0; i<4; i+) /一个周期转30度 P0 = CWi; /取数 clock(RunSpeed);/ 脉冲延时 /步进电机反转/*/void motor_CCW() uchar j; for (j=0; j<4; j+) /一个周期转30度 P0 =CCWj; /取数据 clock(RunSpeed);/ 脉冲延时 /定时器0中断程序:正转void t_0(void) interrupt 1RunState=RIGHT_RUN; P2_3=1; P1=0x01; /清屏 cmd_wr(); ShowState(); /定时器1中断:反转void t_1(void) interrupt 3RunState=LEFT_RUN; P2_3=0; P1=0x01; cmd_wr(); ShowState(); /中断0:加速程序void SpeedUp() interrupt 0 if(RunSpeed=12) RunSpeed=RunSpeed-2; DoSpeed(); P1=0x01; cmd_wr(); ShowState(); /中断1:减速程序void SpeedDowm() interrupt 2 if(RunSpeed<=100) RunSpeed=RunSpeed+2; DoSpeed(); P1=0x01; cmd_wr(); ShowState();void key() if(P3_0=0) RunSpeed=70; DoSpeed(); P1=0x01; cmd_wr(); ShowState();int delay() /判断LCD是否忙 int a;start: RS=0; RW=1; E=0; for(a=0;a2;a+); E=1; P1=0xff; if(P1_7=0) return 0; else goto start;void inti_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(); void cmd_wr() /写控制字 RS=0; RW=0; E=0; E=1;void show_lcd(int i) /LCD显示子程序 P1=i; /将数据经P1口送入液晶显示 RS=1; RW=0; E=0; E=1;void ShowState() /显示状态与速度 int i=0; while(SpeedChari!='0) delay(); show_lcd(SpeedChari); i+; delay(); P1=0x80 0x0d; cmd_wr(); i=0; while(SPEEDi!='0) delay(); show_lcd(SPEEDi); i+; delay(); P1=0xC0; cmd_wr(); i=0; while(StateChari!=0') delay(); show_lcd(StateChari); i+; delay(); P1=0xC0 0x0A; cmd_wr(); i=0; if(RunState=RIGHT_RUN) while(STATE_CWi!=0') delay(); show_lcd(STATE_CWi); i+; else while(STATE_CCWi!=0') delay(); show_lcd(STATE_CCWi); i+; void clock(unsigned int Delay) /1ms延时程序 unsigned int i; for(;Delay>0;Delay-) for(i=0;i124;i+); void DoSpeed() /液晶上速度显示计算 SPEED0=(10006/RunSpeed/100)+48; SPEED1=10006/RunSpeed100/10+48; SPEED2=1000*6/RunSpeed%10+48;6 附录6.1为什么步进电机低速时可以正常运转,但若高于一定速度就无法启动,并伴有啸叫声?步进电机有一个技术参数:空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或停转。在有负载的情况下,启动频率应更低。如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机速从低速升到高速)。6.2 四相混合式步进电机与驱动器的串联接法和并联接法有什么区别? 四相混合式步进电机一般由两相驱动器来驱动,因此,连接时可以采用串联接法或并联接法将四相电机接成两相使用。串联接法一般在电机转速较的场合使用,此时需要的驱动器输出电流为电机相电流的0.7倍,因而电机发热小;并联接法一般在电机转速较高的场合使用(又称高速接法),所需要的驱动器输出电流为电机相电流的1.4倍,因而电机发热较大。6.3如何确定步进电机驱动器的直流供电电源?A.电压的确定混合式步进电机驱动器的供电电源电压一般是一个较宽的范围(比如IM483的供电电压为1248VDC),电源电压通常根据电机的工作转速和频率应要求来选择。如果电机工作转速较高或响应要求较快,那么电压取值也高,但电源电压的纹波不能超过驱动器的最大输入电压,否则可能损坏驱动器。B.电流的确定供电电源电流一般根据驱动器的输出相电流I来确定.如果用线性电源,电源电流一般可取I 的1。11。3倍;如果采用开关电源,电源电流一般可取I 的1。52.0倍.参考文献1 胡汉才,单片机原理及其接口技术,清华大学出版社;2 沙占友,王彦朋,孟志永,单片机外围电路设计,电子工业出版社;3康华光,陈大钦,电子技术基础,北京高等教育出版社;4黄继昌,张海贵,郭继忠,实用单元电路及其应用,人民邮电出社;;5张迎新 单片机初级教程-单片机基础,北京航空航天大学出版社。6 CS-51系列单片机实用接口技术北京航空航天大学出版社7电动机的单片机控制 北京航空航天大学出版8单片机的C语言言应用程序设计北京航空航天大学出版社9单片机典型模块设计实例导航北京人民邮电出版社附2:系统原理图及实物图23
展开阅读全文