亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino 舵机控制完全指南:从原理到多舵机扩展

本教程将讲解 舵机工作原理 及如何使用 Arduino 控制舵机。舵机因易用、位置控制精准,广泛应用于机器人、自动化、航模等 Arduino 项目。

我已在多个项目中使用舵机,可参考:

  • DIY Arduino 智能手机控制机械臂
  • Arduino 六足蚂蚁机器人
  • DIY Arduino 遥控气垫船
  • SCARA 机器人 | 如何构建基于 Arduino 的机器人
  • DIY 火星毅力号漫游车复刻版——Arduino 项目

可观看视频或阅读图文教程。内容包含多个控制示例、接线图、代码,以及使用 PCA9685 PWM 驱动器扩展多舵机控制的指南。

什么是舵机?

舵机是一种闭环控制系统,利用位置反馈精确控制输出轴的角度。核心特征是能精准控制轴位置。

Arduino 舵机控制完全指南:从原理到多舵机扩展

工业舵机通常用高精度编码器反馈,而模型/航模舵机多用电位器。反馈信号与目标信号在误差检测器中比较,控制器驱动电机修正误差直至归零。

Arduino 舵机控制完全指南:从原理到多舵机扩展

本教程重点讲解模型舵机的工作原理与 Arduino 控制方法。

Arduino 舵机控制完全指南:从原理到多舵机扩展

模型舵机体积小,用于控制遥控车、船、飞机等,也广泛用于工程原型、机械臂、仿生机器人、人形机器人等。

Arduino 舵机控制完全指南:从原理到多舵机扩展

舵机内部工作原理

模型舵机内部包含四大部件:直流电机、减速齿轮组、电位器、控制电路。

  • 直流电机高速低扭矩,经齿轮箱降速至约 60 RPM 并增大扭矩
  • 电位器连接输出轴,随转动输出与角度成正比的电压
  • 控制电路将电位器电压与信号线电压比较,驱动内部 H 桥正反转电机,直到两电压一致
Arduino 舵机控制完全指南:从原理到多舵机扩展

控制信号为 50Hz 脉冲序列(周期 20ms)。脉冲宽度决定角度:

  • 1ms → 0°
  • 1.5ms → 90°
  • 2ms → 180°

不同品牌范围可能略有差异(如 0.5ms–2.5ms)。

Arduino 舵机控制完全指南:从原理到多舵机扩展

Arduino 项目常用舵机型号

选型关键指标:扭矩、工作电压、电流、尺寸。最流行两款:

SG90 微型舵机

Arduino 舵机控制完全指南:从原理到多舵机扩展
堵转扭矩1.2 kg·cm @4.8V / 1.6 kg·cm @6V
工作电压3.5 – 6V
空载电流100 mA
堵转电流650 mA
最大速度60° / 0.12s
重量9g

MG996R 舵机

堵转扭矩11 kg·cm @4.8V / 13 kg·cm @6V
工作电压4.8 – 7.2V
空载电流220 mA @4.8V / 250 mA @6V
堵转电流2.5 A(原厂)
最大速度60° / 0.20s
重量55g

Arduino 控制舵机实战

以 MG996R 为例,其堵转电流高达 2.5A,**不能直接由 Arduino 供电**,必须外接电源。

Arduino 舵机控制完全指南:从原理到多舵机扩展

接线图

Arduino 舵机控制完全指南:从原理到多舵机扩展
  • 舵机信号线 → Arduino 数字引脚(如 D9)
  • 舵机 VCC/GND → 外接 5V 电源(≥2A)
  • Arduino GND 与外接电源 GND 共地

若使用 SG90 微型舵机,空载电流约 100–200mA,**可尝试直接由 Arduino 5V 引脚供电**(USB 供电约 500mA,桶形插孔供电可达 1A),但为稳定性建议始终外接供电。

Arduino 舵机控制完全指南:从原理到多舵机扩展

所需元件

  • MG996R 舵机 或 SG90 微型舵机
  • Arduino 开发板
  • 5V 2A 直流电源

