欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    单片机控制步进电机.docx

    • 资源ID:1824246       资源大小:170.86KB        全文页数:17页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机控制步进电机.docx

    1、单片机控制步进电机单片机控制步进电机 步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的;同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 T89C2051单片机驱动步进电机的电路和源码 程序 stepper.c stepper.hex /* * STEPPER.C * sweeping steppers rotor cw and cww 400 steps * Copyright (c) 1

    2、999 by W.Sirichote */ #include c:mc518051io.h /* include i/o header file */ #include c:mc518051reg.h register unsigned char j,flag1,temp; register unsigned int cw_n,ccw_n; unsigned char step8=0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90 #define n 400 /* flag1 mask byte 0x01 run cw() 0x02 run ccw() */ mai

    3、n() flag1=0; serinit(9600); dISAble(); /* no need timer interrupt */ cw_n = n; /* initial step number for cw */ flag1 |=0x01; /* initial enable cw() */ while(1) tick_wait(); /* wait for 10ms elapsed */ energize(); /* round-robin execution the following tasks every 10ms */ cw(); ccw(); cw() if(flag1&

    4、0x01)!=0) cw_n-; /* decrement cw step number */ if (cw_n !=0) j+; /* if not zero increment index j */ else flag1&=0x01; /* dISAble cw() execution */ ccw_n = n; /* reload step number to ccw counter */ flag1 |=0x02; /* enable cww() execution */ ccw() if(flag1&0x02)!=0) ccw_n-; /* decremnent ccw step n

    5、umber */ if (ccw_n !=0) j-; /* if not zero decrement index j */ else flag1&=0x02; /* dISAble ccw() execution */ cw_n = n; /* reload step number to cw counter */ flag1 |=0x01; /* enable cw() execution */ tick_wait() /* cputick was replaced by simpler ASM code 10ms wait */ asm JNB TCON.5,*; /* wait fo

    6、r TF0 set */ asm CLR TCON.5; /* clear TF0 for further set */ asm ORL TH0,#$DC; /* reload TH0 with $DC, TL0 = 0 */ energize() P1 = step(j&0x07); /* only step 0-7 needed */ 一、步进电机常识 常见的步进电机分三种:永磁式(PM),反应式(VR)和混合式(HB),永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度 或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家8

    7、0年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为 0.72度。这种步进电机的应用最为广泛。 二、永磁式步进电机的控制 下面以电子爱好者业余制作中常用的永磁式步进电机为例,来介绍如何用单片机控制步进电机。 图1是35BY型永磁步进电机的外形图,图2是该电机的接线图,从图中可以看出,电机共有四组线圈,四组线圈的一个端点连在一起引出,这样一共有5根引出线。要使用步进电机转动,只要轮流给各引出端通电即可。将COM端标识为C,只要AC、 C、BC、 C,轮流加电就能驱动步进电机运转,加电的方式可以有多种,如果将COM端接正电源,那么

    8、只要用开关元件(如三极管),将A、 、B、 轮流接地。 下表列出了该电机的一些典型参数:表135BY48S03型步机电机参数型号 步距角 相数 电压 电流 电阻 最大静转距 定位转距 转动惯量35BY48S03 7.5 4 12 0.26 47 180 65 2.5 有了这些参数,不难设计出控制电路,因其工作电压为12V,最大电流为0.26A,因此用一块开路输出达林顿驱动器(ULN2003)来作为驱动,通过 P1.4P1.7来控制各线圈的接通与切断,电路如图3所示。开机时,P1.4P1.7均为高电平,依次将P1.4P1.7切换为低电平即可驱动步进电机运行,注意在切换之前将前一个输出引脚变为高电

    9、平。如果要改变电机的转动速度只要改变两次接通之间的时间,而要改变电机的转动方向,只要改变各线圈接通的顺序。 图135BY48S03型步进电机外形图 图235BY48S03型步进电机的接线图 图3单片机控制35BY48S03型步进电机的电路原理图 三、步进电机的驱动实例 要求:控制电路如图3所示,开机后,电机不转,按下启动键,电机旋转,速度为25转/分,按下加1键,速度增加,按下减1键,速度降低,最高速度为100转/分,最低转带为25转/分,按下停止键,电机停转。速度值要求在数码管上显示出来。 1要求分析 按上面的分析,改变转速,只要改变P1.0P1.3轮流变低电平的时间即可达到要求,这个时间不

    10、应采用延时来实现,因为会影响到其他功能的实现。这里以定时的方式来实现。下面首先计算一下定时时间。按要求,最低转速为25转/分,而上述步进电机的步距角为7.5,即每48个脉冲为1周,即在最低转速时,要求为1200脉冲/分,相当于50ms/脉冲。而在最高转速时,要求为100转/分,即48000脉冲/分,相当于12.5ms/脉冲。可以列出下表表1步进电机转速与定时器定时常数关系速度 单步时间(us) TH1 TL1 实际定时(us)25 50000 76 0 49996.826 48077 82 236 48074.1827 46296 89 86 46292.6128 44643 95 73 44

    11、640.155 100 12500 211 0 12499.2 表中不仅计算出了TH1和TL1,而且还计算出了在这个定时常数下,真实的定时时间,可以根据这个计算值来估算真实速度与理论速度的误差值。表中TH1和TL1是根据定时时间算出来的定时初值,这里用到的晶振是11.0592M。有了上述表格,程序就不难实现了,使用定时/计数器T1为定时器,定时时间到后切换输出脚即可。 2程序实现 定义DSB1A实验板的S1为启动键,S2为停止键,S3为加1键,S4为减1键,程序如下:StartEnd bit 01H ;起动及停止标志MinSpd EQU 25 ;起始转动速度MaxSpd EQU 100 ;最高

    12、转动速度Speed DATA 23H ;流动速度计数DjCount DATA 24H ;控制电机输出的一个值,初始为11110 111Hidden EQU 10H ;消隐码Counter DATA 57H ;显示计数器DISPBUF DATA 58H ;显示缓冲区 ORG 0000H AJMP MAINORG 000BHJMP DISPORG 001BHJMP DJZD ORG 30HMAIN: MOV SP,#5FH MOV P1,#0FFHMOV A,#HiddenMOV DispBuf,AMOV DispBuf+1,AMOV DispBuf+2,A MOV DjCount,#111101

    13、11B MOV SPEED,#MinSpd ;起始转动速度送入计数器 CLR StartEnd ;停转状态MOV TMOD,#00010001B ;MOV TH0,#HIGH(65536-3000)MOV TL0,#LOW(65536-3000)MOV TH1,#0FFH;MOV TL1,#0FFHSETB TR0SETB EASETB ET0SETB ET1 LOOP: ACALL KEY ;键盘程序 JNB F0,m_NEXT1 ;无键继续 ACALL KEYPROC ;否则调用键盘处理程序m_NEXT1:MOV A,SpeedMOV B,#10DIV ABMOV DispBuf+5,B

    14、;最低位MOV B,#10DIV ABMOV DispBuf+4,BMOV DispBuf+3,AJB StartEnd,m_Next2CLR TR1 ;关闭电机JMP LOOPORL P1,#11110000Bm_Next2:SETB TR1 ;启动电机 AJMP LOOP ;主程序结束;-D10ms: ;-延时程序,键盘处理中调用KEYPROC: MOV A,B ;获取键值 JB ACC.2,StartStop ;分析键的代码,某位被按下,则该位为1 JB ACC.3,KeySty JB ACC.4,UpSpd JB ACC.5,DowSpd AJMP KEY_RETStartStop:

    15、SETB StartEnd ;启动 AJMP KEY_RETKeySty: CLR StartEnd; ;停止 AJMP KEY_RETUpSpd: INC SPEED; MOV A,SPEED CJNE A,#MaxSpd,K1 ;到了最多的次数? DEC SPEED ;是则减去1,保证下次仍为该值K1: AJMP KEY_RETDowSpd: DEC SPEED MOV A,SPEED CJNE A,#MAXSPD,KEY_RET ;不等(未到最大值),返回MOV SPEED,#MinSpd;KEY_RET: RET KEY: 获取键值的程序 RET DjZd: ;定时器T1用于电机转速控

    16、制PUSH ACCPUSH PSWMOV A,SpeedSUBB A,#MinSpd ;减基准数MOV DPTR,#DjHMOVC A,A+DPTRMOV TH1,AMOV A,SpeedSUBB A,#MinSpdMOV DPTR,#DjLMOVC A,A+DPTRMOV TL1,AMOV A,DjCountCPL AORL P1,AMOV A,DjCountJNB ACC.7,d_Next1JMP d_Next2d_Next1:MOV DjCount,#11110111Bd_Next2:MOV A,DjCountRL AMOV DjCount,A ;回存ANL P1,APOP PSWPOP

    17、 ACCRETI DjH: DB 76,82,89,95,100,106,110,115,119,123,12DjL: DB 0,236,86,73,212,0,214,96,163,165 DISP: ;显示程序POP PSWPOP ACCRETIBitTab: DB 7Fh,0BFH,0DFH,0EFH,0F7H,0FBHDISPTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFHEND 3程序分析 本程序主要由键盘程序、显示器程序、步进电机驱动程序三部份组成,主程序首先初始化各

    18、变量,将显示器的高3位消隐,步进电机驱动的各引脚均输出高电平,然后调用键盘程序,并作判断,如果有键按下,则调用键盘处理程序,否则直接转下一步。下一步是将当前的转速值转换为BCD码,送入显示缓冲区;接着判断 StartEnd这个位变量,是“1”还是“0”,如果是“1”,则开启定时器T1,否则关闭定时器T1,为防止关闭时某一相线圈长期通电,因此,在关闭定时器T1时,将P1.0P1.3均置高。至此,主程序的工作即结束。这里为简便起见,这里没有做高位“0”消隐的工作,即如果速度为10转/分,则显示值“010”,读者可以自行加入相关的代码来处理这一工作。 步进电机的驱动工作是在定时器T1的中断服务程序中

    19、实现的,由前述分析,每次的定时时间到达以后,需要将P1.0P1.3依次接通,程度中用了一个变量DjCntr来实现这一功能,在主程序初始化时,该变量被赋予初值 11110111B,进入到定时中断以后,将该变量取出送ACC累加器,并在累加器中进行左移,这样,该数值就变为1110 1111,然后将该数与P1 相“与”,此时,P1.4即输出低电平,第二次进入中断时,先将该数取反,成为 00010000,然后将该数与P1相“或”,这样,P1.4即输出高电平,关断了相应的线圈,然后将该数重新取出,并作左移,即1110,1111右移成为11011111,将该数与P1相“与”,这样P1.5即输出低电平,依次类

    20、推,P1.7P1.4即循环输出低电平。当这一数据变为0111 1111后,需要作适当的改动,将数据重新变回11110111,进行第二次循环,相关代码,请读者自行分析。 定时时间又是如何确定的呢?这里用的是查表的方法,首先用Excel计算得出在每一种转速下的TH值和TL值,然后,分别放入DjH和DjL表中,在进入T1中断程序之后,将速度值变量Speed送入累加器ACC,然后减去基数25,使其基数从 0开始计数,然后分别查表,送入TH1和TL1,实现重置定时初值的目的。看完这一部份内容以后,请读者自行完成以下工作: 1 更改程序,将S1定义为“启动/停止”,而S2定义为“方向”,按下S2,切换电机

    21、旋转方向。 2 更改程序,要求转速从1到100。 3 更改程序,实现首位无效零消隐 -3- 步进电机的单片机控制 作者:李通 刘志垠 摘要:本设计采用凌阳16 位单片机SPCE061A对步进电机进行控制,通过IO口输出的具有时序的方波作为步进电机的控制信号,信号经过芯片L298N驱动步进电机;同时,用 4X4的键盘来对电机的状态进行控制,并用数码管显示电机的转速,采用74LS164作为4位单个数码管的显示驱动,从单片机输入信号;利用凌阳单片机的语音功能播报电机的转速。 关键词: 步进电机 单片机 数码管 一、 方案论证与比较 1、 本设计的重点在于对步进电机的控制和驱动,设计中受控电机为四相六

    22、线制的步进电机(内阻33欧,步进1.8度,额定电压12V) 方案一:使用多个功率放大器件驱动电机 通过使用不同的放大电路和不同参数的器件,可以达到不同的放大的要求,放大后能够得到较大的功率。但是由于使用的是四相的步进电机,就需要对四路信号分别进行放大,由于放大电路很难做到完全一致,当电机的功率较大时运行起来会不稳定,而且电路的制作也比较复杂。 方案二:使用L298N芯片驱动电机 L298N芯片可以驱动两个二相电机(如图11),也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。 图11 通过比较,使用L2

    23、98N芯片充分发挥了它的功能,能稳定地驱动步进电机,且价格不高,故选用L298N驱动电机。而使用L298N时,可以用L297来提供时序信号,可以节省单片机IO口的使用;也可以直接用单片机模拟出时序信号,由于控制并不复杂,故选用后者。 2、 数码管显示电路的设计 方案一:串行接法 设计中要显示4位数字,用74LS164作为显示驱动,其中带锁存,使用串行接法可以节约IO口资源,但要使用SIO,发送数据时容易控制。 方案二:并行接法 使用并行接法时要对每个数码管用IO口单独输入数据,占用资源较多。 由于设计中用一块单片机进行控制,资源有限,选择了方案一。另外,使用锁存也起到节约资源的作用。 二、步进

    24、电机控制原理 步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。 步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。 步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下: (1)控制换相顺序 通电换相这一过程称为脉冲分配。例如:三相步进电机的三拍工作方式,其各相通电顺序为A-B-CD,通电控制脉冲必须严格按照这一顺

    25、序分别控制A,B,C,D相的通断。 (2)控制步进电机的转向 如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。 (3)控制步进电机的速度 如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。调整单片机发出的脉冲频率,就可以对步进电机进行调速。 三、理论设计 综和以上选取的方案,总的流程如图32所示。 图31 1、步进电机驱动电路 通过L298N构成步进电机的驱动电路,电路图如图32所示。 通过单片机SPCE061A的IOB8IOB13对L298N的IN1IN4口和ENA、ENB口发送方波脉冲信号,起时序图如

    26、图33所示。 图32 图33 2、数码管显示电路的设计 数码管的显示驱动使用74LS164,通过SPCE061A的IOB0和IOB1口对DATA和CLK发送数据。 图34 3、4x4键盘电路 在设计中,使用了标准的4x4键盘,其电路图如图35所示。单片机的A口低8位为键盘的接口。尽管设计要求中只需要4个键对步进电机的状态进行控制,但考虑到对控制功能的扩展,我们使用了4x4的键盘。 图35 四、程序设计 在进行程序设计的过程中,主要分为五个部分:双机通讯、语音报数、数字显示、步进电机驱动、键盘;其中双机通讯的实现和语音报时比较有特点,将其流程简要介绍如下,其他部分见附的程序。 1、双机通讯 图4

    27、1 我们在实现双机通讯的过程中使用了“三次握手”的方式,这是Intle网中成用的数据通讯确认协议,其流程图如图41所示。 2、语音报数 程序设计中语音报数使用的是SACMA2000,考虑到程序比较简单,首先使用了自动报数方式,但发现不能进行连续报数,于是使用了非自动方式,流程图如图42所示。 图42 五、结果分析与总结 应该说这次课程设计还是基本达到了设计的要求,但是也存在着未能解决的问题,由于在执行语音程序时对资源的消耗比较大,在语音报数的时候会中断步进电机驱动信号的输出,导致电机停转。为此,我们修改了方案,使用了两块单片机,通过双机通讯来传递信号,遗憾的是问题仍然没有得到解决。 这次步进电机的综合实验我们学到了步进电机、数码管、4*4键盘、语音报数和双机通讯的使用,更重要的是学会了程序出问题时调试的方法,并养成了Debug的习惯,学到了程序出问题后怎样去解决的基本方法。


    注意事项

    本文(单片机控制步进电机.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开