> 文章列表 > MBD-PMSM闭环控制模型(FOC算法)

MBD-PMSM闭环控制模型(FOC算法)

MBD-PMSM闭环控制模型(FOC算法)

目录

前面

Speed_and_Position_Estimator

获取HALL信号

HALL状态更新

计算转速

位置判断

ADC相电流/总线电流电压

获取AD值

计算实际值

低速高速切换

SlowLoopControl

FastLoopControl

最后


前面

前面分析了BLDC的开环与闭环,接下来分析PMSM或者说FOC的算法框架。

MBD-有感(Hall)开环BLDC控制模型(上) · 语雀

MBD-有感(Hall)开环BLDC控制模型(下) · 语雀

MBD-有感(Hall)BLDC闭环控制模型 · 语雀

Speed_and_Position_Estimator

所在位置:

内部框架:

获取HALL信号

使用的是中断触发,而且还是双边沿触发。

HALL状态更新

其实就是触发一次中断,就反转变量HALL_A_Input

计算转速

这里采用的是下降沿检测霍尔信号两个下降沿之间的时间对应的就是HALL信号的变化周期

周期=计数值(TIME_CNT)*100us的定时器(C_LST)

频率=1/周期 单位是秒,这里得到的是 转/秒

转化成 转/分钟,需要*60:Vrpm=60/(TIME_CNT*C_LST)

最后实际转速,还要除以极对数pp:Vrpm=60/(TIME_CNT*C_LST/pp)

如下图1部分所示

rpm2rad/s公式:1 rpm = 1(r)/1(min) = 1(r)/60(s) = 2π (rad)/60(s) =π/30 (rad/s)

位置判断

这个就没啥好讲的,HALl值=A+2B+4C,分别对应不同的扇区。

ADC相电流/总线电流电压

FOC控制需要获取三相电流,这一步与电路图密切相关。

获取AD值

内部结构如下

这里有一个问题一直没搞懂,为什么ADC_IB是靠ADC1中断直接引出来的一个data?而不是像ADC_IA一样靠配置好通道然后读取一个值。

计算实际值

获取三相电流,这里是双电阻采样,由两相电流计算出三相电流,这里注意使用了多次浮点数相关的运算。

获取总线电流,总线电压。

低速高速切换

切换逻辑,其实搞得也不太明白,有些地方不懂

感觉像是通过一个计数器来计算。

SlowLoopControl

低速环主要任务如下:

在Generate_Speed_Reference模块中:

在Compute_Positioning_Mode模块中:

在Speed_Controller模块中:

FastLoopControl

在模块里:

很常见的FOC算法模型,坐标变换,PI调节,输出PWM。

放几个比较有意思的点

电流环DQ轴PI控制器

PWM输出模块:

计算电角度模块ComputeElectricAngle

输入转速rad/s,经过计算(2*pi/60)*PP*Nmax*(C_LST/2/pi)*(2^31),可以得到电角度。

最后

转的很好