该模型为PMSM的无传感器器控制,在低速时采用I/F启动方式,中高速切换至滑膜观测器估算PMSM位置
·
该模型为PMSM的无传感器器控制,在低速时采用I/F启动方式,中高速切换至滑膜观测器估算PMSM位置,进而对PMSM进行调速控制。

无传感器永磁同步电机控制这玩意儿,说难不难说简单也不简单。低速时转子位置难抓取这事儿搞过的人都懂,直接上观测器容易翻车。咱今天聊聊怎么用I/F启动和滑膜观测器打配合战,实测效果比死磕单一算法强多了。

先说说低速阶段的I/F控制,这招相当于给电机装了个"定速巡航"。来看段伪代码:
void IF_Control(float target_speed) {
static float freq = 0;
static float current_angle = 0;
// 斜坡函数生成目标频率
if(freq < target_speed * 0.8) { // 0.8是加速斜率参数
freq += 0.01;
}
// 固定电流幅值
float Iq_ref = 2.0; // 典型值2-3A
// 生成三相电压
current_angle += 2 * PI * freq * Ts;
set_voltage(Iq_ref, current_angle);
}
重点在斜坡加速和固定电流这两个操作。斜坡函数里的0.01增量要根据电机惯性调整,太大了会扯着蛋(失步),太小了启动慢。电流值2A是个经验值,实际得看电机铭牌参数,别照抄。

到了中高速段就得切换滑膜观测器了,这时候代码画风突变:
// 滑模观测器核心计算
void SMO_Update(float Ia, float Ib, float we) {
float alpha = 0.5; // 滑膜增益
float L = 0.001; // 电机电感
// 反电动势估算
emf_alpha = (Ia - hat_Ia) * alpha * L;
emf_beta = (Ib - hat_Ib) * alpha * L;
// 锁相环计算角度
theta = atan2(-emf_beta, emf_alpha);
// 自适应补偿项
if(fabs(we) > 50) { // 速度阈值
alpha *= 1.2; // 增益自动调节
}
}
这里的滑膜增益alpha是个关键参数,调试时得拿着示波器盯着波形调。有个小技巧:当电机哼唧声变大时,适当降低alpha值。后面的自适应补偿是防止高速时观测器跟不上,类似开车时后视镜自动防眩目功能。

切换逻辑才是真考验,来看个实际项目里用到的状态机:
def control_strategy(current_speed):
HYSTERESIS = 10 # 速度回差防止震荡
if control_mode == 'IF':
if current_speed > switch_speed + HYSTERESIS:
switch_to_SMO()
else:
if current_speed < switch_speed - HYSTERESIS:
switch_to_IF()
这个10rpm的回差区间很重要,没这玩意儿电机能在切换点附近抽风似的来回跳。曾经有个兄弟设成0,结果电机抖得跟筛糠似的,现场堪比迪厅灯光秀。

实测数据说话:用这套方法,在0-100rpm启动时间能控制在0.8秒内,切换时的转矩波动小于5%。不过要注意,I/F阶段的电流别设太高,否则切换瞬间会有个明显的"咯噔"感,跟手动挡换挡没踩离合似的。

最后唠叨句,电机参数不准啥算法都白搭。之前有个项目,硬件小哥把电感值标错了,观测器直接表演"太空步"。所以上电前记得做参数辨识,别头铁硬刚。
更多推荐



所有评论(0)