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

ServoTimer2 库指南:解决 Timer1 冲突的舵机控制方案

背景痛点

标准 Servo.h 库占用 Arduino Timer1,与 TMRpcm(音频播放)、VirtualWire(无线通信)等库冲突,导致舵机抖动或失效。ServoTimer2 库改用 Timer2 驱动舵机,完美解决资源冲突,适合需要同时播放音频/通信与控制舵机的项目(如会说话的机器人)。

硬件清单

组件数量备注
Arduino UNO1
舵机 (Tower Pro MG996R / SG90 等)1任意标准舵机
杜邦线若干

电路连接

  • 舵机红线 → Arduino 5V (VCC)
  • 舵机棕/黑线 → GND
  • 舵机橙/黄线 (信号) → Arduino D6 (或任意数字引脚)

注意:多舵机或大扭矩舵机建议外接电源,共地即可。

库安装步骤

  1. 下载库:GitHub - nabontra/ServoTimer2
  2. 解压后整个文件夹放入 Arduino libraries 目录,或在 IDE 中 草图 → 包含库 → 添加 .ZIP 库 选择下载的压缩包
  3. 重启 IDE,#include "ServoTimer2.h" 即可使用

核心 API 对比

功能Servo.h (标准库)ServoTimer2
头文件#include #include "ServoTimer2.h"
对象声明Servo servo1;ServoTimer2 servo1;
绑定引脚servo1.attach(6);servo1.attach(6);
设置角度servo1.write(90); (0-180°)servo1.write(1500); (脉宽微秒)
脉宽范围内部自动换算典型 750-2250 µs (对应 0-180°)

关键区别:角度 vs 脉宽

标准库接受角度值(0-180),内部自动换算脉宽。ServoTimer2 直接接受脉宽微秒值,需自行换算或实测标定。

  • 典型值:750 µs ≈ 0°,1500 µs ≈ 90°,2250 µs ≈ 180°
  • 不同舵机实际范围不同,建议实测标定(发送不同脉宽观察转角)
  • 发送超出范围值通常不会损坏舵机,仅会撞击机械限位

扫描演示代码

标准 Servo.h 版本

#include 
Servo servo1;

void setup() {
  servo1.attach(6);
}

void loop() {
  servo1.write(0);   delay(1000);
  servo1.write(90);  delay(1000);
  servo1.write(180); delay(1000);
}

ServoTimer2 版本

#include "ServoTimer2.h"
ServoTimer2 servo1;

void setup() {
  servo1.attach(6);
}

void loop() {
  servo1.write(750);   // ~0°
  delay(1000);
  servo1.write(1500);  // ~90°
  delay(1000);
  servo1.write(2250);  // ~180°
  delay(1000);
}

实测标定方法

  1. 上传仅含 servo1.write(1500); 的代码,观察舵机是否指向中位(90°)
  2. 逐步修改数值(如 700, 800... 2300),记录对应物理角度
  3. 建立映射表或线性公式:pulse = map(angle, 0, 180, minPulse, maxPulse)
  4. 封装为 writeAngle(angle) 函数,后续按角度调用

多舵机扩展

ServoTimer2 支持最多 8 个舵机(受限于 Timer2 中断资源)。声明多个对象并绑定不同引脚即可:

ServoTimer2 servo1, servo2, servo3;
void setup() {
  servo1.attach(6);
  servo2.attach(7);
  servo3.attach(8);
}

常见问题

问题原因/解决
舵机抖动/不转供电不足(USB 供电电流不够)、信号线干扰、脉宽超出舵机范围
编译报错库未正确安装、路径包含中文/空格、IDE 未重启
与其他库仍冲突检查是否还有其他库占用 Timer2(如 Tone、某些 PWM 库)
角度不准未标定脉宽范围,请按上述方法实测

项目资源

制造工艺

  1. 树莓派与Arduino协作构建机器人:分步指南
  2. Simple Pi Robot:用树莓派打造 2WD 自主巡航车
  3. 热敏电阻测温轻松上手:Arduino 分步实战教程
  4. 在SolidWorks中创建渐进剖视动画:分步教程
  5. 刀具磨床实战技法指南:从入门到精通
  6. 构建制胜原型:快速产品开发分步实战指南
  7. 钼如何塑造现代工业:用途、优势与供应动态
  8. 玻璃纤维生产全流程指南
  9. C 语言 realloc() 完全指南:语法、最佳实践与实战案例
  10. C 语言 free() 函数实战指南:正确释放动态内存、防泄漏与避坑全解析
  11. 掌握VHDL函数:高效设计实战指南
  12. 在VHDL中使用过程:用可复用代码简化设计