武汉理工大学数字电子技术步进电机数电课程设计报告_第1页
武汉理工大学数字电子技术步进电机数电课程设计报告_第2页
武汉理工大学数字电子技术步进电机数电课程设计报告_第3页
武汉理工大学数字电子技术步进电机数电课程设计报告_第4页
武汉理工大学数字电子技术步进电机数电课程设计报告_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数学电子技术基础课程设计说明书课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位: 信息工程学院 题 目: 步进电机的控制及驱动电路设计与制作 初始条件:本设计既可以使用集成移位寄存器、驱动器、555定时器和必要的门电路,以及所需电阻、电容、二极管、三极管、开关等元件。本设计也可以使用单片机系统构建步进电机的控制及驱动电路。自行设计所需电源。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、课程设计工作量:1周。2、技术要求:设计一个方波发生器提供系统时钟;设计一个步进电机的驱动信号发生器,可以实现电机正转/反转控制和转速控制; 要求驱动器有足够的输

2、出电流以驱动小功率4相步进电机;要求可以实现步进电机的单相或双相激励;确定设计方案,按功能模块的划分选择元、器件和集成电路,设计分电路,阐述基本原理。绘制总体电路原理图。3、查阅至少5篇参考文献。按武汉理工大学课程设计工作规范要求撰写设计报告书。全文用A4纸打印,图纸应符合绘图规范。时间安排:1、 2015 年 6 月 19 日集中,作课设具体实施计划与课程设计报告格式的要求说明。2、 2015 年 6 月 20 日,查阅相关资料,学习电路的工作原理。2、 2015 年 6 月 21 日 至 2015 年 6 月 28 日,方案选择和电路设计。2、 2015 年 6 月 28 日 至 2015

3、 年 6 月 30 日,电路调试和设计说明书撰写。3、 2015 年 7 月 1 日上交课程设计成果及报告,同时进行答辩。课设答疑地点:鉴主14楼电子科学与技术实验室。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目 录摘 要IIIAbstractIV1 绪论12 工作原理及方案选择22.1 控制器的论证与选择22.2 驱动器的论证与选择32.3 系统总体方案33 电路设计及仿真43.1 步进电机43.1.1 步进电机构造43.1.2 步进电机工作原理43.1.3 步进电机主要参数63.2 主控制器部分63.3 驱动器部分73.4 键盘部分84 系统软件设计94.1 系统软件

4、开发工具94.2系统流程图104.3 软件编程105 仿真记录126 心得体会15参考文献16附录1 整体电路图17附录2 源程序清单18附录3 元件清单24本科生课程设计成绩评定表251摘 要步进电机能接受步进脉冲的控制一步一步地旋转,它是计算机应用项目中的主要执行元件之一,尤其在精确定位场合中得到了广泛的应用。本文介绍的是一种基于单片机的步进电机的系统设计,用C语言编写出电机的正转、反转、加速、减速、停止程序,通过单片机、电机的驱动电路以及相应的按键实现以上功能。本文内容介绍了步进电机以及单片机原理、该系统的硬件电路、程序组成,同时对软、硬件进行了调试,同时介绍了调试过程中出现的问题以及解

5、决问题的方法。该设计具有思路明确、可靠性高、稳定性强等特点,通过调试实现了上述功能。关键词:步进电机、单片机、电机驱动AbstractStepper motor can accept the step pulse control rotate one step at a time, and it is an one of the main components of the computer application program, especially in the precise positioning has been widely used in occasions. Is intro

6、duced in this paper a system based on single-chip stepper motor design, using C language to write the motor forward, reverse, acceleration, deceleration and stop the program, through the microcontroller,motor drive circuit as well as the corresponding button to achieve the above functions. Content o

7、f this article introduces the principle of step motor and single chip microcomputer, the system hardware circuit, program composition, at the same time on the software and hardware debugging, and introduces the debugging process problems and the methods to solve the problem. This design has ideas cl

8、early, high reliability, strong stability, etc, through debugging realized the function.Keywords: Stepper motor, microcontroller, motor drive步进电机的控制及驱动电路设计与制作1 绪论 传统上由纯电路设计的步进电机控制和驱动电路一般较复杂,成本又高,而且一旦成型就难于修改,可移植性差,难以适应一些智能化要求较高的场合。单片机的普及与应用,为步进电机的应用开辟了广阔的前景,使得以往用硬件电路构成的庞大复杂的控制器得以用软件实现,将会避免复杂电路的设设计,既降

