大学毕业设计 - C51程序控制步进电机

更新时间:2024-01-31 21:33:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

题 目:

简易步进电机控制 步进电机控制

摘要:本设计采用ATMEL公司DIP-40封装的AT89S52单片机实现对四相步进电机的

手动和按键控制。由单片机产生的脉冲信号经过分配后分解出对应的四相脉冲,分解出的四相脉冲经驱动电路功率放大后驱动步进电机的转动。转速的调节和状态的改变由按键进行选择,此过程由程序直接进行控制。通过键盘扫描把选择的信息反馈给单片机,单片机根据反馈信息做出相应的判断并改变输出脉冲的频率或转动状态信号。电机转动的不同状态由液晶LCD1602显示出来。而设计的扩展部分可以通过红外信号的发射由另一块单片机和红外线LED完成,用红外万能接收头接收红外信号,可以实现对电机的控制进行红外遥控。 关键字:四相步进电机 单片机 功率放大 LCD1602

1

目录

步进电机控制 ?????????????????????????1

摘要 ?????????????????????????????1 关键字 ????????????????????????????1

前言 ??????????????????????????????3 1系统总体方案设计及硬件设计?????????????????4

1.1步进电机??????????????????????????4

1.1.1 步进电机的种类 ?????????????????????4 1.1.2 步进电机的特点 ?????????????????????4 1.1.3 步进电机的原理 ?????????????????????5 1.2 控制系统电路设计??????????????????????7 1.3 液晶显示LCD1602??????????????????????7 1.4 AT89S52核心部件及系统SCH原理图??????????????9 1.5 LN2003A驱动????????????????????????10

2软件设计及调试????????????????????????13 2.1程序流程 ?????????????????????????13

2.2软件设计及调试 ??????????????????????14

3 扩展功能说明?????????????????????????15 4设计总结 ???????????????????????????16 5 设计源程序??????????????????????????16 6 附录 ?????????????????????????????21 参考文献 ????????????????????????????22 附2:系统原理图及实物图 ???????????????????23

2

前言

步进电机广泛应用于对精度要求比较高的运动控制系统中,如机器人、打印机、软盘驱动器、绘图仪、机械阀门控制器等。目前,对步进电机的控制主要有由分散器件组成的环形脉冲分配器、软件环形脉冲分配器、专用集成芯片环形脉冲分配器等。分散器件组成的环形脉冲分配器体积比较大,同时由于分散器件的延时,其可靠性大大降低;软件环形分配器要占用主机的运行时间,降低了速度;专用集成芯片环形脉冲分配器集成度高、可靠性好,但其适应性受到限制,同时开发周期长、需求费用较高。步进电机是微特电机的一种,其作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。同时步进电动机是一种将脉冲信号变换成相应的角位移(或线位移)的电磁装置,是一种特殊的电动机。一般电动机都是连续转动的,而步进电动机则有定位和运转两种基本状态,当有脉冲输入肘步进电动机一步一步地转动,每给它一个脉冲信号,它就转过一定的角度。步进电动机的角位移量和输入脉冲的个数严格成正比,在时间上与输入脉冲同步,因此只要控制输入脉冲的数量、频率及电动机绕组通电的相序,便可获得所需的转角、转速及转动方向。在没有脉冲输入时,在绕组电源的激励下气隙磁场能使转子保持原有位置于定位状态。步进电机以广泛应用在生产实践的各个领域。它最大的应用是在数控机床的制造中,因为步进电机不需要A/D转换,能够直接将数字脉冲信号转化成为角位移,所以被认为是理想的数控机床的执行元件。早期的步进电机输出转矩比较小,无法满足需要,在使用中和液压扭矩放大器一同组成液压脉冲马达。随着步进电动机技术的发展,步进电动机已经能够单独在系统上进行使用,成为了不可替代的执行元件。除了在数控机床上的应用,步进电机也可以并用在其他的机械上,比如作为自动送料机中的马达,作为通用的软盘驱动器的马达,也可以应用在打印机和绘图仪中。伴随着不同的数字化技术的发展以及步进电机本身技术的提高,步进电机将会在更多的领域得到应用。

3

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

机控制带来了很大的方便,反过来,计算机的出现也为步进电机开辟了更为广阔的使用市场;

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θ=360 P×N

