吉首大学信息科学与工程学院
课程设计报告书
课 程 模拟电子技术基础
课 题: 步进电机驱动电路
姓 名:
学 号:
专 业:
年 级:
指导教师:
基地指导教师:
20##年 6 月
第二篇:步进电机控制课程设计报告(正式版)
微机原理与接口技术课程设计 ——基于Intel 8086 CPU的步进电机控制系统的设计与验证
小组成员:刘军磊(计科103软件)
张 勇(计科103软件) 谢首末(计科102软件)
报告执笔:谢首末
指导老师:高国红
日期:2012.05.21-2012.06.01
1
摘要:由于用步进电机组成的开环控制系统既简单、廉价、又性能可靠,因此在各种运动控制装置特别是在机电一体化设备中有着极其广泛的应用。
本文介绍的是一种基于8086CPU的步进电机控制系统的设计,通过8086CPU、可编程并行I/O芯片8255A、步进电机驱动芯片ULN2003A以及相应的辅助芯片和开关,用汇编语言编写了电机的正转、反转、加速、减速、停止程序,实现了步进电机的控制功能。并最终在Proteus 7.8 SP2中进行了芯片的绘制连接和系统的仿真验证,取得了良好的实验效果。
关键词:步进电机;8086CPU;Proteus仿真;汇编编程
2
目 录
第一章 选题分析,问题描述与设计要求-------------------------------------------04
第二章 问题分析与方案设计----------------------------------------------------------
第三章 硬件线路设计-------------------------------------------------------------------
第四章
第五章
第六章
第七章
程序流程图---------------------------------------------------------------------- 汇编源码------------------------------------------------------------------------- 经验与教训---------------------------------------------------------------------- 参考资料------------------------------------------------------------------------- 3
第一章
1. 选题分析:
课程设计题目分别列出如下:
a. 模拟交通灯控制 b. 步进电机控制 c. 模拟钢琴
d. 数字时钟 e. 计时器 f. 抢答器 g. 自拟选题
通过比较分析发现,6个已知题目都是通过按键/开关来手动产生一个信号,通过查询方式或中断方式将信号提交给CPU,并调用对应的处理子程序,以驱动相应的外设,比如LED灯,步进电机,蜂鸣器,或是7段数码管,进而达到整个系统控制的目的。
中间可能会牵涉到的可编程芯片有,可编程中断控制器8259A,可编程并行接口芯片8255A,可编程定时器/计数器8253,当然最后都要用到8086CPU。
再比较6个题目中,驱动外设的复杂程度要数步进电机最高;当然模拟钢琴要驱动的是蜂鸣器,需要通过8253芯片的out端口来产生不同的频率信号,而数字时钟题目和计时器题目都需要8253芯片来实现计数与定时功能,算是对8253芯片的基本应用。抢答器的设计稍显简单一点,驱动的是7段数码管,而模拟交通灯控制驱动的也是数码管,如果要是显示剩余时间的话应再加上8253芯片稍显复杂一点。
总之通过概括可以看出6个题目各有侧重点,最终我们小组选中了步进电机控制题目,因为首先考虑到步进电机控制的是运动执行机构,在机电一体化技术中显得很是重要;再加上它的硬件系统连线只需要一片8255A即可,你不是很复杂;另外一个很明显的原因是选择这个题目的人会很少(这在提交方案时得到了印证)。
2. 设计目的:
1. 了解步进电机控制的基本原理,掌握控制步进电机转动的编程方法。
2. 进一步熟练掌握8255A并行I/O口的工作方式以及编程方法。
3. 体会系统整体设计的流程与方法,为以后系统级设计积累经验。
3. 功能要求:
01. 通过开关K1实现步进电机的开始与停止;
02. 通过开关K2来选择步进电机的正转与反转;
03. 通过开关K3,K4组成(2-4译码)四档电机转速选择;
04. 对每只开关的选择情况同时通过4位8段数码管来显示;
05. 扩展设计:可以在以上功能基础上,增加控制步进电机单步转动的开关;增加控制电机加速转动的开关;增加控制电机减速的开关。
4. 问题分析:
5. 验证方法:
二. 设计方案
01. 使用的芯片与部件:
4
8086 CPU:
现将8086的引脚图和各引脚功能列出如下,其他具体内容详见《微机原理及接口技术》教材
8086CPU的40条引脚信号可按功能分可分为四类,它们是:地址总线,数据总线,控制总线,其它(时钟与电源)。
在最小模式下各引脚功能(MN/MX接+5V):
① AD15~AD0,地址/数据总线
② A19/S6~A16/S3,地址/状态总线
③ BHE/ S7,高8位数据允许/状态线
④MN/MX,最小/最大模式控制信号,输入
⑤RD,读信号
⑥WR,写信号
⑦M/IO,存储器/输入输出控制信号
⑧ALE,地址锁存允许信号
⑨READY(Ready),准备就绪信号
⑩INTR,可屏蔽中断请求信号
?INTA,中断响应信号
?NMI,非屏蔽中断请求信号
?RESET,系统复位信号
?DEN,数据允许信号
?DT/R,数据发送/接收控制信号
?HOLD,总线保持请求信号输入
?HLDA,总线保持响应信号
?TEST,测试信号
?CLK,时钟输入信号
?VCC(+5V),GND
8255A:8255是可编程并行I/O接口芯片,有3个8位并行I/O口。具有3个通
道3种工作方式的可编程并行接口芯片(40引脚)。 其各口功能可由软件选择,
使用灵活,通用性强。
其引脚图为:
74LS273:74LS273是一种带清除功能的8D
触发器, 1D~8D为数据输入端,1Q~8Q
为数据输出端,正脉冲触发,低电平清除,常
用作8位地址锁存器。
74LS138:74LS138为3线-8线译码器,其真值表和引脚图为: 引出端口号:
A、B、C 译码地址输入端
G1 选通端
/(G2A)、/(G2B)
选通端(低电平有效)
Y0~Y7 译码输出端(低电平有效)
5
ULN2003A:ULN2003A是高压大电流达林顿晶体管阵列,由功率电路来扩展输出电流以满足被控元件的电流,电压。具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。ULN2003A芯片主要用于如下领域:伺服电机,步进电机,电磁阀,可控照明灯。
步进电机:
步进电机概述:
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。
正常情况下,步进电机转过的总角度和输入的脉冲数成正比;连续输入一定频率的脉冲时,电动机的转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。由于步进电动机能直接接收数字量的输入,所以特别适合于微机控制。
本次课程设计采用的是四相八拍步进电机。
步进电机的基本参数:
(一)步进电机的静态指标术语
1、相数:产生不同对N、S磁场的激磁线圈对数。常用m表示。
2、拍数:完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A.
3、步距角:对应一个脉冲信号,电机转子转过的角位移用θ表示。θ=360度(转子齿数*运行拍数),以常规二、四相,转子齿为50齿电机为例。四拍运行时步距角为θ=360度/(50*4)=1.8度(俗称整步),八拍运行时步距角为θ=360度/(50*8)=0.9度(俗称半步)。
4、定位转矩:电机在不通电状态下,电机转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成的)
5、静转矩:电机在额定静态电作用下,电机不作旋转运动时,电机转轴的锁定力矩。此力矩是衡量电机体积(几何尺寸)的标准,与驱动电压及驱动电源等无关。
虽然静转矩与电磁激磁安匝数成正比,与定齿转子间的气隙有关,但过份采用减小气隙,增加激磁安匝来提高静力矩是不可取的,这样会造成电机的发热及机械噪音。
电机正反转控制:
当电机绕组通电时序为A-AB-B-BC-C-CD-D-DA时为正转,通电时序为DA-D-CD-C-BC-B-AB-A时为反转。
6
步进电机的工作原理:
步进电机的工作就是步进转动,其功用是将脉冲电信号变换为相应的角位移或是直线位移,就是给一个脉冲信号,电动机转动一个角度或是前进一步。步进电机的角位移量与脉冲数成正比,它的转速与脉冲频率(f)成正比,在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
如下所示的步进电机为一四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。图1是该四相反应式步进电机工作原理示意图。
图2-1 四相步进电机步进示意图
开始时,开关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方向转动。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2-2所示:
图2-2 步进电机工作时序波形图
如表3.1所示,首先使HA线圈和HB线圈有驱动电流,接着使HB和HC、HC和HD、HD和HA,又返回到HA和HB有驱动电流,按这种顺序切换,电机轴按顺时针方向旋转。
表3.1 步进电机激磁方式
第三章 硬件线路设计
7
第四章 程序流程图
第五章 源程序代码
IOY0 EQU 0C400H ;片选IOY0对应的端口起始地址
MY8255_A EQU IOY0+00H*4 ;8255的A口地址
MY8255_B EQU IOY0+01H*4 ;8255的B口地址
MY8255_C EQU IOY0+02H*4 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
DTABLE1 DB 6DH,79H,73H,77H,39H,06H,5BH,4FH,66H,40H
DTABLE3 DB 10H,30H,20H,60H,40H,0C0H,80H,90H
DTABLE4 DB 90H,80H,0C0H,40H,60H,20H,30H,10H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,3000H
MOV [SI],00H
MOV [SI+2],09H
MOV [SI+4],03H
MOV [SI+6],05H
MOV [SI+8],01H
MOV DX,MY8255_MODE ;初始化8255工作方式
MOV AL,81H ;方式0,A输出、B口输出,C口低四位输入,高四位输出 OUT DX,AL
QIDONG: ;CALL CLEAR
;CALL DIS
MOV DX,MY8255_C
IN AL,DX
8
TEST AL,01H
JNZ STOP ;测试C口的PC0是否为0;若不为0则跳到STOP代码段;否则继续执行下面代码
SPEED: MOV [SI],01H
CMP [SI+8],08H
JZ ZHI ;若3008H单元的值等于08H,则跳到ZHI代码段;否则的话,向下继续执行
MOV BX,[SI+8]
DEC BX
MOV DX,MY8255_C
IN AL,DX
TEST AL,02H
旋转)
JZ SHUN
NI: MOV [SI+4],03H
MOV AL,DTABLE4[BX]
PUSH AX
JMP ZHUANG
SHUN: MOV [SI+4],04H
MOV AL,DTABLE3[BX]
PUSH AX
ZHUANG: MOV DX,MY8255_C
IN AL,DX
TEST AL,0CH
JZ DANG3
TEST AL,04H
JZ DANG2
TEST AL,08H
JZ DANG4
DANG1:POP AX
MOV DX,MY8255_C
OUT DX,AL
INC BX
INC BX
MOV [SI+8],BX
MOV [SI+6],05H
CALL DALLY
CALL DALLY1
CALL DALLY1
CALL DALLY1
CALL DALLY1
;测试PC1口的是否为1,若为0则跳转到SHUN代码段(顺时针 ;逆时针转动片段 ;顺时针转动片段 9
CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 JMP SPEED DANG2:POP AX
MOV DX,MY8255_C OUT DX,AL INC BX
INC BX
MOV [SI+8],BX MOV [SI+6],06H CALL DALLY CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1
JMP SPEED DANG3:POP AX
MOV DX,MY8255_C OUT DX,AL INC BX
INC BX
MOV [SI+8],BX MOV [SI+6],07H CALL DALLY CALL DALLY1 CALL DALLY1 CALL DALLY1
JMP SPEED DANG4:POP AX
MOV DX,MY8255_C OUT DX,AL 10
INC BX
INC BX
MOV [SI+8],BX
MOV [SI+6],08H
CALL DALLY
JMP SPEED ZHI: MOV [SI+8],01H
JMP QIDONG
STOP: MOV [SI],00H
MOV [SI+4],03H
MOV [SI+6],05H
CALL CLEAR
CALL DIS
JMP QIDONG
DALLY PROC NEAR ;
CALL CLEAR
CALL DIS
PUSH CX
MOV CX,000FH
D1: MOV AX,000FH
D2: DEC AX
JNZ D2
LOOP D1
POP CX
RET
DALLY ENDP
CLEAR PROC NEAR ;
MOV DX,MY8255_B ;
MOV AL,00H
OUT DX,AL
RET
CLEAR ENDP
DIS PROC NEAR ;
PUSH AX
PUSH SI
MOV SI,3006H
MOV DL,0F7H
MOV AL,DL
AGAIN: PUSH DX
MOV DX,MY8255_A
软件延时子程序 清除数码管显示子程序 段位置0即可清除数码管显示显示键值子程序 11
OUT DX,AL ;设置X1~X4,选通一个数码管
MOV AL,[SI] ;取出缓冲区中存放键值
MOV BX,OFFSET DTABLE1
AND AX,00FFH
ADD BX,AX
MOV AL,[BX]
MOV DX,MY8255_B
OUT DX,AL ;写入数码管A~Dp
CALL DALLY1
DEC SI
DEC SI ;取下一个键值
POP DX
MOV AL,DL
TEST AL,01H ;判断是否显示完?
JZ OUT1 ;显示完,返回
ROR AL,1
MOV DL,AL
JMP AGAIN ;未显示完,跳回继续
OUT1: POP SI
POP AX
RET
DIS ENDP
DALLY1 PROC NEAR ;软件延时子程序
PUSH CX
MOV CX,002FH
D3: MOV AX,002FH
D4: DEC AX
JNZ D4
LOOP D3
POP CX
RET
DALLY1 ENDP
CODE ENDS
END START
第六章 经验与教训
先从整体上来说,我原本打算整个课程设计只需要3-4天即可完成,而实际的情况是用了将近12天还未完全实现设计要求,比如说,步进电机的加速与减速功能,用4位7段数码管来显示步进电机的转速,这些功能都在代码实现时遇到了困难,而这也恰恰反应了汇编语言学习的不足——练习太少,而见过的汇编源码也同样很少。举个例子,有其他小组做的抢答器设计,有十几行的一段程序是通过ROR循环右移指令 12
和LOOPNZ指令来达到依次测试每个抢答开关是否摁下,就是这样一段简单的代码,就看足足1个小时,原因有两点,它的代码中写成了LOONZ指令,还有就是ROR,因为它可以将移出的位都进入CF以保存该位,以供后续的程序测试。这些指令很是不熟悉,从这方面很是能够反应出一些问题。
比如说我在网上查找他人的设计方案时,基本上都是用51单片机来控制步进电机的,当然都是通过Proteus软件仿真验证的,很少有基于8086芯片的,很偶然的搜索一份后,我发现我需要把整个系统硬件连线理解透彻,很是花了一番功夫。一开始我以为Proteus软件不能做8086芯片的仿真,之前它都是用来仿真单片机的,而事实上它也确实是这样,8086芯片的仿真确实是这两年才添加的,应为做8086芯片的仿真需要一系列外围芯片的支持,比如说:8259A可编程中断控制器、8255A可编程并行接口芯片、D/A转换器、A/D转换器,8251A可编程异步通信接口芯片(这个在7.8版本中就没有)可见拿这个完全取代实验箱还有一定的距离。当然这次的课程设计我可以完全使用它,因为没有使用到8251A芯片。
还有就是有很多辅助性芯片自己在以前根本就没有关注过,直到这次课程设计,我才认认真真的查找了74系列芯片资料比如74LS273、74LS138,因为我在这次系统的硬件设计部分遇到了困难,因为之前的(包括上学期的组成原理和这学期的接口技术,用到的实验箱都是人家事先连好并预留出的,在实验时有都是按照实验手册上的电路图去连线的,几乎从来不去思考为什么要这样连接,这些芯片的内部结构是怎样的,除了这个型号的芯片,其他型号的芯片是否也能实现相应的功能,它们两者之间又有何异同和优缺点,等等这一系列的问题在硬件的设计时都让我给碰到了,我不知道是我的幸运还是不幸)这些问题让我认识到在现有实验箱上不管是进行实验的验证还是教学,都存在很大的缺陷,更不用提系统的设计了。
概括来说,芯片了解太少,汇编编程很不熟练,验证方法有缺陷,方案的整体设计把控很不足
学习的内容:初步理解掌握了在Proteus软件中进行硬件仿真的步骤及方法,了解了Proteus软件芯片库的构成体系,对芯片的选取不再过于盲目,理解并掌握了8255A芯片编程方法,了解了嵌入式系统设计的一般步骤与方法
第七章 参考资料
01. 《微机原理及接口技术》(从中可以查找详细的8086CPU、8255A芯片功能及编程方法)——肖洪兵 主编
02. 步进电机控制方面的资料(包括原理,控制方法等)——源自网络
03. 74系列芯片功能手册(包括74LS273、74LS138)——源自网络
04. ULN2000系列芯片手册(包括ULN2003A)——源自网络
05. Proteus 7.8 SP2 用户手册(用于查找是否包含实验所用芯片,以及芯片连线方式)
06. 网上他人基于单片机的步进电机控制系统的设计方案
13