步进电机课程设计报告(共19页).doc
精选优质文档-倾情为你奉上 步进电机控制电路的设计 目录步进电机控制电路的课程设计摘要步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。步进电机控制系统以8086作为控制的核心元件,利用8255的C口控制步进电机,同时获取控制转动方向(即正转和反转),A口连接键盘,以选取不同档的移动速度,B口连接LED显示器,以显示当前的速度档,8253作为定时器,提供必要的时钟信号。 本课程设计报告通过步进电机的基本介绍、系统的软硬件设计(包括最小系统介绍、接口电路设计、延时程序设计、步进电机的驱动程序设计等几个主要模块)、完整的汇编语言程序等,我们完成了对步进电机系统的设计,并完成了相应的任务,如正转、反转、显示步数及设定速度等,使我们进一步掌握了汇编语言,也使我们能很好的把书本上的知识与实践相结合,大大提高了我们的动手能力。关键字:步进电机;8086CPU;8255可编程I/O接口芯片;8253可编程定时/计数器;74LS138译码器;汇编语言 第一章 系统概述 1.1步进电机控制工作原理步进电机实际上是一个数字角度转换器,也是一个串行的数模转换器。步进电机的基本控制包括启停控制、转向控制、速度控制、换向控制4 个方面。从结构上看 ,步进电机分为三相、四相、五相等类型 ,常用的则以三相为主。本次课程设计我们选用四相步进电机进行系统设计。步进电机控制工作原理系统流程图如图1:CPU接口驱动器步进电机负载图1 步进电机控制工作原理系统流程图1.1.1步进电机的启停控制步进电机由于其电气特性,运转时会有步进感 ,即振动感。为了使电机转动平滑 ,减小振动 ,可在步进电机控制脉冲的上升沿和下降沿采用细分的梯形波 ,可以减小步进电机的步进角 ,提高电机运行的平稳性。在步进电机停转时 ,为了防止因惯性而使电机轴产生顺滑 ,则需采用合适的锁定波形 ,产生锁定磁力矩 ,锁定步进电机的转轴 ,使步进电机的转轴不能自由转动。 1.1.2步进电机的转向控制如果给定工作方式正序换相通电 ,步进电机正转。若步进电机的励磁方式为四相八拍 ,即 A-AB-B-BC-C-CD-D-DA-A。如果按反序通电换相 ,即则电机就反转。其他方式情况类似。1.1.3步进电机的速度控制如果给步进电机发一个控制脉冲 ,它就转一步 ,再发一个脉冲 ,它会再转一步。2 个脉冲的间隔越短 ,步进电机就转得越快。调整送给步进电机的脉冲频率 ,就可以对步进电机进行调速。1.1.4步进电机的换向控制步进电机换向时 ,一定要在电机减速停止或降到突跳频率范围之内再换向 ,以免产生较大的冲击而损坏电机。换向信号一定要在前一个方向的最后一个脉冲结束后以及下一个方向的第1 个脉冲前发出。对于脉冲的设计主要要求要有一定的脉冲宽度(一般不小于5s)、脉冲序列的均匀度及高低电平方式。在某一高速下的正、反向切换实质包含了减速换向加速3 个过程。 1.2系统设计思路系统总体设计思路:本次设计采用8086作为控制的核心元件,利用8255的C口控制步进电机,同时获取控制转动方向(即正转和反转),A口连接键盘,以选取不同档的移动速度,B口连接LED显示器,以显示当前的速度档,8253作为定时器,提供必要的时钟信号。系统对8255的A口进行查询,确定用户设置的速度档,并通过8255的B口显示速度档。延迟时间通过8255的C口的第四位循环送节拍信号来驱动步进电机工作。循环送节拍信号的方向有C口高四位中的第5位确定,此第5位在硬件上与控制转动方向开关相连。第二章 系统硬件软件设计本设计利用8086系统为主要控制芯片和可编程计数器/定时器8253及可编程外围接口芯片8255A设计的一个步进电机的控制系统,主要包括接口电路设计、延时程序设计、开关与计数初值的关键程序设计、步进电机驱动程序设计等模块。2.1最小系统介绍2.1.1 8086CPU构成的最小模式系统根据使用目的的不同,8086系统可以有最小模式和最大模式两种系统配置,两种方式的选择主要取决于硬件,当CPU引脚MN/MX端接高电平+5V时,构成最小系统,最小系统结构示意图如图2: 图2 最小系统结构示意图2.1.2 8086最小系统配置模拟图在最小模式系统中,除了8086CPU,存储器及I/O接口芯片外,还加入了一片8284A作为时钟发生器,三片8282/8283或74LS373作为地址锁存器,二片8286/8287或74LS245作为双向数据总线收发器,数据总线和地址总线分时复用。最小系统配置模拟图如图3:图3 最小系统模拟图2.2接口电路设计2.2.1接口芯片的片选信号的产生在此系统的接口电路中,8255的端口地址从80H开始,因此8255的A、B、C和控制口的地址分别是80H,82H,84H和86H;8253的端口地址从88H开始,而8253的通道0、通道1、通道2和控制口的地址分别是88H、8AH、8CH、8EH。地址总线信号和端口地址之间的关系如下表1:表1 地址总线信号和端口地址之间的关系地 址 线端 口地 址A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0000000001000000080H000000001000001082H000000001000010084H000000001000011086H000000001000100088H00000000100010108AH00000000100011008CH00000000100011108EH从表格我们可以看出,A7始终为1,即高电平,所以其应该接74LS138的G1端,74LS138的1、2A(E2端)、2B(E3端)为控制端,组合为100时输出才有效(输出为低电平有效)。此时E2端连接M/为0,原因是因为M/为0即低电平时,此时CPU正在访问I/O端口。因此我们可以根据此设计译码电路,本次采用部分译码电路,译码器的0和1分别接8255的片选信号和8253的片选信号。2.2.2接口电路设计由于端口地址是偶数,所以接口电路中要取A0为0。如图4:图4 CPU与8255和8253接口电路2.3关键模块实现2.3.1 8253定时用计数初值的确定因为主动轮直径为0.5m,步距角为0.9度,则步进的弧长是半径乘步剧角之积,即如果移动的速度为V,则节拍频率为:采用8253通道0进行定时,其时钟输入端是时,其计数初始值N可由下式确定:这样我们就可以得出速度档、速度、节拍频率f和计数初值N之间的数值对应关系,如表2所示:表2 速度档等参数和计数初始值N之间的关系速度档12345678速度(m/s)0.10.20.50.811.21.52f(HZ)2550125200250300375500N8040161087542.3.2 延时程序的设计在驱动步进电机的程序中,每对8255的C口送一个节拍信号,就要延时一段时间,然后再送C口的下一个节拍信号,从而确定两次节拍之间的间隔即延迟时间,值实际上就是确定了节拍频率f。可以采用软件延时来实现延时要求,但由于CPU工作频率的影响,不易做到精确的延时。这里我们采用软硬件结合的方法实现延时程序,具体思路是:8253的某个通道0的输出与8255的C口的第四位PC4相连接,程序通过对8253的编程时通道0输出一定宽度的脉冲,这个宽度就是对步进电机两次节拍之间的间隔。程序对PC4进行循环检测,当发现8253通道0输出的脉冲发生跳变的时候,结束检测,这循环检测的时间就是所需要的延迟时间。8253通道0的工作方式选择程序如下:;延时程序,入口CX;计数值DELAY PROC MOV AL,B ;通道0工作在方式0 OUT 8253_CTRL,AL MOV AL,CL ;送时间常数 OUT 8253_COUNT0,AL MOV AL,CH OUT 8253_ COUNT0,AL DELAY1 IN AL,8255_CPORT ;输入OUT0信号 TEST AL,B JZ DELAY1 ;循环检测OUT0信号 RET ;定时时间到,返回DELAY ENDP2.3.3键盘与计数初值的关联程序设计 在延时子程序中,CX为入口参数,表示8253通道0计数初值。CX的内容应该与键盘的输入量有关,当键盘输入数字1时,就相应选择了速度档1,这时CX应为80即50H,以此类推等。这里我们把通过键盘确定CX值的程序称为键盘与计数初值的关联程序。关联程序的设计可以直接用比较语句来实现,但是比较语句使得响应时间比较慢,我们可以通过建表来改善。我们通过查表的办法编写的关联程序如下:COUNT_TAB DB 80,40,16,10,8,7,5,4 ; 建立计数初值表格.COUNT_DAT PROC IN AL,8255_APORT ;取开关量 OUT 8255_BPORT,AL ;B口显示速度档 ;把开关量转化为二进制数 MOV CX,8 ;建立循环结构 MOV AH,0 ;转化初值为0COUNT1: SHR AL,1 ;右移 JC COUNT2 ;对应开关位合,退出循环 INC AH ;转换变量加1 LOOP COUNT1 ;循环 ;查表确定计数初值COUNT2: LEA BX, COUNT_TAB ;表的首地址送BX MOV AL,AH XLAT ;查表 MOV CL,AL ;结果送CL MOV CH,0 RETCOUNT_DAT ENDP2.3.4步进电机驱动程序设计本设计用8255C口的PC0、PC1、PC2和PC3分别通过驱动电路接步进电机。我们可以看出第一个节拍PC3PC0送0111B信号,延时一段时间后第二个节拍送0011B信号.循环到第八个节拍送0110B信号,再从第一个节拍重复这个过程,这样就可以驱动步进电机转动了。如果反方向重复这个过程,步进电机就会反方向转动。从第一个节拍到第八个节拍,PC3PC0分别送出的逻辑信号如表3:表3 节拍信号12345678PC3PC001110011101110011101110010000110为了简化驱动程序,我们也使用查表的方案设计驱动程序。步进电机驱动程序如下:DRIVE_TAB DB 7,3,0BH,9,0DH,0CH,8,6 ;建立节拍信号表格.DRIVE_MOT PROC MOV AL,DI+DRIVE_TAB ;取节拍信号 OUT 8255_CPORT,AL ;发节拍信号到C口 IN AL,8255_CPORT ;取PC7-PC4信息 TEST AL,20H ;判断方向位PC5 JNZ DRIVE_MOT1 INC DI ;方向位为0,正转 JMP DRIVE_MOT2DRIVE_MOT1: DEC DI ;方向位为1,反转DRIVE_MOT2: AND DI,07H ;实现指针循环计数RETDRIVE_MOT ENDP;根据开关量确定计数初值,并对8255的B口进行设置出口CX:计数初值COUNT_DAT PROC IN AL,8255_APORT ;取量开关 OUT 8255_BPORT,AL ;B口显示速度档 ;把开关量转化为二进制数 MOV CX,8 ;建立循环结构 MOV AH,0 ;转化初值为0COUNT1: SHR AL,1 ;右移 JC COUNT2 ;对应开关位合,退出循环 INC AH ;转换变量加1 LOOP COUNT1 ;循环 ;查表确定计数初值COUNT2: LEA BX, COUNT_TAB ;表的首地址送BX MOV AL,AH XLAT ;查表 MOV CL,AL ;结果送CL MOV CH,0 RETCOUNT_DAT ENDP利用步进电机节拍驱动程序,很容易实现对步进电机运动的控制。方法如下:(1)调用步进电机节拍驱动程序;(2)调用延时程序。循环重复以上两步即可。第三章 完整的汇编源程序经过以上几步,就可以方便的编写出8086程序。下图是总流程图,其中通过8255的C口发节拍表格指针加1或减1的系列操作由子程序DRIVE-MOT完成。通过8255A口的取速度档信息设置8253计数初值COUNTDAT完成,延时操作由子程序DELAY完成。软件总体流程图如图5:开 始8255初始化、节拍表格指针指针初始化通过8255C口发节拍信号取旋转方向信号方向正转?节拍表格指针加1节拍表格指针减1通过8255A口取速度挡信息根据速度挡设置8253记数初值延 时NY图5 总流程图完整的汇编源程序:8255_APORT EQU 80H ;定义8255各端口名字8255_BPORT EQU 82H8255_CPORT EQU 84H8255_CTRL EQU 86H8253_COUNT0 EQU 88H ;定义8253各端口名字8253_COUNT1 EQU 8AH8253_COUNT2 EQU 8CH8253_CTRL EQU 8EH ;定义数据段DATA SEGMENTCOUNT_TAB DB 80,40,16,10,8,7,5,4 ; 建立计数初值表格DRIVE_TAB DB 7,3,0BH,9,0DH,0CH,8,6 ;建立节拍信号表格DATA ENDS; 定义代码段CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL,B ;8255初始化 OUT 8255_CTRL,AL LEA DI,DRIVE_TAB ;置节拍信号表格指针 ;步进电机驱动主程序AGAIN: CALL DRIVE_MOT ;发一个节拍信号 CALL COUNT_DAT ;取开关设定延迟时间 CALL DELAY ;以设定时间延时 JMP AGAIN ;发下一个节拍信号;下面是子程序步进电机节拍驱动程序,入口 DI:节拍信号表格指针DRIVE_MOT PROC MOV AL,DI+DRIVE_TAB ;取节拍信号 OUT 8255_CPORT,AL ;发节拍信号到C口 IN AL,8255_CPORT ;取PC7-PC4信息 TEST AL,20H ;判断方向位PC5 JNZ DRIVE_MOT1 INC DI ;方向位为0,正转 JMP DRIVE_MOT2DRIVE_MOT1: DEC DI ;方向位为1,反转DRIVE_MOT2: AND DI,07H ;实现指针循环计数RETRIVE_MOT ENDP;根据开关量确定计数初值,并对8255的B口进行设置出口CX:计数初值COUNT_DAT PROC IN AL,8255_APORT ;取量开关 OUT 8255_BPORT,AL ;B口显示速度档 ;把开关量转化为二进制数 MOV CX,8 ;建立循环结构 MOV AH,0 ;转化初值为0COUNT1: SHR AL,1 ;右移 JC COUNT2 ;对应开关位合,退出循环 INC AH ;转换变量加1 LOOP COUNT1 ;循环 ;查表确定计数初值COUNT2: LEA BX, COUNT_TAB ;表的首地址送BX MOV AL,AH XLAT ;查表 MOV CL,AL ;结果送CL MOV CH,0 RETCOUNT_DAT ENDP;延时程序,入口CX;计数值DELAY PROC MOV AL,B ;通道0工作在方式0 OUT 8253_CTRL,AL MOV AL,CL ;送时间常数 OUT 8253_COUNT0,AL MOV AL,CH OUT 8253_ COUNT0,AL DELAY1 IN AL,8255_CPORT ;输入OUT0信号 TEST AL,B JZ DELAY1 ;循环检测OUT0信号 RET ;定时时间到,返回DELAY ENDPCODE ENDS END START第四章 课程设计体会通过这次综合实验,我对微机原理与接口技术有了更深一步的理解,提高了自己的动手能力。在实验过程中,我会遇到各种问题,我觉得除了向老师和同学请教外,我更应该学会自己解决问题。在整个过程中,查阅了不少资料,例如步进电机如何工作,速度及方向的控制等是通过自学完成。知道如何尽快读懂别人写的源程序,从中借鉴好的地方来完善自己的程序。刚开始时,我们先熟悉了实验板上那些可用的器件,初步打算是完成实验要求的基本功能即电机的启动、停转、正反转、有级调速。感觉上是挺容易的,但是到后来才发现编程是存在一些问题。在老师的悉心指导和严格要求下,我们终于完成了四相步进电机设计课程。从书本上的知识到自己亲手的课程设计,每一步对我们来说无疑是巨大的尝试和挑战,也成就了我们目前在大学期间独立完成的最大的项目。记得在刚接到这个课题时,由于对相关知识不是很了解,我们都有些茫然不知所措。设计好一个步进电机需要什么专业知识?带着这个疑问我们开始了地学习和实验:去查阅相关资料、上网去了解相关的内容,渐渐头脑中的概念清晰了起来。在具体设计的过程中,我们遇到了更大的困难。我们不断地给自己提出新的问题,然后去论证、推翻,再接着提出新的问题。在这个循环往复的过程中,我们这篇稚嫩的设计日臻完善。虽然我们的设计作品不是很成熟,即使借鉴前人的很多资料仍然还有很多不足之处,但我仍然心里有一种莫大的幸福感,因为我们实实在在地走过了一个完整的设计所应该走的每一个过程,并且享受了每一个过程。最后我们获得收获的同时也要感谢老师和同学给予我们的帮助,没有他们,我们遇到的一些问题不可能很快的解决。参考文献1 彭虎,周佩玲,傅忠谦.微机原理与接口技术Z.北京:电子工业出版社,20082 张齐,朱宁西.单片机应用系统设计技术基于C51的Proteus仿真Z.北京:电子工业出版社,20093 周荷琴,吴秀清.微型计算机原理与节后技术Z.合肥:中国科技大学出版社,20084 彭虎,周佩玲,傅忠谦.微机原理与接口技术学习指导Z.北京:电子工业出版社,2008致谢本次设计是在王敬生老师的亲切关怀和悉心指导下完成的。王老师渊博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,严以律己、宽以待人的崇高风范,朴实无华、平易近人的人格魅力对我们影响深远。不仅使我们树立了远大的学术目标、掌握了基本的研究方法,还使我们明白了许多待人接物与为人处世的道理。本次设计从选题到完成,每一步都是在王老师的指导下完成的,倾注了老师大量的心血。在此,谨向王老师致以诚挚的谢意和崇高的敬意。在此,我们还要感谢学校为为我们提高良好的实验环境和性能优异的设备,正是因为学校提供软件和硬件的支持才使我们的设计得以展现出来。最后再一次感谢所有在这次设计中曾经帮助过我们的良师益友,以及在设计中被我们引用或参考的论文作者。 万重阳、唐 玮、潘 涛 2010年12月于合肥学院附录一:步进电机课程设计任务书论文题目 步进电机控制电路的设计设计类型综合性导师姓名王敬生主要内容及目标要求:键盘控制步进电机的正反转、调节转速,连续转动或转动指定步数;并能将相应的数据用四位数码管显示。 目标:能基本实现步进电机的前进和后退,能调节电机的速度,我们从中能掌握自己课本中的所学,可以把自己学到的知识很到的运用的实验中,培养我们的实践能力。具有的设计条件1、 PC机一台,EL教学实验箱一台及汇编程序;2、利用软件工具proteus和keil对实验代码进行编译和调试。计划学生数及任务小组成员3人:万重阳 唐玮 潘涛(1)明确课题对程序功能,运算精度等方面的要求及硬件条件;(2)把复杂问题分解为若干模块,确定各模块处理方法,画出流程图;(3)编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序;(4)对程序进行汇编,调试和修改,直到程序运行结果正确为止;(5)实验报告的整合与撰写。任务分配(暂定):1、万重阳完成(1)、(2)硬件部分; 2、唐玮完成(3)、(4)软件部分; 3、潘涛完成(5)报告撰写部分。计划设计进程(按课程设计周计算)第一周设计任务:(1)明确课题对程序功能,运算精度等方面的要求及硬件条件;(2)把复杂问题分解为若干模块,确定各模块处理方法,画出流程图;第二周设计任务:(3)编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序;(4)对程序进行汇编,调试和修改,直到程序运行结果正确为止;(5)实验报告的整合与撰写。参考文献微型计算机原理及接口技术中国科技大学出版社 吴秀清 周荷琴编著16-32位微型计算机技术及应用清华大学出版社 戴梅萼 史嘉权 编著汇编语言程序设计南京大学出版社 姚君遗编著汇编语言程序设计教程清华大学出版社 杨记文编著微型计算机原理及接口技术实验指导书专心-专注-专业附录二:步进电机原理图