式中:Lθ为步长;P为相数;N为转子齿数。在图1中,步长为15°,表示电机转一圈需要24步。

四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通

5

电,就能使步进电机步进转动。图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.步进电机工作时序波形图 对步进电机四个绕组依次实现如下方式的循环通电控制:

6

单四拍运行:正转A-B-C-D;反转D-C-B-A

双四拍运行:正转AB-BC-CD-DA;反转DC-CB-BA-AD

单双八拍运行:正转A-AB-B-BC-C-CD-D-DA

1.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)端。 第7~14脚:D0~D7为8位双向数据端。

7

第15~16脚:空脚或背灯电源。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+地址码(0-27H,40-67H) 其他设置:

(01H(显示清屏,数据指针=0,所有 显示=0);02H(显示回车,数据指针=0)。

8

图8 液晶LCD1602

1.4 AT89S52核心部件及系统SCH原理图

AT89S52单片机功能特性描述:

AT89S52 是美国 ATMEL 公司生产的低功耗、高性能 CMOS 8 位单片机,片内含 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内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

9

图9 SCH原理框图

1.5 LN2003A驱动

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、数字量输出卡等控制电路

10

中。可直接驱动继电器等负载。

输入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 或SOP—16

ULN2003A在各种控制电路中常用它作为驱动继电器的芯片,其芯片内部做了一个消线圈反电动势的二极管。ULN2003的输出端允许通过IC 电流200mA,饱和压降VCE 约1V左右,

11

耐压BVCEO 约为36V。输出电流大,故可以直接驱动继电器或固体继电器(SSR)等外接控制器件,也可直接驱动低压灯泡。

ULN2003可以驱动7个继电器,具有高电压输出特性,并带有共阴极的续流二极管使器件可用于开关型感性负载。每对达林顿管的额定集电极电流是500mA,达林顿对管还可并联使用以达到更高的输出电流能力。

ULN2003A中每对达林顿管的基极都串联有一个2.7kΩ的电阻,可直接与TTL或5V CMOS器件连接。

ULN2003可以并联使用,在相应的OC输出管脚上串联几个欧姆的均流电阻后再并联使用,防止阵列电流不平衡。

2. 在输入口输入高电平时﹐输出口为低电平﹐但是在输入端输入低电平时﹐输出端怎么还是低电平?

ULN2003A的输出结构是集电极开路的,所以要在输出端接一个上拉电阻,在输入低电平的时候输出才是高电平。在驱动负载的时候,电流是由电源通过负载灌入ULN2003A的。

图11 ULN2003A驱动电路图

ULN2003一般用来驱动大电流的装置,如继电器,LED灯等,在驱动继电器这种装置时,COM端最好接上电源,以用来泄放继电器线圈的反向电动势。

12

显示电路主要包括大型LED数码管BSI20-1(共阳极,数字净高12 cm)和高电压大电流驱动器ULN2003,大型LED数码管的每段是由多个LED发光二极管串并联而成的,因此导通电流大、导通压降高。ULN2003是高压大电流达林顿晶体管阵列电路,他具有7个独立的反相驱动器,每个驱动器的输出灌电流可达500 mA,导通时输出电压约1 V,截止时输出电压可达50 V。ULN2003的1~7脚为信号输入脚,依次对应的输出端为16~10脚,8脚为接地端。当驱动电源电压为+12 V时,若要求数码管每段导通电流为40 mA,则每段的限流电阻为50Ω。则一块ULN2003恰好驱动一个LED数码管的7段。大数码管采用共阳极接法,低电平有效。锁存器输出的电平经NPN三极管9014反相后,再由ULN2003放大后推动大数码管显示。

2 软件设计及调试 2.1 程序流程

图12 LCD初始化流程图 图13 液晶显示控制程序流程图

返回 输入方式设置 结束 LCD初始 开始 LCD初始化 工作方式设置 显示状态设置 光标定位 清屏 显示字符 13

开始 C51库调用 LCD1602显示字设定 C语言各函数设置及定义 定时器初值设定(设定按键) 定时器T0定时中断按键 P2.3=1 P1=0x01清屏 判断LCD是否可写入 定时器T1定时中断按键 P2.3=0 P1=0x01清屏 返回 LCD初始化 外部T0计数中断按键 RunSpeed-2 DoSpeed液晶显示的速度计算后清屏 LCD液晶显示 外部T1计数中断按键 RunSpeed+2 单片机P0.1-P0.3延时脉冲斩波输出 返回 图14 程序总流程

2.2 软件设计及调试

软件设计:根据要求,可以将程序分为以下几个部份:

(1) 键盘输入程序设计

本系统使用的键盘较少且比较特殊,因此采用独立式键盘(定时器定时内部T0、T1中断及外部计数T0、T1中断)接口设计。独立式键盘适用于按键数量较少的场合。独立键盘工作原理:通过上拉电阻接到+5V上。无按键,处于高电平状态,有键按下电平为低。在消除抖动影响上是可以采用了软件消抖方法:在第一次检测到有键按下时,执行一段延时子程

14

序后(约10ms),再确认电平是否仍保持闭合状态电平,如果保持闭合状态电平,则确认真正有键按下,进行相应处理工作,消除了抖动的影响。

(2) 步进电机运行步数控制程序

此方案采用单相和双相交差通电处理方式。此方法具有运行速度稳定,运行步数准确无误等优点。

调试:本电路经调试符合题目要求,各项技术指标均达到设计的目的。具体操作控制方法如下:

(1)步进电机正转既此时液晶显示CW:RUN STATE:CW 。

(2)步进电机反转即液晶显示:RUN STATE:CCW 。

(3)步进电机加速按键:步进电机转速加快且显示的转速加大 (4)步进电机减速按键:液晶显示速度变小 电机转速减慢。

3 扩展功能说明

通过红外信号的发射由另一块单片机和红外线LED完成,用红外万能接收头接收红外信号,可以实现对电机的控制进行红外遥控。

本电路设计包括max232接口通信电路,可以通过串口线直接与电脑相连接。可利用PC机强大功能编写PC软件来控制、验证、改善控制系统性能。利用以有的单片机系统,作为下位机,选用一台微机作为上位机,可以用VB 语言编写一个系统软件,这样可以基于PC的控制系统提高电机的控制功能。由于联动插补算法较复杂,有大量浮点运算,对实时性要求又较高,选用PC来完成插补运算和数值运算。同时可利用丰富的PC软件来改善控制系统的图形显示、动态仿真、编程和诊断功能。这样更有利于操作,大大提高步进电机运行的可靠性。另外电路中还增加了与电机同步的脉冲输出和方向控制电路(OC输出),可以方便的与专用的步进电机驱动器相联接。

4 设计总结

步进电机可在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反 转控制及制动等,这是步进电动机最突出的优点。步进电机的性能在很大程度上取决于步进电机控制系统,而步进电机控制系统由步进电机控制器、驱动器、系统软件等几部分组成,控制系统的每一部分对步进电机的运行性能息息相关。一台好的步进电机控制器就能体现出步进机在控制方面上的优越性能。所以我选择这样的毕业设计课题,并且能通过此次设计来提高

15

自己软件编制和硬件电路设计的能力。在我完成这次毕业设计的过程中,当看到自己将专业知识用于解决实际的问题时,那份成就感和喜悦感是难以形容的。但是,在实际的编程以及调试程序过程中,我发现自己所应该学的太多太多。光靠自己在书本上所学过的这点知识是远远不够的,真正地认识到了工作就是学习的道理。采用此设计的步进电机驱动系统,在驱动二相或四相混合式步进电机时运动平稳,速度快,噪音低,控制精高,而且可选整步半步驱动。外观采用铝镁合金,散热性好,价格低廉,可广泛应用于需要驱动电流小于2A的混合式两相或四相步进电机的系统中。

5 设计源程序 (清单)

#include \

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 CW[4]={0x01,0x02,0x04,0x08}; //正转表 uchar code CCW[4]={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.2 sbit P0_0=P0^0; sbit P0_1=P0^1; sbit P0_2=P0^2; sbit P0_3=P0^3; sbit P2_3=P2^3;

sbit P1_7=P1^7;

sbit P3_0=P3^0; //单片机的管脚定义 #define sfr P1=0x90;

#define sfr P0=0x80; //寄存器定义 char SpeedChar[]=\char StateChar[]=\char STATE_CW[]=\

16

char STATE_CCW[]=\显示数组 char SPEED[3]=\初始速度设定 unsigned int RunSpeed=50; //初始速度值 unsigned char RunState=RIGHT_RUN; //运行状态 main() //主程序 {

/*定时器设置*/

TMOD=0x66; //定时器0,1都为计数方式;方式2; EA=1; //开总中断开启 TH0=0xff; 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:减速

//定时器T0初值FFH;

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 = CW[i]; //取数 clock(RunSpeed); // 脉冲延时 } }

17

}