舵机控制代码

方法一:手动产生 50Hz 脉冲(不推荐)

/* 舵机控制 - 50Hz 脉冲发生器 by Dejan, https://howtomechatronics.com */
#define servoPin 9

void setup() {
  pinMode(servoPin, OUTPUT);
}

void loop() {
  // 每 20ms 一个脉冲
  digitalWrite(servoPin, HIGH);
  delayMicroseconds(1450); // 脉冲宽度 1.45ms → 90°
  digitalWrite(servoPin, LOW);
  delayMicroseconds(18550); // 补足 20ms
  // 实测脉宽:0.6ms=0°,1.45ms=90°,2.3ms=180°
}

方法二:使用 Arduino Servo 库(推荐)

/* 使用 Arduino Servo 库控制舵机 by Dejan, https://howtomechatronics.com */
#include 
Servo myservo;

void setup() {
  myservo.attach(9, 600, 2300); // (引脚, 最小脉宽μs, 最大脉宽μs)
}

void loop() {
  myservo.write(0);   delay(1000);
  myservo.write(90);  delay(500);
  myservo.write(135); delay(500);
  myservo.write(180); delay(1500);
}

attach(pin, min, max) 可针对具体舵机校准脉宽范围,write(角度) 直接设定 0–180° 位置。

Arduino 同时控制多个舵机

Servo 库支持大多数板子同时控制 12 个舵机,Mega 支持 48 个。控制多舵机与单舵机一样简单:

Arduino 舵机控制完全指南:从原理到多舵机扩展
/* 多舵机控制 by Dejan, https://howtomechatronics.com */
#include 
Servo servo1, servo2, servo3, servo4, servo5;

void setup() {
  servo1.attach(8); servo2.attach(9); servo3.attach(10);
  servo4.attach(11); servo5.attach(12);
}

void loop() {
  // 全部归零
  servo1.write(0); servo2.write(0); servo3.write(0);
  servo4.write(0); servo5.write(0); delay(2000);
  // 全部 90°
  servo1.write(90); servo2.write(90); servo3.write(90);
  servo4.write(90); servo5.write(90); delay(2000);
  // 全部 180°
  servo1.write(180); servo2.write(180); servo3.write(180);
  servo4.write(180); servo5.write(180); delay(2000);
}

每个舵机创建一个 Servo 对象并指定引脚即可。我的六足蚂蚁机器人项目曾用 Mega 控制 22 个舵机。

PCA9685 16路 PWM/舵机驱动器扩展

PCA9685 通过 I2C 总线通信,内置时钟可独立驱动 16 路舵机,释放 Arduino 资源。最多可级联 62 块板卡,理论控制 992 个舵机,仅占用 Arduino 两个 I2C 引脚。

Arduino 舵机控制完全指南:从原理到多舵机扩展

通过焊盘设置 I2C 地址(A0–A5),最多 62 个地址。

Arduino 舵机控制完全指南:从原理到多舵机扩展

接线原理图

Arduino 舵机控制完全指南:从原理到多舵机扩展

舵机仍需外接电源(如 5V 6A)。

所需元件

  • MG996R 舵机
  • PCA9685 PWM 舵机驱动板
  • Arduino 开发板
  • 5V 6A 直流电源

PCA9685 控制代码

使用 GitHub 上 PCA9685-Arduino 库(NachtRaveVL 维护)。

/* Arduino + PCA9685 驱动舵机 by Dejan, https://howtomechatronics.com
   Library: https://github.com/NachtRaveVL/PCA9685-Arduino */
#include 
#include "PCA9685.h"

PCA9685 driver;
// PCA9685 输出 12位 = 4096 步
// 0.5ms(2.5%) → 102 步;2.5ms(12.5%) → 512 步
PCA9685_ServoEvaluator pwmServo(102, 470); // 对应 -90° 到 +90°
// 第二舵机可单独校准:PCA9685_ServoEvaluator pwmServo2(102, 310, 505); // 0-90-180°

