直流电机位置式 PID 控制 和 舵机的区别

最近在做平衡车项目时,很多嵌入式开发者都会有一个疑问:直流电机的位置式 PID 控制舵机,明明都能实现精准的位置定位,比如让电机转到指定角度、让机械臂停在预设位置,现象看起来几乎一模一样,它们之间到底有区别吗?

其实答案很明确:二者是完全不同的两类控制方案------ 一个是 "自由组装的闭环系统",一个是 "开箱即用的一体化执行器"。今天就从结构、控制逻辑、性能和应用场景四个维度,把这个问题讲透。

一、核心区别:"组合方案" vs "一体化产品"

这是二者最本质的差异,决定了后续所有的控制逻辑和开发方式。

直流电机 + 位置式 PID:需要自己搭的 "闭环系统"

直流电机本身是开环控制元件------ 给它通上固定占空比的 PWM,它只会以固定转速一直转,根本不知道自己转了多少圈、停在哪个角度。

而我们实现 "位置精准控制" 的核心,是给它配上反馈元件PID 算法,组成一个完整的闭环系统。这个系统的核心组成缺一不可:

  1. 执行单元:直流电机本体(带或不带减速器)+ H 桥驱动电路(如 L298N、DRV8825)
  2. 反馈单元:编码器(光电编码器 / 霍尔编码器),负责实时采集电机的转动角度、转速
  3. 控制单元 :MCU(比如 STM32F103),运行位置式 PID 算法------ 实时对比 "目标角度" 和 "编码器反馈的实际角度",计算偏差,再动态调整输出给驱动电路的 PWM 占空比,直到偏差为 0。

简单说,直流电机的位置控制是 "软件 + 硬件" 的组合方案,从硬件接线到算法编写,都需要开发者自己完成。

舵机:出厂自带闭环的 "一体化执行器"

舵机本质是一个高度集成的闭环控制模块------ 它把 "电机、减速器、反馈电位器、控制板" 全塞在了一个小壳子里。

我们使用舵机时,完全不用关心内部的控制逻辑,只需要给它一个标准的 PWM 控制信号就行。比如常见的 SG90 舵机:

  • 控制频率固定为 50Hz(20ms 周期)
  • 高电平时间 1ms 对应 0°,2ms 对应 180°,1.5ms 对应 90°

当我们给舵机发一个 "1.5ms 高电平" 的 PWM 信号时,舵机内部的控制板会自动完成三件事:

  1. 读取内部电位器的反馈值(当前角度)
  2. 对比目标角度(1.5ms 对应的 90°)和实际角度,计算偏差
  3. 驱动内部小电机转动,直到偏差为 0,然后自动锁死位置

也就是说,舵机的闭环控制是 "出厂自带" 的,开发者只需要发指令,不用管中间的控制过程。

二、控制逻辑:"开发者主导" vs "黑盒运行"

表象上二者都能 "精准定位",但底层的控制逻辑完全不同,这也是开发时最直观的差异。

位置式 PID 控制:算法参数由你说了算

位置式 PID 的核心公式很简单:u(k)=Kp​⋅e(k)+Ki​⋅∑i=0k​e(i)+Kd​⋅[e(k)−e(k−1)]

  • e(k):当前时刻的角度偏差(目标角度 - 实际角度)
  • 、、:比例、积分、微分系数
  • u(k):当前时刻输出的 PWM 占空比

这个算法的所有参数都由开发者调试------ 比如平衡车的驱动轮控制,你需要根据电机的负载、减速器的减速比、编码器的分辨率,反复调整 PID 参数,才能达到 "响应快、无超调、稳态误差小" 的效果。

而且你可以灵活修改控制逻辑:比如想让电机先加速再减速,或者加入限幅保护,都可以在代码里直接实现。

舵机:控制逻辑是 "黑盒"

舵机的内部控制算法是厂家预设好的,开发者无法修改。你能做的只有两件事:

  1. 发送对应角度的 PWM 信号
  2. 等待舵机完成转动

