*************
C++
topic: pmsm的启动堵转和运行堵转
*************
The locked rotor problem can be separated into start-up lockup and operational lockup. PMSM lockup can be toled. The rotor stops rotate, we call it lockup.
Start-up lockup happens when the PMSM speed from 0 rpm to 1300 rpm. You can see the phenomenon that rotor doennot ratate when the switch is on, the rotor remains still. Operational lockup happens when the rotor is rotating.
Why PMSM rotates? Because the altenating current generates magnet. Phase A generats magnet A, so are phase B and C. The three phases generate a vector magnet, the generating magnet and the rotor's magnet works like two bar magnets repel each other when their same poles are facing, and attract each other when their opposite poles are facing.
![]() | ![]() |
![]() | |
|
|
As you can see in the left schematic, the position of rotor cannot be recognized because no position recognizing sensor, so the engineers are so smart that they use HFI to tell the rotor's position. But why HFI works we will talk it later. Not later but now. The motor has d-axis and q-axis, which are used to transform the coordinate system.
![]() |
![]() |
![]() |
In a word, HFI means give stator the direct current to generate a magnet and the can recognize rotor's position.
Back to the rhythm, if the position cannot be recognized, the rotor cannot rotate. So the true speed is 0 rpm, while the target speed is 1338 rpm, this is the start-up lockup. When the rotor is rrotating at true speed1338 rpm, it stacks and soon the true speed drops to 0 rpm. So the code should take the current into a consideration.
枚举 状态 { 正常, 启动堵转, 运行堵转 }
函数 判定堵转(
未闭环, // bool (true = 启动阶段)
目标速度, // rpm
实际速度, // rpm
实际Iq, // A
额定Iq, // A
加速度, // rpm/s
反电势已建立, // bool
启动已超时, // bool
闭环最小速度, // rpm
速度误差大, // bool
PWM已饱和, // bool
速度持续下降 // bool
) -> 状态
{
高电流 = (实际Iq >= 0.75 * 额定Iq)
启动进展低 = (实际速度 < min(0.3 * 目标速度, 闭环最小速度))
加速度近零 = (abs(加速度) < 启动加速度阈值) // 启动加速度阈值需配置
加速度非正 = (加速度 <= 0)
if (未闭环) // 启动阶段
{
if (目标速度 > 0 && 实际速度 == 0 && 高电流)
{ return 启动堵转 }
if (目标速度 > 0 && 启动进展低 && 高电流 && 加速度近零 && !反电势已建立)
{ return 启动堵转 }
if (启动已超时 && 实际速度 < 闭环最小速度)
{ return 启动堵转 }
return 正常
}
else // 运行阶段
{
if (目标速度 > 0 && 实际速度 == 0 && 高电流)
{ return 运行堵转 }
if (速度误差大 && 高电流 && 加速度非正 && (PWM已饱和 || 速度持续下降))
{ return 运行堵转 }
return 正常
}
}









68

被折叠的 条评论
为什么被折叠?



