尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

关节电机开发实战:从FOC电流环到三环控制调参

关节电机开发实战:从FOC电流环到三环控制调参 关节电机在机器人、自动化设备和精密传动系统里是最常见的执行单元也是很多电控工程师绕不开的一道门槛。真正接触过关节电机的人会知道难点通常不在“电机能不能转”而在于它把电机本体、减速器、编码器、驱动电路和控制算法压缩到了一个高度紧凑的部件里。把一个无刷电机转起来只需要几十行驱动代码但要让关节在带载情况下做到位置准确、速度平稳、响应快、发热可控就需要电控、结构、算法和调试经验同时在线。有些工程师把这个过程形容成技术修炼到了新阶段像从筑基一路修到元婴从只会点招式变成能判断整个系统的状态。这篇文章就顺着这条主线把关节电机的硬件组成、FOC电流环、编码器零点、三环控制、总线接入、生产环境注意事项和故障排查链路完整拆一遍。内容适合刚开始接触无刷电机和机器人关节驱动的开发者也适合已经在调关节电机、但经常被各种奇怪现象卡住的工程师。读完后你会得到一套可复用的调试框架而不是零散的知识点。1. 关节电机不是一台电机而是一套执行系统1.1 关节电机的组成与每部分的职责关节电机的“关节”二字已经暗示了它的特殊性。它不仅要输出动力还要承担机械臂、四足机器人或人形机器人某个自由度的支撑、旋转和定位任务。所以它通常不是一个光秃秃的电机而是把多个部件集成在一起。组成部分作用电控工程师最关心的参数电机本体将电能转换为机械能提供原始转速和力矩额定电压、额定电流、极对数、反电动势常数、绕组电阻和电感减速器降低转速、放大扭矩、提高输出分辨率减速比、回差、额定输出扭矩、效率编码器提供角度反馈供FOC换向和位置闭环使用分辨率、单圈或多圈、绝对式或增量式、通信接口驱动电路把控制信号转换为电机相线上的电压或电流母线电压、相电流采样范围、PWM频率、死区时间温度与保护电路防止电机或驱动器过温损坏测温点位置、报警阈值、降额曲线通信电路与上层控制器交换指令和状态总线类型、波特率、帧率、同步方式这里最容易误解的是编码器的位置。电机端编码器装在电机轴上主要用来做FOC的电角度计算和电机速度估计关节端编码器装在减速器输出端用来做最终的位置闭环。如果混淆这两个编码器的用途就会出现“电机明明在转但关节输出角度不对”的诡异现象。理解这个结构之后后续的电路设计和软件调试才会有清晰的落点。1.2 电控工程师在关节电机上要解决的六个问题关节电机给电控工程师提出的问题可以归纳成六个这六个问题也正好对应着成长阶段让电机按照期望方向旋转。无刷电机需要正确换向有刷电机则要正确处理H桥驱动。让输出力矩可控。这一步对应电流环力矩与q轴电流成正比。让角度和速度可控。这一步对应速度环和位置环也是关节电机区别于普通风机电机的地方。让系统在异常情况下不损坏。过流、过温、堵转、母线欠压都需要保护逻辑。让关节能和上层控制器可靠通信。关节电机不是独立运行它必须听从上位机指令。让整个系统可维护。参数、日志、诊断、固件升级都属于这一层。这六个问题不是并列关系而是层层递进的。一个刚入门的电控工程师通常卡在第一个问题上觉得“换向能转就已经不错了”。而一个真正成熟的工程师会从第一个问题一路做到第六个问题最后形成一套完整的调试和排错体系。本文后面的章节基本就按这个顺序展开。2. 从引脚到电路图先把关节电机的硬件局布好2.1 最小调试环境需要哪些硬件开始写软件之前先确定手上的硬件是否齐全。很多调试问题表面上看起来是软件问题实际是硬件连接不完整、电源限流没设置、编码器线序不对导致的。设备用途建议可调直流电源给驱动器提供母线电压电压范围覆盖电机额定电压的1.2倍以上优先带限流功能电机模组被测对象优先选择带减速器和编码器的一体化关节电机驱动器或评估板实现换向、电流环和通信确认支持电机相数、编码器接口和通信方式通信调试工具监控参数和指令CAN、RS485或EtherCAT对应不同工具示波器观察相电流、PWM波形和故障瞬间至少两个通道带宽50MHz以上够用万用表测量电压、通断、绝缘基本功能即可调试下载器烧录固件和断点调试按MCU平台选择学习环境不必一次全部到位。先用一个带编码器的无刷电机加一块评估板把FOC跑通比直接上高精度谐波减速关节更有价值。因为谐波减速器的回差和摩擦力矩会干扰你对控制算法的判断反而掩盖了基础问题。2.2 关节电机驱动电路图上的五个关键局部很多人搜索“关节电机设计电路图”真正想看的是驱动板的核心拓扑。一张关节电机驱动电路图通常包含五个关键局部调试前把这五个局部看懂比自己对着原理图逐个看电阻要高效得多。第一是三相功率桥。可以选用集成栅极驱动器加分立MOS也可以选用三相一体化驱动芯片。设计时要关注最大持续电流、峰值电流和死区时间。死区时间过短会导致桥臂直通烧毁MOS过长会增加波形失真影响电流波形质量。第二是相电流采样。常见方案是低端采样电阻配合运放或者使用集成电流传感器。采样电阻阻值的选择要在采样精度的功率损耗之间平衡。阻值太大发热严重阻值太小小电流时信噪比不足。第三是母线电压检测。母线电压通过电阻分压送入ADC后不仅可以做欠压和过压保护还可以用来做电流环的反电动势前馈改善高速时的电流跟随性能。第四是编码器接口。磁编码器通常走SPI或ABZ光编码器也有ABZ和串行协议。不同类型的编码器接口电平可能不同必须确认与MCU的IO电平匹配否则读出来的角度会随机跳变。第五是通信与隔离。关节电机与上层控制板之间常用CAN总线线路较长推荐使用隔离收发器避免电机侧的功率噪声耦合到控制器侧。2.3 上电前的检查顺序第一次给关节电机上电前按下面的顺序检查可以避免大部分“上电就报警”的问题确认电源电压档位与驱动器输入范围匹配。检查动力线、编码器线是否按端子定义连接。用万用表确认电机三相线之间没有短路对地电阻正常。将电源限流调到较小值例如额定电流的一半以内。确保减速器输出端空载暂时不要带负载。上电后先只读取编码器数值手动旋转电机确认角度连续变化且方向正确。很多“电机抖动”“过流报警”在上电前就能通过第2到第4步避免。如果编码器数值跳变不要急着调软件先检查编码器供电和线序。3. 把电流环跑通才算是拿到了关节电机的入门钥匙3.1 磁场定向控制到底在做什么无刷永磁同步电机在定子侧产生的是三相交流磁场转子是旋转的永磁体。要让电机高效输出力矩定子磁场必须始终与转子磁场保持正确的角度关系。如果直接像控制直流电机那样控制三相电压会非常麻烦因为三相电流之间存在耦合。磁场定向控制也就是FOC通过坐标变换把三相交流电流投影到一个随转子旋转的坐标系中。在这个旋转坐标系里q轴电流对应电机力矩d轴电流对应励磁分量。对于表贴式永磁同步电机通常把d轴电流控制为0这样电机的力矩就近似与q轴电流成正比。关节电机控制的核心本质上就是把电流环做好让实际q轴电流快速、准确地跟随指令。3.2 最小可执行的FOC循环下面是一段平台无关的示意代码用来呈现FOC循环的组成。实际工程中ADC采样、PWM外设和SVPWM实现都要替换成自己平台对应的代码。#include math.h typedef struct { float kp; float ki; float integral; float out_limit; } PiController; float pi_update(PiController *pi, float err) { pi-integral err; float out pi-kp * err pi-ki * pi-integral; if (out pi-out_limit) { out pi-out_limit; } else if (out -pi-out_limit) { out -pi-out_limit; } return out; } typedef struct { float alpha; float beta; } AlphaBeta; typedef struct { float d; float q; } DqCurrent; AlphaBeta clarke(float ia, float ib, float ic) { AlphaBeta ab; ab.alpha ia; ab.beta (ia 2.0f * ib) / sqrtf(3.0f); return ab; } DqCurrent park(AlphaBeta ab, float theta_elec) { DqCurrent dq; dq.d ab.alpha * cosf(theta_elec) ab.beta * sinf(theta_elec); dq.q -ab.alpha * sinf(theta_elec) ab.beta * cosf(theta_elec); return dq; } typedef struct { float vd; float vq; } VoltageCmd; void foc_current_loop(float ia, float ib, float ic, float theta_elec, float id_ref, float iq_ref, PiController *pi_d, PiController *pi_q, VoltageCmd *vcmd) { // 1. 三相电流变换到两相静止坐标系 AlphaBeta ab clarke(ia, ib, ic); // 2. 静止坐标系变换到旋转坐标系 DqCurrent dq park(ab, theta_elec); // 3. d轴和q轴电流分别做PI控制 vcmd-vd pi_update(pi_d, id_ref - dq.d); vcmd-vq pi_update(pi_q, iq_ref - dq.q); // 4. 电压指令逆变换到静止坐标系后续交给SVPWM生成占空比 vcmd-valpha vcmd-vd * cosf(theta_elec) - vcmd-vq * sinf(theta_elec); vcmd-vbeta vcmd-vd * sinf(theta_elec) vcmd-vq * cosf(theta_elec); }代码里的关键是步骤3。d轴和q轴的电流误差分别经过PI控制器输出是电压指令。这个电压指令再通过逆Park变换和SVPWM转换成三相占空比。如果把FOC写成了直接控制电压而不控制电流那并不能称为电流环只能算开环电压驱动力矩控制精度会很差。3.3 如何判断电流环是否调好电流环调好的标志不是“电机能转”而是“电流能跟指令”。调试时可以先给一个固定的Iq参考值比如0.5A观察实际Iq是否快速到达目标值并稳定在目标值附近。同时观察Id是否保持在0附近。如果Id不为0通常说明电角度不对或者电流采样偏置没有校准。观察现象可能原因处理方向Iq上升慢稳态误差大Ki太小适当增大KiIq超调明显甚至振荡Kp或Ki偏大降低Kp或Ki检查输出限幅Id持续不为0电角度不对或采样偏置未校准重新校准编码器零点和电流偏置Iq包含大量高频毛刺ADC采样点落在PWM开关瞬间将采样触发点移到PWM中心对齐位置在常见方案中电流环的带宽不宜超过PWM开关频率的十分之一到二十分之一否则采样离散化和PWM延迟会明显影响系统稳定性。这个经验值可以作为调参时的参考边界。4. 编码器零点对齐与三环级联是关节电机真正难的地方4.1 电机端编码器和关节端编码器分工不同关节电机里通常不止一个编码器理解它们的分工才能避免角度混乱。编码器类型特点适用场景磁编码器抗污染、成本低、精度一般一体化关节电机常用在电机端做换向反馈光编码器精度高、对安装和油污敏感高精度关节、关节端位置反馈旋转变压器耐高低温、抗振动、价格高大扭矩重载关节、高可靠场景电机端编码器装在电机高速轴上用于FOC的电角度计算。它不需要极高的分辨率但角度必须连续不能出现跳变。关节端编码器装在减速器输出端用于最终位置闭环精度要求更高。有些项目会使用多圈绝对值编码器有些则在每次上电后做原点标定。4.2 电角度零点校准流程永磁同步电机的FOC依赖转子电角度。如果编码器零点和电机A相反电动势零点没有对齐FOC会把力矩矢量算错方向轻则电流失控重则启动即过流。零点校准的常用流程是使能电流环给定一个固定的d轴电压q轴电压为0。转子会逐步锁到d轴对应的电角度位置。等待转子稳定后读取编码器原始值把这个值记录为零点偏移。把偏移量写入Flash或参数区后续每次上电都通过这个偏移量计算电角度。下面是零点偏移保存后编码器原始值换算电角度的示意代码#define ENCODER_CPR 16384 #define POLE_PAIRS 7 static int32_t zero_offset; float calculate_elec_angle(int32_t encoder_raw) { int32_t mapped (encoder_raw - zero_offset) % ENCODER_CPR; if (mapped 0) { mapped ENCODER_CPR; } return 2.0f * PI * POLE_PAIRS * (float)mapped / (float)ENCODER_CPR; }如果电机没有FOC需求例如只做有刷电机的电压控制这一步可以省略。但只要用FOC就必须做零点校准。很多“上电一转就过流”“电机嗡嗡响但不转”的故障追到根因就是零点偏移没有做或者换过编码器之后没有重新校准。4.3 位置环、速度环、电流环如何配合关节电机控制通常采用三环级联结构位置环在最外层速度环在中间电流环在最内层。每个外环的输出都是内环的参考值。void motion_control_loop(float ref_pos, float cur_pos, float cur_vel, DqCurrent *cur_dq, float dt_pos, float dt_vel, float dt_cur) { // 位置环输出速度参考 float ref_vel position_pi_update(ref_pos - cur_pos, dt_pos); // 速度环输出q轴电流参考 float ref_iq velocity_pi_update(ref_vel - cur_vel, dt_vel); // 电流环输出q轴电压参考 float vq current_pi_update(ref_iq - cur_dq-q, dt_cur); }级联控制的核心原则是内环快、外环慢。常见配置中位置环周期可能是1kHz速度环1到2kHz电流环10到20kHz。这里的具体数值以项目为准但“外环周期不能比内环快”这个原则不能违背。如果位置环周期过短速度估计的噪声会被放大系统会出现高频抖动。5. 从能转到转得稳PID整定顺序与关节电机的典型坑5.1 先调内环再调外环顺序不能反很多新手拿到关节电机后直接调位置环Kp结果位置环一给指令电机就剧烈抖动。这是因为内环还没调好外环调得再大也没有意义。内环是外环的被控对象电流环都不稳速度环和位置环没有稳定基础。推荐的整定顺序是先调电流环让Iq阶跃跟随又快又稳。再调速度环让速度阶跃响应没有超调或超调可接受。最后调位置环让位置阶跃收敛稳态误差在允许范围内。每一步调好后都要记录下来再进入下一环。这样出问题时可以快速回退到已知稳定的参数。5.2 一个可操作的调参过程调参不能只靠感觉。每改变一个参数都应该观察对应的波形或日志。目标操作观察指标调整方向电流环响应快增大电流环KpIq上升沿变陡出现振荡时回退每次调整幅度不超过20
返回列表