hanlimao777 2020-11-06 14:35 采纳率: 0%
浏览 23

求助关于步进电机转很小角度会失步回撤问题

自己做的一个项目中需要控制步进电机转固定小角度,例如15、30度的。用的步进电机步距角是15度,用A3979驱动器驱动,采用16细分,这样算下来转一圈需要384个脉冲。
当转动小角度例如30度时需要384/12=32个脉冲,但是点击启动时会回撤一下再往前进,最终导致失步。当要求转动角度越小时回撤越严重,甚至在很小角度会不往前走只回撤,在转一圈或者连续转动时不会失步。

大致意思就是转动小角度会失步(电机向反方向回撤一下),转动大角度或连续转不会失步。

用示波器测量控制方向的高低电平信号并没有反方向的电平信号出,程序很简单应该没什么问题。
第一次做项目遇到问题不知道怎么处理求助各位大佬,万分感谢各位的解答!!!

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-07-24 21:38
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析:
    1. 在转动小角度时,步进电机可能因为惯性或其他因素导致回撤,从而失步;
    2. 在转动大角度或连续转动时,由于连续运动的惯性等因素,步进电机没有失步。 解决方法:
    3. 在控制步进电机转动小角度时,可以采取以下方法解决失步问题: a. 增加步进电机的加速度,使其转动更为平滑,减小回退的可能性; b. 可以在转动小角度时增加一些额外的脉冲,避免回退导致失步; c. 修改控制算法,改善步进电机在转动小角度时的控制精度。 示例代码: 以下是一个简单的Python示例代码,用于控制步进电机转动指定角度时增加一些额外脉冲:
    import RPi.GPIO as GPIO
    import time
    DIR = 20
    STEP = 21
    CW = 1
    CCW = 0
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(DIR, GPIO.OUT)
    GPIO.setup(STEP, GPIO.OUT)
    def step_motor(direction, steps):
        GPIO.output(DIR, direction)
        for _ in range(steps):
            GPIO.output(STEP, GPIO.HIGH)
            time.sleep(0.001)
            GPIO.output(STEP, GPIO.LOW)
            time.sleep(0.001)
    try:
        while True:
            step_motor(CW, 32)  # 转动32步
            time.sleep(0.5)
    except KeyboardInterrupt:
        GPIO.cleanup()
    

    通过以上分析和解决方法,希望可以帮助解决步进电机转动小角度失步的问题。如果还有其他问题,欢迎继续提问。

    评论

报告相同问题?