文档库 最新最全的文档下载
当前位置:文档库 › 基于8086的步进电机控制

基于8086的步进电机控制

基于8086的步进电机控制
基于8086的步进电机控制

郑州科技学院

《微型计算机原理》课程设计

题目基于8086的步进电机控制

学生姓名 * * *

专业班级计算机科学与技术一班

学号 9

院(系)信息工程学院

指导教师 * * *

完成时间 2013年 12月20日

目录

1 课程设计的目的 (1)

2 课程设计的任务与要求 (1)

3 设计方案与论证 (1)

4 设计原理及功能说明 (2)

励磁线圈及其励磁顺序 (3)

工作原理 (3)

8086 CPU (5)

8255工作方式选择 (6)

ULN2003A (6)

74LS273 (6)

74LS138 (6)

5 单元电路的设计(计算与说明) (8)

6 硬件的制作与调试 (10)

7 总结 (11)

参考文献 (12)

附录1:总体电路原理图 (13)

附录2:元器件清单 (13)

附录3:源程序代码 (14)

1 课程设计的目的

培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,了解步进电机控制的基本原理,掌握控制步进电机转动的编程方法,进一步熟练掌握8255A并行I/O口的工作方式以及编程方法,熟练应用8086以及汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。体会系统整体设计的流程与方法,为以后系统级设计积累经验。

培养学生在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。

2 课程设计的任务与要求

01.通过开关K1实现步进电机的开始与停止;

02. 通过开关K2来选择步进电机的正转与反转;

03. 通过开关K3,K4组成(2-4译码)四档电机转速选择;

04. 对每只开关的选择情况同时通过4位8段数码管来显示;

05. 扩展设计:可以在以上功能基础上,增加控制步进电机单步转动的开关;增加控制电机加速转动的开关;增加控制电机减速的开关。

3 设计方案与论证

本设计采用电压为DC12V的四相八拍步进电机35BYJ46型电机,用ULN2003作为步进电动机驱动电路主芯片,以8255A作为8086并行输出接口,8086对步进电机的控制信号则通过8255A送到ULN2003.

根据课题要求,用8086处理器和可编程并行接口芯片8255组成控制系统,

控制步进电机正转、反转以及转速控制,步进电机不能直接由8255驱动,而需要用相应的驱动芯片,因此,控制系统直接控制电机驱动即可控制步进电机。

转向分别用逆时针转动片段转速和顺时针转动片段则通过调用延时子程序,当调用延时较长的子程序时,则步进电机转速慢,当调用延时较短的子程序时,步进电机转速快。

设计流程图如下:

图3-1 总体设计流程图

本步进电机控制系统通过四个键盘来控制步进电机的正转、反转、启动和停止以及转速,步进电机旋转的角度取决于键盘接通时间长短,接通时间越长,旋转角度越大,其功能表如表。

表3-1 键盘功能表

4 设计原理及功能说明

在该步进电机控制系统中,需要接收键盘信息并识别,然后将数据传送给步

进电机使步进电机旋转,采用8086CPU 和8255接口芯片是可行的,系统框图如图4-1所示

图4-1系统方框图

励磁线圈及其励磁顺序

表4-1励磁顺序表

图4-2励磁线圈图

工作原理:4相步进电机示意图

四相步进电机示意图见下左图,转子由一个永久磁铁构成,定子分别由4组绕组构成

1 2 3 4 5 6 7 8

5 + + + + + + + + 4 - - - 3 - - - 2 - - -

1

- - -

Intel 8086CPU

8255并行接口

锁存器

键盘控制模块

步进电机模块

数据地址总线

驱动芯片

图4-3电机定子和转子示意图图4-4电气连接示意图当S1连通电源后,定子磁场将产生一个靠近转子为N极,远离转子为S极才磁场,这样的定子磁场和转子的固有磁场发生作用,转子就会转动,正确地S1、S4的送电次序,就能控制转子旋转的方向。

例如:若送电的顺序为S1闭合断开S2闭合断开S3闭合断开S4闭合断开,周而复始的循环,在定子和转子共同作用下,电机就瞬时针旋转:

图4-5电机旋转模拟图

若送电的顺序为S4闭合断开S3闭合断开S2闭合断开S1闭合断开,周而复始的循环,则电机就逆时针旋转,原理同理。

图4-6 8255A向步进电机发出的控制脉冲

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

8255工作方式选择:

8255有三个数据端口(A口、B口、C口),8255有三种基本的工作方式,分别为:方式一(基本输入/输出方式),方式二(选通输入/输出方式),方式三(双向总线I/O方式)。其中A口可选择三种方式中的任意一种,B口只能选择方式0或方式1,C口常用作两个4为端口,若工作于方式0,其高四位工作方式与A端口一致,低四位与工作方式与端口B一致;若工作于其余两种方式,端口的部分信号作为A口和B口的控制联络信号。

