舵机角度控制:用 1~2ms 高电平命令一个角度
更新时间:2026-09-12。本文是「集成电路大类 · 芯片设计」入门层(beginner)数字逻辑基础第九十篇。PWM一篇讲过用占空比调平均电压,步进电机讲过用脉冲数定位。舵机把这两件事打包:你只给一路固定频率的 PWM,它内部自带位置反馈闭环,自己转到脉宽对应的角度并用力保持。
本文要回答的问题
- 舵机内部由什么组成,为什么给一路 PWM 就能精确停在某个角度?
- 为什么是 20ms 周期、1~2ms 高电平?0°/90°/180° 对应什么脉宽?
- 占空比和脉宽怎么换算?定时器分辨率决定多小的角度步进?
- 舵机、步进电机、普通直流电机分别适合什么场合?
- 为什么舵机一定要独立供电、不能从单片机 5V 脚取电?
一、内部结构:电机+齿轮+电位器+闭环
一颗标准 hobby 舵机里有:小直流电机 → 减速齿轮组 → 输出轴;输出轴联动一个电位器(可变电阻)测当前角度;一块小控制板比较「PWM 命令的目标位置」与「电位器测到的实际位置」,有偏差就驱动电机正转/反转直到二者相等。所以它是一个内建的角度位置伺服闭环——你发的不是「转多久/转多少步」,而是「目标角度」,舵机自己负责到位并抵抗外力保持(输出力矩)。
二、控制信号:50Hz 周期,脉宽编码角度
控制信号是周期约 20ms(50Hz)的 PWM,真正携带信息的是每个周期里高电平的宽度:
| 高电平脉宽 | 占空比(20ms) | 典型角度 |
|---|---|---|
| 0.5ms | 2.5% | 约 0°(极限) |
| 1.0ms | 5% | 0° |
| 1.5ms | 7.5% | 90°(中位) |
| 2.0ms | 10% | 180° |
| 2.5ms | 12.5% | 约 180°(极限) |
20ms 周期:
┌1ms┐_________________________________________ → 0°
┌─1.5ms─┐_____________________________________ → 90°
┌──2.0ms──┐___________________________________ → 180°注意编码信息的是脉宽(µs)而非平均电压,和驱动 LED/电机调功率的 PWM 用途不同。不同品牌脉宽-角度范围略有差异(有的 0.5~2.5ms 覆盖更大行程),代码里要做成可标定的「角度→脉宽」线性映射。
三、怎么生成:定时器输出比较/PWM 硬件
用定时器的输出比较/PWM 模式:周期重装值对应 20ms(如 1MHz 计数时钟下 ARR=20000),比较寄存器 CCR 设为脉宽计数值(1000=1ms…2000=2ms),硬件自动产生每帧、不用 CPU 干预。要改角度只需更新 CCR:
脉宽计数 = 1000 + (angle/180) × 1000 // 1.0ms@0°, 2.0ms@180°,1MHz tick
CCR = 脉宽计数; ARR=20000 (20ms)角度分辨率取决于脉宽可调的最小步进:0.5~2.5ms 的 2ms 行程映射 180°,若硬件能以 1µs 步进调节,则约 0.09°/步,远超舵机机械/死区精度(实际约 1~2°)。多舵机时用一个定时器的多个输出比较通道,或用 PCA9685(I2C 转 16 路 PWM、内置 25MHz 振荡器、直接以 µs 写脉宽)这类专用芯片,省主控资源并可挂很多路(经 I2C 总线扩展)。
四、舵机 vs 步进 vs 直流电机
| 指令形式 | 反馈 | 能连续转吗 | 适用 | |
|---|---|---|---|---|
| 标准舵机 | 一路 50Hz PWM=目标角 | 内建电位器闭环 | 否(0~180°) | 转角定位:机械臂/舵面/门锁 |
| 步进电机 | 脉冲序列 | 无(开环) | 可(按步) | 精确定位/进给:打印机/云台 |
| 直流有刷 | 电压/PWM+H 桥 | 通常无 | 连续 | 连续旋转:轮子/风扇 |
总线舵机(如 Dynamixel/串行舵机)把位置、速度、温度、力矩都做成寄存器经串行总线回读,是「舵机+编码器+MCU」的智能版。
五、供电与工程坑
- 必须独立供电:舵机堵转/加速瞬间电流可达 0.5~1.5A(大舵机更高),绝不能从单片机板上 5V/3.3V 引脚取,否则电压瞬间塌陷导致主控复位;用独立 BEC/电源,并与主控共地;
- 信号是 3.3/5V 电平,老舵机可能要 电平转换;电源线旁加电容吸收浪涌;
- 机械有间隙/回差,长期带力会抖,避免长时间硬顶极限位置;频繁抖动先查脉宽是否稳定(别用抖动的软件延时生成)和电源是否够。
与现有篇目的衔接
总结
一句话总结:标准 hobby 舵机内部集成了直流电机、减速齿轮、测角度的电位器和控制板,构成内建的角度位置闭环,外部只需给一根周期约 20ms(50Hz)的 PWM,真正携带命令的是每周期高电平的宽度而非平均电压——典型 1.0ms 对应 0°、1.5ms 对应 90°、2.0ms 对应 180°(全程约 0.5~2.5ms,不同型号可标定),舵机自行把转轴转到脉宽对应角度并用力保持;数字侧用定时器输出比较/PWM 模式生成,20ms 设为周期重装值、把脉宽计数写进比较寄存器即可,改变角度只更新比较值,分辨率由脉宽最小步进决定(1µs 步进约 0.09°,远高于机械精度),多路时用定时器多通道或 I2C 转 16 路 PWM 的 PCA9685;与发脉冲数开环定位的步进电机和给电压就连续转的直流电机不同,舵机命令的是目标角度且自带反馈,适合机械臂、舵面、门锁这类转角伺服;工程上最关键的是独立供电——堵转瞬时电流可达安培级,从主控取电会因压降导致复位,应配独立 BEC 并共地、加吸收电容、必要时做电平转换,抖动多源于脉宽不稳或电源不足。