1、 西安电子科技大学微型计算机原理课程设计 题 目 基于8086的步进电机控制学生姓名 专业班级 11级计嵌班 学 号 201 院(系) 信息工程学院 指导教师 完成时间 年 月 日 目 录1 课程设计的目的12 课程设计的任务与要求 13 引言14 设计方案与论证25 设计内容及功能说明 3 5.1 励磁线圈及其励磁顺序 3 5.2 工作原理 4 5.3 8086 CPU 5 5.4 8255工作方式选择 6 5.5 ULN2003A 6 5.6 74LS273 7 5.7 74LS138 76 单元电路的设计(计算与说明) 77 硬件的制作与调试 108 总结 12参考文献13附录1:总体电
2、路原理图14附录2:元器件清单14附录3:源程序代码151 课程设计的目的培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,了解步进电机控制的基本原理,掌握控制步进电机转动的编程方法,进一步熟练掌握8255
3、A并行I/O口的工作方式以及编程方法,熟练应用8086以及汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。体会系统整体设计的流程与方法,为以后系统级设计积累经验。培养学生在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。2 课程设计的任务与要求01.通过开关K1实现步进电机的开始与停止;02. 通过开关K2来选择步进电机的正转与反转;03. 通过开关K3,K4组成(2-4译码)四档电机转速选择;04. 对每只开关的选择情况同时通过4位8段数码管来显示;05. 扩展设计:可以在以上功能基础上,增加控制步进电机单步转动的开关;增加控制
4、电机加速转动的开关;增加控制电机减速的开关。3 引言 步进电机的原理是基于最基本的电磁铁作用,其模型起源于1830年之1860年,1870年后开始以控制为目的的尝试,应用于氩弧灯的电极输送机构中,这被认为是最初的步进电机,此后步进电机被广泛使用1。步进电机是将脉冲信号转换成角位移或线位移的开环控制源步进电机件。在非超载的情况下,电机的转速,停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按固定的方向旋转一定的角度,称为:“步距角”,它的旋转是以固定的角度一步一步运行的,可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的,同
5、时可以通过控制脉冲频率来控制电机转动的角速度和加速度,从而达到调速的目的2。步进电机不需位移传感器就可精确定位,所以在精确定位系统中应用广泛。目前,计算机外围设备,打字机,数控机床,传真机等设备,都使用了步进电机。随着电子计算机技术的发展,步进电机必将发挥它的控制方便,准确控制的特点,在工业控制的领域取得广泛的应用。4 设计方案与论证 本设计采用电压为DC12V的四相八拍步进电机35BYJ46型电机,用ULN2003作为步进电动机驱动电路主芯片,以8255A作为8086并行输出接口,8086对步进电机的控制信号则通过8255A送到ULN2003.根据课题要求,用8086处理器和可编程并行接口芯
6、片8255组成控制系统,控制步进电机正转、反转以及转速控制,步进电机不能直接由8255驱动,而需要用相应的驱动芯片,因此,控制系统直接控制电机驱动即可控制步进电机。 转向分别用逆时针转动片段转速和顺时针转动片段则通过调用延时子程序,当调用延时较长的子程序时,则步进电机转速慢,当调用延时较短的子程序时,步进电机转速快。设计流程图如下: 8086 CPU 8255 步进 电机 步进 电机 驱动 图4-1 总体设计流程图 本步进电机控制系统通过四个键盘来控制步进电机的正转、反转、启动和停止以及转速,步进电机旋转的角度取决于键盘接通时间长短,接通时间越长,旋转角度越大,其功能表如表41所示。 表4-1
7、 键盘功能表键盘状态电机动作K1接通电机启动K1断开电机停止K2接通电机顺时针旋转K2断开电机逆时针旋转K3接通电机2档转速K4接通电机4档转速K3、K4接通电机3档转速5 设计原理及功能说明在该步进电机控制系统中,需要接收键盘信息并识别,然后将数据传送给步进电机使步进电机旋转,采用8086CPU和8255接口芯片是可行的3,系统框图如图5-1所示 图5-1系统方框图5.1 励磁线圈及其励磁顺序 123456785+4-3-2-1- 图5-2励磁线圈图 表5-3励磁顺序表5.2 工作原理:4相步进电机示意图 四相步进电机示意图见下左图,转子由一个永久磁铁构成,定子分别由4组绕组构成 图5-4电
8、机定子和转子示意图 图5-5电气连接示意图 当S1连通电源后,定子磁场将产生一个靠近转子为N极,远离转子为S极才磁场,这样的定子磁场和转子的固有磁场发生作用,转子就会转动,正确地S1、S4的送电次序,就能控制转子旋转的方向。例如:若送电的顺序为S1闭合断开S2闭合断开S3闭合断开S4闭合断开,周而复始的循环,在定子和转子共同作用下,电机就瞬时针旋转: 图5-6电机旋转模拟图若送电的顺序为S4闭合断开S3闭合断开S2闭合断开S1闭合断开,周而复始的循环,则电机就逆时针旋转,原理同理。 图5-7 8255A向步进电机发出的控制脉冲5.3 8086 CPU:现将8086的引脚图和各引脚功能列出如下4
9、:8086CPU的40条引脚信号可按功能分可分为四类,它们是:地址总线,数据总线,控制总线,其它(时钟与电源)。 在最小模式下各引脚功能(MN/MX接5V): AD15AD0,地址/数据总线 A19/S6A16/S3,地址/状态总线 BHE/ S7,高8位数据允许/状态线 MN/MX,最小/最大模式控制信号,输入 RD,读信号 WR,写信号 M/IO,存储器/输入输出控制信号ALE,地址锁存允许信号READY(Ready),准备就绪信号INTR,可屏蔽中断请求信号INTA,中断响应信号 NMI,非屏蔽中断请求信号RESET,系统复位信号 DEN,数据允许信号 DT/R,数据发送/接收控制信号H
10、OLD,总线保持请求信号输入 HLDA,总线保持响应信号 TEST,测试信号 CLK,时钟输入信号 VCC(+5V),GND 5.4 8255工作方式选择: 8255有三个数据端口(A口、B口、C口),8255有三种基本的工作方式,分别为:方式一(基本输入/输出方式),方式二(选通输入/输出方式),方式三(双向总线I/O方式)。其中A口可选择三种方式中的任意一种,B口只能选择方式0或方式1,C口常用作两个4为端口,若工作于方式0,其高四位工作方式与A端口一致,低四位与工作方式与端口B一致;若工作于其余两种方式,端口的部分信号作为A口和B口的控制联络信号。5.5 ULN2003A:ULN2003
11、A是高压大电流达林顿晶体管阵列,由功率电路来扩展输出电流以满足被控元件的电流,电压5。具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。ULN2003A芯片主要用于如下领域:伺服电机,步进电机,电磁阀,可控照明灯。5.6 74LS273: 74LS273是一种带清除功能的8D触发器, 1D8D为数据输入端,1Q8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。5.7 74LS138: 74LS138为3线-8线译码器。引出端口号:B、C 译码地址输入端G1 选通端/(G2A)、/(G2B) 选通端(低电平有效)Y0Y7 译码输出端(低
12、电平有效)6 单元电路的设计(计算与说明) 本电路采用8086CPU来控制,8086是16位CPU,采用高性能的N沟道、耗尽型负载的硅栅工艺制造8086拥有四个16位的通用寄存器,也能够当作八个8位寄存器来存取,以及四个16位索引寄存器。资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配置。它提供64K 8 位元的输出输入,以及固定的向量中断。大部分的指令只能够存取一个内存位址,所以其中一个操作数必须是一个寄存器。运算结果会储存在操作数中的一个。8086有四个 内存区段寄存器,可以从索引寄存器来设定。区段寄存器可以让 CPU 利用特殊的方式存取1 MB内存。8086 把段地址左移 4
13、 位然后把它加上偏移地址。8086 的寻址方式改变让内存扩充较有效率。8086处理器的时钟频率介于4.77MHz和10 MHz之间。 以8086CPU构成的微型计算机系统,有最小模式和最大模式两种配置。最小模式是单机系统,系统中所需要的控制信号全部由8086CPU本身提供;最大模式可以构成多处理机系统,系统中所需要的控制信号由总线控制器8288提供。CPU工作模式的选择是由硬件决定的,当CPU的管脚接高电平时,构成最小模式;当 接低电平的时候,构成最大模式。因为步进电机控制系统是一个单处理机系统,因而接高电平,构成最小模式。8086通过16根数据总线来实现与8255的通信,高八位通过74HC3
14、73锁存器控制8255的四个端口,低八位与8255进行数据交换6。8255四个端口的地址见表2.2.1所示表6-1 8255各端口地址分配8255端口端口地址A端口IOY0+00H*4B端口IOY0+01H*4C端口IOY0+02H*4控制端口IOY0+03H*48255与CPU连接部分:8255能并行传送8位数据,所以其数据线为8根D0D7。由于8255具有3个通道A、B、C,所以只要两根地址线就能寻址A、B、C口及控制寄存器,故地址线为两根A0A1。A0、A1的组合与端口关系如表2.2.2所示。表 6-2 A1、A0组合与端口关系A1A08255端口IOY0+00H*4A口地址IOY0+0
15、1H*4B口地址IOY0+02H*4C口地址IOY0+03H*4控制口地址此外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可同时控制
16、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单电源供电,能在三种方式下工作,具体方式见表2.2.3。表6-3 8255工作方式方式0基本输入/输出方式方式1选通输入/输出方式方式2双向传输方
17、式74HC373为三态输出锁存器,可用来驱动数据总线。当OE为高电平时,D0D7呈高阻态,不驱动数据总线,但锁存器内部的逻辑操作不受影响。当锁存允许端 LE 为高电平时,Q随数据D而变。当 LE 为低电平时,Q被锁存在已建立的数据电平。当 LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV。步进电机模块电路图如图6-1所示 图6-1 步进电机模块步进电机能将数字信号转换为角位移。步进电机输入一个电脉冲就前进一步,其输入的角位移与输入的脉冲数成正比,转速与脉冲频率成正比。从8255端口输出的脉冲,其电流还不足以驱动三相步进电机,因而在步进电机和8255中间接一个驱动芯片
18、ULN2003。ULN2003A是一种高耐压、大电流复合晶体管,由七个硅NPN 复合晶体管组成,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流状态下并行运行7。7 硬件的制作与调试 在上述功能模块以及工作原理的基础上,为了探索8086 CPU在proteus仿真软件中实现对步进电机的控制,简单了解仿真软件的应用,以及更形象的展现对步进电机控制的方法,在计算机上安装proteus软件并用proteus仿真软件对电路的各器件进行电路连接并载入EXE程序运行文件给与不断调试,最终使得电路图能够正常运转。如下图为电路连接图 图7-1 电路连接图1 图7-2 电路连接图
19、28 总结先从整体上来说,我原本打算整个课程设计只需要1-2天即可完成,而实际的情况是用了将近4天还未完全实现设计要求,比如说,步进电机的加速与减速功能,用4位7段数码管来显示步进电机的转速,这些功能都在代码实现时遇到了困难,而这也恰恰反应了汇编语言学习的不足练习太少,而见过的汇编源码也同样很少。举个例子,有其他小组做的抢答器设计,有十几行的一段程序是通过ROR循环右移指令和LOOPNZ指令来达到依次测试每个开关是否摁下,就是这样一段简单的代码,就看足足1个小时,原因有两点,它的代码中写成了LOONZ指令,还有就是ROR,因为它可以将移出的位都进入CF以保存该位,以供后续的程序测试。这些指令很
20、是不熟悉,从这方面很是能够反应出一些问题。比如说我在网上查找他人的设计方案时,基本上都是用51单片机来控制步进电机的,当然都是通过Proteus软件仿真验证的,很少有基于8086芯片的,很偶然的搜索一份后,我发现我需要把整个系统硬件连线理解透彻,很是花了一番功夫。一开始我以为Proteus软件不能做8086芯片的仿真,之前它都是用来仿真单片机的,而事实上它也确实是这样,8086芯片的仿真确实是这两年才添加的,应为做8086芯片的仿真需要一系列外围芯片的支持,比如说:8259A可编程中断控制器、8255A可编程并行接口芯片、D/A转换器、A/D转换器,8251A可编程异步通信接口芯片(这个在7.
21、8版本中就没有)可见拿这个完全取代实验箱还有一定的距离。当然这次的课程设计我可以完全使用它,因为没有使用到8251A芯片。还有就是有很多辅助性芯片自己在以前根本就没有关注过,直到这次课程设计,我才认认真真的查找了74系列芯片资料比如74LS273、74LS138,因为我在这次系统的硬件设计部分遇到了困难,因为之前的(包括上学期的组成原理和这学期的接口技术,用到的实验箱都是人家事先连好并预留出的,在实验时有都是按照实验手册上的电路图去连线的,几乎从来不去思考为什么要这样连接,这些芯片的内部结构是怎样的,除了这个型号的芯片,其他型号的芯片是否也能实现相应的功能,它们两者之间又有何异同和优缺点,等等
22、这一系列的问题在硬件的设计时都让我给碰到了,我不知道是我的幸运还是不幸)这些问题让我认识到在现有实验箱上不管是进行实验的验证还是教学,都存在很大的缺陷,更不用提系统的设计了。概括来说,芯片了解太少,汇编编程很不熟练,方案的整体设计把控很不足。学习的内容:初步理解掌握了在Proteus软件中进行硬件仿真的步骤及方法,了解了Proteus软件芯片库的构成体系,对芯片的选取不再过于盲目,理解并掌握了8255A芯片编程方法,了解了嵌入式系统设计的一般步骤与方法。 参考文献1 冯康 汇编语言M 武昌:武汉大学出版社2010,06 2 公保华 通用接口的步进电机控制驱动单元J电气自动化1994,033 王
23、功利 基于PC机的步进电机控制系统J核电子学与探测技术1996,054 李瑞 基于单片机的步进电机驱动控制系统的设计与实现J科技致富向导2012,355 魏雅 基于单片机的步进电机控制系统的研究J 电子设计工程 2013,186 胡全 51单片机的数码管动态显示技术J 信息技术 2009,137 王忠民微型计算机原理(第二版)M 西安:西安电子科技大学出版社 2007.6 附录1:总体电路原理图 附录2:元器件清单 8086 CPU 8255A ULN2003A MOTOR-STEPPER 74LS138 74LS273 74LS32 7411 开关BUTTON 附录3:源程序代码 IOY0
24、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,3
25、0H,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
26、,AL QIDONG: ;CALL CLEAR ;CALL DIS MOV DX,MY8255_C IN AL,DX TEST AL,01H JNZ STOP SPEED: MOV SI,01H CMP SI+8,08H JZ 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,DTABLE4BX PUSH AX JMP ZHUANG SHUN: MOV SI+4,04H MOV AL,DTABLE3BX PUSH AX ZHUANG: MOV DX,MY8255
27、_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
28、 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 DALL
29、Y 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
30、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 ;设置X1X4,选
31、通一个数码管 MOV AL,SI ;取出缓冲区中存放键值 MOV BX,OFFSET DTABLE1 AND AX,00FFH ADD BX,AX MOV AL,BX MOV DX,MY8255_B OUT DX,AL ;写入数码管ADp 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