ULN2003A:

ULN2003A是高压大电流达林顿晶体管阵列,由功率电路来扩展输出电流以满足被控元件的电流,电压。具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。ULN2003A芯片主要用于如下领域:伺服电机,步进电机,电磁阀,可控照明灯。

74LS273:

74LS273是一种带清除功能的8D触发器, 1D~8D为数据输入端,1Q~8Q 为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。

74LS138:

74LS138为3线-8线译码器。

引出端口号:

B、C 译码地址输入端

G1 选通端

/(G2A)、/(G2B) 选通端(低电平有效)

Y0~Y7 译码输出端(低电平有效)

5 单元电路的设计(计算与说明)

本电路采用8086CPU 来控制,8086是16位CPU ,采用高性能的N 沟道、耗尽型负载的硅栅工艺制造

8086拥有四个16位的通用寄存器,也能够当作八个8位寄存器来存取,以及四个16位索引寄存器。资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配置。它提供64K 8 位元的输出输入,以及固定的向量中断。大部分的指令只能够存取一个内存位址,所以其中一个操作数必须是一个寄存器。运算结果会储存在操作数中的一个。8086有四个 内存区段寄存器,可以从索引寄存器来设定。区段寄存器可以让 CPU 利用特殊的方式存取1 MB 内存。8086 把段地址左移 4 位然后把它加上偏移地址。8086 的寻址方式改变让内存扩充较有效率。8086处理器的时钟频率介于和10 MHz 之间。

以8086CPU 构成的微型计算机系统,有最小模式和最大模式两种配置。最小模式是单机系统,系统中所需要的控制信号全部由8086CPU 本身提供;最大模式可以构成多处理机系统,系统中所需要的控制信号由总线控制器8288提供。CPU 工作模式的选择是由硬件决定的,当CPU 的管脚 接高电平时,构成最

小模式;当

接低电平的时候,构成最大模式。因为步进电机控制系统是一个单处理机系统,因而

接高电平,构成最小模式。 8086通过16根数据总线来实现与8255的通信,高八位通过74HC373锁存器控制8255的四个端口,低八位与8255进行数据交换。8086的 和 控制8255的读写操作。

8255四个端口的地址见表所示

表5-1 8255各端口地址分配

MX /MN MX /MN MX /MN RD WR

8255与CPU连接部分:8255能并行传送8位数据,所以其数据线为8根D0~D7。由于8255具有3个通道A、B、C,所以只要两根地址线就能寻址A、B、C口及控制寄存器,故地址线为两根A0~A1。A0、A1的组合与端口关系如表所示。

表5-2 A1、A0组合与端口关系

此外CPU要对8255进行读、写与片选操作,所以控制线为片选、复位、读、写信号。数据总线DB用于8255与CPU传送8位数据,地址总线AB用于选择A、B、C口与控制寄存器,控制总线CB用于片选信号、复位信号RST、写信号、读信号。当CPU要对8255进行读、写操作时,必须先向8255发片选信号选中8255芯片,然后发读信号或写信号对8255进行读或写数据的操作。

与外设接口部分:8255有3个通道A、B、C与外设连接,每个通道又有8根线与外设连接,所以8255可以用24根线与外设连接,若进行开关量控制,则8255可同时控制24路开关。A口用于8255向外设输入输出8位并行数据,B口用于8255向外设输入输出8位并行数据,C口用于8255向外设输入输出8位并行数据,当8255工作于应答I/O方式时,C口用于应答信号的通信。

控制器:8255将3个通道分为两组,即A组和B组,相应的控制器也分为A 组控制器与B组控制器,各组控制器的作用如下为:A组控制器控制A口与上C 口的输入与输出;B组控制器控制B口与下C口的输入与输出。

8255具有3个相互独立的输入/输出通道端口,用+5V单电源供电,能在三种方式下工作,具体方式见表。

表5-3 8255工作方式

方式2双向传输方式

74HC373为三态输出锁存器,可用来驱动数据总线。当OE为高电平时,D0—D7呈高阻态,不驱动数据总线,但锁存器内部的逻辑操作不受影响。当锁存允许端 LE 为高电平时,Q随数据D而变。当 LE 为低电平时,Q被锁存在已建立的数据电平。当 LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV。

步进电机模块电路图如图5-1所示

图5-1 步进电机模块

步进电机能将数字信号转换为角位移。步进电机输入一个电脉冲就前进一步,其输入的角位移与输入的脉冲数成正比,转速与脉冲频率成正比。

从8255端口输出的脉冲,其电流还不足以驱动三相步进电机,因而在步进电机和8255中间接一个驱动芯片ULN2003。ULN2003A是一种高耐压、大电流复合晶体管,由七个硅NPN 复合晶体管组成,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流状态下并行运行。

