黄工无刷电机学习
直播中

陈秀英

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

如何实现四相八拍步进电机驱动?

如何实现四相八拍步进电机驱动?

回帖(1)

冯栋

2021-10-20 09:53:59
简单介绍:


1. 步进电机:就是将电脉冲信号转变为角位移或者线位移的 开环控制 电机


2. 开环控制:即开环控制系统,就是不降控制的结果反馈回来影响当前控制的系统。 所谓开环:就是没有反馈


3. 四相八拍:也叫做半步:A---AB---B---BC---C---CD---D---DA,再次从头循环。四相四拍:A---B---C---D,循环


4. 四相:指步进电机中有四组线圈,八拍:指的是四组线圈的通电时序。





附上简单正转驱动的代码:此代码是 正转的简单驱动 ,如果要反转:只需要将第二个函数中case 语句执行的顺序改为:


                                               8--->7--->6--->5--->4--->3--->2--->1--->8.......


//I/O口  1
#define     STEP_1_H        P11 = 1                //高电平
#define     STEP_1_L         P11 = 0               //低电平
//I/O口  2
#define     STEP_2_H        P12 = 1
#define     STEP_2_L        P12 = 0
//I/O口  3
#define     STEP_3_H        P13 = 1
#define     STEP_3_L        P13 = 0
//I/O口  4
#define     STEP_4_H        P14 = 1
#define     STEP_4_L        P14 = 0




uint8     motor_state     = 0;        //步进电机的状态
uint8     rotate_speed     = 0;         
uint16     motor_cnt        = 0;        //计数


/***************************************************
*函数名称:Step_Motor_Driver
*输       入:void
*输       出:void
*说       明:步进电机的驱动
***************************************************/
void Step_Motor_Driver(void)
{
    if (++ motor_cnt >= rotate_speed)             //多少秒执行一次下面switch语句
    {
        motor_cnt = 0;
        switch (motor_state)
        {
            case 0:
                    STEP_1_L;
                    STEP_2_L;
                    STEP_3_L;
                    STEP_4_L;


                    break;
                    
            case 1:                                                                                    //对应     A
                    STEP_1_H;
                    STEP_2_L;
                    STEP_3_L;
                    STEP_4_L;
                    
                    motor_state = 2;
                    
                    break;
            
            case 2:                                                                                    //对应     AB
                    STEP_1_H;
                    STEP_2_H;
                    STEP_3_L;
                    STEP_4_L;
                    
                    motor_state = 3;
                    
                    break;
                    
            case 3:                                                                                    //对应     B
                    STEP_1_L;
                    STEP_2_H;
                    STEP_3_L;
                    STEP_4_L;
                    
                    motor_state = 4;
                    
                    break;
                    
            case 4:                                                                                    //对应    BC
                    STEP_1_L;
                    STEP_2_H;
                    STEP_3_H;
                    STEP_4_L;
                    
                    motor_state = 5;
                    
                    break;
                    
            case 5:                                                                                    //对应    C
                    STEP_1_L;
                    STEP_2_L;
                    STEP_3_H;
                    STEP_4_L;
                    
                    motor_state = 6;
                    
                    break;
                    
            case 6:                                                                                    //对应     CD
                    STEP_1_L;
                    STEP_2_L;
                    STEP_3_H;
                    STEP_4_H;
                    
                    motor_state = 7;
                    
                    break;
                    
            case 7:                                                                                    //对应     D
                    STEP_1_L;
                    STEP_2_L;
                    STEP_3_L;
                    STEP_4_H;
                    
                    motor_state = 8;
                    
                    break;
                    
            case 8:                                                                                    //对应     DA
                    
                    STEP_1_H;
                    STEP_2_L;
                    STEP_3_L;
                    STEP_4_H;
                    
                    motor_state = 1;
                    break;
                    
            default:
                    break;
                    
        }
    }
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分