黄工无刷电机学习
直播中

张亮

7年用户 1313经验值
私信 关注
[问答]

如何通过编程控制步进电机的正转,反转,加速,减速?

如何通过编程控制步进电机的正转,反转,加速,减速?

回帖(1)

王丽娟

2021-10-18 11:22:23
一、实验目的

1.了解步进电机的工作方式及原理
2.通过编程控制步进电机的正转,反转,加速,减速

  
二、前言

步进电机是一种将电脉冲转变为角位移的执行机构,通俗一点讲:当步进驱动
器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度。可
通过控制脉冲数来控制角位移量,从而达到准确的定位目的,也可通过控制脉冲的
频率来控制电机的转速和加速度;从而达到调速的目的。

  
三、 实验器件

1.步进电机,分为六线制(MOTOR-STEPPER)和四线制(MOTOR-BISTEPPER)
2.ULN2003(大电流驱动阵列)
ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。ULN2003工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受 50V的电压,输出还可以在高负载电流并行运行。





引脚1:CPU脉冲输入端,端口对应一个信号输出端。
引脚2:CPU脉冲输入端。
引脚3:CPU脉冲输入端。
引脚4:CPU脉冲输入端。
引脚5:CPU脉冲输入端。
引脚6:CPU脉冲输入端。
引脚7:CPU脉冲输入端。
引脚8:接地。
引脚10:脉冲信号输出端,对应7脚信号输入端。
引脚11:脉冲信号输出端,对应6脚信号输入端。
引脚12:脉冲信号输出端,对应5脚信号输入端。
引脚13:脉冲信号输出端,对应4脚信号输入端。
引脚14:脉冲信号输出端,对应3脚信号输入端。
引脚15:脉冲信号输出端,对应2脚信号输入端。
引脚16:脉冲信号输出端,对应1脚信号输入端。

  
威廉希尔官方网站 基本理论

当步进驱动器接
收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,控制换
相顺序,即通电控制脉冲必须严格按照一定顺序分别控制各相的通断。通过控制脉
冲个数即可以控制角位移量,从而达到准确定位的目的。控制步进电机的转向,即
给定工作方式正序换相通电,步进电机正转,若按反序通电换相,则电机就反转。
它会再转一步,两个脉冲的间隔越短,步进电机就转得越快。同时通过控制脉冲频
率来控制电机转动的速度和加速度,从而达到调速的目的。
步进电机的基本参数:
(一)步进电机的静态指标术语
1、相数:产生不同对N、S磁场的激磁线圈对数。常用m表示。
2、拍数:完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB,四相八拍运行方式即A-AB-B-BC-C-CD-D-DA-A.
3、步距角:对应一个脉冲信号,电机转子转过的角位移用Θ表示,Θ=360°(转子齿数运行拍数),以四相50齿电机为例,四拍运行时步距角为Θ=360°/(450)=1.8°(整步)。
(二)步进电机动态指标术语
1、步距角精度:步进电机每转过一个步距角的实际值与理论值的误差,用百分比表示,误差/步距角*100%,四拍控制5%以内,八拍控制15%以内。
2、电机正反转控制:当电机绕组通电时序为A-AB-B-BC-C-CD-D-DA时正转,通电时序为DA-D-CD-C-BC-B-AB-A时为反转。
步进电机的工作原理
步进电机的工作就是步进转动,其功用是将脉冲电信号变换为相应的角位移或是直线位移,就是给一个脉冲信号,电动机转动一个角度或是前进一步。步进电机的角位移量与脉冲数成正比,它的转速与脉冲频率(f)成正比,在非超载的情况下,电机的转速、停止位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响。
图1是该四相反应式步进电机的工作原理图。





开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0,3号齿对齐,同时,转子的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方向转动。
六线电机对应的连线标号.






延时函数

这个delay()的时间长短是控制转速的,有一定范围的,在一定范围内,越小越快,超过了的话,电机识别不了脉冲就不转了。延时函数过长,电机动一下停一下,过短则速度快。





  电机的选择


  MOTOR-STEPPER:步进电机
MOTOR-BLDCM:无刷直流电机
以下是源码

#include
#define uchar unsigned char
#define uint unsigned int


***it key1 = P1^0;
***it key2 = P1^1;
***it key3 = P1^2;
***it key4 = P1^3;


uchar speed=65;
uchar code zheng[] = {0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
uchar code fan[] = {0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};


void delay1ms(uint t){
        char i;
        while(t--){
                 for(i=0;i<113;i++);
        }
}
void main()
{
        uchar i;


        while(1){
                if (key1==0){
                        for(i=0;i<8;i++){
                                P2 = fan;
                                delay1ms(speed);       
                        }
                }
                if (key2==0){
                        for(i=0;i<8;i++){
                                P2 = zheng ;
                                delay1ms(speed);
                        }
                }
                if (key3==0){
                        speed = speed + 5;
                        if (speed>100)        speed = 100;
                }
                if (key4==0){
                        speed = speed - 5;
                        if (speed<40)        speed = 40;
                }
        }
}
问题

一开始选错电机,导致电机只朝一个方向移动,与预期结果不合,后换电机,问题得到解决。

  
后序改进

可以做一个数码管,显示正反转和当前对应的转速.
文章难免有错误之处,恳请留言指正
举报

更多回帖

×
20
完善资料,
赚取积分