You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派Python控制MG995舵机无法实现精准角度控制求助

MG995舵机精准角度控制问题解决(树莓派)

问题描述

使用Tower Pro MG995舵机为小型机器人实现车轮转向时,遇到以下问题:

  • 无法精准控制舵机转到指定角度,转动时长完全依赖time.sleep设置
  • 多次执行同一角度命令,舵机无法保持相同位置
  • 调整time.sleep时长、手动修改占空比后,仍无法达到理想精度

原代码

import RPi.GPIO as GPIO
from time import sleep
servo_pin = 18

GPIO.setmode(GPIO.BCM)
GPIO.setup(servo_pin, 50)

pwm= GPIO.PWM(servo_pin, 50)
pwm.start(0)

def move_servo(angle):
     duty = angle / 18 + 3
     GPIO.output(servo_pin, True)
     pwm.ChangeDutyCycle(duty)
     sleep(1)
     GPIO.output(servo_pin, False)
     pwm.ChangeDutyCycle(duty)
move_servo(35)
pwm.stop()
GPIO.cleanup()

解决方案

1. 修复核心代码错误

原代码存在两处关键问题:GPIO模式设置错误、多余的电平输出操作。修正后的代码如下:

import RPi.GPIO as GPIO
from time import sleep

servo_pin = 18

GPIO.setmode(GPIO.BCM)
GPIO.setup(servo_pin, GPIO.OUT)  # 正确设置为输出模式

pwm = GPIO.PWM(servo_pin, 50)  # MG995标准PWM频率为50Hz
pwm.start(0)

def move_servo(angle):
    # MG995标准占空比范围:2.5%对应0度,12.5%对应180度,公式调整为更准确的版本
    duty = angle / 18 + 2.5
    pwm.ChangeDutyCycle(duty)
    sleep(0.5)  # 给舵机足够时间完成转动并稳定,0.5秒足够覆盖MG995的转动耗时
    pwm.ChangeDutyCycle(0)  # 停止PWM输出,避免舵机持续抖动

try:
    move_servo(35)
finally:
    pwm.stop()
    GPIO.cleanup()

2. 手动校准舵机角度

不同批次的MG995可能存在占空比-角度的细微偏差,需要校准:

  • 测试0度:设置占空比2.5%,观察舵机位置,若未到最左端,微调公式中的偏移值(比如改成2.3或2.7)
  • 测试180度:设置占空比12.5%,同理调整偏移值,直到角度匹配预期
  • 校准完成后,固定公式中的参数,确保每次调用都能输出正确的占空比

3. 使用更精准的PWM控制库

树莓派自带的RPi.GPIO库软件PWM精度有限,推荐使用pigpio实现硬件级PWM控制:

  • 安装并启用服务:
    sudo apt-get install pigpio
    sudo systemctl enable pigpiod && sudo systemctl start pigpiod
    
  • 示例代码:
    import pigpio
    from time import sleep
    
    servo_pin = 18
    pi = pigpio.pi()  # 连接pigpio服务
    
    def move_servo(angle):
        # MG995的脉冲宽度范围为500us(0度)到2500us(180度)
        pulse_width = 500 + (angle / 180) * 2000
        pi.set_servo_pulsewidth(servo_pin, pulse_width)
        sleep(0.5)
        pi.set_servo_pulsewidth(servo_pin, 0)  # 停止脉冲输出
    
    try:
        move_servo(35)
    finally:
        pi.stop()  # 断开连接
    

4. 检查机械结构

若校准后角度仍不稳定,排查机械问题:

  • 舵机输出轴与转向连杆的连接是否松动
  • 车轮转向机构是否有卡顿、阻力过大的情况
  • 舵机安装是否牢固,运行中是否存在位移

内容的提问来源于stack exchange,提问作者Cooler Mann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:04:57