发布时间: 2026-09-18
双舵机转动的意思, 是说要用两个完全分开的伺服舵机来干活。这两个舵机各 各自收到的控制信号。然后它们各自去调整自己的角度, 或者是去改变转速。接着, 要通过齿轮、连杆或者同步轴这样的机械结构。 把这些结构和两个舵机的运动连接在一起, 让它们的动作互相配合。这样就能朝着想要的那个方向完成了转动过程。这个事里头, 信号输入是一个部分。PWM 解码是另一个部分。机械传动又是个部分。这三个环节都要具备。缺哪一个都不行, 大家都不能少。下面我们会从原理出发, 再到接线, 接着讲控制逻辑, 列举一些常见的案例, 把双舵机实现转动这一整套流程, 完整地拆开来讲清楚。
在双舵机系统里面, 每一路控制的舵机设备, 它们的操作逻辑和规则都是按照同一个方式来进行管理的:
控制信号的来源是主控制器, 这种主控制器通常指的是微控制器或者是运动控制板, 它会输出一种脉宽调制信号, 也就是PWM信号, 标准舵机所接受的这个控制信号, 其周期规定为20毫秒, 换句话说频率就是50赫兹, 而该脉宽的取值范围, 通常处在500微秒至2500微秒之间, 这一变化范围, 刚好对应着舵机能够达到的从0度到180度的动作行程。
舵机内部的解码芯片或者控制板会读取那个脉宽的数值, 把这个数值换算成一个目标角度, 然后再通过这个船里面的桥式电路去驱动直流电机往那个目标的角度去动起来。
关于位置反馈这个问题, 我们可以这样理解。在舵机的尾部装有一个电位器或者是编码器。这个装置能够随时去探测转子现在的角度状态, 把探测到的数据和目标数值进行对比, 在此基础上构建一个闭环控制系统。通过这样的操作路径, 可以让舵机准确无误地固定在指定的位置上。
双舵机里面的两个字的双, 代表的含义, 就是两路独立的通道, 同时在动或者在按时间顺序分别动来驱动这个舵机, 常见的拓扑方式总共有两种:
不管是哪种结构形状, 核心的逻辑都是一样的, 那就是这两路脉冲宽度调制信号要分开进行生成, 要分开进行解析, 也要分开去进行驱动, 只有在机械的这一头负责把动作合成起来。
检查这是双舵机能否正常转动的第一步这一情况很有必要, 如果线接错了, 后果轻则表现为舵机没法转动, 结果重则会导致驱动板被烧毁。
标准三线/四线舵机接线:
1. 把电源正极也就是颜色为红色或者是橙色的那一根线连接到控制板里面的五伏电压端, 这个端通常是给舵机提供电量的地方。 如果觉得这两路舵机在工作时电流峰值比较大, 比如用了带有金属齿轮的舵机, 单路的峰值可能会达到两安培的样子, 那就建议使用独立的、额定电压为五伏或者六伏的稳压电源来单独供电, 并且要把这个外部电源的地线与逻辑电平的地线进行共用处理。
2. 信号线的橙线或者是黄线, 要接到了单片机里面的那个叫做脉冲宽度调制的输出的引脚上面。 然后第一路的那个舵机得接在标记为通道一的引脚里, 而第二路的舵机呢, 要接到通道二的引脚里头去, 这两个出来的引脚都得是那种能够支持硬件级别生成脉冲宽度调制信号的类型, 并且它们各自的通道还是彼此独立分开的状态才行。
![]()
3. 把电源地, 也就是那根棕色或者黑色的线, 去接到控制板的GND上面, 还要跟电源的GND短接在一起, 这样做就是为了确保参考电位保持一致。
4. 那个四线舵机上面多出来的一根叫做VCC的红色电线, 需要去连接舵机的电源电压, 比如说是六伏特这个水平, 这样就和五个伏特负责的那个逻辑部分的供电是分开了, 以此来防止电流过大使得那个逻辑信号的电平被拉低的情况发生。
关键检查点(90%的"不转"问题出在这里):
请确认单片机引脚的脉冲宽度调制频率已经被设定为50赫兹, 并且其占空比的有效范围已经覆盖从500微秒到2500微。
需要确认两路PWM通道之间互不干扰, 因为有些微控制器的通道CH1和CH2在不同的定时器上, 所以得分别进行配置。
舵机供电里面的接地线和主控制器的接地线连在一起, 不然信号线的电压水平就会发生不正常的变化, 这种情况可能会导致机器手臂的关节出现抖动或者干脆一动不动的状态。
并联共轴方案中,两个舵机机械上对齐初始零位,否则上电后相互顶死。
以“双舵机能够实现在左右两个方向上作出对称的摆动”这一类, 算是比较常见的需要为例, 大家会把控制逻辑分成三个步骤:
第一步:生成两路对称/互补PWM。
对于对称模式, 也就是云台执行俯仰动作的情况而言, CH1和CH2都等于基于角度θ计算出来的某个具体数值, 这种情况下, 这两路输出的脉宽是一样的长, 而且运动的方向是一致的。
这种互补的模式, 也就是差速转向, 是这样的, 第一个通道等于一点五毫秒加上一个差值, 第二个通道等于一点五毫秒减去这个差值, 这个差值要是正变化或者是负变化的变量, 这样做就能实现同轴差速。
第二步:写入寄存器或调用库函数。
// 伪代码示例(通用)
.(pin1); // 绑定CH1引脚
.(pin2); // 绑定CH2引脚
void (float angle) {
.write(angle); // 0~180
.write(180 angle); // 互补模式
}
第三步:闭环校验(进阶)。
如果要使用带有编码器的舵机, 或者是另外加装霍尔传感器, 那么就每十毫秒读取一次实际的角度数值, 把这个数值和目标值进行对比。然后通过 PID 来修正下一次输出的 PWM 信号。这样做可以消除滞后现象以及机械间隙带来的误差。
这是最典型的双舵机实现转动场景, 也是新手最容易遇到的项目:
偏航轴这个部分, 它是通过舵机A来进行驱动的, 主要用来控制云台做水平的旋转工作, 其典型的行程范围是正负九十度。
俯仰轴(Tilt)这一块, 是由舵机 B 来驱动的, 主要作用就是控制云台进行上下方向的俯仰动作, 它的典型行程数据是负的 30 度一直到正的 60 度之间。
所谓的转动实现是这样子的: 飞行控制系统或者是微控制单元会依据惯性测量单元、全球定位系统航向角这些传感器提供的数据进行实时的计算, 以此得到目标偏航角度和目标俯仰角度, 然后将这两个角度分别转换为两路脉冲宽度调制信号, 随后两个舵机各自独立地发生运动, 就这样最终组合出任意方向的朝向。
实际调试中最常见的三个问题及对策:
假如你此刻正在进行双舵机系统的搭建或者是调试工作, 那么按照下面的这个先后次序来进行操作的话, 能够让你以最高的效率来实现转动这一动作。
1. 先把单一的一个通道调试通了。这时候只连接第一个舵机线路, 然后采用万用表或者是示波器来核实脉冲宽度调制信号的波形以及频率是不是符合标准, 还要查看脉宽是否正常无误, 并且要保证这个舵机能够非常平稳地变换到零度、九十度和一百八十度这三个位置上面检查完毕没有错误之后, 再继续接入第二个通道的信号。
2. 确认机械自由度的时候, 如果采用并联共轴方式, 就要检查联轴器间隙是不是在建议的零点五毫米以内, 如果采用串联耦合方式, 就要看看齿轮啮合是不是顺畅, 还有没有卡住的地方。
3. 电源是独立计算的, 先把两路舵机的峰值电流加在一起, 然后留百分之三十的余量去挑选适合的电源电流, 这样做的目的是为了避开因为多个动作一起发生时造成的电压下降, 防止出现某一路丢失节拍的情况。
4. 在软件层面增加保护功能, 具体做法是在控制代码里设置角度限位条件, 比方说限制在0度到180度的范围之内, 同时还要设置好速度变化的斜坡, 规定每一帧的变形幅度要小于或者等于5度。这样做的主要目的, 就是把机械方面的冲击力给挡在外面, 并且也能防止那个带动部件的电机因为堵转而发生发热现象。
5. 进行记录标定数据方面的操作, 具体来说是这样做的, 也就是每当更换某一个舵机的情况出现的时候, 或者是对机械结构进行一次调动的过程被完成时都要再次地去重新记录零位偏移的数据以及实际行程上限的相关数值, 并且要把这些内容写入到控制参数表中, 以便保证可重复性的效果能够得以实现。
回到核心问题——双舵机如何实现转动?
答案其实可以成短短一行字, 说的大概意思是靠两条互不干扰的PWM信号路子去分别带着两个舵机转, 让各自完成规定的角度变动, 再由机械零件把动作连起来变成总的转动效果, 想要做到这一点的话关键的三个地方都得没问题才算完事, 具体来看第一个就是信号那里头, 频宽都要给对路, 第二个是电源这边, 得够足还得搭在同一条地线上, 一个就是结构方面, 传动得很麻利同时初位的对齐也是前提。
要是能够严格遵守先在单路调试、然后进行双路调试,并且先处理静态情况、接着再处理动态情况的这种检查顺序, 那么大部分的带有两个舵机的系统在只有连接一次线路的情况下, 都能够实现运转时的稳定性。 如果你发现设备出现不转动、抖动或者不同步的现象, 那就应该把检查信号波形和共同接地作为优先排查的方向, 之后再去检查是否有机械部件之间的干涉干扰, 才需要考虑到是否需要调整控制, 这样的做法能够达到最高的效率。