9、低了硬件成本又提高了控制的灵活性、可靠性及多功能性。 本文主要介绍了步进电机的基本原理及AT89C51单片机的性能特点。设计主要研究了一种基于AT89C51单片机和三极管驱动电路的步进电机控制及驱动电路系统。该系统可分为:控制模块、驱动模块、人机交互模块四大部分。其中采用AT89C51单片机作为控制模块的核心,利用单片机编程实现了对步进电机启动停止、正转反转、加速减速等功能的基本控制。驱动模块由四个9012三极管驱动步进电机工作;按键部分由相应的按键实现相应的功能。通过实际测试表明本设计系统的性能优于传统步进电机控制器,具有结构简单、可靠性高、实用性强、人机接口简单方便、性价比高等特点。2 工

10、作原理及方案选择根据实验要求,电路应包含电源,控制信号发生器(控制模块),步进电机,功率放大器(驱动模块),按键模块等。设计框图如下:步进电机驱动器按键模块电源控制器 图12.1 控制器的论证与选择方案一:采用集成移位寄存器、驱动器、555定时器和必要的门电路,以及所需电阻、电容、二极管、三极管、开关等元件连接电路简单,这种设计功能主要由硬件实现,减少了软件设计,然而这样的系统可扩展性差,连线复杂。方案二:采用FPGA控制方案。FPGA内部具有独立的I/O接口和逻辑单元,使用灵活,适用性强,且相对单片机来说,还有速度快、外围电路较少和集成度高的特点,因此特别适用于复杂逻辑电路设计。但是FPGA

11、的成本偏高,算数运算能力不强,而且由于本设计对输出处理的速度要求不高,所以FPGA高速处理的优势得不到充分体现。方案三:采用Atmel公司的AT89S52单片机作为系统的控制器。AT89S52有40个引脚、32个独立的I/O口、2个外部中断和3个定时器计数器,虽然相对FPGA来说在功能和速度上有点差异,但单片机软件编程灵活,可用软件较简单地实现各种逻辑控制,并且由于成本低、体积小、技术成熟和功耗小等特点。综上,由于单片机的优良特点,选择方案三。2.2 驱动器的论证与选择驱动模块电路结构设计需要脉冲信号、信号分配、功率放大三部分组成。控制模块产生一个脉冲序列和方向控制信号,使用脉冲分配器将脉冲序

12、列分解形成四相正反相序,然后经功率放大驱动步进电机。方案一:使用多个功率放大器件驱动电机,通过使用不同的放大电路和不同参数的器件,可以达到不同的放大的要求,放大后能够得到较大的功率。但是由于使用的是四相的步进电机,就需要对四路信号分别进行放大,放大电路很难做到完全一致,当电机的功率较大时运行起来会不稳定,而且电路的制作也比较复杂,参数选择困难,且需要多级放大,同时又要考虑功率的放大。方案二:采用高耐压、大电流复合晶体管ICULN2003作为步进电机的驱动,ULN2003 是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。 ULN2003 工作电压高,工作电流大,灌电流可达500m

13、A,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。 方案三:采用双极型PNP三极管9012组成的放大电路作为步进电机的驱动,9012是非常常见的晶体三极管,在收音机以及各种放大电路中经常看到它,应用范围很广,它是PNP型小功率三极管。,由9012与电阻组成的驱动电路为饱和导通状态,能输出较大电流,成本小,容易焊接。综上由于三极管驱动电路的工作一致性,且连线简单,所以采用集方案三。2.3 系统总体方案系统采用AT89S52单片机作为控制器,选用普通5V六线四相步进电机,以9012三极管构成的开关电路作为驱动器,按键模块采用4个独立按键实现步进电机的起停、正反转、加速和减速。