/*步进电机反转

/********************************************************/ void motor_CCW() {

uchar j; {

for (j=0; j<4; j++) //一个周期转30度 {

P0 =CCW[j]; //取数据 clock(RunSpeed); // 脉冲延时 } } }

//定时器0中断程序:正转 void t_0(void) interrupt 1 {

RunState=RIGHT_RUN; P2_3=1;

P1=0x01; //清屏 cmd_wr();

ShowState(); }

//定时器1中断:反转

void t_1(void) interrupt 3 {

RunState=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

18

{

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;a<2;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;

19

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(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;

20

while(StateChar[i]!='\\0') {

delay();

show_lcd(StateChar[i]); i++; }

delay(); P1=0xC0 | 0x0A; cmd_wr(); i=0;

if(RunState==RIGHT_RUN) while(STATE_CW[i]!='\\0') {

delay();

show_lcd(STATE_CW[i]); i++;

} else

while(STATE_CCW[i]!='\\0') {

delay();

show_lcd(STATE_CCW[i]); i++; } }

void clock(unsigned int Delay) //1ms延时程序 { unsigned int i;

for(;Delay>0;Delay--) for(i=0;i<124;i++); }

void DoSpeed() //液晶上速度显示计算 {

SPEED[0]=(1000*6/RunSpeed/100)+48; SPEED[1]=1000*6/RunSpeed0/10+48; SPEED[2]=1000*6/RunSpeed+48; }

6 附录

6.1为什么步进电机低速时可以正常运转,但若高于一定速度就无法启动,并伴有啸叫声?

步进电机有一个技术参数:空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或停转。在有负载的情

21

况下,启动频率应更低。如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机速从低速升到高速)。

