资讯动态

直流有刷电机控制实验笔记:从PWM调速到PID闭环的踩坑复盘

发布时间:2026/10/21 16:34:35 来源:尧图企业网站定制
最近整理实验台翻出大半年前的电机控制实验笔记。那段时间几乎每个周末都泡在实验室把一套直流有刷电机从“能转”一步步调到“转得准”中间烧过驱动板、烧过采样电阻、也见过奇怪的振荡波形。今天把这些记录整理成文既算给自己留个存档也想给刚开始接触电机控制的人一点参考。这篇笔记的内容不是理论推导更多的是踩坑之后的复盘思路和现场操作经验。1. 实验平台搭建从电机选型到接线逻辑1.1 选一套不容易翻车的电机和驱动组合我第一次做电机控制实验时并没有直接上三相无刷电机而是选了一台带霍尔增量编码器的直流减速电机。原因很简单有刷电机的控制逻辑足够透明PWM 给上去立刻能看到转速响应编码器反馈又直观非常适合用来理解闭环控制的基本流程。实验用的是一台额定电压 12V、额定电流约 1.5A 的小型直流减速电机配套驱动端是一块常见的全桥驱动板。这块驱动板逻辑电平与开发板兼容省去了电平转换的麻烦。如果你也在搭类似的平台注意三个指标就够了供电电压不要超过 24V低压实验安全余量大也便于用普通示波器探头测量。持续电流不要只看额定电流要重点看堵转电流。小型直流电机堵转时电流可以达到额定值的 5 倍以上驱动板和电源都必须按这个峰值预算。反馈类型最好选带编码器的电机。光栅编码器精度高但怕油污磁编码器便宜耐用实验用更省心。带减速箱的电机还要注意一个细节编码器装在电机轴还是减速箱输出轴。装在电机轴上时输出轴转一圈对应电机轴转减速比圈位置反馈的“一圈”是电机轴的一圈不是输出轴的一圈。这个换算关系在写速度环时很容易搞混务必提前确认。1.2 接线顺序与共地原则先地线后信号线接线顺序这块我烧过两次驱动板才长记性。正确顺序应当先把电源和驱动器的功率线接好再接控制信号线。如果驱动器由外部电源供电而开发板用 USB 供电两者之间必须先接一根粗一点的共地线。逻辑电平的高低是相对“地”而言的没有共同参考点信号完全悬空上电瞬间什么失控都可能发生。实验室里常见的错误做法是图省事只接电源正极和信号线地线靠驱动板上的逻辑供电端子捎带过去。看起来能转但波形一塌糊涂带负载后甚至会误触发保护。后期排查噪声问题时折腾了一整天才发现是地环路阻抗太高。动力线和信号线也应该区分对待。动力线尽量用粗硅胶线电机正负两根线最好绞合在一起减小回流面积编码器的 A/B 相信号线用双绞线或带屏蔽层的信号线走线时避开功率线。这个习惯有多重要到做示波器测量时会深有体会。1.3 实验环境里的基本安全习惯做电机控制实验工作台上经常同时摆着金属工具、裸铜线、杜邦线和有一定功率的电源。桌面最好用绝缘垫金属工具不要随手放在裸线附近母线端子附近尽量保持清空。我后来养成一个习惯在主电源输入负极侧串联一个独立开关作为主闸。开发板先上电跑起自检程序确认所有 PWM 输出引脚保持低电平后再合上驱动母线开关。虽然多一步操作但明显减少了很多莫名其妙的炸管场景。接线完成后通电之前做一次“通电前检查”用万用表二极管档测量驱动输出端两个端子确认桥臂没有直通状态。检查编码器电源与信号线是否接反编码器供电接错会直接损坏芯片。确认电解电容极性没有装反电源正负没有短路。这几项检查每次最多花两三分钟但能规避大批事故。不要等到冒烟了再排查。2. PWM 与 H 桥两个最核心的矛盾点2.1 为什么是 PWM 而不是直接给电压电机调速可以直接调节供电电压但线性调压的方式在低压大电流场合太浪费了。比如 12V 电机需要用 6V 运行时线性调压会把多余的 6V 乘上电流全部变成热发热量非常可观。PWM 方式就不一样开关管要么完全导通、要么完全关断导通损耗和开关损耗都远小于线性损耗所以现在绝大部分电机驱动都用 PWM。PWM 频率的选择有讲究。频率太低电流纹波大电机会发出明显的“嗡嗡”声甚至一顿一顿地转频率太高MOSFET 的开关损耗急剧增加驱动器发热反而严重。直流有刷电机常用 10kHz 到 20kHz超过人类听觉上限还能顺便避开刺耳的噪声。我实验里用的是 16kHz电流波形平滑度不错驱动板温升也可接受。占空比和平均电压的关系很直接12V 供电时 50% 占空比等效平均电压约 6V。但这里有一个非线性区需要注意占空比非常低时电机往往不会转这是静摩擦转矩和反电动势都很小造成的属于正常现象不要误以为是硬件故障。2.2 H 桥逻辑换向与死区的来龙去脉H 桥是直流电机正反转的基本拓扑四个开关管组成“H”形通过对角导通来控制电流方向。正转时左上角和右下角导通反转时右上角和左下角导通。这里最要命的矛盾是同一桥臂的上下两个开关管绝对不能同时导通。一旦同时导通电源会被直接短路电流瞬间飙升管子当场报废。实际驱动中上下管的开关速度不可能完全一致所以必须在切换时插入一个短间隙让先关断的管子完全关掉再打开另一边的管子这个间隙就是死区时间。死区时间的调法值得细说。一开始我以为越大越安全把死区设成几个微秒结果发现电机在低速轻载时电流波形出现明显的平台失真换向后反而不顺畅。后来用示波器同时观察上下管栅极电压逐步减小死区找到一个临界值——既能保证不直通又不让波形出现畸变。对常用小型 MOSFET200ns 到 500ns 是比较常见的起点但最终值要以实测波形为准。PWM 与方向信号配合是另一个容易混淆的点。我的做法是一个 GPIO 输出 PWM 频率信号作为“使能速度”另一个 GPIO 决定方向H 桥逻辑内部根据方向选择导通对。这种结构在代码里非常清晰调试时也不容易搞反。2.3 占空比、转速与负载的三角关系如果只开环给一个固定占空比空载时电机可以跑到一个稳定转速但手上轻轻一捏轴转速立刻掉下来。这里有一个关键概念叫反电动势电机转动时本身会产生一个与转速成正比的电压方向与外部电压相反。稳定运行时外部平均电压减去反电动势后剩下的电压恰好够驱动电流通过电枢电阻。负载增大时转速下降反电动势减小电流增大输出转矩增大重新平衡。这个过程看起来自动会稳定但稳定点已经偏离了期望转速。这就是为什么“占空比固定”不等于“转速固定”也给后面要做闭环控制埋下了伏笔。2.4 母线电容和布线的隐性作用很多人调试 PWM 驱动时碰到一个怪现象电机低速轻载时好好的一加大占空比或突然换向单片机莫名其妙复位甚至驱动板过压损坏。排查到最后往往是母线电容容量不足或母线布线寄生电感太大。开关管在 PWM 周期内来回通断电流每周期都从极低跳到峰值再掉回来。电源线本身有寄生电感电流突变时电感会产生电压尖峰尖峰幅度正比于 L 乘 di/dt。如果母线电容离桥臂太远这段引线电感就会成为尖峰的主要来源。我后来把电容尽量贴近功率桥动力线绞合尖峰幅度肉眼可见地降了一大截。3. 编码器与 PID从“会转”到“转得准”3.1 编码器接线与倍频逻辑增量式编码器一般输出 A、B 两相方波通过相位差可以判断旋转方向。编码器每圈脉冲数乘以 4 就是四倍频。四倍频的原理很简单一个周期内有 A 上升沿、A 下降沿、B 上升沿、B 下降沿四个变化边沿每个边沿都计一个数位置分辨率就变成原来的 4 倍。我犯过的第一个错误是没有把“编码器脉冲”和“电机轴圈数”的关系搞清楚。我的电机编码器每圈 500 线四倍频后就是每圈 2000 计数。但电机轴通过减速箱带动输出轴减速比 30:1那么输出轴转一圈对应 60000 个计数。当时直接用 2000 去做位置环控制器以为已经转了很多圈实际输出轴才动了一点点。方向问题也很经典。发现电机正转时速度反馈却显示负数第一反应是改电机接线。但电机接线一换H 桥的电流方向就反了转矩方向也跟着反反而把整个系统搞乱。正确做法是软件处理根据 A/B 相先后关系把计数方向取反改代码比改功率线安全得多。3.2 PID 三个环节的直观理解PID 调节器的地位在电机控制里不必多说但理解方式可以很直观。P 环节比例看到偏差立刻施加修正偏差越大输出越猛。问题在于单独用 P 时系统为了维持输出必须存在一个剩余偏差也就是静差。比如电机带负载后转速掉到 1450RPM目标 1500RPMP 环节输出的修正恰好只能维持这个静态平衡点差额 50RPM 会一直存在。I 环节积分把历史偏差不断累加只要有静差积分项就会一直增长直到将静差压到零。但积分也有副作用如果偏差长时间存在积分会累得很大恢复后造成明显过冲也就是积分饱和。D 环节微分根据偏差的变化趋势提前施加反向修正能抑制过冲。但微分放大了高频噪声编码器信号稍微有点抖动D 项就可能满格跳动所以新手阶段建议先把 D 设为 0把 P 和 I 调出基本手感再加一点 D。3.3 临界比例法一次调参的完整记录拿我实验平台为例目标是让电机稳定在 1500RPM。除了编码器和 PID 参数外还有一个关键参数是控制周期。我的速度环运行周期是 5ms也就是 200Hz。控制周期太长动态响应慢太短则微分噪声尤其明显。我用临界比例法确定初值步骤很简单先把 I 和 D 设为 0只保留 P 参数。从小到大逐步增大 Kp每次改变后给一个阶跃目标观察转速曲线。直到转速出现等幅振荡记录此时的 Kp 为临界增益 Ku振荡周期为 Tu。我调试时的实际记录是Kp 到 1.2 时系统仍然平稳提高到 2.0 时出现约 1Hz 的等幅振荡。于是取 Ku2.0Tu1.0 秒。按经验公式Kp 取 0.6 倍 Ku约 1.2积分时间 Ti 取 0.5 倍 Tu约 0.5 秒微分时间 Td 取 0.125 倍 Tu约 0.125 秒。换算后 Ki 等于 Kp 除以 Ti也就是 2.4Kd 等于 Kp 乘以 Td约 0.15。这组初值跑起来已经能稳住转速但超调略大我又现场做了几轮微调最终使用的是 Kp1.0Ki1.8Kd0.05。一个中间的对比能看出参数趋势Kp0.5 时响应慢有静差需要积分慢慢填补。Kp1.2 时响应变快但负载突变后恢复时间还是偏长。Kp2.0 时系统开始振荡无法继续增大。加上 I 之后稳态误差消除但起始阶段超调明显。加一点 D 之后超调收住但编码器信号抖动大时电机有轻微高频颤动。3.4 积分饱和和微分噪声两个必须处理的坑积分饱和是我在调参数时吃过大亏的地方。电机刚启动时目标转速与当前转速偏差很大积分项迅速累加。等电机真正到达目标转速时积分项已经堆得很高控制器还在按惯性输出很大的修正量结果转速冲过头然后积分又朝反方向累积形成明显的来回震荡。解决办法有两个方向一是给积分项设置上下限例如限制输出不超过最大占空比对应值的 20%二是采用积分分离偏差较大时暂停积分等偏差进入一个较小范围后再恢复。我最终用的是积分限幅加分离结合启动超调从原来 30% 降到 8% 以内。微分噪声的问题则在编码器量化误差上体现得明显。编码器每 5ms 计数一次低速时一次可能只跳 1 到 2 个脉冲换算成速度本身就是离散值微分会把这种离散抖动放大成高频修正。我给微分项加了低通滤波并把微分系数调小颤动才压下来。新手如果看到转速曲线像梳子齿一样高频抖动先别怀疑编码器坏了多半是 D 项没滤波。4. 示波器测量噪声、地回流与那些看似玄学的波形4.1 探头地线长度对测量的影响第一次用示波器测 PWM 开关节点波形时我看到的是一团带严重振铃的方波上升沿有一大串高频振荡。最初以为是驱动电路设计有问题后来才发现问题一半出在探头本身。普通示波器探头接地线是一根带鳄鱼夹的长导线这根线本身形成一个很长很窄的电流回路在高频测量里等效成一个电感。测量开关节点这种电压高速跳变的信号地线电感与探头寄生电容谐振就会在波形上叠加上振铃。把探头上的接地夹换成短接地弹簧尽量贴近被测点测量振铃幅度立刻小了很多。这个细节在低频电路里无所谓但在 PWM 开关测量里非常关键。如果考虑捉鬼请先把他这个“假振铃”排除掉再怀疑硬件。4.2 电流波形应该怎么测电流波形是电机调试中最有信息量的信号但也是最难测的。常用做法是串一个毫欧级采样电阻放在电源低端或者电机回路中然后用差分方式测量采样电阻两端电压。采样电阻必须选择低电感类型否则测出的尖峰是电阻自身的电感影响。千万别把示波器探头的地直接夹在采样电阻的一端然后另一端接在功率地回路上。功率回路里的大电流 d i/dt 会在小小的接地回路里感应出噪声测出来的电流波形完全不可信。正确做法是使用差分探头或者把示波器设置为“A-B”数学通道同时接两根探头分别测采样电阻两端。如果条件允许用电流钳更省事。但钳式电流探头容易受磁场干扰探头要套在单独一根导线上不能同时套住正负两根线否则磁场相互抵消什么都测不到。4.3 地回流的典型事故我排查过一块控制板“无规律重启”的问题。故障现象是电机轻载时不重启堵转时重启概率大幅上升。测量控制板 3.3V 电源发现堵转瞬间电压会掉到 2.7V 左右明显是复位阈值。原因并不复杂控制板和驱动板共用一个电源驱动回路的大电流走的是与控制芯片同一条地线。地线有电阻大电流流过时产生压降造成控制芯片参考地相对于电源负端抬升。解决思路是单点接地把驱动大电流回路的地线和控制信号地分开走最后只在电源输入负极处汇合。这样 ADC 采样和复位电路就不再受驱动电流干扰。这类地线问题在一开始布线时最容易预防后期靠飞线救场非常折磨人。4.4 RC 吸收与开关振铃开关振铃的本质是寄生电感和电容在瞬间能量交换。常见处理办法是在桥臂输出端与电源之间加 RC 吸收电路电阻典型值 10Ω 到 100Ω电容 1nF 到 10nF具体值需要实际调试确定。RC 吸收并不是越大越好吸收电容太大会增加开关损耗电阻太小则振铃虽然变小但发热明显。我实验时的经验是先测量振铃频率根据频率大致估算寄生电容再选择能把振铃幅度压到原值三分之一左右的 RC 组合。加完吸收后记得摸一摸电阻温度如果烫手就说明参数过保守了适当加大电阻可以降低损耗代价是振铃幅度略回升。5. 从能转到能交付启动流程、保护逻辑与完整检查5.1 启动与制动不能一上来就满占空比实验初期我习惯直接给 80% 占空比让电机起步结果每次启动都能听到明显的机械撞击声电流也经常冲到限流值。后来才意识到启动过程需要刻意管理。我现在的启动流程是先打开控制电源自检编码器读数是否跳变、母线电压是否在合理范围、桥驱动温度是否异常自检通过后先给一个 5% 到 10% 的占空比预励磁持续几十毫秒确认电流没有异常然后以斜坡形式逐步增加占空比每秒增加的速度上限按实际机械系统惯性设定。这样启动电流平滑机械冲击也小。制动同样不要直接撤 PWM。如果电机带着负载高速旋转突然关断 PWM反电动势会通过续流路径产生冲击电流。更稳的做法是设置减速斜坡或者先把两个下端开关管同时打开做短接制动等转速降下来再完全关断。5.2 用状态机组织保护逻辑小实验可以直接用一条 if 检查电流但认真要把它做成系统状态机是更稳妥的骨架。我写控制固件时把运行状态分成空闲、自检、运行、故障四类。空闲状态下 PWM 输出保持低电平等待命令自检状态只读传感器不做功率输出运行状态才允许输出 PWM任何异常都强制跳转到故障状态故障状态下关闭功率输出只有手动复位才能回到空闲。这样处理的一个明显好处是程序不会再出现“一边报错一边继续输出”的混乱状态。保护条件里最有效的是堵转检测和超时保护。如果电机给定占空比一段时间后编码器计数仍不变化大概率堵转应该立即降功并报故障。另一个很容易漏的保护是母线电压过低或过高电压超出范围时要及时停机否则驱动板和电容都处于危险状态。5.3 交付前的完整检查清单每次实验告一段落我会对照下面的清单过一遍确保不是一个“刚好能转”的巧合连续运行老化测试至少 2 小时期间关注驱动板温度、线材温升和有无异常气味。电源余量检查带载后母线电压的跌落是否在可接受范围内开关电源余量至少保留 30%。堵转测试在堵转状态下看保护逻辑能否在预设时间内切断输出这个测试很伤硬件时间要短。线缆检查动力线表面温度、接线端子有无松动电机运转时端子松动是导致欠压和接触火花的主要原因。示波器复查观察 PWM 节点振铃是否收敛编码器信号边沿是否干净。EMC 方面不需要做很复杂的整改但两条线必做动力线和编码器信号线在结构上分开避免平行长距离走线屏蔽层只在控制板一侧接地不要两头都接地形成新的地环路。编码器信号进控制板前端可以加一个简单的 RC 低通滤波能滤掉不少来自功率线的干扰。6. 笔记之外一些真心想分享的体会整轮实验做下来说实话收获最大的不是调出了多完美的 PID 参数而是学会了一条路径从简化的对象开始逐步增加要求。如果初学者一上来就做三相无刷 FOC面对的问题太多了反电动势采样、坐标变换、SVPWM、观测器任何一个环节出问题都很难定位。先在有刷电机上把 PWM、死区、编码器、电流波形、保护逻辑全部跑通再往上加复杂度是效率最高的一条路。还有一个小技巧是我后期才养成的每次实验开始前用手机拍一张完整的接线照片并记录当天所有参数修改。看似多此一举但出问题后对照照片排查能节省大量时间。我遇到过两次情况整整找了两个小时的故障结果是接线不小心被工具碰松了一根而照片上清晰地记录了它本来应该接在哪里。这比任何调试工具都靠得住。电机控制这个领域的知识点非常杂但每解决一个问题都可以沉淀成一条能复用的经验。这份笔记如果后续还有新坑我大概率会继续把它写下去。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