尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

2023工业峰会电机控制讲座:从PWM到FOC的实战干货笔记

2023工业峰会电机控制讲座:从PWM到FOC的实战干货笔记 2023工业峰会电机控制讲座资料干货整理与实操笔记最近整理移动硬盘时翻出一批2023年工业峰会电机控制讲座的资料包括PDF讲义、现场Demo工程和几个专家的答疑纪要正好最近不少同行在后台问电机控制的入门路线和实操细节我把这套资料重新梳理了一遍把其中真正有价值的内容摘出来结合自己做电机驱动项目的经验写成这篇分享。无论你是刚接触BLDC驱动的新手还是已经在用STM32做FOC落地的工程师这份整理应该都能帮你少走一些弯路。涉及的内容包括PWM调速原理、PID参数整定、BLDC六步换相、FOC控制架构、高频注入无感控制含代码实现思路以及N20这类小型减速电机的控制细节后面还会附上我在现场问答环节记录的典型问题排查表。1. 讲座资料的核心内容与适用人群1.1 资料里到底有什么这次峰会的电机控制专场一共安排了六场演讲从基础驱动到无感FOC算法都有覆盖资料包里的东西很全首先是每个演讲的PDF课件合计超过300页其次是主办方提供的两个Demo工程一个基于STM32F103的BLDC六步换相例程另一个基于STM32G431的无感FOC工程都附了完整的Keil和STM32CubeIDE工程文件还有现场演示时用的上位机配置文件、电机参数识别脚本以及三位主讲工程师的答疑录音转写稿。我花了一个周末把这些资料过了一遍整理出一份速查笔记。整体感觉是偏基础的部分占了一半适合初学者建立整体认知另外一半直接落到工程实现包括高频注入在低速区的处理、启动时序、死区补偿这类实际调车才会遇到的细节。资料本身不带代码注释的版本和带注释的版本都有后者对新手特别友好。1.2 这份资料适合谁看怎么用如果你还没做过完整的电机控制项目建议先从第二章的PWM和PID部分看起把最底层的调速原理吃透再用资料里的六步换相例程做第一版驱动跑通一个带霍尔传感器的BLDC。如果你已经在用带传感器的方案做产品重点看第四章的高频注入无感控制内容这套资料里给出的观测器结构和参数表可以直接迁移到你自己的工程里。需要注意一点这套资料里的Demo工程是基于特定开发板写的直接烧录到其他板子上未必能跑但控制逻辑和外设配置是通用的。我自己就是对照着参考的原理图把代码移植到了自制的板子上整个过程踩了不少坑后面会详细讲。2. 电机控制的地基PWM调速与PID调参2.1 PWM调压调速先搞清楚占空比和频率怎么选讲座第一部分花了不少时间讲PWM调速很多人一开始不理解电机是感性负载为什么用PWM方波就能调速其实PWM不是直接改变电压大小而是通过改变有效电压的平均值来调节电枢电流进而改变转矩和转速。对直流电机来说电枢电压的平均值等于占空比乘以母线电压。占空比50%、母线电压12V等效供电电压就是6V转速大约也会降到空载转速的一半左右。PWM频率的选择是第一个容易踩坑的点。频率太低电流纹波大电机噪音明显甚至能听到“滋滋”声频率太高MOS管的开关损耗增大驱动芯片发热严重。资料里给了一个经验区间有刷直流电机常用的PWM频率是10kHz到20kHzBLDC驱动一般选16kHz到20kHz超出人耳听觉范围能减少噪音同时开关损耗也在可控范围。我自己的项目里有刷电机用15kHzBLDC用20kHz实测效果都不错。另外一个容易忽略的参数是死区时间尤其是在BLDC和FOC控制中。上下桥臂如果同时导通母线直接短路轻则炸MOS管重则烧板子。死区时间一般设置为几百纳秒到几微秒具体取决于所用MOS管的关断延迟。资料里给出的参考值是500ns到1us配合驱动芯片的延迟参数微调。我的调试经验是先按芯片手册里的典型关断时间给一个保守值再用示波器看上下桥臂的栅极波形确认不存在直通之后再逐步减小死区时间以降低波形畸变。2.2 PID参数整定电机控制里最常用的其实是PI讲座里关于PID的讲解非常实用尤其是“电机控制里基本不用完整PIDPI就够了”这个观点跟我的工程经验完全一致。微分项D对高频噪声非常敏感电机运行中电流采样、编码器反馈都会引入噪声D项很容易把噪声放大成剧烈的控制量变化导致系统啸叫或震荡。所以电流环和速度环基本都用PI控制器位置环偶尔需要D项但也要配合低通滤波使用。参数整定部分资料里介绍了一个很实用的步骤先只调比例项P从小到大逐步增加观察电机是否出现振荡。在临界振荡点记录下来此时的P值然后退回到临界值的60%到70%再开始加积分项I。I的作用是消除稳态误差但I太大会导致超调和低频率振荡。一个很好的经验法则是I的初始值设置为P的十分之一然后根据稳态误差的收敛速度再微调。下面是我在讲座笔记里整理出的PI参数调试速查表现象P偏大P偏小I偏大I偏小电机高频抖动明显无可能无低速启动力矩不足无明显无明显稳态转速偏差大无有无有超调量大有无有无带载后转速跌落无有无有2.3 一个实用的PI调试流程资料里给了一个针对速度环的调参流程我实际用下来非常顺手。第一步把I设为零P设为一个很小的值比如0.5。第二步让电机空载运行给定一个中等速度指令比如额定转速的50%。第三步逐步增大P观察阶跃响应波形如果转速出现等幅振荡说明P已经到临界值记录这个值并退回到60%左右。第四步把I设为P的十分之一观察稳态误差是否消除如果转速在目标值附近缓慢波动说明I偏大适当减小。还有一个细节值得注意数字PI控制器的积分限幅一定要做。电机启动瞬间转速误差很大积分项会迅速饱和导致启动时电流过大甚至过流保护。讲座里给出的做法是把积分输出限幅在额定电流对应的控制量以内我习惯同时把PI总输出也做限幅双保险。这个坑我在早期的项目里踩过当时积分限幅没做每次大阶跃启动都会触发驱动器的过流保护加了一个限幅之后问题立刻消失。3. BLDC电机控制从六步换相到FOC3.1 六步换相和反电动势检测讲座第二部分围绕BLDC展开首先回顾了六步换相的基本原理。BLDC的定子有三相绕组转子是永磁体要让转子持续旋转需要按照特定顺序给三相绕组通电产生旋转的磁场。六步换相就是把一个电周期分成六个扇区每个扇区导通两相第三相悬空通过检测悬空相的反电动势过零点来确定换相时机。这里有个新手很容易搞混的概念有感方案和无感方案的差别不在于换相逻辑本身而在于转子位置信息来源。有感方案里霍尔传感器直接给出转子位置控制器根据霍尔信号查表换相无感方案里没有霍尔传感器需要通过反电动势检测或高频注入等方法来估算转子位置。资料里给出的换相顺序表对新手很有用转子位置电角度导通相悬空相0°-60°AB-C60°-120°AC-B120°-180°BC-A180°-240°BA-C240°-300°CA-B300°-360°CB-A换相时序错误的表现非常明显电机会发出异常噪音电流飙升转速上不去严重的会直接堵转。这时候先别急着改代码用示波器同时测三相的端电压波形和霍尔信号确认换相顺序跟表格一致再从软件层面排查。3.2 FOC矢量控制到底解决了什么问题讲座花了大篇幅讲FOC这是电机控制领域绕不开的核心技术。FOC之所以被称为矢量控制是因为它把三相交流电流通过Clark变换和Park变换转换到与转子磁场同步旋转的d-q坐标系下把交流量变成了直流量。这样一来对电机转矩和磁链的控制就变成了对两个直流量的独立控制控制难度大幅降低动态响应也更快。说人话就是FOC让电机在任何时刻都能产生最大转矩而且转矩脉动小、噪音低、效率高。相比之下六步换相虽然简单但转矩脉动大高速时噪音明显动态响应也不够快。所以在对噪音、平稳性和效率有要求的场景比如电动工具、机器人关节、家电变频驱动FOC基本是标配。FOC的难点在于Park变换需要准确的转子位置。有感FOC用编码器或霍尔传感器提供位置信息无感FOC则需要通过观测器来估算反电动势从而获得转子位置和速度。这就引出了讲座最核心的部分无感控制在零低速区怎么处理也就是高频注入技术。3.3 实际操作中换相时序和死区设置资料中的六步换相例程用的是霍尔传感器方案代码结构非常清晰。主循环里读取霍尔信号查表得到对应的换相状态然后配置PWM输出。三相六管全桥的上下桥臂由定时器的三个互补PWM通道控制开启刹车功能和死区插入。我在移植这个例程到自制板子时遇到最典型的问题是霍尔信号顺序反了。这时电机能转但反转而且电流很大。排查方法是用手缓慢盘动电机打印霍尔信号和对应的电角度核对换相表发现我把霍尔信号对应的扇区编号映射错了交换两个霍尔输入之后恢复正常。死区时间设置这一点再强调一下。很多人用STM32的高级定时器在CubeMX里配置了互补PWM之后死区时间用的是默认值。但不同功率等级的MOS管关断延迟差异很大小功率管可能几十纳秒就够了大功率模块可能要一两微秒。一个保守的方法是先用一个较大的死区值让系统跑起来然后用示波器观察上下桥臂驱动波形确认没有直通之后逐步减小死区值直到波形开始出现畸变的临界点再退回一点。这样既保证了安全又尽量减少死区带来的波形畸变和转矩脉动。4. 高频注入无感控制零低速也能估算转子位置4.1 高频注入的原理为什么能解决零速启动无感FOC最难的场景不是高速而是零速和低速。因为在静止或极低速状态下反电动势的幅值几乎为零后端观测器没有有效信号可用转子位置就“看不见”了。这时候如果直接给一个固定的启动电流方向可能会跟实际转子位置偏差很大轻则启动失败重则反转或过流。高频注入技术解决的就是这个问题。它的原理是在电机的d轴方向上叠加一个高频电压信号通常在500Hz到2kHz之间由于电机的凸极效应d轴和q轴电感不同高频电流的响应会随转子位置变化。通过解调这个高频电流响应就能在零速和低速下估算出转子位置。简单说它是给电机做了一次“无损探伤”用高频信号探测转子凸极的位置。资料中特别提醒了一个概念高频注入只适用于具有凸极效应的电机也就是d轴和q轴电感有明显差异的电机。对于表面贴装式永磁同步电机SPMSM因为凸极率很低高频注入的效果会打折扣这时更常用的是INFORM法或基于脉冲激励的方案。我在实际项目中用过的高频注入方案主要针对内置式永磁同步电机IPMSM效果明显零速带载启动也很稳定。4.2 代码实现的核心思路资料附带的高频注入无感控制代码用的是带通滤波器加锁相环的方案结构非常典型。代码的核心步骤如下// 高频注入的简化伪代码 // 1. 在d轴注入高频电压 ud_inject U_high_freq * sin(2 * PI * f_high_freq * t); uq_inject 0; // 2. 采样三相电流做Clark和Park变换 i_alpha (2/3) * (ia - 0.5*ib - 0.5*ic); i_beta (2/3) * (SQRT3_2 * (ib - ic)); id i_alpha * cos(theta_est) i_beta * sin(theta_est); iq -i_alpha * sin(theta_est) i_beta * cos(theta_est); // 3. 从q轴电流中提取高频分量带通滤波器 iq_hf bandpass_filter(iq, f_high_freq); // 4. 解调乘以同频正弦参考信号 signal iq_hf * sin(2 * PI * f_high_freq * t); // 5. 低通滤波后得到位置误差信号 err lowpass_filter(signal); // 6. 误差信号送入PI调节器输出为转子转速估计值 // 再积分得到转子位置角 speed_est pi_regulator(err); theta_est theta_est speed_est * dt;这段代码的关键在于第3步到第5步带通滤波器用于提取高频分量低通滤波器用于滤除2倍频的交流分量留下直流的误差信号。误差信号经过PI调节器收敛后就得到了转速估计值再积分就得到转子位置角。整个算法其实就是一个锁相环结构只是被解调的信号是高频电流响应。4.3 高频注入实操中的几个坑我按照这套方案在自制板子上实现了高频注入整个过程遇到不少问题整理几个典型的第一个坑是滤波器的截止频率选择。带通滤波器的中心频率要严格对准注入频率如果偏差太大有效信号会被大幅衰减。我在前期调试时发现位置估算总是滞后查了半天发现是带通滤波器的Q值设得太低导致高频分量被衰减。把Q值调高之后估算精度明显改善。第二个坑是注入频率和PWM频率的关系。注入频率必须远低于PWM频率一般要小于PWM频率的十分之一否则采样点不够解调出来的信号会有很大的谐波干扰。我用的是20kHz的PWM注入频率选在2kHz信噪比还是可以的。如果再往上提就要考虑电流采样带宽是否跟得上了。第三个坑是零速启动时的初始位置辨识。即使有高频注入如果初始位置完全未知直接开始注入并闭环可能会出现短暂的抖动。资料里给出了一个方法在启动前先注入一个旋转的高频电压矢量持续200ms左右检测电流响应幅值的变化来确定初始位置角然后再切入正常的高频注入闭环。我实际测试下来这个方法比直接盲启动可靠得多尤其是带负载启动时效果更明显。5. STM32平台上的硬件设计与正反转控制5.1 用STM32控电机外设怎么分配讲座资料里的两个Demo工程都是基于STM32平台的这也符合当前电机控制领域的现状STM32凭借丰富的外设、成熟的工具链和大量的参考设计已经成为电机控制开发的主流选择之一。对于做无感FOC来说一个关键的硬件资源就是定时器。STM32的高级定时器TIM1、TIM8自带互补PWM输出、死区插入和刹车功能几乎就是为电机驱动设计的因此三相全桥的六路PWM一般都用这两个定时器来生成。电流采样也是一个需要提前规划的点。FOC需要同步采样至少两相电流第三相可以通过基尔霍夫定律算出来一般在PWM周期的中心点触发ADC采样这样采样到的电流值最接近相电流的平均值。我用STM32G431做电流采样时把ADC的触发源设置为定时器的TRGO事件并且在定时器更新事件的中心点产生触发实测采样效果比外部触发稳定得多。编码器接口方面如果做有感FOCSTM32的定时器带有编码器模式可以直接接增量式编码器的A/B相硬件上自动完成计数不需要额外的正交解码芯片。这个功能在实际开发中非常省心接线也简单。下面是一份我常用的外设分配表功能外设通道/引脚说明三相PWMTIM1CH1/CH2/CH3互补输出死区电流采样触发TIM1TRGO中心对齐模式电流采样ADCADC1IN0/IN1/IN2注入组采样编码器接口TIM3CH1/CH2编码器模式霍尔传感器输入GPIO三个外部中断换相用5.2 正反转逻辑和H桥电路很多入门项目会做“STM32控制电机正反转”这个需求本身很小但涉及的硬件电路却是个很好的学习点。要控制一个直流电机正反转本质上是改变电枢电流的方向最简单的办法是使用H桥电路。H桥由四个开关管组成当左上和右下导通时电流从A流向B电机正转当右上和左下导通时电流从B流向A电机反转。正反转控制看起来简单但要注意三个问题切换方向前必须先停止输出不能让两个方向的桥臂同时导通切换过程要留足够的死区时间防止上下桥臂直通电机是感性负载停止输出时电流不能突变需要通过续流二极管或体二极管来释放能量。我在资料里看到推荐用集成电机驱动芯片比如DRV8870、TB6612等来做小功率电机的正反转控制这是一个很务实的建议。自己搭分立H桥电路虽然能学到更多原理但调试成本高而且保护功能不完善。集成驱动芯片内部已经做好了死区插入、过流保护和续流处理直接通过两个GPIO控制方向引脚和PWM引脚就能实现所需功能开发效率高很多。5.3 N20这类小电机的控制细节热搜词里有一个N20电机这是一个非常常见的微型减速电机很多智能小车、云台、小家电项目都会用到。N20电机的特点是自带减速箱输出转速低、转矩大工作电压一般是3V到12V不等额定电流在几十毫安到几百毫安之间。控制N20电机建议先查手册确认额定电压和堵转电流再选择驱动方案。N20的启动电流可能会达到额定电流的3到5倍如果驱动芯片的峰值电流能力不够启动瞬间就可能触发保护或压降过大。我在调试一个云台项目时用过N20电机加DRV8833驱动芯片的方案。DRV8833的峰值电流可以达到2A驱动N20绰绰有余。PWM频率我用了20kHz工作起来几乎没有噪音。还有一个小细节N20电机带有减速箱齿轮啮合会引入周期性负载扰动如果只靠速度环PI控制可能会出现周期性的转速波动。这时候可以适当增大PI控制器的带宽或者在反馈环节做一些简单的滤波处理。资料里没有讲这么细但这是我实际测试中遇到的真实问题供大家参考。6. 实车调试中的常见问题与排查6.1 启动失败或反转无感FOC最典型的故障就是启动失败或反转。我在自己的调试中遇到过两种典型情况第一种是启动电流给小转子吸合不到预定位置导致启动瞬间震荡第二种是初始位置辨识不准启动方向跟实际位置偏差超过90度就会反转。解决办法是把启动前的位置辨识时间拉长并且分两步做先给一个固定的d轴电流让转子预先定位到已知位置再切入闭环。虽然这个方法会让电机在启动瞬间有一个小角度的转动但在很多不需要绝对静音的场合比如风机、泵类负载这是最简单可靠的方案。如果条件允许也可以在启动阶段先使用开环强拉也就是V/F控制等转速上升到反电动势足够大之后再切换到FOC闭环。资料里的Demo工程就采用了这种启动策略曲线参数调好后平滑切换的可靠性非常高。6.2 噪音大、电流尖峰电机运行噪音大、电流波形有尖峰这个问题基本上可以归结为三类原因换相时序不对、PWM频率不合适、死区时间引起的电流畸变。六步换相方案里噪音大往往是因为换相时刻不准确导致转矩脉动变大FOC方案里噪音大可能是因为电流环带宽过高导致控制量波动大或者逆变器死区时间太长造成电流波形畸变。还有一个很容易忽略的原因是PWM频率正好落在系统机械谐振频段附近这时候调整PWM频率会发现问题立竿见影地改善。我调试BLDC时有段时间噪音特别大一开始一直怀疑是算法问题后来偶然把PWM频率从16kHz调到19.5kHz噪音明显减小。后来查电机手册才知道18kHz左右正好是电机定子的某个固有谐振频率点。这个经验让我在后续设计中具备了更强的意识遇到异响先排除机械和谐振问题再回头查算法。6.3 问题速查表根据讲座答疑环节的内容和我的实操经验整理了一张问题排查速查表方便大家快速定位问题故障现象可能原因排查方法电机不转有过流报警桥臂直通、死区过短用示波器查看上下桥臂波形电机抖动、反转换相顺序错、霍尔接线反检查霍尔信号与换相表启动失败初始位置辨识不准延长定位时间或改用开环强拉高速时位置丢失反电动势观测器带宽不足提高观测器增益或改用滑模观测器电流波形畸变死区影响、采样点不准加死区补偿、调整ADC触发时机转速波动大负载扰动、PI参数不合适增大速度环带宽、检查机械连接6.4 一个值得参考的现场QA记录讲座最后有一个答疑环节其中有一个问题和我的经验完全重合有工程师问“无感FOC在带载启动时电机后退一下再前进这是正常现象吗”主讲的回答很直接这本质上是因为初始位置辨识阶段转子被拉到了已知位置后退是定位动作的一部分。如果后退距离很小不影响使用场景可以接受如果后退明显说明初始位置辨识的电流幅值不够或者辨识时间太短转子没有完全吸合到位。加大辨识电流幅值或延长辨识时间后退现象就能缓解。这个回答非常接地气我后来在项目里也按这个思路解决过类似问题。另一个QA是关于电流采样噪声的。有人问FOC调试时电流波形毛刺多是硬件问题还是软件问题主讲建议先看采样点和采样窗口如果采样点正好落在MOS管开关的瞬间电流噪声会很大。解决办法是把采样点移到PWM周期的中心点或者PWM关断期间进行采样。这个建议让我回想起了自己早期在FOC调试中遇到的大量噪声问题其实根源就是采样时机不对。写作后记整理完这套工业峰会资料说实话最大的感触是电机控制这个领域技术门槛不在原理书里而在那些“教材不会告诉你”的细节里。比如PWM频率的选择、死区时间的折中、初始位置辨识的步骤、电流采样点的位置这些看起来不起眼的小事往往决定了整个项目能否跑通。我自己做电机控制这几年深刻体会到一件事情不要迷信某一种控制算法是万能的。六步换相简单可靠适合对噪音和效率要求不高的场合FOC性能好但算法复杂度和调试成本都高出一截高频注入解决了无感控制的零速难题但对电机的凸极率有要求。选什么方案取决于产品的成本、性能和开发周期而不是哪个听着更高级。最后再分享一个小技巧无论是做哪种电机控制方案调试初期条件允许的话务必保留一个电流探头。示波器上的电流波形比任何仿真结果都能说明问题换相是否合理、死区是否合适、PI参数是否收敛一看电流波形就有数。如果你手头正好要开始一个电机控制项目把这篇文章里提到的排查表存一份遇到问题先对着表格过一遍大概率能省下不少排查时间。
返回列表