收藏 分销(赏)

基于单片机AT89S52控制步进电机正反转.doc

上传人:a199****6536 文档编号:3977524 上传时间:2024-07-24 格式:DOC 页数:13 大小:69.54KB 下载积分:8 金币
下载 相关 举报
基于单片机AT89S52控制步进电机正反转.doc_第1页
第1页 / 共13页
基于单片机AT89S52控制步进电机正反转.doc_第2页
第2页 / 共13页


点击查看更多>>
资源描述
目 录 第一章 系统分析 1 1。1 框图设计 2 1。2 晶振电路 2 第二章硬件系统设计 3 2.1 硬件连接图 3 2。2 按键功能 3 2.3 单片机AT89S523 2。4 驱动电路 4 2。5 步进电机。。.。。。.。...。..。。。。.。。。。。..。。。.。.。。。。。.。。。..。。。7 第三章软件系统设计 9 3。1 软件流程图 9 3。2 激磁方式 10 附录12 附件A 源程序。.。12 附件B仿真结果.。。.。.。.。。。。.。。....。.。.。。。...。。。。。.。.。。。..。。15 参考文献 17 致谢.。.。....。。。.。。.。。。...。。。。。.。。。...。。。.。.。..。.。.。。。.。。..。。。。18 - 1 - 摘要 能够实现步进电机控制的方式有多种,可以采用前期的模拟电路、 数字电路或模拟与数字电路相结合的方式。近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测日新月异更新。本文介绍一种用AT89S52作为核心部件进行逻辑控制及信号产生的单片机技术和汇编语言编程设计的步进电机控制系统,步进电机背景与现状、硬件设计、软件设计及其仿真都做了详细的介绍,使我们不仅对步进电机的原理有了深入的了解,也对单片机的设计研发过程有了更加深刻的体会。本控制系统采用单片机控制,通过人为按动开关实现步进电机的开关,复位。该系统还增加了步进电机的加速及减速功能.具有灵活方便、适用范围广的特点,基本能够满足实践需求。 关键词: AT89S52 步进电机 ULN2003 第一章 系统分析 1.1 框图设计 根据系统要求画出基于AT89S52单片机的控制步进电机的控制框图如图2-1所示. 按键电路 复位电路 晶振电路 AT89C52 电源电路 驱动电路 步进电机 图2—1基于AT89C52单片机的控制步进电机的控制框图 系统主要包括单片机、复位电路、晶振电路、按键电路、步进电机及驱动电路几部分。 1.2 晶振电路 AT89C52单片机有一个用于构成内部振荡器的反相放大器,XTAL1 和XTAL2 分别是放大器的输入、输出端.石英晶体和陶瓷谐振器都可以用来一起构成自激振荡器。 晶振模块自带振荡器、提供低阻方波输出,并且能够在一定条件下保证运行。最常用的两种类型是晶振模块和集成RC振荡器(硅振荡器)。晶振模块提供与分立晶振相同的精度。硅振荡器的精度要比分立RC振荡器高,多数情况下能够提供与陶瓷谐振槽路相当的精度.图2-2为晶振电路。 图2-2 晶振电路 第二章 系统设计 2。1 硬件连接图 根据图2-1,可以设计出单片机控制步进电机的硬件电路图,如图3-1所示。 图3-1硬件连接图 2。2 按键功能 按键采用3个功能键,K1、K2和K3按键开关分别接在单片机的P2。0~P2.2引脚上,用来控制步进电机的转向,作为控制信号的输入端键。按K1时,步进电机正传;按K2时,步进电机反转;按K3时,步进电机停止转动。 2.3 单片机 At89C52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。。 At89C52主要技术参数如下: l 与MCS-51单片机产品兼容 l 8K字节在系统可编程Flash存储器 l 1000次擦写周期 l 全静态操作:0Hz~33MHz l 三级加密程序存储器 l 32个可编程I/O口线 l 三个16位定时器/计数器 图2—2 At89C52引脚图图2-3ULN2003 2。4 驱动电路 单片机的输出电流太小,不能直接与步进电机相连,需要增加驱动电路.对于电流小于0.5A的步进电机,可以采用ULN2003类的驱动IC。 ULN2003技术参数如下所示. 最大输出电压:50V. 最大连续输出电流:0。5A. 最大连续输入电流:25mA。 功耗:1W。 如图2—4所示为2001/2002/2003/2004系列驱动器引脚图,图3-3左侧1~7引脚为输入端,接单片机P1口的输出端,引脚8接地;右侧10~16引脚为输出端,接步进电机,引脚9接电源+5V,该驱动器可提供最高0.5A的电流.  ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。   ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。   ULN2003 采用DIP-16 或SOP-16 塑料封装. 方框图    方框图    封装外形图 ULN2003内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTL COMS,由达林顿管组成驱动电路. ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V.用户输出口的外接负载可根据以上参数估算.采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源. 作用:ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达350mA,9脚可以悬空。   比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。   ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。   输入5VTTL电平,输出可达500mA/50V.   ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成. 该电路的特点如下: ULN2003的每一对达林顿都串联一个2。7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据.   ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。    图2-4—1ULN2003芯片引脚图 ULN2003芯片引脚介绍   引脚1:CPU脉冲输入端,端口对应一个信号输出端。   引脚2:CPU脉冲输入端。   引脚3:CPU脉冲输入端.   引脚4:CPU脉冲输入端。   引脚5:CPU脉冲输入端.   引脚6:CPU脉冲输入端。   引脚7:CPU脉冲输入端。   引脚8:接地。   引脚9:该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。用于感性负载时,该脚接负载电源正极,实现续流作用。如果该脚接地,实际上就是达林顿管的集电极对地接通。 引脚10:脉冲信号输出端,对应7脚信号输入端。 引脚11:脉冲信号输出端,对应6脚信号输入端.   引脚12:脉冲信号输出端,对应5脚信号输入端。   引脚13:脉冲信号输出端,对应4脚信号输入端.   引脚14:脉冲信号输出端,对应3脚信号输入端.   引脚15:脉冲信号输出端,对应2脚信号输入端.    引脚16:脉冲信号输出端,对应1脚信号输入端。 参考电路接法如图2-4—2    图2—4-2参考电路接法 2.5 步进电机 2.5.1步进电机的特点: 1)一般步进电机的精度为步进角的3—5%,且不累积。 2)步进电机外表允许的温度高。步进电机温度过高首先会使电机的磁性材料退磁,从而导致力矩下降乃至于失步,因此电机外表允许的最高温度应取决于不同电机磁性材料的退磁点;一般来讲,磁性材料的退磁点都在摄氏130度以上,有的甚至高达摄氏200度以上,所以步进电机外表温度在摄氏80—90度完全正常。 3)步进电机的力矩会随转速的升高而下降。当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;频率越高,反向电动势越大.在它的作用下,电机随频率(或速度)的增大而相电流减小,从而导致力矩下降. 4)步进电机低速时可以正常运转,但若高于一定速度就无法启动,并伴有啸叫声。步进电机有一个技术参数:空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。在有负载的情况下,启动频率应更低。如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。 2。5。2步进电机的工作原理: 步进电机是一种用电脉冲进行控制 ,将电脉冲信号转换成相位移的电机 ,其机械位移和转速分别与输入电机绕组的脉冲个数和脉冲频率成正比 ,每一个脉冲信号可使步进电机旋转一个固定的角度。脉冲的数量决定了旋转的总角度 ,脉冲的频率决定了电机运转的速度.当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 本次设计采用的电机STEPPER—MOTOR型号步进电机,如图2.5.2 图2.5。2STEPPER-MOTOR型号步进电机 第三章 软件设计 3.1 软件流程图 程序设计流程图如图4-1所示,主要包括键盘扫描模块、步进电机正转模块、步进电机反转模块和步进电机定时模块。 Y Y Y 开始 设置堆栈 步进电机停转 按键扫描 K1按下吗 K2按下吗 K3按下吗 步进电机正转模块 步进电机反转模块 步进电机停转 读取表格 输出 结束 N N 图4—1程序设计流程图 3。2 激磁方式 二相步进马达的激磁方式有下列两种:    (1)。全步激磁全步激磁方式又可分为1 相激磁与2相激磁两种方式,说明如下: 1相激磁每次只激磁一相线圈,每输入一个脉波,便产生一步级的转,如图11所示,由图中可知,当激磁依A→B→A→B→A……相顺序,则马达顺时针方向旋转;若依B→A→B→A→B……相顺序激磁,则马达依逆时针方向旋转。此种激磁方式之优点为线圈消耗功率小,角精确度良好,但其转距小,加上阻尼特性不良,易失步。                                       图4—2—1 2相激磁每输入一个脉波,将有二相线圈激磁,如图12所示,由图中可知,若依AB→BA→AB→BA→AB……相顺序激磁,则马达顺时针方向旋转:若依BA→AB→BA→AB→BA……相顺序激磁,则马达转向为逆时针方向。此种激磁方式由于同时有两组线圈激磁,输出转距较大,加上阻尼效果良好,故能追踪较高的脉波率,但其缺点为耗电较大,容易发热。                                         图4—2-2    (2)半步激磁此种激磁方式又称1—2相激磁,激磁一相线圈和二相线圈交互进行,每加入一数字脉波所转动之角度为原步进角的一半,因此分辨率可提高一倍,且运转时相当平滑,故与2相激磁方式同受广泛使用。图13为二相步进马达采用1-2相激磁方式之时序图,由图中可知,若依照A→AB→B→BA→A→AB→B→BA→A→AB……相的顺序激磁,则步进马达将以顺时针方向旋转;但如果依照BA→A→AB→B→BA→A→AB→B→BA……相顺序激磁,则马达逆时针方向旋转                                图4—2—3 附录 附件A 源程序 #include 〈reg52.h〉 sbit p00 = P0^0; sbit p01 = P0^1; sbit p02 = P0^2; unsigned char code Forward[4]={0xFC,0xF9,0xF3,0xF6};//正转表格 unsigned char code Return[8]={0xF7,0xF3,0xFB,0xF9,0xFD,0xFC,0xFE,0xF6};//反转表格 void delay(unsigned int i)//延时 {while(--i);} /*********** 步进电机正转P0口的第三口,P0^2***********************/ void turnfor(void) {unsigned char i; while(1) { if(p00 == 0) {delay(1000); if(p00 == 0) break; } if(p01 == 0) { if(p01 == 0) break; } for(i = 0; i < 4; i++) { P1 = Forward[i]; delay(2000); } } } /********************步进电机反转 P0口的第二口,P0^1*********************/ void retur(void) { unsigned char i; while(1) { if(p00 == 0) { delay(1000); if(p00 == 0) break; } if(p02 == 0) {delay(1000); if(p02 == 0) break; } for(i = 0; i 〈 8; i++) {P1 = Return[i]; delay(2000); } } } /*****************步进电机停止转动 P0口的第一口,P0^0*******************/ void stop(void) { while(1) { if(p01 == 0) { delay(1000); if(p01 == 0) break; } if(p02 == 0) {if(p02 == 0) break; } } } /************************步进电机转动主函数*******************************/ void Main(void) {stop(); while(1) {if(p00 == 0) {delay(1000); if(p00 == 0) stop(); } if(p01 == 0) {delay(1000); if(p01 == 0) retur(); } if(p02 == 0) {delay(1000); if(p02 == 0) turnfor(); } } } 附件B仿真结果 按下k3键,电动机停止转动 按下k1键,电动机正转 按下k2键,电动机反转 参考文献 [1]李全利,单片机原理及接口技术.高等教育出版社,2003 [2]王晓明,电动机的单片机控制。北京航空航天大学出版社,2002 [3]曾一江,单片机原理与接口技术。北京:科学出版社,2006 [4]何立民,MCS-51系列单片机应用系统设计.北京:北京航空航天大学出版社,1990 [5]任志锦,电机与电气控制。北京:机械工业出版社,2002 [6]彭沛夫,张桂芳,微机控制技术与实验指导。北京:清华大学出版社,2005 [7]杨渝钦,控制电机.北京:机械工业出版社,1995 [8]彭伟。 单片机C语言程序设计实训100例。北京航空航天大学出版社,2010,5 [9]谭浩强。C程序设计(第三版)[M]。北京:清华大学出版社,2007 [10]郭天祥。新概念51单片机C语言教程——入门、提高、开发、拓展、全攻略[M]。电子工业出版社,2011,2 致谢 在单片机课程设计的学习过程中,在陈老师和各位同学的帮助下,我把老师以前教导的内容反馈到实践中来,在实践中验证了学习到的理论,同时也对理论知识进行了巩固.虽然说对于单片机技术依然处于入门阶段,但是通过课程设计让我体验到了单片机技术的魅力。看自己的电动机转起来,让我有巨大的成就感。在硬件部分完成后,开始设计软件。刚开始使用汇编,但是对于汇编掌握的不够好,于是不得不用C来编写。但是也从中感受到用高级语言编写的高效,快捷,简便.经过一周的努力,顺利完成课程设计.从硬件到软件,都是自己付出的成果。虽然有一些遗憾,比如没能用汇编写出程序,但是收获是巨大的,课程设计完成后,我的目标就是用汇编将源程序进行改写,来锻炼自己对汇编语言的熟练程度以及理解.最重要的是,我从这次课程设计中得到了信心,很久没有像这样的机会体验到巨大的成就感,这成就感会让自己受用一生,帮助自己取得更大的成就。 - 1 -
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服