发布时间: 2026-04-25
凭借常见实操实例,对树莓派操控舵机的完整进程,核心原理以及典型问题处理办法展开系统讲解,助力您迅速达成舵机的精确控制。
舵机借助接收周期是20ms(50Hz)的PWM脉冲信号来进行定位,其脉冲宽度跟角度呈现出线性关系。
0.5ms → 0度
1.5ms → 90度(中位)
2.5ms → 180度
数据源为,舵机行业里通用的控制规范,此规范是基于ANSI/RIA R15.06 1999标准所通行的RC舵机协议。
树莓派(任意带40PIN GPIO口的型号)
标准180度舵机(SG90、MG995等常见型号)
5V/2A以上外接电源(USB电源或电池盒)
公对母杜邦线3条
(可选)逻辑电平转换板
关键性警示是:那舵机运行时的电流能够达到二百毫安至一安,而树莓派的通用输入输出接口的五伏引脚其最大输出大概是五百毫安,要是直接进行供电的话会致使树莓派重新启动或者把保险烧毁。一定要运用外接电源,并且要把电源的负极与树莓派的接地端连通。
专门用于树莓派的,还有,以及,另外还有,它们全都支持硬件PWM操作,其具备的精度远远超越了软件模拟所能够赋予的精度。
# 1. 编辑.txt启用PWM
sudo nano /boot/.txt
# 添加一行:
=pwm2chan,pin=18,func=2,pin2=19,func2=2
# 2. 重启
sudo
# 3. 验证PWM设备
ls /sys/class/pwm//
time
RPi.GPIO as GPIO
GPIO.(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
# 创建PWM对象,频率50Hz
pwm = GPIO.PWM(18, 50)
pwm.start(0) # 初始占空比0
def (angle):
"""输入角度0~180伟创动力舵机,转换为对应占空比(5%~10%)"""
if angle < 0:
angle = 0
if angle > 180:
angle = 180
duty = 2.5 + (angle / 180.0) 7.5 # 7.5是占空比变化范围(102.5)
pwm.(duty)
time.sleep(0.5) # 等待舵机转到指定位置
pwm.(0) # 停止发送信号,减少抖动
try:
while True:
(0)
time.sleep(1)
(90)
time.sleep(1)
(180)
time.sleep(1)
:
pwm.stop()
GPIO.()
关于占空比计算公式的依据是伟创动力,在20ms周期的情况下,0.5ms之时对应的占空比是2.5%,2.5ms之时对应的占空比是12.5%。然而树莓派RPi.GPIO库存在着低电平时间偏差,经过实际测试最佳范围一般是2.5%~12.5%,其中间值对应90度的占空比为7.5%。假如角度不准确,可在2.5~12.5这个范围内进行微调。
![]()
以下案例来自数十个树莓派初学者最常见的实操故障。
现象:代码运行后,舵机无声无反应。
原因(按概率排序):
1. 供电不足(占70%)
2. 未共地(占20%)
3. GPIO引脚号写错(占8%)
4. 舵机损坏(占2%)
解决步骤:
确认外接5V电源带负载能力≥2A
用万用表量舵机红黑线间电压,不低于4.8V
检查黑色线是否同时连接外接电源GND和树莓派GND
尝试换用(树莓派默认第一个PWM通道)
现象:舵机来回震动,或明显偏离目标角度。
理由其一为,PWM信号不稳定,此乃由软件模拟所引发的,其二是占空比超出了线性区间。
解决:
改用硬件PWM(按上文3.1节配置)
每一次进行角度设置之后,调用pwm.(0),以此来防止持续发送信号致使舵机因为过热而出现抖动。
检查舵机信号线接触是否良好
现象:代码设置0~180,实际只转动一半范围。
原因在于,占空比范围没能适配舵机实际响应区间,各类不同品牌的舵机,对于脉冲宽度来说,其线性响应的起点没准是0.6ms,终点不排除是2.4ms。
解决:手动校准两个极限值
# 找到最小占空比(对应0度)
# 从2.5开始,每次+0.1直到舵机开始转动到最小角
# 找到最大占空比(对应180度)
# 从12.5开始,每次0.1直到舵机转到最大角
# 重新映射:duty = + (angle/180)()
![]()
现象:运行控制程序后,树莓派重启或失去SSH连接。
原因:舵机直接从树莓派5V引脚取电,拉低系统电压。
处置:马上切断那个舵机的红线同树莓派之间的连接,转而连接到外部的供电电源。这种问题在初学者的严重故障里占据百分之九十的比例。
现象:无论设置任何角度,舵机都只转动到0度或只到180度。
缘由是,信号线上的PWM频率有误,并非50Hz,又或者GPIO引脚未被正确设定为输出。
解决:
# 确认PWM频率是50
pwm = GPIO.PWM(18, 50) # 不是500或5
# 确认引脚模式正确
GPIO.(GPIO.BCM)
GPIO.setup(18, GPIO.OUT) # 指定OUT
[ ] 舵机红色线只连接外接5V电源正极
舵机的,棕色的那条线与黑色的那条线,一同连接外接电源的GND,以及树莓派的任意一个GND。
[ ] 舵机橙色/黄色线连接树莓派GPIO(推荐18)
[ ] 外接电源电压为4.8V~6V,电流≥2A
在/boot/.txt那里,已经启用了硬件PWM 。
[ ] 代码中PWM频率=50
每次进行角度设置之后,停止发出信号,即执行(0)。
[ ] 程序退出前执行GPIO.()
1. 首条原则是,千万别用树莓派5V引脚去驱动舵机。采用带有USB口的充电宝,其输出为5V/2A,将USB线剪开,把红黑线取出来用于供电,这是最为安全的入门解决办法。
2. 舵机调试顺序为,不连接树莓派,单独为舵机的红黑线供电,此时舵机应该会自动转到中位,而无信号时大多数舵机默认角度为90度。倘若舵机不动,那就需要检查供电情况。
3. 角度校准:用第三方的库获得更稳定的PWM:
sudo # 启动守护进程
pigs p 18 1500 # 设置频率50Hz,脉宽(90度)
4. 更深入的推荐是,要是存在同时操控多个舵机的需求,数量超过两个时,那就选用 16路PWM驱动板,如此一来能够完全解决树莓派PWM资源不够以及供电方面的问题。
依据本文所阐述的接线以及控制方式,您能够稳定地达成树莓派对那些单个或者多个舵机的精准控制。要是碰到未被覆盖的问题,那就请先对照着检查清单逐一项项去排查,90%以上的故障都是源自供电或者共地错误造成的。