发布时间: 2026-04-13
你有没有碰到过这种情形:正在构建一个具备两自由度的云台,想着使摄像头既能够朝左右方向进行旋转,又能够做上下角度的俯仰动作,然而却发觉两个舵机各干各的,没办法共同协作开展工作?又或者你购置了双轴舵机,却弄不明白它究竟应该采用几路PWM信号去实施控制?本文会从实际运用的角度出发,全面剖析双轴舵机的控制原理、接线的方式以及编程的要点,助力你一下子就掌握双轴舵机的全部控制技术。
双轴舵机的控制核心得出这样的结论,双轴舵机内部有着两套完全独立的电机,还有减速齿轮组以及角度反馈电位器,你得经由两路独立的PWM信号分别去控制其X轴的转动角度以及y轴的转动角度,每个轴的控制方式和标准单轴舵机完全一样,二者相互之间不存在电气方面的耦合关系,也不存在信号上的耦合关系。
所依据的权威内容为:依照伺服电机控制技术规范(GB/T 16439 2022),位置伺服系统的基础控制逻辑,对控制信号与执行角度存在线性对应关系提出要求。双轴舵机其本质是什么呢,是把两套伺服系统整合于同一壳体内,信号控制部分遵循同一种行业标准。
于实际项目里,像搭建一个简易的两自由度机械臂这般,X轴舵机承担着水平旋转的职责,其旋转范围是0°至180°,Y轴舵机负责垂直抬升,范围同样是0°至180°。当你有需求要把末端移至“左上方”位置时,你得在同一时刻对X轴舵机发送对应“左”的角度PWM信号,并且向Y轴舵机发送对应“上”的角度PWM信号,这即是双轴控制的基本逻辑。
控制信号针对每个轴而言,皆是标准的PWM(脉宽调制)信号,严格依照以下参数:
角度与脉宽的线性换算公式:
目标脉宽(ms) = 最小脉宽 + (目标角度 / 最大角度) × (最大脉宽 最小脉宽)
示例:标准0°~180°舵机,目标90°:
脉宽 = 0.5 + (90/180) × (2.5 0.5) = 0.5 + 0.5 × 2 = 1.5ms
绝大多数双轴舵机引出6根线,分为两组,每组3根:
关键操作要点:
电源以及地线倘若存在着两轴情况,能够将其并联至同一个电源之处,然而信号线却各自去连接到两个不一样了PWM引脚之上。
电源得能够,在双轴同时开启着工作的状况下,供应峰值电流,(这里建议,按照这样的方式来配置,也就是单轴工作电流乘以二之后,再在此基础上乘以一点五倍的余下量)。
严禁在舵机运转时拔插信号线,否则可能损坏控制器引脚
举例如下,展示怎样同时操控X轴以及Y轴抵达特定角度,该情况适用于,适用于ESP32这样的常见平台、。
// 双轴舵机控制示例代码
#
Servo ; // 创建X轴舵机对象
Servo ; // 创建Y轴舵机对象
// 定义信号引脚
const int pinX = 9; // X轴PWM引脚
const int pinY = 10; // Y轴PWM引脚
void setup() {
.(pinX);
.(pinY);
// 可选:设定脉宽范围(非标准舵机需要手动设置)
// .(pinX, 500, 2500); // 500us~对应0~180度
// .(pinY, 500, 2500);
}
void loop() {
// 示例1:X轴从0°转到180°,Y轴保持90°不变
for (int angle = 0; angle <= 180; angle++) {
.write(angle); // 设置X轴角度
.write(90); // Y轴固定在中位
delay(15); // 等待舵机转到目标位置
}
delay(1000);
// 示例2:双轴同时运动,形成对角线轨迹
for (int angle = 0; angle <= 180; angle++) {
.write(angle); // X轴角度递增
.write(180 angle); // Y轴角度递减
delay(15);
}
delay(1000);
}
关键编程要点:
![]()
1. 写函数 servo.write(angle) ,它能够自动地把角度,也就是范围处于 0 至 180 之间这样范围的角度,转变为与之对应的脉宽。
2. 两个舵机对象独立调用,互不影响,实现了真正的双轴独立控制
3. 那运动速度是由delay()的时长来决定的,对于舵机而言,15ms到20ms这个范围是比较常见的响应周期。
4. 要是有进一步、更高频率的控制需求,像是进行实时追踪这种情况,那么建议采用定时器中断,而不是使用delay() 来处理。
当存在这样一种情况,即需要两个轴依照特定的轨迹来协同运动,比如说要让机械臂的末端作出画圆或者走直线这样的动作时 ,那“时间同步”这项问题就得去解决。
假如存在要从一个记为点A(其坐标为x1, y1)的位置移动至另一个记为点B(其坐标为x2, y2)的情况,并且期望末端所走过的路径是呈直线形态的轨迹。
操作步骤:
1. 计算X轴总行程:Δx = x2 x1
2. 计算Y轴总行程:Δy = y2 y1
3. 取较大行程作为总步数N = max(|Δx|, |Δy|)
4. 每隔一定的控制周期(举例来说像20毫秒这样的时长),各自去计算X轴以及Y轴当下的目标角度。
X轴当前角度 = x1 + (Δx × step / N)
Y轴当前角度 = y1 + (Δy × step / N)
现实存在实例,有一个具备两个自由度的云台,其要从左上角位置即(30°, 150°)之处移动到右下角位置,也就是(150°, 30°)那里。依据上述所讲,控制程序会生成100个中间的点,每一个单独的点都会同时去发送X以及Y两个方向的角度指令,最终由此而形成一条呈现平滑状态的对角线轨迹。
1. 断开负载(拆下舵机臂)
2. 发送1.5ms脉宽信号(90°中位)
3. 将舵机臂以尽可能接近垂直的角度安装
4. 分别对 0°这个处于 0.5 毫秒状态时的位置进行测试,还要对 180°这个处于 2.5 毫秒状态时的位置进行测试,之后记录实际出现的角度偏差。
5. 在程序中建立偏差映射表进行补偿
有部分并非严格处于0°至180°范围的双轴舵机,其实际行程情况, 能够借助以下这些方式来测定实际所涵盖的范围:
把发送脉宽,从0.5毫秒,逐步地增加到2.5毫秒,其间记录舵机开始转动的脉宽值,以及停止转动的脉宽值。
把实际存在的脉宽范围代入到名为的函数,该函数作用在特定引脚,带有最小脉宽和最大脉宽这两个参数。
1. 舵机呈现出完全静止不转动的状态,这种情况下,需要去检查电源的电压以及极性,还要对红色线与棕色线之间予以测量,判别衡量其两端彼此之间是否存在5V以上这样一个电压数值。
2. 若单个轴处于不转动的状态 ,那就进行交换X与Y信号线的测试操作 ,以此来判别究竟是舵机内部出现故障了 ,还是信号输出方面存在问题。
3. 经由抖动或者嗡嗡声,推断出电源电流不足,或者PWM信号存在干扰,针对此情况,采取添加电容的举措,或者缩短信号线长度的办法。
4. 角度不准 → 执行归零校准,检查脉宽范围是否与舵机规格匹配
5. 两个轴出现干涉情况,那就去检查一下机械结构是不是存在硬限位,要保证这两个轴的转动范围不存在物理方面的冲突。
双轴舵机的控制,本质上就是同时管理两路独立的PWM信号,每路信号遵循完全相同的参数标准(20ms周期、0.5~2.5ms脉宽对应0~180°),控制程序通过两个独立的舵机对象分别发送角度指令,即可实现双轴的独立或协同运动。
基于以上原理,请按以下步骤执行你的双轴舵机控制项目:
1. 是第一步,这一步是验证接线伟创动力舵机,需要去连接单个轴,接着要发送1.5ms信号,以此来确认舵机能稳定地停在90°中位。
2. 第二步,进行针对双轴的测试,要把两个轴一块儿连接起来,还要分别去发送不一样的固定角度,像是X轴为0°,Y轴是180°,之后要去确认这两个轴能够分别独立地进行定位。
3. 按照编程运动的第三步,最开始要进行的初步顺序活动是这样的,假设当X轴开展全程移动的时候,Y轴处于固定状态伟创动力,之后再循序渐进地向同步插补运动进行转变。
4. 第四步呢属于电源确认环节,在这个环节当中,需要借助万用表去测量,测量的是什么呢是工作时候的电源电压降,要做到确保其数值不会低于4.8V。
5. 第五步(负载测试):安装实际负载后,重新校准零位和行程范围
依照上述步骤,你能够于2小时之内达成从接线直至双轴同步运动的整个流程验证。要是在任一环节碰到异常,那就返回本文第七节的故障排查表,依照顺序逐个排查。