产品展示

PRODUCTS

+
  • 图片4(1784280551400).png

基于DSP28335的永磁同步电机SMO无感控制实战教程

永磁同步电机(PMSM)在高速、低噪声和高效率场合应用广泛,但如果完全依赖机械编码器,系统成本、布线复杂度和抗干扰要求都会上升。滑模观测器(SMO)控制的目的,是利用已知的电压、电流和电机参数估算反电动势,再由PLL得到转子电角度和速度,使电机具备无位置传感器运行能力。 本文围绕“YXDSP-EMBOXC-01 PMSM-100W-SMO”工程中的实际代码展开,重点说明工程的SMO观测器设计、PLL角度估算、编码器到估算角度的切换条件,以及实验调试时应观察的变量。

关键词:

永磁同步电机

SMO

滑模观测器

YXDSP-EMBOXC

带载实验箱

所属分类:

嵌入式开发套件

嵌入式开发板

DSP实验箱


联系我们

产品描述

前言

永磁同步电机(PMSM)在高速、低噪声和高效率场合应用广泛,但如果完全依赖机械编码器,系统成本、布线复杂度和抗干扰要求都会上升。滑模观测器(SMO)控制的目的,是利用已知的电压、电流和电机参数估算反电动势,再由PLL得到转子电角度和速度,使电机具备无位置传感器运行能力。

本文围绕“YXDSP-EMBOXC-01 PMSM-100W-SMO”工程中的实际代码展开,重点说明工程的SMO观测器设计、PLL角度估算、编码器到估算角度的切换条件,以及实验调试时应观察的变量。

 

一

SMO控制原理

1.1 观测器输入与电流模型  

SMO从α/β轴电压和电流出发,建立估计电流模型。工程中Ts=0.0001s,与10kHz PWM中断对应;电机电阻Rs和电感Ls在main.c中被赋值为0.182Ω和2.4e-4H。电流模型建立如下:

 

 

式中,Valpha、Vbeta表示SVPWM输出电压,Zalpha、Zbeta表示反电势估计值。


 

1.2 滑模校正与PLL估算  

工程采用sigmoid形式的连续滑模函数,降低理想符号函数带来的抖振,函数如下:

其中,el是电流误差。反电势估计值Z_alpha/Z_beta经过0.97低通后得到E_alpha/E_beta,再经过PLL后输出电角速度,最后电角速度经过积分获得电角度。PLL误差输入公式如下:    

估算角速度经过0.99低通后通过换算得到机械转速,源码中的1.9098来自30/5π,其中5为极对数。电角速度和机械转速转化公式如下:


 

1.3无感切换

该工程启动阶段先开环牵引并等待QEP index,这个变量作为编码器零位置点的事件标志体现。当确定编码器零点后,电机低速运行阶段仍用编码器角度控制,同时SMO程序跟踪编码器角度。

当motor_dat.speed < -500rpm后,将经过1.58rad固定电角度补偿的SMO估算角度图片接入控制角度图片。该估算电角度被用于反帕克计算的输入。1.58是由电机在期望转速运行时,SMO观测电角度和实际电角度之间做差获取的。


 

二

硬件设计与故障指令

2.1 硬件整体架构

本教程使用研旭小功率电机带载控制实验箱完成,包括DSP28335主控、100W PMSM样机、24V直流母线、三相电流和母线电压采样、RS232接口的2500线光电编码器反馈以及XDS200仿真器。硬件接线图如下:

 

 

2.2接线检查和故障指令

GPIO48和GPIO59参与PWM/辅助使能,故障动作中会同时DisablePWM和DisablePWM1。

GPIO12配置为TZ1作为硬件过流故障指示信号,一旦触发,程序通过fault_action关断输出并清除运行状态。

母线瞬时过压阈值为40V,平均欠压阈值为22V,恢复运行条件为大于23V。


 

三

软件环境与工程架构  

3.1 开发环境配置

