树莓派3b+指南(十九)MG995舵机解决防抖问题

本文提供了一段解决MG995舵机防抖问题的Python代码,通过控制PWM信号的占空比和引入延迟,有效避免了舵机在运行过程中的抖动现象,对于嵌入式开发和机器人控制具有一定的参考价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MG995舵机解决防抖问题

下面留下代码和说明

import multiprocessing as mp
import time
import RPi.GPIO as GPIO

def gpio_init():  #初始化GPIO,设置初始角和信号输出口36
    
    global pwm
    global num_
    global angle
    angle = 90
    num_ = 0
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(40,GPIO.IN)
    GPIO.setup(36, GPIO.OUT)
    pwm = GPIO.PWM(36, 50)
    pwm.start(10 / 180 * 90 + 2)
    pwm.ChangeDutyCycle(0)  #清空占空比,这句是防抖关键句,如果没有这句,舵机会狂抖不止

def show_cap(): #死循环
    while(1):
        if GPIO.input(40):
            break
            
def setDirection(direction):  
    duty = 10 / 180 * direction + 2
    pwm.ChangeDutyCycle(duty)
    print("direction =", direction, "-> duty =", duty)   
    time.sleep(0.04) #等待控制周期结束
    pwm.ChangeDutyCycle(0)   #清空占空比,这句是防抖关键句,如果没有这句,舵机会狂抖不止
    
def runrun():

    gpio_init()
    show_cap()
    GPIO.cleanup()
    
if __name__=='__main__':

    runrun()

下面两句是防抖的关键句:

  time.sleep(0.04) #等待控制周期结束,舵机的控制周期是20ms,但是不知道为什么要等0.04ms才不会抖
  pwm.ChangeDutyCycle(0)   #清空占空比,这句是防抖关键句,如果没有这句,舵机会狂抖不止

至此就结束了,希望可以帮到你!

### 使用树莓派控制 MG995 舵机 MG995 是一款大扭矩模拟舵机,适用于多种应用场景。它通过 PWM(脉冲宽度调制)信号来控制角度位置[^1]。以下是基于树莓派的硬件连接方法以及 Python 示例代码。 #### 硬件连接说明 为了成功驱动 MG995 舵机,需要将其与树莓派正确连接。具体接线方式如下: - **红色线**:连接到电源正极 (+),通常为 5V 输出。 - **棕色/黑色线**:连接到电源负极 (-),即 GND。 - **橙色/黄色线**:连接到树莓派的一个 GPIO 引脚用于发送 PWM 信号。 > 注意:树莓派本身无法提供足够的电流直接驱动舵机,因此建议使用外部稳压电源供电,并共用地线 (GND)[^1]。 #### 树莓派上的软件配置 可以利用 `RPi.GPIO` 库生成所需的 PWM 波形。该库允许开发者轻松设置占空比和频率以匹配舵机的要求。 ##### 安装依赖项 如果尚未安装 RPi.GPIO,则可以通过以下命令完成安装: ```bash sudo apt-get update sudo apt-get install python3-rpi.gpio ``` ##### 示例代码 下面是一个简单的 Python 脚本示例,展示如何通过树莓派控制 MG995 的旋转角度: ```python import RPi.GPIO as GPIO import time # 设置GPIO模式为BCM编号体系 GPIO.setmode(GPIO.BCM) # 定义PWM引脚号 SERVO_PIN = 18 # 初始化引脚并设定初始状态 GPIO.setup(SERVO_PIN, GPIO.OUT) # 创建PWM实例,频率设为50Hz(对应20ms周期) pwm = GPIO.PWM(SERVO_PIN, 50) try: pwm.start(0) # 启动PWM,默认占空比为0 while True: duty_cycle = float(input("请输入占空比百分数 (范围: 2.5 至 12.5): ")) if 2.5 <= duty_cycle <= 12.5: pwm.ChangeDutyCycle(duty_cycle) # 修改占空比改变角度 time.sleep(1) # 延迟一秒观察效果 except KeyboardInterrupt: pass finally: pwm.stop() # 清理资源前停止PWM GPIO.cleanup() ``` 此程序让用户输入不同的占空比数值从而调整舵机的角度。例如,当输入 `7.5` 时,表示让舵机转至中心位置;而分别输入 `2.5` 和 `12.5` 则代表最小角 (`0°`) 和最大角 (`180°`)[^1]。 #### 进一步优化方向 对于更复杂的项目需求,还可以引入 PID 控制算法或者结合传感器数据形成闭环控制系统,进一步提高定位精度和响应速度。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值