天天看點

四相八拍的步進電機簡單的驅動

簡單介紹:

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;        //計數

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;

        }

    }

}

繼續閱讀