工程为CCS C2000项目,目标器件配置为TMS320F28335,编译优化等级2,链接命令文件为28335_RAM_lnk.cmd。源码文件位于source目录,头文件位于include目录,调试输出位于Debug目录。  

  

3.2 工程文件结构  

表1 工程文件结构

文件

关注内容

main.c

SMO控制参数、开环启动、观测器输入、角度/速度切换

SMO.c

估计电流、滑模校正、反电动势滤波、PLL估算

DSP2833x_UserDefine.h

SMO结构体、PWM装载宏定义

DSP2833x_EQep.c

eQEP2位置计数、1ms速度更新和index事件

DSP2833x_EPwm.c / svpwm.c

10kHz控制周期和SVPWM输出


 

四

工程参数与关键逻辑  

4.1 工程参数  

表2 SMO工程参数

参数/变量

当前配置

配置理由

Speed_set

默认-1000rpm,通信限幅±3000rpm

当前工程以反向运行验证SMO切换

速度斜坡

1ms变化0.3rpm

减小开环启动切入闭环控制时的冲击

Id/Iq电流环

Kp=0.2,Ki=0.05,Out=±24,Err=±10

与24V母线和小功率平台匹配

速度环

Kp=0.01,Ki=0.01,Out=±10,Err=±200

速度环输出作为Iq参考,限制转矩电流

smo.Rs

0.182Ω

参与估计电流模型,低速下影响明显

smo.Ls

2.4e-4H

决定电压到电流变化率的比例

smo.Ts

0.0001s

与10kHz PWM/SMO计算周期一致

smo.Kslide

6.0

适用2000rpm以内,应大于电机反电势

PLL参数

Kp_pll=40,Ki_pll=0.05

决定估算角度收敛速度和低速稳定性,同时决定了估算角度滞后的大小

滤波系数

反电势滤波0.97,速度滤波0.97

在抖振、噪声和相位滞后之间折中

角度补偿

1.58rad

SMO估算角度的固定补偿

切换阈值

-500rpm

500rpm时,电机反电势被建立

代码摘录:最终SMO参数

smo.Kp_pll = 40;

smo.Ki_pll = 0.05;

smo.Rs     = 0.182f;

smo.Ls     = 2.4e-4f;

smo.Ts     = 0.0001f;

smo.Kslide = 5.0f;


 

4.2 观测器计算  

SMO_calc用于观测计算变量,输入变量Ialpha、Ibeta、Ualpha、Ubeta。实现路径为“估算电流→滑模校正→估算反电动势→PLL计算速度/角度”。

代码摘录:SMO核心逻辑

I_alpha_dot = (-v->Rs / v->Ls) * v->I_alpha_est + (1.0f / v->Ls) * v->V_alpha - (1.0f / v->Ls) * v->Z_alpha;

v->I_alpha_est += v->Ts * I_alpha_dot;

current_error_alpha = v->I_alpha_est - v->I_alpha;

v->Z_alpha = v->Kslide * (2/(expf(-1*current_error_alpha)+1)-1);

v->E_alpha = LPF(v->Z_alpha, v->Z_alpha1, 0.97);

v->err = -v->E_alpha * sin_pll - v->E_beta * cos_pll;

v->err_sum += v->Ki_pll * v->err;

v->omega_pll = v->Kp_pll * v->err + v->err_sum;

v->Theta_est += v->omega_pll * v->Ts;

v->Speed_est = -LPF(v->omega_pll, v->omega_pll1, 0.99);

v->Speed_rpm = v->Speed_est * 1.9098;

 

4.3 开环启动与无感切换

SMO低速时反电动势较弱,观测值不准,因此工程先用开环SVPWM牵引转子,并用QEP index确认转子0位置。进入闭环后持续运行SMO进行跟踪,当速度达到-500rpm阈值后再把SMO估算角度和速度反馈接入控制。

代码摘录:SMO输入与切换条件

if(!start_done)

