当前位置:首页 > 汽车电子 > 汽车电子
[导读]车载电驱FOC不是把三相正弦波直接灌进去,而是把定子电流分解到随转子同步旋转的d/q轴:d轴管磁通、q轴管转矩,PI对直流量闭环,输出再反变换回三相PWM。 新能源车PMSM电驱通常10~20kHz电流环中断里跑完一帧。


车载电驱FOC不是把三相正弦波直接灌进去,而是把定子电流分解到随转子同步旋转的d/q轴:d轴管磁通、q轴管转矩,PI对直流量闭环,输出再反变换回三相PWM。 新能源车PMSM电驱通常10~20kHz电流环中断里跑完一帧。

一、中断主循环骨架

PWM更新中断(或ADC转换完成中断)里按顺序执行,别在main里轮询:

void FOC_CurrentISR(void)

{

   /* 1. 电流采样:双电阻方案算第三相 */

   float ia = ADC_GetPhaseA();          /* 已减零点偏移 */

   float ib = ADC_GetPhaseB();

   float ic = -ia - ib;                 /* Ia+Ib+Ic=0 */


   /* 2. Clarke:三相->αβ */

   float ial = ia;

   float ibe = (ia + 2.0f*ib)*0.57735027f;   /* 1/√3 */


   /* 3. Park:αβ->dq,theta为电角度 */

   float c = cosf(theta), s = sinf(theta);

   float id =  ial*c + ibe*s;

   float iq = -ial*s + ibe*c;


   /* 4. 电流环PI(d轴通常给0) */

   float vd = PI_Calc(&pi_d, id_ref, id);

   float vq = PI_Calc(&pi_q, iq_ref, iq);

   vd = clamp(vd, -VMAX, VMAX);

   vq = clamp(vq, -VMAX, VMAX);


   /* 5. 反Park */

   float va = vd*c - vq*s;

   float vb = vd*s + vq*c;


   /* 6. SVPWM -> 占空比 */

   SVPWM_Gen(va, vb, vbus, &ta, &tb, &tc);

   PWM_Update(ta, tb, tc);

}

速度环不进这个ISR,单独1kHz左右任务跑,输出iq_ref给电流环; 电流环带宽是速度环10倍左右才稳。

二、采样时机比对更重要

FOC最容易被忽视的是ADC触发点:必须在PWM中心对齐、下桥导通时段采相电流,否则读到的是斩波毛刺。 做法是用高级定时器TRGO触发ADC,DMA搬数据,ISR里只取结果。

双电阻/三电阻低端采样:中心对齐触发

相线霍尔采样:可任意点,但要差分隔离

运放零点偏移上电标定一次,存NvM或RAM

第三相用-ia-ib推算,前提三相平衡,缺相时不信任

三、角度来源与偏移校准

theta = 机械角 × 极对数 + offset。车载主驱多用旋变(Resolver)或绝对值编码器,无感方案用滑模观测器只适合辅助/泵类。

上电做一次对齐:给d轴小电流把转子吸到已知位置,记下编码器读数作为offset,否则Park轴偏了→转矩抖动甚至反转。

四、PI限幅与抗饱和

电流环输出是电压指令,必须限幅到线性调制区(≈ vbus/√3)。PI内部加抗饱和:

float PI_Calc(pi_t*p, float ref, float fb){

   float e = ref - fb;

   p->i += p->ki * e * DT;

   if(p->i > p->ilim) p->i = p->ilim;

   if(p->i < -p->ilim) p->i = -p->ilim;   /* 抗饱和 */

   return p->kp*e + p->i;

}

不冻积分项,弱磁切回时积分累计会让电流冲过IGBT额定值。

五、弱磁与MTPA(基速以上)

基速内id_ref=0;超过基速反电动势吃满母线电压,要给负id弱磁:

if(speed > base_speed)

   id_ref = weak_field(speed, vbus);   /* 负值,按电压裕量反算 */

内嵌式PMSM还做MTPA,id/iq按Ld≠Lq分配;表贴机Ld≈Lq,直接iq出扭矩即可。

六、车载保护不能省

硬件过流:比较器直接拉PWM故障脚关输出,不走软件

死区时间:互补PWM必加200~500ns,防上下桥直通

母线过压/欠压:过压进主动回馈限制,欠压禁扭矩输出

过温降额:IGBT/SiC结温超阈值按比例砍iq_ref

失步检测:iq实际值长期跟不上参考→报故障降转矩

看门狗:FOC任务喂狗,算法卡死自动安全关断

故障态统一走安全状态机:先清零iq_ref→封PWM→拉低使能,别在中断里做复杂处理。

七、调试顺序

台架别一上来就闭环:

开环转动确认相序、转向

电流采样标定零点

只跑电流环,给固定iq_ref整定Kp/Ki

速度环接入,带宽调到电流环1/5~1/10

弱磁参数在基速以上单独标

过流/过温/失步注入测试

参数随温度漂移,电阻随温升变大,量产车要做参数辨识或在线校正。

按“PWM同步采样→Clarke/Park解耦→dq双PI→反Park→SVPWM→硬件保护”这条链写,C层代码本身不复杂,复杂的是采样对齐、角度校准、限幅抗饱和和故障降级。车规电驱和玩具电机差别就在这层容错:台架能转不算完,低速抖动、高速弱磁、过流关断、低温启动都稳才是可量产FOC。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