14、3 电路设计及仿真3.1 步进电机图2 图33.1.1 步进电机构造步进电动机构造:由转子(转子铁芯、永磁体、转轴、滚珠轴承),定子(绕组、定子铁芯),前后端盖等组成。最典型两相混合式步进电机的定子有8个大齿,40个小齿,转子有50个小齿;三相电机的定子有9个大齿,45个小齿,转子有50个小齿。3.1.2 步进电机工作原理步进电机工作原理:该设计中所用到的步进电机为四相六线步进电机,它是采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。图4是该四相步进电机工作原理示意图。 图4开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,

15、同时,转子的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方向转动。 四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可

16、以提高控制精度。 单四拍(单相激励)、双四拍(双向激励)与八拍工作(混合式激励)方式的电源通电时序与波形分别如图5中a、b、c所示。 图5 3.1.3 步进电机主要参数步进电机的相数:是指电机内部的线圈组数,目前常用的有两相、三相、五相步进电机。拍数:完成一个磁场周期性变化所需脉冲数或导电状态,用m表示,或指电机转过一个距角所需脉冲数。保持转矩:是指步进电机通电但没有转动时,定子锁住转子的力矩。步距角:对应一个脉冲信号,电机转子转过的角位移。定位转矩:电机在不通电状态下,电机转子自身的锁定力矩。失步:电机运转时运转的步数,不等于理论上的步数。失调角:转子齿轴线偏移定子齿轴线的角度,电机运转必存

17、在失调角,由失调角产生的误差,采用细分驱动是不能解决的。 运行矩频特性:电机在某种测试条件下测得运行中输出力矩与频率关系的曲线 。3.2 主控制器部分图6上图为51单片机最小系统,包括AT89S52单片机,复位电路,振荡电路等。3.3 驱动器部分驱动部分采用双极型PNP三极管9012组成的放大电路作为步进电机的驱动,9012是非常常见的晶体三极管,在收音机以及各种放大电路中经常看到它,应用范围很广,它是PNP型小功率三极管。,由9012与电阻组成的驱动电路为饱和导通状态,能输出较大电流,成本小,容易焊接。图7为其引脚图,图8为驱动器与步进电机的连线图。驱动器以单片机P1口的四个IO口作为驱动信

18、号的输出。图7 图83.4 键盘部分 图9图9为设计采用的独立键盘,接在单片机的P2口上,分别实现启动/停止,正转/反转,加速和减速功能。这种键盘结构简单,连线方便,但是没有物理去抖动功能,需要实现软件消抖。 4 系统软件设计4.1 系统软件开发工具系统软件开发工具采用美国KEIL Software公司出品的51系列兼容单片机C语言软件开发系统Keil uVision3.Keil uVision3采用全Windows界面,具有很好的兼容性,使用接近于传统C语言的语法来开发,提供丰富的库函数和功能强大的集成开发调试工具,与汇编语言相比,C语言在功能、结构性、可读性和可维护性上具有明显的优势,能大

19、大提高工作效率和缩短项目开发周期。Keil C51生成的目标代码效率非常高,多数语句生成的汇编代码很紧凑,容易理解,并且还可以使用C语言与汇编语言混合编程,使程序达到接近于汇编的工作效率。4.2系统流程图启动/停止步进电机增加转速减小转速否以缓冲方式改变转向,期间指示灯灭,按键无效按下减速键按下加速键按下启停键按下正/反转键启动电机是驱动电机初始化按键检测 图104.3 软件编程程序包含主函数,延时函数,按键扫描函数,电机驱动函数,电机采用双相激励方式,在电机驱动函数中,包含一个转向速度缓冲的功能模块,即当按下转向键后,步进电机先按原转动方向缓慢减速,然后向反方向缓慢加速到速度设定值,这样避免

20、了在高速运动时直接转向会产生失步问题,并有可能造成电机的损坏。同时在缓冲过程中,LED指示灯灭,提醒用户此时按键无效,缓冲结束后,指示灯重新亮起。采用外中断方式读按键,这样不会造成由于处理驱动电机程序而导致按键操作无法响应。程序见附录。5 仿真记录打开PROTEUS左下角的仿真功能键。仿真结果如图11图11图12表明在没有按键按下时,步进电机不转动,各相为低电平,指示灯亮。按下起停键后,仿真结果如图12。 图12图12表明按下启动键后,步进电机开始顺时针缓慢转动,激励方式为两相激励。按下加速键后,仿真结果如图13。图13从图13可以看出按下加速键后,步进电机相序变换频率加快。按下减速键后,仿真

