• 学而时习之专栏
  • 温故而知新专栏




  • 51单片机控制步进电动机



    步进电动机是一种将电脉冲信号转成相应角位移或线位移动的电动机,每输入一个脉冲信号相应移动一位角位或者移动一步,其输出的角移动线位移与输入脉冲成正比,转速与脉冲频率成正比。


    单片机步进控制电路图:



    功能说明:

    单片机的P3.2~P3.4引脚,分别接有按钮开关K1、K2和K3,用来控制步进电动机的转向。


    1. 开始供电时,步进电动机停止。


    2. 按K1时,电动机正转;按K2时,电动机反转。


    3. 按K3时,电动机停止转动


    正转采用1相激磁方式;反转采用1~2相激磁方式。


    流程图如下:


    步进流程图“ width=

    程序如下:




    K1 EQU P3.2 ; 设定P3.2以K1表示
    K2 EQU P3.3 ; 设定P3.3以K2表示
    K3 EQU P3.4 ; 设定P3.4以K4表示

    STOP: MOV P0, #0FFH ; 步进电动机停止
    LOOP: JNB K1, Z_M2 ; 是否按K1, 是则正转
    JNB K2, F_M2 ; 是否按K2, 是则反转
    JNB K3, STOP1 ; 是否按K3, 是则停止
    JMP LOOP ; 转至LOOP处

    STOP1: ACALL DELAY ; 按K3的消除抖动
    JNB K3, $ ;K3放开否?
    ACALL DELAY ;放开消除抖动
    JMP STOP ;电机停止

    Z_M2: ACALL DELAY ; 按K1的消除抖动
    JNB K1, $ ;K1放开否?
    ACALL DELAY ;放开消除抖动
    JMP Z_M ;转至Z_M处

    F_M2: ACALL DELAY ; 按K2的消除抖动
    JNB K2, $ ;K2放开否?
    ACALL DELAY ;放开消除抖动
    JMP F_M ; 转至F_M处,循环

    Z_M: MOV R0,#00H ;正转至TABLE取码指针初值
    Z_M1: MOV A, R0 ;至TABLE取码
    MOV DPTR, #TABLE ;存表
    MOVC A,@A+DPTR ;取表代码
    JZ Z_M ;是否取到结束码(00H)?
    MOV P0, A ; 输出至P0,正转
    JNB K3, STOP1 ;是否按K3,是则停止运转
    JNB K2, F_M2 ;是否按K2,是反转
    ACALL DELAY ;步进电动机转速
    INC R0 ;取下一个码
    JMP Z_M1 ;转至Z_M处,循环
    RET 正转子程序

    F_M: MOV R0, #05 ;反转至TABLE取码指针初值
    F_M1: MOV A, R0 ;至TABLE取码
    MOV DPTR, #TABLE ;存表
    MOVC A, @A+DPTR ;取表代码
    JZ F_M ;是否取到结束码(00H)?
    MOV P0, A ; 输出至P0, 反转
    JNB K3, STOP1 ;是否按K3,是则停止运转
    JNB K1, Z_M2 ;是否按K1,是正转
    ACALL DELAY ;步进电动机转速
    INC R0 ;取下一个码
    JMP F_M1 ; 转至F_M1处,循环
    RET ;反转子程序

    DELAY: MOV R6, #40 ; 延时时间20Ms
    D1: MOV R7, #248
    DJNZ R7, $
    DJNZ R6, D1
    RET ;延时子程序

    TABLE:
    DB 0FCH, 0F9H, 0F3H, 0F6H ;正转
    DB 00H ;正转结束码
    DB 0F7H, 0F3H, 0FBH, 0F9H ; 反转
    DB 0FDH, 0FCH, 0FEH, 0F6H
    DB 00H ;反转结束码

    END ;程序结束