DEEP 177 · 第十五辑 · 其他舵机案例库 · LEARN NOTES

收进学习手册 · 2026-09-11 · duck.whatled.com

解读 177 · SG90:PWM 舵机台架六课

解读对象:microduck-replica/rl-series/scripts/pi_sg90_bench.py(88 行,依赖树莓派自带的 gpiozero)
需要的前置:解读 63(总线舵机版台架六课)· 解读 76(共地与调试板)

88 行、四步实验、零预算——这是"第一颗舵机怎么摸"的极简版。解读 63 的六课是给带编码器的总线舵机设计的;面对一颗只收脉冲、不回话的 SG90(常见标称约 9 g,第 10 课口径:力矩约为 XL330 的 1/3),台架先退化、再聚焦:只剩一个灵魂问题——你发出去的命令,它到底做到了没有?

1. PWM 与总线:两种舵机的本质分野

SG90 是 PWM 舵机:一根信号线,靠脉宽传令——脚本 sv() 里写死 min_pulse_width=0.0005, max_pulse_width=0.0025,即 0.5–2.5 ms 脉宽线性映射到 gpiozero 的 -1..1 归一位置。地址是"它插的哪个 GPIO 脚"(PINS = [17, 27, 22, 23, 24]),15 只舵机要拉 15 根线。总线舵机则是一根 1 Mbps 线上靠 ID 喊话,位置/速度/温度都能读回来。一个只接受单方面命令,一个提供事实——这决定了 SG90 为什么上不了鸭。

有个细节值得点破:脚本头注释写"信号 → GPIO 17/27/22/23/24/25"、③课标题叫"6 舵机波浪",但 PINS 列表实际只有 5 只(注释自述"原机器狗 4 脚 + 1 尾"),step3 里也是 range(5)。以 PINS 为准——这是照抄脚本前该核对的第 0 课。

2. 树莓派怎么发 PWM,以及供电铁律

树莓派没有舵机接口,PWM 由 gpiozero 库在软件里生成(默认 20 ms 一帧),所以脚本几乎不用写硬件代码:s.value = 0.5 一句就是"转 90°"。行程只敢用 MIN, MAX = -0.9, 0.9——不到 ±1,给杂牌 SG90 的脉宽误差留安全边。真正的硬件功夫在头注释三行铁律:舵机电源绝不用 Pi 的 5V(要用外接 5V≥3A),地线必须与 Pi 共地,改线前先断电。五只舵机同时出力的浪涌,足够让树莓派欠压重启——③课专治这个:"若 Pi 重启/舵机抽搐 = 供电不足"。

3. 四步实验:从"会动"到"看见开环"

①扫角(step1_single):0→MIN→0→MAX→0,每步停 1.2 s,确认接线、方向与行程;不动就查脚号、共地、外接供电三件套。②负载保持(step2_load):value = 0.5 挂 100–200 g 撑 30 s,听齿轮"咔咔"扫齿、摸是否烫手,最后 s.detach() 释放信号。③六(实为五)舵机波浪:每 0.25 s 一只依次摆到 MAX 再反向,考供电。④是灵魂:命令 0.5 之后用手指轻捏输出轴——软件读到的"位置"永远是我们写进去的 0.5,真实角度无人知晓。脚本原话点题:61 维观测里的 joint_pos/joint_vel 若是假的,策略等于蒙眼走路。结尾把人往下一站推:"把现象记进构建日志,然后去下 G2 的真正门票:总线舵机。"

4. 与 hl2915_bench.py 对照:台架方法论不变,工具换血

pi_sg90_bench(四步) hl2915_bench(六课)
依赖 gpiozero(树莓派自带) pyserial 一个包
通信 脉宽,单向 半双工帧,packet/parse/transact
反馈 无 PING + 17 字节快照 + 56 号起 14 字节遥测
验收 肉眼 + 手记日志 丢包率 <0.001、<65°C、sys.exit 退出码

顺序却完全同构:体检→负载/遥测→小步幅→拷机→多机→数据。共地、独立供电、"现象记进构建日志"两版一字不差——台架是缩微的控制环,方法论比舵机贵。

你带走的收获

延伸

什么鸭 WHATDUCK · 复刻学习笔记 ← 全部手册 · 首页