void setup() {
  Wire.begin();
  Wire.setClock(400000); // 400kHz I2C
  driver.resetDevices();
  driver.init(B000000);  // 地址引脚全低
  driver.setPWMFrequency(50); // 50Hz
}

void loop() {
  driver.setChannelPWM(0, pwmServo.pwmForAngle(-90)); delay(1000);
  driver.setChannelPWM(0, pwmServo.pwmForAngle(0));   delay(1000);
  driver.setChannelPWM(0, pwmServo.pwmForAngle(90));  delay(1000);
}

关键点:

  • 12 位分辨率(4096 步),脉宽映射需按舵机实测校准
  • ServoEvaluator 可为每个舵机单独设定脉宽范围,解决批次差异
  • 链式多驱动器时,创建多个 PCA9685 对象并分别 init() 不同地址

多驱动器级联控制大量舵机

原理相同:硬件级联、设置不同地址、软件创建多对象。代码结构与单驱动器一致,仅增加多驱动器初始化。

常见问题排查

舵机抖动/导致 Arduino 复位

原因:舵机启动/堵转电流大,导致 Arduino 供电电压跌落复位。尤其直接用 Arduino 5V 引脚供电时。

解决:

  • 舵机外接稳压电源,并与 Arduino 共地
  • 在舵机电源端并联大容量电解电容(如 470μF–1000μF)作去耦

舵机无法转动完整 0–180°

原因:不同舵机对应的最小/最大脉宽不同,默认库参数(544μs/2400μs)可能不匹配。

解决:在 attach() 中自定义脉宽:

myservo.attach(9, 600, 2300); // 根据实测调整 min/max 脉宽(μs)

尺寸与 3D 模型

提供两款热门舵机的 3D 模型下载(Thangs):

SG90 微型舵机

Arduino 舵机控制完全指南:从原理到多舵机扩展

3D 模型:Thangs 下载

Arduino 舵机控制完全指南:从原理到多舵机扩展

MG996R 舵机

Arduino 舵机控制完全指南:从原理到多舵机扩展

3D 模型:Thangs 下载

Arduino 舵机控制完全指南:从原理到多舵机扩展

结语

本教程覆盖了 Arduino 驱动舵机的核心知识。市面舵机品牌众多,参数各异,选型时务必结合扭矩、电流、电压、尺寸综合考量。舵机为机器人、自动化、航模项目提供无限可能。

希望本教程对您有帮助。欢迎评论区提问,别忘了查看我的 Arduino 项目合集!

常见问题 (FAQ)

如何将舵机与 Arduino 配合使用?

舵机仅 3 根线:GND、VCC(电源)、信号线(接 Arduino 数字引脚)。通过 50Hz PWM 信号控制角度。

Arduino 能直接驱动舵机吗?

小电流舵机(如 SG90)可尝试直接供电,但电流超 500mA 会导致 Arduino 复位。**强烈建议始终使用外接电源**为舵机供电。

Arduino 能同时控制多少个舵机?

Servo 库:普通板 12 个,Mega 48 个。配合 PCA9685 可扩展至数百个。无论数量,**舵机必须外接供电**。

制造工艺

  1. 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
  2. 舵机驱动避障机器人:基于 Arduino 与 HC-SR04 构建
  3. Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
  4. Arduino Nano + 摇杆控制双步进电机:Visuino 图形化教程
  5. Arduino + MPU6050 姿态控制舵机:SG90 与 MG996R 精准跟随实战
  6. ThimbleKrox:基于 Arduino Micro 与 MPU-6050 的指戴式鼠标控制器
  7. Arduino 合成乐音:从零实现 88 键钢琴全音域
  8. Arduino 连接 NMEA-0183 设备全攻略:从硬件接线到协议解析
  9. DIY Arduino 蟑螂控制系统 —— 30 美元以内自制指南
  10. 通过专用 Android App 蓝牙控制 Arduino 机械臂
  11. 铝焊接大师指南:专家技术与实操技巧
  12. 工业离合器机理深度解析:四大主流型式、故障早期识别与选型建议