6.2 四相混合式步进电机与驱动器的串联接法和并联接法有什么区别?

四相混合式步进电机一般由两相驱动器来驱动,因此,连接时可以采用串联接法或并联接法将四相电机接成两相使用。串联接法一般在电机转速较的场合使用,此时需要的驱动器输出电流为电机相电流的0.7倍,因而电机发热小;并联接法一般在电机转速较高的场合使用(又称高速接法),所需要的驱动器输出电流为电机相电流的1.4倍,因而电机发热较大。

6.3如何确定步进电机驱动器的直流供电电源?

A.电压的确定

混合式步进电机驱动器的供电电源电压一般是一个较宽的范围(比如IM483的供电电压为12~48VDC),电源电压通常根据电机的工作转速和频率应要求来选择。如果电机工作转速较高或响应要求较快,那么电压取值也高,但电源电压的纹波不能超过驱动器的最大输入电压,否则可能损坏驱动器。 B.电流的确定

供电电源电流一般根据驱动器的输出相电流I来确定。如果用线性电源,电源电流一般可取I 的1.1~1.3倍;如果采用开关电源,电源电流一般可取I 的1.5~2.0倍。

参考文献

1 胡汉才,《单片机原理及其接口技术》,清华大学出版社;

2 沙占友,王彦朋,孟志永,《单片机外围电路设计》,电子工业出版社; 3康华光,陈大钦,《电子技术基础》,北京高等教育出版社;

4黄继昌,张海贵,郭继忠,《实用单元电路及其应用》,人民邮电出社;; 5张迎新 《单片机初级教程——单片机基础》,北京航空航天大学出版社。 6 CS-51系列单片机实用接口技术》北京航空航天大学出版社 7电动机的单片机控制》 北京航空航天大学出版

8单片机的C语言言应用程序设计》 北京航空航天大学出版社 9单片机典型模块设计实例导航 .北京人民邮电出版社 .

22

附2:系统原理图及实物图

23

本文来源:https://www.bwwdw.com/article/vshw.html

Top