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

资讯详情

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

EVSPIN32G4三电阻电流采样实战:原理、配置与避坑指南

EVSPIN32G4三电阻电流采样实战:原理、配置与避坑指南 刚拿到这块 EVSPIN32G4 评估板的时候我其实并没有太当回事觉得无非就是ST又出了一块电机开发板。真正开始调电流环才发现板子把STM32G4和600V三相栅极驱动器封装到一起双电阻、三电阻采样的玩法全变了尤其是三电阻重构那一套坑比我预想的多不少。这篇东西就是我在EVSPIN32G4上折腾3-shunt current sensing的完整记录从原理到寄存器配置、从波形调试到常见坑全部摊开讲。如果你正准备用EVSPIN32G4做FOC驱动器或者刚拿到板子不知道电流采样链路怎么配这篇文章可以帮你省下至少一周的摸索时间。1. 整体方案设计与3-shunt采样选型思路1.1 EVSPIN32G4的硬件底子MCU、栅极驱动和运放全集成EVSPIN32G4不是传统的“MCU 独立栅极驱动芯片”两片式方案而是把STM32G4系列MCU核心以Arm Cortex-M4为内核带FPU和面向电机控制的数学加速与三相600V栅极驱动器、内置运放、比较器全部封装在一起。对于做电机驱动的人来说这意味着硬件BOM大幅缩减尤其是电流采样那块不需要外部再挂独立运放直接使用内部OPAMP完成电流信号的放大和调理。这块芯片的电流采样通道很有门道。内部集成了多个可编程运算放大器可以配置为PGA模式也能配置为比较器模式用于硬件过流保护。在电机控制里我们把OPAMP当放大器用三个低边采样电阻上的电压经过内部OPAMP放大后直接送入ADC采样通道。这里省掉了外部运放的选型、布局和噪声问题但也带来一个约束OPAMP的带宽、摆率和噪声是固定的配置增益和采样时间时必须留足裕量。另外一个值得注意的点是EVSPIN32G4的ADC支持注入组转换。电机FOC控制中电流采样需要和PWM同步触发注入组配合定时器触发可以做到每个PWM周期在指定时刻启动三通道ADC转换转换结果由硬件自动存储不占CPU中断太多时间。这个特性是3-shunt采样方案能跑得顺畅的基础。1.2 为什么选3-shunt而不是单电阻或双电阻很多初学者会问FOC电流采样既然有三相电流为什么不直接三电阻全采实际产品里单电阻、双电阻、三电阻方案都有各有应用场景。我之所以在EVSPIN32G4上选择3-shunt主要基于以下几个原因。采样方案采样电阻数量电流重构复杂度低速大扭矩性能成本典型应用1-shunt1个直流母线采样电阻高需要PWM移相重构一般低调制区受限最低低成本风机、水泵2-shunt2个低边电阻中有一相电流靠KCL计算较好低中端家电、小型工具3-shunt3个低边电阻低直接采样三路好低速满载稳中伺服、机器人、高性能FOC3-shunt的核心优势在于它能够直接从三个低边采样电阻上读出三相电流的信息不需要在PWM占空比上做太多文章。单电阻方案在低调制区占空比接近50%附近实际上很难采样到足够的电流窗口必须做移相或者多次采集合成算法负担比较大。双电阻方案虽然少了一个采样电阻但必须根据扇区选择不通的一相然后在软件里通过基尔霍夫电流定律计算第三相这倒没什么问题是部分扇区内两相下管同时导通时间短采样窗口不足容易出现电流重构盲区。三电阻方案在电机低速、大电流、满载起转的场景下表现明显更好采样窗口宽且固定不用做复杂的移相逻辑控制代码维护也简单。EVSPIN32G4的评估板上板载三路采样电路直接采用3-shunt既符合硬件设计也适合把FOC调稳的场景。1.3 评估板上的采样链路从功率电阻到ADC的完整通路拿到EVSPIN32G4评估板之后第一件事是翻原理图把电流采样链路走一遍。板级设计上三个低边采样电阻通常取值在10毫欧到50毫欧之间具体看板子的额定电流。以常见的配置为例如果你用0.05欧姆采样电阻、最大相电流20A那么采样电阻上的峰值压降为1V。这个电压经过内部OPAMP放大后送到ADC输入典型ADC参考电压是3.3V因此增益最高只能设置到3.3倍左右实际考虑到余量一般设定在2倍到3倍之间。链路依次是电机相线电流 - 低边MOSFET - 采样电阻 - RC滤波 - EVSPIN32G4内部OPAMP输入 - OPAMP放大 - ADC采样引脚。这里有个容易被忽略的点采样电阻放在低边电流采样只能在下管导通期间进行。也就是说采样窗口和PWM状态直接相关不是任何时刻都能采到电流。这决定了ADC的触发时刻必须和PWM定时器事件严格对齐这也是为什么EVSPIN32G4这类电机专用MCU要强调“定时器触发ADC注入组”的原因。2. 3-shunt电流采样原理与关键参数2.1 低边采样原理为什么必须在PWM下管导通时采集3-shunt采样的物理基础是欧姆定律但这背后有一个时序前提。电机三相逆变器由六个MOSFET组成每一相都是一个半桥结构上管和下管互补导通。当上管导通时电流通过上管流入电机绕组此时采样电阻上没有电流流过只有下管导通时电流才会从电机绕组经下管流回采样电阻再到地。所以每个PWM周期内采样电阻上的电压实际上是断续的只在对应下管导通的时间窗口内才有有效信号。这也意味着ADC的采样触发不能乱来必须配置在下管导通且信号稳定的时间段内。如果采样点落在死区、开关切换沿或者上管导通期采出来的电流就是垃圾数据。PWM中心对齐模式是FOC最常用的模式因为它在每个PWM周期中间产生对称的导通窗口电流纹波小采样点也比较容易安排。在中心对齐模式下下管导通窗口集中在周期中段ADC触发点放在中心对齐点附近可以稳定采到两相甚至三相电流。2.2 最小采样时间ADC转换时间和运放建立时间不能省这是很多人容易踩坑的地方。硬件上给了你采样窗口不代表实际能采到准确值窗口宽度必须要大于各个器件建立时间的总和。最小采样窗口可以按下面的思路估算t_MIN t_ADC_sample t_OPAMP_settling t_RC_filter t_deadtime以EVSPIN32G4为例ADC采样时间如果配置为2.5个ADC时钟周期在ADC时钟30MHz下大约是83纳秒转换时间约12.5个周期约417纳秒。内部OPAMP的建立时间通常在几百纳秒到微秒级别取决于增益和负载电容。RC滤波器的常数也会拖慢信号。算下来可靠采样窗口至少要1到2微秒才算安全。对应到PWM占空比上如果PWM频率是20kHz周期50微秒死区时间450纳秒那么下管导通窗口最短就是50%占空比减去死区。理论最大PWM频率取决于你能接受的最短导通时间。在3-shunt方案里PWM频率一般不建议超过30kHz否则低占空比区域的采样窗口会紧张到无法可靠采样。2.3 三相重构规则什么时候用哪两相什么时候用KCL三电阻采样虽然名字叫“三电阻”但实际每个PWM周期并不是三路电流都能同时可靠采到。原因和PWM占空比有关当某一相的占空比接近0%或100%时该相下管导通时间极短没有足够的窗口去采样那一相的电流。于是就有了采样重构规则。在大多数扇区内我们能够可靠采到两相电流第三相电流用基尔霍夫电流定律计算I_c -(I_a I_b)电机绕组星形连接没有中线电流具体什么时候用哪两相取决于PWM周期内各相占空比的大小关系。工程上最常用的做法是在PWM更新事件或ADC完成中断里读取三个采样值然后根据当前扇区由占空比大小排序决定选择两个采样窗口足够大的相用它们的电流计算第三相。如果恰好三相同窗口都足够直接三路都用求平均值。很多现成的FOC库会封装好这套重构逻辑比如ST的MC SDK里的三个电流采样函数。自己写代码的话要注意扇区判断和采样值选择的一致性这里是最容易出bug的地方。2.4 采样电阻和OPAMP增益如何选一个实际算例我在评估板上做过一次实际的增益计算这里可以分享一下过程。假设电机额定相电流是15A峰值25A采样电阻0.05欧姆那么采样电阻上的峰值压降为V_peak 25A * 0.05 1.25V如果ADC参考电压为3.3V希望满量程利用率达到80%左右那么OPAMP增益大约为G 3.3V * 0.8 / 1.25V ≈ 2.1实际配置可以选2倍增益。EVSPIN32G4内部OPAMP的增益可以通过寄存器配置为1、2、4、8等档位这里选2倍即可。需要注意的是电流是交流量有正有负如果OPAMP是单极性供电采样点电压会叠加一个直流偏置让零电流落在ADC中间值附近。EVSPIN32G4的OPAMP支持这种配置具体偏置电压由内部参考源给出。如果你选的采样电阻太大大电流时压降过高会导致OPAMP饱和电流波形顶部被削平控制性能急剧恶化。采样电阻太小则信噪比不够小电流下采到的信号淹没在噪声里。所以选型是个权衡评估板默认值一般比较合理不要随便改。3. EVSPIN32G4上的3-shunt采样实操配置3.1 硬件准备与接线检查实际操作EVSPIN32G4时我建议先把硬件链路彻底理清再动软件否则调了半天发现是硬件跳线没配对心态会崩。板上需要检查的关键点有这几个电源工作台电源供电功率板DC bus电压建议从低到高慢慢加我第一次直接上了48V调试时发现参数不对容易炸管。电机接线三相电机U、V、W分别接到板子的三路输出注意不要接反否则FOC方向全乱。跳线评估板上通常有跳线用于选择电流采样增益或者OPAMP模式查阅用户手册先把跳线设为默认的3-shunt模式。仿真器EVSPIN32G4一般板载ST-LINKUSB连上就能烧录和调试这对看波形和实时变量非常方便。示波器探头最好引出一根电流采样点信号线方便用示波器观察采样电阻上的实际电压波形确认采样窗口。另外强烈建议在电机相线上串联一个功率电阻或者先空载运行避免因软件bug导致过流炸MOSFET。我第一次调试就差点把功率管干穿原因就是电流环方向反了。3.2 定时器与ADC配置中心对齐、触发时刻、注入组软件配置是整个3-shunt采样的灵魂。先看PWM定时器EVSPIN32G4的定时器TIM1是高级定时器专门用于生成三相六路PWM工作模式设为中心对齐。关键参数如下// TIM1中心对齐模式配置要点 TIM1-CR1 | TIM_CR1_CMS_1; // 中心对齐模式2 TIM1-PSC 0; TIM1-ARR 1500; // 20kHz PWM内部时钟150MHz / (2*1500) 50kHz // 注意中心对齐计数周期2*ARR // 实际PWM频率 fclk / (2 * (ARR 1)) // 150MHz / (2 * (1500 1)) ≈ 49.95kHz如需20kHzARR≈3750 TIM1-CCR1 duty_a; // A相占空比运行时更新 TIM1-CCR2 duty_b; TIM1-CCR3 duty_c; // 死区时间设置 TIM1-BDTR 0x00F0; // 约450ns死区具体按位域计算 // TRGO事件触发ADC注入组 TIM1-CR2 | TIM_CR2_MMS_2; // 选择OC4REF或更新事件作为TRGOADC这边使用注入组转换触发源设置为TIM1_TRGO。注入组的优势是优先级高于规则组且可以在一个触发事件后依次转换多个通道转换结果存到注入数据寄存器。ADC1-IER | ADC_IER_JEOCIE; // 允许注入转换结束中断 ADC1-CR1 | ADC_CR1_JAUTO; // 自动注入可选 // 注入组序列对应三相电流采样通道 ADC1-JSQR | (1 0); // 1个注入通道 ADC1-JSQR | (ch1 5); // 注入通道1运放输出1 // 采样时间配置要确保足够 ADC1-SMPR2 | ADC_SMPR2_SMP0_1; // 比如37.5周期具体通道编号要参考数据手册EVSPIN32G4内部OPAMP输出和ADC通道的映射关系以及是否有内部连接都要查对应型号的Reference Manual。ST MC SDK生成的代码一般已经处理好这些映射如果你是自己裸写寄存器务必仔细对照管脚定义和模拟开关配置。3.3 三电阻重构与FOC电流环代码结构有了ADC采样原始值之后接下来就是做校准、重构再送进FOC。我写代码时习惯将几个环节拆开这样调试时能单独定位问题。典型代码如下// ADC注入组转换完成中断 void ADC1_IRQHandler(void) { if (ADC1-ISR ADC_ISR_JEOC) { ADC1-ISR ADC_ISR_JEOC; // 读取三个注入通道转换结果 int raw_a ADC1-JDR1; int raw_b ADC1-JDR2; int raw_c ADC1-JDR3; // 减去零电流偏置 float ia (raw_a - offset_a) / adc_gain; float ib (raw_b - offset_b) / adc_gain; float ic (raw_c - offset_c) / adc_gain; // 根据占空比扇区选择可靠的两相另一相用KCL current_reconstruct(ia, ib, ic); // Clark变换 - Park变换 - 电流PI调节 clark(ia, ib, i_alpha, i_beta); park(i_alpha, i_beta, theta, i_d, i_q); pi_controller(vd, vq, i_d_ref, i_q_ref, i_d, i_q); inv_park(vd, vq, theta, v_alpha, v_beta); svpwm(v_alpha, v_beta, duty_a, duty_b, duty_c); // 更新占空比 TIM1-CCR1 duty_a; TIM1-CCR2 duty_b; TIM1-CCR3 duty_c; } }这段代码只是最简框架没加滤波、保护、状态机。实际项目里电流PI输出后会做电压限幅过流保护要单独用比较器硬件去触发不能只靠软件判断。软件上建议再加入一阶低通滤波对采回来的电流做处理否则开关噪声会直接进入电流环导致力矩波动。3.4 电流环执行时序与采样点微调FOC电流环对实时性要求很高20kHz的电流环意味着20kHz下所有计算必须在50微秒内完成。EVSPIN32G4的主频170MHz左右跑浮点运算基本没问题但代码要控制在中断里做太多耗时操作把非紧急的状态估算放到主循环里。采样点的时间位置也很讲究。中心对齐PWM模式下PWM周期中点是下管导通最充分的地方采样点放在中点附近最稳。但ST MC SDK里采样点不一定严格在中点它可能根据死区和占空比偏移自动调整。如果你是自己配置建议先把PWM频率降低比如10kHz调试配合示波器观察ADC触发信号和实际下管导通信号确认采样点落在窗口中间再逐步提高频率。我给一个很实用的调试点把ADC注入转换的软件触发功能打开在PWM中断里手动触发一次ADC用调试器查看转换结果和示波器实测电流对比先确保静态电流值是对的再接入闭环。4. 调试、噪声与常见问题排查4.1 波形观察如何快速验证三电阻采样是否正常没有有效的电流波形观测手段你根本没法判断3-shunt到底调好没有。我习惯的验证路径是先把电机堵转或者用一个直流源加载给定一个恒定电流指令看ADC采回来的值有没有跟随然后用一个较低的速度空载转动电机观察采样电流是否呈正弦规律并和相电流真值的幅值对比。ST的Motor Profiler上位机可以实现电流波形在线显示但如果你不想用整套SDK也可以直接在MCU里把电流值通过DAC输出或者通过串口以一定的速率发送上位机用串口助手或者Python脚本画图。EVSPIN32G4上通常没有DAC引脚但你可以用PWMRC滤波做模拟输出或者直接USB虚拟串口输出。这里有个注意事项电流环如果没有接入闭环只开环给一个固定占空比电机相电流其实是畸变的采样波形可能不是标准正弦这不代表采样坏了。先排除闭环没使能的问题再看波形。4.2 采样噪声开关毛刺、地弹和滤波参数如何平衡3-shunt采样最常见的问题是噪声。高频开关动作会在采样电阻上产生振铃尤其是MOSFET的栅极驱动电流路径和采样电阻回路共用PCB走线时地弹噪声会直接叠加在采样信号上。排查思路如下示波器探头直接夹在采样电阻两端带宽限制20MHz看信号是否有明显毛刺。如果在开关切换沿出现尖峰优先缩短ADC采样时间或延迟采样开始时刻避开开关振铃。RC滤波参数要平衡截止频率太低会滤掉真实电流纹波过高则抑制不了噪声。我通常从100nF和100欧姆起步看波形再调整。检查OPAMP增益配置如果增益过高噪声连同真实信号一起放大甚至导致饱和。EVSPIN32G4内部OPAMP有一个特性它可以在PWM低边导通期的稳定阶段输出稳定电平但如果外部RC太大建立时间变长采样窗口又不够就会采到尚未稳定的电压。所以RC时间常数必须和采样窗口匹配不能一味加大。4.3 高调制比下的采样窗口不足限制调制和重构策略当电机运行在高速、高电压利用率工况下PWM占空比会接近0%或100%。此时部分相的下管导通时间短到不足以完成一次可靠的ADC采样这就是3-shunt方案最主要的性能瓶颈。应对方法有好几种软件限幅把最大调制比限制在90%左右保证最短下管导通时间大于最小采样窗口。好处是简单坏处是电压利用率下降。移相采样在不改变输出电压平均值的前提下调整PWM相位让采样窗口躲开短脉冲区域。算法复杂度会高一些。混合采样高速时切换到单电阻或双电阻重构模式。EVSPIN32G4支持这种动态切换但代码复杂度明显增加。对于大多数应用先用方法一把调制比限制好跑通整个FOC后再尝试优化电压利用率。很多人一上来就需要全速度范围平稳运行其实很多时候限制3%到5%的调制比并不会带来可感知的性能差异。4.4 零电流偏置校准为什么每次上电都要做电流采样值里包含了OPAMP的输入偏置、ADC的偏移量、以及偏置网络带来的固定偏置。如果这个偏置不校准FOC里的I_d和I_q都有偏移会导致电机在零电流指令下仍有电流流过产生力矩波动、噪音甚至引起过流保护。正确做法是上电后电机静止且无电流时把三相电流采样值各读几十次取平均存为offset变量。每次ADC采样完成后先减掉这个offset再做重构和变换。需要注意的是温度的漂移会影响OPAMP的偏置所以如果你在温度变化很大的环境里做产品最好做定期校准或者选用温漂系数更低的采样电阻和更稳定的偏置方案。EVSPIN32G4内部偏置本身就随温度有一定漂移量产时要注意这个一致性。4.5 我踩过的三个坑OPAMP饱和、引脚配置、死区时间这里分享几个我实际遇到过的、原理图上一眼看不出来的问题。第一个是OPAMP饱和。有段时间电机电流一大电流反馈波形顶部就平了电机转矩明显下降。排查了很久才发现是增益配置偏高采样电阻的峰值电压乘以增益后超过ADC满量程。后来把增益从4倍降到2倍问题立刻消失。建议选增益时不要只看额定电流要按峰值电流、过流保护阈值一起算。第二个是芯片引脚复用配置错误。EVSPIN32G4的功能引脚可以通过内部交叉开关路由如果一个引脚既被配置成OPAMP输出又被配置成GPIO或比较器输入ADC通道里读到的值就会异常。检查芯片参考手册的复用映射表确保OPAMP输出和ADC通道的连接是唯一、正确的。有时候SDK生成了正确配置但你手动改了一行GPIO代码可能就会破坏它比较隐蔽。第三个是死区时间设置。如果死区时间设置得太长下管导通窗口会被压缩有效采样窗口变短如果设置太短上下管直通风险升高。EVSPIN32G4的死区时间由TIM1 BDTR配置建议从450纳秒起步再根据实际功率管的开关参数调整。我曾为了“提升效率”把死区时间压到120纳秒结果出现了明显的采样抖动最后发现问题不只是采样窗口而是上管未完全关断时下管导通引起的电流瞬态。4.6 常见问题速查表现象可能原因排查方向电流采样值为0采样点落在上管导通窗口调整ADC触发时刻检查PWM模式采样值饱和削顶OPAMP增益过高按峰值电流重新计算增益电流波形毛刺大采样窗口太早/太晚避开开关切换沿调整采样时间零电流时采样值巨大偏置未校准每次上电执行零电流校准高速时电流异常采样窗口不足限制调制比或启用混合重构注入ADC不触发TRGO事件配置错误检查TIM1 MMS位、ADC触发源只有一个通道有数据注入序列配置不完整检查JSQR通道数和通道号5. 实测波形表现与个人调参心得全部调通之后我用电桥和示波器记录了电机在10Hz电频率下的相电流波形采样电流经过重构后基本光滑谐波分量很小。在2kHz电频率、满载堵转下电流波动控制在2%以内这个数据和板载采样链路的稳定性有很大关系。调参这块我推荐一个经验顺序先调偏置再调增益标定保证静态电流准确然后开环给占空比验证重构是否连续最后才闭环调PI。千万别上来就把PID参数往里扔你根本分不清是采样问题还是控制器问题。还有一点电流环的PI参数尤其是Kp会受到采样延迟的影响。EVSPIN32G4的ADC触发到中断响应之间有固定延迟这会让电流环等价于多了一个惯性环节直接表现就是电流超调变大。如果发现纯PI调不上去可以考虑在电流环里加一阶低通滤波降低高频增益或者把PWM频率选得低一点换取更充裕的处理时间。这个项目做到目前这个阶段我的体会是3-shunt电流采样在EVSPIN32G4上完全是成熟可靠的方案真正决定项目成败的往往不是硬件本身而是采样时序、重构逻辑和噪声处理这些细节。很多人一上来就追求“最先进”的单电阻重构或传感器less算法反而把基础采样环节搞砸了。先把3-shunt吃透后面的路会顺很多。
返回列表