树莓派控制舵机抖动问题处理


前言

树莓派控制例如9g系列舵机,当到达指定位置时舵机会出现在此位置抖动情况,这应该是PWM信号谐波导致。当舵机到达指定位置后可以采取关闭GPIO口消除PWM信号,或者清除占空比实现,但这两种方式仅限于执行舵机后并关掉,无法保持舵机位置。


一、通过清除占空比实现

此方法仅限于不需要保持舵机固有角度的情况

1.代码示例

代码如下:

import RPi.GPIO as GPIO
import time

#设置舵机引脚
right_hand = 24
#设置GPIO口为BCM编码方式
GPIO.setmode(GPIO.BCM)
#忽略警告信息
GPIO.setwarnings(False)
#声明两个全局变量
global G90_right_hand
global i
GPIO.setup(right_hand, GPIO.OUT)
#设置频率为50
G90_right_hand = GPIO.PWM(right_hand, 50)
# 在引脚上设置一个初始PWM信号
G90_right_hand.start(0)
def MG90_right_hand(i):
     G90_right_hand.ChangeDutyCycle(2.5+i/360*20)#通过计算求出角度换算占空比
     time.sleep(0.5)
     G90_right_hand.ChangeDutyCycle(0)#设置为0,清除占空白,以此句消除舵机抖动
while True:
     MG90_right_hand(90) 
G90_right_hand.stop() # 停止PWM。
GPIO.cleanup() # 清理GPIO。

二、使用pigpio库解决抖动问题

pigpio是一个用于树莓派的库,它允许控制树莓派的通用输入输出(GPIO)引脚。它提供了c语言与python语言的库函数,我们可以调用相关的库函数实现跟GPIO相关的操作。以pigpio来使用GPIO引脚输出PWM信号控制舵机。

1.pigpio库下载

使用python直接下载

sudo apt-get install pigpio python-pigpio python3-pigpio

下载完成后并不能直接调用该库,否者运行程序会报错。
在运行编写好的代码之前,需要先执行以下命令

sudo pigpiod

这样做是为了开启一个线程用于该库的运行,如果不这么做,在运行代码时会提示错误。这里需要你知道的是,pigpio程序在你开启守护进程后会一直运行,直到你关机,或者结束守护进程。如果你运行完了程序,想要关闭该库,可以使用如下命令

sudo killall pigpiod

该指令需要在每次开机后执行,所以我们最后将其设置为开机自启。这里我采用树莓派官方系统Raspbian OS进行演示操作。

sudo nano /etc/rc.local

打开文档后在exit 0前输入sudo pigpiod,Ctrl+O、回车保存,Ctrl+X推出编辑器即可完成。

2.代码示例

代码如下:

import time
import pigpio

#设置舵机引脚
right_hand = 24
#设置GPIO口为BCM编码方式
GPIO.setmode(GPIO.BCM)
#声明两个全局变量
global G90_right_hand
global i
# pigpio的初始化
G90_right_hand = pigpio.pi()
# pigpio低电平
G90_right_hand.write(right_hand, 0)
# pigpio24号地址高低电平读取
G90_right_hand.read(right_hand)
# pigpio设置频率
G90_right_hand.set_PWM_frequency(right_hand, 50)
# pigpio设置周期为4000
G90_right_hand.set_PWM_range(right_hand, 4000)

def MG90_right_hand(i):
     G90_left_hand.set_PWM_dutycycle(left_hand,80+(400/180)*i)#通过计算求出角度换算占空比
     time.sleep(0.5)
while True:
     MG90_right_hand(90) #给出一个角度

这里我用了一个算式来换算角度值与需要的占空比,换算方式如下:
在这里插入图片描述

总结

方法一适用于转动舵机后就关闭,方法二适用于需要保持舵机角度的情景。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值