[资料干货] PWM信号是如何控制舵机的?

[复制链接]
639|0
XQ-POWER舵机 发表于 2025-9-29 10:53 | 显示全部楼层 |阅读模式
PWM(脉冲宽度调制)信号控制舵机的核心原理是通过固定周期内高电平的持续时间(脉宽)对应舵机的旋转角度,舵机内部电路根据检测到的脉宽驱动电机转动到目标位置并保持。以下是具体实现过程:
一、核心控制逻辑
舵机的控制依赖于特定频率和脉宽的 PWM 信号,关键参数如下:
PWM 信号频率:固定为 50Hz(周期 20ms),这是舵机的标准接收频率,频率过高或过低会导致舵机无响应或角度偏差。
高电平脉宽与角度对应关系:舵机通过检测一个周期内高电平的时长来确定目标角度,典型对应关系为:
0.5ms 脉宽 → 0°(占空比 2.5%,即 0.5ms/20ms)
1.0ms 脉宽 → 45°(占空比 5.0%)
1.5ms 脉宽 → 90°(占空比 7.5%,中位角度)
2.0ms 脉宽 → 135°(占空比 10.0%)
2.5ms 脉宽 → 180°(占空比 12.5%)
二、舵机内部工作流程
当 PWM 信号通过信号线输入舵机后,内部电路会执行以下步骤:
信号检测:舵机内部的控制电路接收 PWM 信号,解析高电平持续时间,确定目标角度。
电压比较:将检测到的脉宽转换为对应的偏置电压,与舵机内部电位器(随输出轴同步转动)的电压进行比较,产生电压差。
电机驱动:电压差触发电机转动,通过减速齿轮组带动输出轴旋转,同时电位器也随之转动,改变自身电压。
位置锁定:当电位器电压与目标偏置电压相等(电压差为 0)时,电机停止转动,舵机保持在目标角度。
三、硬件连接与实现步骤
以 Arduino 控制器为例,具体操作如下:
硬件准备:
控制器:Arduino UNO(需支持 PWM 输出,引脚标有 “~”)。
舵机:如 SG90(3 线制:红色 VCC、棕色 GND、黄色信号线)。
电源:小舵机可直接接 Arduino 的 5V 电源,大扭矩舵机需外接独立电源(避免烧毁控制器)。
接线方式:
舵机 VCC → Arduino 5V(或外接电源正极)。
舵机 GND → Arduino GND(必须共地,否则信号紊乱)。
舵机信号线 → Arduino PWM 引脚(如~9)。
软件编程:
使用 Arduino 自带的Servo.h库简化控制,示例代码如下:
cpp
运行
#include <Servo.h>
Servo myServo;  // 创建舵机对象
void setup() {
  myServo.attach(9);  // 信号线接引脚9
}
void loop() {
  myServo.write(0);    // 转到0°(对应1ms脉宽)
  delay(1000);         // 停留1秒
  myServo.write(90);   // 转到90°(对应1.5ms脉宽)
  delay(1000);
  myServo.write(180);  // 转到180°(对应2ms脉宽)
  delay(1000);
}
若需更精准控制,可使用writeMicroseconds()直接指定脉宽:
cpp
运行
myServo.writeMicroseconds(1000);  // 1000μs=1ms → 0°
myServo.writeMicroseconds(1500);  // 1500μs=1.5ms → 90°
四、关键注意事项
共地原则:控制器、舵机、电源的 GND 必须连接在一起,否则 PWM 信号无法正常传输。
电源匹配:大扭矩舵机,外接 6V/12V 电源,避免直接使用控制器 5V 供电导致过载。
角度校准:不同舵机的脉宽 - 角度对应关系可能存在差异,需通过实际测试微调(如某些舵机 180° 需 2.2ms 脉宽)。
机械保护:避免强行让舵机转动超过物理极限角度(如部分舵机最大角度为 120°),防止齿轮损坏。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部