单片机课程设计(
)-开关控制步进电机正反转.doc
绪论
步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。在数控机床、医疗器械、仪器仪表、机器人以及其他自动设备中得到了广泛应用,我们使用的计算机外围的一些设备,如软驱、打印机、扫描仪等其运动部件的控制都采用了步进电机。
常见的步进电机分三种:永磁式(PM),反应式(VR)和混合式(HB),永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度 或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为 0.72度。这种步进电机的应用最为广泛。
1
目录
1 设计目的 .................................................................................... 3 2 硬件电路设计及描述 ................................................................ 4
2.1确定元器件的型号及参数 .................................................. 4
2.1.1 AT89C51 单片机 ....................................................... 4
2.1.2 ULN2003芯片 .......................................................... 6
2.2 步进电机 .......................................................................... 7
2.2.1 永磁式步进电机 ..................................................... 7
2.2.2 步进电机原理以及原理图.................................... 10
2.2.3 功能说明 ............................................................... 11
2.2.4步进电机的静态指标术语 ...................................... 11
2.2.5 步进电机动态指标及术语: .................................. 12
3 程序设计 .................................................................................. 13
3.1 编程 ................................................................................ 13
3.2
图 .......................................................................... 14
3.3 程序清单 ........................................................................ 15
3.3.1 代码详解 ............................................................... 17
3.3.2 程序分析 ............................................................... 17 4 参考文献 ................................................................................ 18 5 结束语 .................................................................................... 19
2
1 设计目的
步进电机若加入适当的脉冲信号时,转子则会以一定的步数转动。如果加入连续的脉冲信号,步进电机就会连续转动,转动的角度与脉冲频率成正比,正、反转可由脉冲的顺序来控制。
本程序通过K1、K2和K3三个按钮开关控制步进电机转动和改变转向,电动机使用1-2相激磁,编程时采用制表的方法。正转和反转的脉冲信号频率是相通的,但由于使用激磁方式不一样,反转使用了1-2相激磁法,故反转速度为正转的一半。
3
2 硬件电路设计及描述
2.1确定元器件的型号及参数
2.1.1 AT89C51 单片机
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业
的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且廉价的
。
图一 AT89C51单片机
4
1 主要特性:
?与MCS-51 兼容
?4K字节可编程闪烁存储器
寿命:1000写/擦循环
数据保留时间:10年
?全静态工作:0Hz-24Hz
?三级程序存储器锁定
?128*8位内部RAM
?32可编程I/O线
?两个16位定时器/计数器
?5个中断源
?可编程串行通道
?低功耗的闲置和掉电模式
?片内振荡器和时钟电路
2. 管脚说明:
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚 备选功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(记时器0外部输入)
5
P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通)
P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电
平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
2.1.2 ULN2003芯片
单片机的输出电流太小,不能直接连接步进电机,需要加驱动电路。对于电流小于0.5A的步进电机,可以采用ULN2003类的驱动IC.
如图二所示为2001/2002/2003/2004系列驱动器引脚图,图左边1-7引脚为输入端,接单片机输入端,引脚8接地;右侧10-16引脚为输入端,接步进电机,引脚9接电源+5V,该驱动器可提供最高0.5A的电流
6
图二 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 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。
ULN2003 是高耐压、大电流、内部由七个硅NPN 达林顿管组成的驱动芯片。 经常在以下电路中使用,作为:
7
1、显示驱动
2、继电器驱动
3、照明灯驱动
4、电磁阀驱动
5、伺服电机、步进电机驱动等电路中。
ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来 处理的数据。
ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行
。
ULN2003 的封装采用DIP—16 或SOP—16
下表列出了该电机的一些典型参数:
型号 步距相数 电压 电流 电阻 最大定位转动
角 静转转矩 惯量
矩
35BY48S03 7.5 4 12 0.26 47 180 65 2.5
有了这些参数,不难设计出控制电路,因其工作电压为12V,最大电流为0.26A,因此用一块开路输出达林顿驱动器(ULN2003)来作为驱动,通过 P1.4-P1.7来控制各线圈的接通与切断,电路如图3所示。开机时,P1.4-P1.7均为高电平,依次将P1.4-P1.7切换为低电平即可驱动步进电机运行,注意在切换之前将前一个输出引脚变为高电平。如果要改变电机的转动速度只要改变两次接通之间的时间,而要改变电机的转动方向,只要改变各线圈接通的顺序。
8
2.2 步进电机
2.2.1 永磁式步进电机
下面以电子爱好者业余制作中常用的永磁式步进电机为例,来介绍如何用单片机控制步进电机。
图三是该电机的接线图,从图中可以看出,电机共有四组线圈,四组线圈的一个端点连在一起引出,这样一共有5根引出线。要使用步进电机转动,只要轮流给各引出端通电即可。将COM端标识为C,只要AC、 C、BC、 C,轮流加电就能驱动步进电机运转,加电的方式可以有多种,如果将COM端接正电源,那么只要用开关元件(如三极管),将A、 、B、 轮流接地。
图三 35BY48S03型步进电机的接线图
9
2.2.2 步进电机原理以及原理图
电路设计如图四所示。K1、K2和K3按钮开关分别接在单片机的P3.2,P3.4 引脚上,作为控制信号的输入端,输入端直接采用ULN2003驱动电路控制步进电机的转向。
图四 开关控制步进电机的电路原理图
10
2.2.3 功能说明
单片机的P3.2,P3.4引脚分别接有按钮开关K1、K2和K3,用来控制步进 电机的转向。
开始供电时,步进电机停止。
按K1时,电动机正转;按K2时,电动机反转。
按K3时,电动机停止转动。
2.2.4步进电机的静态指标术语
相数:产生不同对极N、S磁场的激磁线圈对数。常用m表示。
拍数:完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A.
步距角:对应一个脉冲信号,电机转子转过的角位移用θ表示。θ=360度(转子齿数J*运行拍数),以常规二、四相,转子齿为50齿电机为例。四拍运行时步距角为θ=360度/(50*4)=1.8度(俗称整步),八拍运行时步距角为θ=360度/(50*8)=0.9度(俗称半步)。
定位转矩:电机在不通电状态下,电机转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成的)
静转矩:电机在额定静态电作用下,电机不作旋转运动时,电机转轴的锁定力矩。此力矩是衡量电机体积(几何尺寸)的标准,与驱动电压及驱动电源等无关。
虽然静转矩与电磁激磁安匝数成正比,与定齿转子间的气隙有关,但过份采用减小气隙,增加激磁安匝来提高静力矩是不可取的,这样会造成电机的发热及机械噪音。
11
2.2.5 步进电机动态指标及术语:
1、步距角精度:
步进电机每转过一个步距角的实际值与理论值的误差。用百分比表示:误差/步距角*100%。不同运行拍数其值不同,四拍运行时应在5%之内,八拍运行时应在15%以内。
2、失步:
电机运转时运转的步数,不等于理论上的步数。称之为失步。 3、失调角:
转子齿轴线偏移定子齿轴线的角度,电机运转必存在失调角,由失调角产生的误差,采用细分驱动是不能解决的。
4、最大空载起动频率:
电机在某种驱动形式、电压及额定电流下,在不加负载的情况下,能够直接起动的最大频率。
5、最大空载的运行频率:
电机在某种驱动形式,电压及额定电流下,电机不带负载的最高转速频率。 6、运行矩频特性:
电机在某种测试条件下测得运行中输出力矩与频率关系的曲线称为运行矩频特性,这是电机诸多动态曲线中最重要的,也是电机选择的根本依据。如下图五所示:
图五
其它特性还有惯频特性、起动频率特性等。
电机一旦选定,电机的静力矩确定,而动态力矩却不然,电机的动态力矩取决于电机运行时的平均电流(而非静态电流),平均电流越大,电机输出力矩越大,即电机的频率特性越硬。
12
如下图六所示:
图六
其中,曲线3电流最大、或电压最高;曲线1电流最小、或电压最低,曲线与负载的交点为负载的最大速度点。
要使平均电流大,尽可能提高驱动电压,使采用小电感大电流的电机。
3 程序设计
3.1 编程
13
编程采用制表的方法,步进电机正转采用二相激磁方式,时序如表所示
2相激磁方式正转时序
步进 P0.3 P0.2 P0.1 P0.0 0FCH 1 1 1 0 0 0F9H 2 1 0 0 1 0F3H 3 0 0 1 1 0F6H 4 0 1 1 0
步进电机反转采用1-2相激磁方式,时序如表
1-2相激磁反转时序
步进 P0.3 P0.2 P0.1 P0.0 0F7H 1 0 1 1 1 0F3H 2 0 0 1 1 0FBH 3 1 0 1 1 0F9H 4 1 0 0 1 0FDH 5 1 1 0 1 0FCH 6 1 1 0 0 0FEH 7 1 1 1 0 0F6H 8 0 1 1 0
3.2 流程图
程序设计流程如图所示
14
开始
按键扫描
按K1 按K2 按K3
正转 反转 停止
读取表格
输出
结束
3.3 程序清单
15
01 K1 EQU P3.2 ;设定P3.2以K1表示 02 K2 EQU P3.3 ;设定P3.3以K2表示 03 K3 EQU P3.4 ;设定P3.4以K3表示 04
05 STOP: MOV P0,#OFFH ;步进电机停止
,是则正传 06 LOOP: JNB K1,Z_M2 ;是否按K107 JNB K2,F_M2 ;是否按K2,是则反转 08 JNB K3,STOP1 ;是否按K3,时则停止 09 JMP LOOP ;跳转至LOOP处 10
11 STOP1: ACALL DELAY ;按K3的消除抖动 12 JNB K3,$ ;K3放开否 13 ACALL DELAY ;放开消除抖动 14 JMP STOP ;电机停止 15
16 Z_M2: ACALL DELAY ;按K1的消除抖动 17 JNB K1,$ ;K1放开否 18 ACALL DELAY ;放开消除抖动 19 JMP Z_M ;转至Z_M处 20
21 F_M2: ACALL DELAY ;按K2的消除抖动 22 JNB K2,$ ;K2放开否 23 ACALL DELAY ;放开消除抖动 24 JMP F_M ;转至F_M处,循环 25 ;正转子程序
26 Z_M: MOV R0,#00H ;正转到TABLE取码指针初值 27 Z_M1: MOV A,R0 ;到TABLE取码 28 MOV DPTR,#TABLE ;存表
29 MOVC A,@A+DPTR ;取表代码 30 JZ Z_M ;是否取到结束码, 31 MOV P0,A ;输出至P0,正转 32 JNB K3,STOP1 ;是否按K3,是则停止运转
33 JNB K2,F_M2 ;是否按K2,是则反转 34 ACALL DELAY ;步进电机转速 35 INC R0 ;取下一个码 36 JMP Z_M1 ;转至Z_M处,循环 37 RET
38 ;反转子程序
39 F_M: MOV R0,#05 ;反转到TABLE取码指针初值 40 F_M1: MOV A,R0 ;到TABLE取码 41 MOV DPTR,#TABLE ;存表
42 MOVC A,@A+DPTR ;取表代码 43 JZ F_M ;是否取到结束码, 44 MOV P0,A ;输出至P0,反转
16
45 JNB K3,STOP1 ;是否按K3,是则停止运转 46 JNB K1,Z_M2 ;是否按K1,是则正转 47 ACALL DELAY ;步进电机转速 48 INC R0 ;取下一个码 49 JMP F_M1 ;转至F_M1处,循环 50 RET
51
52 DELAY: MOV R6,#40 ;延时时间20ms53 D1: MOV R7,#248 54 DJNZ R7,$ 55 DJNZ R6,D1 56 RET
57 ;控制码表
58 TABLE
59 DB 0FCH, OF9H, 0F3H, 0F6H ;正转 60 DB 00H ;反转结束码 61 DB 0F7H, 0F3H, 0FBH, 0F9H ;反转 62 DB 0FDH, 0FCH, 0FEH, 0F6H
63 DB 00H ;反转结束码 64
65 END ;程序结束
3.3.1 代码详解
主要标号说明
LOOP: 按键扫描
STOP1: K3键消除抖动
Z_M2: K1键消除抖动
F_M2: K2键消除抖动
Z_M: 反转子程序
F_M: 正转子程序
DELAY: 延时子程序
TABLE: 控制码表
3.3.2 程序分析
01,03: 将P3.2、P3.3、P3.4引脚分别用K1、K2、K3表示。 05: 使步进电机停止转动。
17
06,09: 对按键扫描。当按键开关未按下时,相应引脚为高电平;当开关按下时,相应引脚为低电平。所以通过循环检测按键开关所连接的引脚电平的高低,就可以判断出开关状态。
11: 按K3时,调延时子程序,延时一小段时间来消除按键时的抖动。 12: 按键未开放时,程序将在此等待,只有按键开放后,程序才会向下运行。 13:按键放开时,调延时子程序,延时一小段时间来消除按键放开时的抖动。 14: 当确定K3按键被按下又被放开后,才认定是一次有效按键,程序将跳转到STOP处,执行停机语句,使电机停止转动。
16,19: 与上述11-14行语句原理相同,是对K1键按下和放开时消除抖动的处理,并跳转到Z_M处,执行正传子程序。
21,24: 对按K2键时消除抖动的处理,并跳转到Z_M处,执行反转子程序。 26: 正转子程序开始,将R0赋值为0,使取表指针指向表TABLE的第一个码位置。
27: 将R0值送入累加器A。
28: 将编制的电机控制码表TABLE存入特殊寄存器DPTR。
29: 从特殊寄存器DPTR中取出第一个控制码。
30: 检查是否取到结束码,结束码为00H。如果取到结束码00H,JZ指令会使程序跳转到标号Z_M处,从第一个码开始读取;如果取到的不是结束码00H,程序向下运行。
31: 将取到的数据由P0端输出。
检查是否按K3,是则停止运转。 32:
33: 检查是否按K2,是则反转。
34: 调用延时子程序。此处调用延时子程序与前边调用的不同,前边调用延时子程序是为了消除按键的抖动。
此处调用延时子程序是电机运转两步之间的间隔时间,决定电机的转速,延时时间长,送入电机的脉冲信号频率低,电机转速慢;延时时间短,送入电机的脉冲信号频率高,电机转速快。所以在此处改变延时时间就可以改变电机转速。
35: 使R0的值为1,取下一个码。
36:跳转到Z_M处,开始新的循环。
37:正转子程序返回。
39,50:反转子程序。其中,第39行语句将R0赋值为5,是为了取码时从反转控制码中第一个码开始读取。
52,56:延时子程序,延时的时间为20ms。
58,63:步进电机激磁信号编码表。其中第59行为电机正转两相激磁码;第60行为正转结束码;第61、62行为反转1-2激磁码;第63行为反转结束码。 65:程序结束。
4 参考文献
《单片机应用技术》 北京理工大学出版社 倪志莲
18
《单片机实训教程》 北京大学出版社 张营辉、贡雪梅 《单片机原理与应用设计》 电子工业出版社 张毅刚、彭喜元 《基于Proteus的单片机应用技术》 电子工业出版社 江世明 《51单片机开发入门与典型实例》 人民邮电出版社 王守中、聂元铭
5 实训感悟
在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不
19
可少的。我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问
是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。
通过这次课程设计,我对单片机有了更深一步的了解,掌握了很多以前没太听懂的地方。这次的单片机课程设计重点是理论与实际的相结合,不单单只是书上的一条条分离的指令。通过这次设计让我更系统的了解了个个指令以及单片机的扩展内容,为以后学习有了进一步的准备。
20