目录
前面
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),可以得到电角度。
最后
转的很好