21、结果如图14。图14从图14可以看出按下减速键后,步进电机相序变换频率变慢。按下正/反转键,仿真结果如图15和图16。图15图16图15和图16中可以看出步进电机先按原方向减速,然后向反方向加速,期间指示灯灭,按下任何按键无效。再次按下起停键后,步进电机停止转动,仿真结果如图17。图17从仿真结果可以看出电路和程序可以完成规定的各项功能,且电路进行的一些软件优化能起到良好效果。6 心得体会为期一周的数字电路课程设计已接近尾声,经过这么多天的努力,完成了这次课程设计基本设计要求,学到了很多知识,真正将所学知识运用于实践中,使人受益匪浅。通过本次电路设计,我熟悉了步进电机的驱动方法,掌握了单片机的

22、编程技巧,在设计过程中发现并解决了一些问题,进一步熟练了仿真软件的使用。由于此次控制要求不是很高,选用51系列或52系列完全能够满足设计需求,最后选用的STC89C52。接下来就是硬件接口分配问题和如何去驱动电机。对于步进电机之前没有什么接触,所以我上网查了许多关于步进电机的资料,知道了其基本工作原理以及怎么去实现其控制运转和驱动。接下来的主要问题就是如何编程去实现控制它了。在整个仿真过程使我更加熟练了Proteus软件的用法。这次课程设计使我认识到,刚学好书上的知识还是不够的,更重要的是我们要能将所学的知识运用到实践中来,这才是我们学习知识的最基本的要求,所以在以后的学习生活中,我们应该更加

23、注意将学习与实践相结合,在实践中去运用好所学知识,更进一步深化和理解所学知识,达到学以致用。参考文献1数字电子技术基础 阎石 高等教育出版社 20092新概念单片机C语言教程 郭天祥 电子工业出版社 20103全国大学生电子设计竞赛 常用电路模块制作 黄智伟 北京航空航天大学出版社 2013451单片机 C语言常用模块与综合系统设计 实例精讲 于勇 戴佳 常江 电子工业出版社 20115PROTEUS入门使用教程 周润景 蔡雨恬 机械工业出版社 20106手把手教你学51单片机 宋雪松 清华大学出版社 2013附录1 整体电路图图18附录2 源程序清单#include <reg52.h&

24、gt;sbit KEY_IN_1 = P20;sbit KEY_IN_2 = P21;sbit KEY_IN_3 = P22;sbit KEY_IN_4 = P23;sbit KEY_OUT_1 = P24;sbit KEY_OUT_2 = P25;sbit KEY_OUT_3 = P26;sbit KEY_OUT_4 = P27;unsigned char code KeyCodeMap44 = /矩阵按键编号到标准键盘键码的映射表 0x31, 0x32, 0x33, 0x26 , /数字键1、数字键2、数字键3、向上键 0x34, 0x35, 0x36, 0x25 , /数字键4、数字键5

25、、数字键6、向左键 0x37, 0x38, 0x39, 0x28 , /数字键7、数字键8、数字键9、向下键 0x30, 0x1B, 0x0D, 0x27 /数字键0、ESC键、 回车键、 向右键;unsigned char KeySta44 = /全部矩阵按键的当前状态 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1;signed long beats = 0; /电机转动节拍总数void KeyDriver();static int div = 0 ;static int sp = 3;static bit a = 0;void main()

26、EA = 1; /使能总中断 TMOD = 0x01; /设置T0为模式1 TH0 = 0xFC; /为T0赋初值0xFC67,定时1ms TL0 = 0x67; ET0 = 1; /使能T0中断 TR0 = 1; /启动T0 while (1) KeyDriver(); /调用按键驱动函数 /* 步进电机启动,angle-需转过的角度 */void StartMotor(signed long angle) /在计算前关闭中断,完成后再打开,以避免中断打断计算过程而造成错误 EA = 0; beats = (angle * 4076) / 360; /实测为4076拍转动一圈 EA = 1;