{

    svgen.Ualpha = 0.05 * cos(step * 0.0031416);

    svgen.Ubeta  = 0.05 * sin(step * 0.0031416);

}

if(EQep2Regs.QFLG.bit.IEL)

{

    start_done = 1;

}

smo.I_alpha = -I_clarke.Valpha;

smo.I_beta  = -I_clarke.Vbeta;

smo.V_alpha = svgen.Ualpha * Vdc;

smo.V_beta  = svgen.Ubeta * Vdc;

SMO_calc(&smo);

mech_err = fmodf(I_park.PAngle, TWO_PI) - (TWO_PI - smo.Theta_est - 1.58);

if(motor_dat.speed < -500 && smo_set)

{

    I_park.PAngle = TWO_PI - smo.Theta_est - 1.58;

    Speed_pidreg.Fdb = smo.Speed_rpm;

}

if(motor_dat.speed<-500 && smo_set)

                Speed_pidreg.Fdb=smo.Speed_rpm;


 

4.4 QEP对照基准  

eQEP2仍然是启动牵引和估算结果对照的基准。工程用1ms位置差计算motor_dat.speed,并用QPOSCNT×0.0031416得到编码器记录的电角度,用于与SMO估算电角度比较。


 

五

实验运行与观察  

建议先保持默认Speed_set = -2000rpm,观察低速编码器角度闭环和SMO角度接入两个阶段中的编码器角度、估算角度和反电势E_alpha/E_beta。


 

表3 建议仿真器观察的实验变量

记录对象

变量

用于说明的问题

启动牵引

start_done

是否完成开环定位和index捕获

采样与电压

Ia / Ib / Ic / Vdc

采样转化比例和电流电压方向核对

观测器电流

smo.I_alpha/I_beta / smo.I_alpha_est/I_beta_est

估计电流能否跟随实测电流

滑模输出

smo.E_mag / Kslide

反电动势是否稳定,Kslide是否合理

PLL输出

smo.err / omega_pll / Theta_est / Speed_rpm

估算角度和速度是否收敛

角度对照

I_park.PAngle / motor_dat.theta_mech / mech_err

编码器角度与SMO角度偏差

切换效果

Speed_set / motor_dat.speed

控制切换时速度是否平滑

保护状态

run_sts.fault1/fault2

启停控制、故障监测

 

六

参数整定与故障调试

· 先确认电流采样方向并对采样信号调零,采样错误会让观测器方向整体反掉。

· Rs、Ls决定电流模型,SMO比较依赖这两个参数,用LSR测试仪就可以测。测量方法如下:用手转动电机转子一圈,记录电感和电阻的最大最小值并取平均。电机Ls过小会放大噪声,过大则响应变慢。

· 第一次运行程序,建议用仿真器手动切换无感和有感控制变量。通常先有感闭环控制并调节滑膜参数,如Kslide、滤波和PLL,直至滑膜输出转速和有感转速趋同。   

· Kslide可以先从6.0附近微调,如果比估算出的E_mag小则需逐步增大。Z_alpha/Z_beta抖动明显时先检查采集信号的方向,再考虑增强低通滤波。

· 本例程中使用的1.58rad补偿不是通用常数,改转速、改编码器、改运行方向或改电机后必须重新确认。实际工程中可以不用固定电角度补偿,而是考虑根据PLL的相位滞后效果和电机转速进行动态补偿。

· 当前SMO无感控制切入条件是motor_dat.speed < -500,默认验证方向为反转,如需使用正转验证或测试低速效果可自行修改切换条件。


 

七

实验结果附图

图1 空载阶跃 -2000 rpm比较
 

图2 磁粉加载10阶跃 -2000 rpm比较
 

图3 磁粉加载20阶跃 -2000 rpm比较
 


图4 1S周期正弦响应对比图

 


图5 2S周期正弦响应对比图
 

微信公众号教程资料链接: https://pan.baidu.com/s/1TCmAw1pSU3yb7iK8WbGfkg

提取码: qhpu