6 硬件的制作与调试

在上述功能模块以及工作原理的基础上,为了探索8086 CPU在proteus仿真软件中实现对步进电机的控制,简单了解仿真软件的应用,以及更形象的展现对步进电机控制的方法,在计算机上安装proteus软件并用proteus仿真软件对电路的各器件进行电路连接并载入EXE程序运行文件给与不断调试,最终使得电路图能够正常运转。如下图为电路连接图

图6-1 电路连接图1

图6-2 电路连接图2

7 总结

先从整体上来说,我原本打算整个课程设计只需要1-2天即可完成,而实际的情况是用了将近4天还未完全实现设计要求,比如说,步进电机的加速与减速功能,用4位7段数码管来显示步进电机的转速,这些功能都在代码实现时遇到了困难,而这也恰恰反应了汇编语言学习的不足——练习太少,而见过的汇编源码也同样很少。举个例子,有其他小组做的抢答器设计,有十几行的一段程序是通过ROR循环右移指令和LOOPNZ指令来达到依次测试每个开关是否摁下,就是这样一段简单的代码,就看足足1个小时,原因有两点,它的代码中写成了LOONZ 指令,还有就是ROR,因为它可以将移出的位都进入CF以保存该位,以供后续的程序测试。这些指令很是不熟悉,从这方面很是能够反应出一些问题。

比如说我在网上查找他人的设计方案时,基本上都是用51单片机来控制步进电机的,当然都是通过Proteus软件仿真验证的,很少有基于8086芯片的,很偶然的搜索一份后,我发现我需要把整个系统硬件连线理解透彻,很是花了一番功夫。一开始我以为Proteus软件不能做8086芯片的仿真,之前它都是用来仿真单片机的,而事实上它也确实是这样,8086芯片的仿真确实是这两年才添加的,应为做8086芯片的仿真需要一系列外围芯片的支持,比如说:8259A可编程中断控制器、8255A可编程并行接口芯片、D/A转换器、A/D转换器,8251A 可编程异步通信接口芯片(这个在版本中就没有)可见拿这个完全取代实验箱还有一定的距离。当然这次的课程设计我可以完全使用它,因为没有使用到8251A 芯片。

还有就是有很多辅助性芯片自己在以前根本就没有关注过,直到这次课程设计,我才认认真真的查找了74系列芯片资料比如74LS273、74LS138,因为我在这次系统的硬件设计部分遇到了困难,因为之前的(包括上学期的组成原理和这学期的接口技术,用到的实验箱都是人家事先连好并预留出的,在实验时有都是按照实验手册上的电路图去连线的,几乎从来不去思考为什么要这样连接,这些芯片的内部结构是怎样的,除了这个型号的芯片,其他型号的芯片是否也能实现相应的功能,它们两者之间又有何异同和优缺点,等等这一系列的问题在硬件的设计时都让我给碰到了,我不知道是我的幸运还是不幸)这些问题让我认识到在现有实验箱上不管是进行实验的验证还是教学,都存在很大的缺陷,更不用提系统的设计了。概括来说,芯片了解太少,汇编编程很不熟练,方案的整体设计把控很不足。

学习的内容:初步理解掌握了在Proteus软件中进行硬件仿真的步骤及方法,了解了Proteus软件芯片库的构成体系,对芯片的选取不再过于盲目,理解并掌握了8255A芯片编程方法,了解了嵌入式系统设计的一般步骤与方法。

参考文献

[1] 冯康《汇编语言》[M] 武昌:武汉大学出版社2010,06

[2] 公保华通用接口的步进电机控制驱动单元[J]《电气自动化》1994,03

[3] 王功利基于PC机的步进电机控制系统[J]《核电子学与探测技术》1996,05

[4] 李瑞基于单片机的步进电机驱动控制系统的设计与实现[J]《科技致富向导》2012,35

[5] 魏雅基于单片机的步进电机控制系统的研究[J] 《电子设计工程》 2013,18

[6] 胡全 51单片机的数码管动态显示技术[J] 《信息技术》 2009,13

[7] 王忠民《微型计算机原理》(第二版)[M] 西安:西安电子科技大学出版社

附录1:总体电路原理图

附录2:元器件清单

① 8086 CPU

② 8255A

③ ULN2003A

④ MOTOR-STEPPER

⑤ 74LS138

⑥ 74LS273

⑦ 74LS32

⑧ 7411

⑨开关BUTTON

附录3:源程序代码

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

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 ;测试PC1口的是否为1,若为0则跳转到SHUN代码段(顺时针旋转)

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

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

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 ;段位置0即可清除数码管显示 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

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

相关文档