27、/* 步进电机停止 */void StopMotor() EA = 0; beats = 0; EA = 1;void KeyAction(unsigned char keycode) static bit dirMotor = 0; /电机转动方向 if (keycode>=0x30) && (keycode<=0x39) /控制电机转动1-9圈 if (dirMotor = 0) StartMotor(360*(keycode-0x30); else StartMotor(-360*(keycode-0x30); else if (keycode = 0x26)

28、 /向上键,控制转动方向为正转 dirMotor = 0; else if (keycode = 0x28) /向下键,控制转动方向为反转 dirMotor = 1; else if (keycode = 0x25) /向左键,减速 sp+;if(sp = 6) sp = 3; else if (keycode = 0x27) /向右键,加速 sp-; if(sp = 0) sp = 3; else if (keycode = 0x1B) /Esc键,停止转动 StopMotor(); else if (keycode = 0x0D) a = a ;void KeyDriver() unsig

29、ned char i, j; static unsigned char backup44 = /按键值备份,保存前一次的值 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; for (i=0; i<4; i+) /循环检测4*4的矩阵按键 for (j=0; j<4; j+) if (backupij != KeyStaij) /检测按键动作 if (backupij != 0) /按键按下时执行动作 KeyAction(KeyCodeMapij); /调用按键动作函数 backupij = KeyStaij; /刷新前一次的备份值

30、/* 按键扫描函数,在定时中断中调用,调用间隔1ms */void KeyScan() unsigned char i; static unsigned char keyout = 0; /矩阵按键扫描输出索引 static unsigned char keybuf44 = /矩阵按键扫描缓冲区 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ; /将一行的4个按键值移入缓冲区 keybufkeyout0 = (keybufkeyout0 <<

31、; 1) | KEY_IN_1; keybufkeyout1 = (keybufkeyout1 << 1) | KEY_IN_2; keybufkeyout2 = (keybufkeyout2 << 1) | KEY_IN_3; keybufkeyout3 = (keybufkeyout3 << 1) | KEY_IN_4; /消抖后更新按键状态 for (i=0; i<4; i+) /每行4个按键,所以循环4次 if (keybufkeyouti & 0x0F) = 0x00) /连续4次扫描值为0,即4*4ms内都是按下状态时,可认为按键已

32、稳定的按下 KeyStakeyouti = 0; else if (keybufkeyouti & 0x0F) = 0x0F) /连续4次扫描值为1,即4*4ms内都是弹起状态时,可认为按键已稳定的弹起 KeyStakeyouti = 1; /执行下一次的扫描输出 keyout+; /输出索引递增 keyout = keyout & 0x03; /索引值加到4即归零 switch (keyout) /根据索引,释放当前输出引脚,拉低下次的输出引脚 case 0: KEY_OUT_4 = 1; KEY_OUT_1 = 0; break; case 1: KEY_OUT_1 = 1

33、; KEY_OUT_2 = 0; break; case 2: KEY_OUT_2 = 1; KEY_OUT_3 = 0; break; case 3: KEY_OUT_3 = 1; KEY_OUT_4 = 0; break; default: break; /* 电机转动控制 */void TurnMotor() unsigned char tmp; /临时变量 static unsigned char index = 0; /节拍输出索引 unsigned char code BeatCode8 = /步进电机节拍对应的IO控制代码 0xE, 0xC, 0xD, 0x9, 0xB, 0x3

34、, 0x7, 0x6 ; if (beats != 0) /节拍数不为0则产生一个驱动节拍 if (beats > 0) /节拍数大于0时正转 index+; /正转时节拍输出索引递增 index = index & 0x07; /用&操作实现到8归零 beats-; /正转时节拍计数递减 else /节拍数小于0时反转 index-; /反转时节拍输出索引递减 index = index & 0x07; /用&操作同样可以实现到-1时归7 beats+; /反转时节拍计数递增 tmp = P1; /用tmp把P1口当前值暂存 tmp = tmp & 0xF0; /用&操作清零低4位 tmp = tmp | BeatCodeindex; /用|操作把节拍代码写到低4位 P1 = tmp; /把低4位的节拍代码和高4位的原值送回P1 else /节拍数为0则关闭电机所有的相 P1 = P1 | 0x0F; void TurnMotor2() unsigned char tmp; /临时变量 static unsigned char index = 0; /节拍输出索引 unsigned char code BeatCode4 =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论