它的优点是开发成本极低------ 不用写 PID 算法,不用接编码器,一根 PWM 线就能控制;缺点也很明显 ------ 控制逻辑固定,无法根据项目需求灵活调整。比如舵机的响应速度、超调量,都是出厂就定死的,你改不了。

三、性能与适用场景:各有所长,不能混用

正因为结构和控制逻辑的差异,二者的性能特点和适用场景完全不同,这也是我们做项目选型的关键。

对比维度 直流电机 + 位置式 PID 舵机
负载能力 可搭配大功率电机 + 减速器,负载能力强(适合平衡车驱动轮、机器人底盘) 负载能力弱,多为小扭矩(适合机械臂关节、云台转向)
控制精度 精度由编码器分辨率决定,可做到极高(比如 1000 线编码器,精度 0.36°) 精度由内部电位器决定,一般为 1°-2°,精度中等
响应速度 可通过调整 PID 参数优化,响应速度灵活可控 响应速度固定,小舵机一般几十 ms 完成转动
开发复杂度 高(需要接线编码器、写 PID 算法、调参数) 低(只需要配置 PWM 输出)
适用场景 大负载、高精度、需要灵活控制的场景(平衡车、AGV 小车、数控平台) 小负载、小角度、快速部署的场景(机械臂、玩具车转向、云台)

四、为什么 "现象看起来一样"?

回到开头的问题:为什么我们会觉得二者的现象一样?

因为它们最终都实现了 "位置闭环控制"------ 不管是你用 PID 算法控制直流电机,还是给舵机发 PWM 指令,最终的结果都是 "执行器精准停在目标位置"。

就像 "自己买菜做饭" 和 "点外卖"------ 最终都是吃到了饭,但前者需要你自己选食材、调味、烹饪,后者只需要下单就行,过程和主动权完全不同。

五、项目选型建议

做嵌入式项目时,该怎么选?给两个核心建议:

  1. 如果是小负载、小角度控制:优先选舵机,比如平衡车的姿态调整机构、机械臂关节,开发快、成本低。
  2. 如果是大负载、高精度控制:必须选直流电机 + 位置式 PID,比如平衡车的驱动轮、AGV 小车的运动控制,虽然开发复杂,但性能可控。

总结

直流电机的位置式 PID 控制和舵机,看似现象相同,实则是两种完全不同的控制思路:

  • 前者是 **"开源" 的闭环系统 **,开发者掌握全部主动权,适合高性能需求的场景;
  • 后者是 **"闭源" 的一体化产品 **,开箱即用,适合快速部署的小负载场景。

在实际项目中,我们往往会把二者结合起来 ------ 比如平衡车项目,用直流电机 + PID 控制驱动轮 ,用舵机控制转向机构,各司其职,才能达到最佳的控制效果。

相关推荐
爱喝水的鱼丶3 分钟前
SAP-ABAP:数据类型与数据对象(8篇) 第七篇:进阶优化篇——基于类型与对象特征的性能优化技巧
运维·数据库·学习·性能优化·sap·abap·开发交流
ABAP 成11 分钟前
删除+新增原始BOM工序+订单BOM+工序笔记
笔记
知识分享小能手15 分钟前
Flask入门学习教程,从入门到精通, 认识Flask路由 — 知识点详解 (2)
python·学习·flask
XS03010617 分钟前
MyBatis基础实战笔记一
笔记·mybatis
清平乐的技术专栏20 分钟前
【Flink学习】(六)Flink 三大时间语义 + 水位线 Watermark
大数据·学习·flink
Oll Correct24 分钟前
实验二十五:从IPv4向IPv6过渡所使用的隧道技术
网络·笔记
楼兰公子28 分钟前
《深入理解Linux网络技术内幕》配套学习大纲 + 源码Demo + 进阶实战实例
linux·arm开发·学习
楼田莉子28 分钟前
C++17新特性:结构化绑定/inline变量/if相关的变化
c++·后端·学习
冉卓电子1 小时前
GD32C103RBT6 misc 内核驱动库极简解析
单片机·嵌入式硬件
yongui478341 小时前
MAX6675 K型热电偶温度采集程序(Keil环境)
单片机·嵌入式硬件