基于FOC定向控制的永磁同步电动机控制系统Simulink模型

目录

一、磁场定向控制(FOC)

二、FOC定向控制实现步骤

三、具体实现

四、实验验证

五、核心程序

六、MATLAB仿真结果


      永磁同步电动机(PMSM)控制系统是基于磁场定向控制(FOC)的一种高性能电机控制方案。这种控制系统能够实现精确的转矩和磁通控制,具有快速响应、高效率、高功率密度等优点,因此在工业自动化、电动汽车、航空航天等领域得到了广泛应用。

一、磁场定向控制(FOC)

      在分析PMSM的FOC控制系统之前,我们首先需要建立PMSM的数学模型。PMSM的物理方程可以用下面的公式表示:

Te = p*λ*i*cos(θ)  
Tj = p*λ*i*sin(θ)

        其中,Te是电磁转矩,Tj是机械转矩,p是极对数,λ是永磁体磁链,i是电流,θ是电机转子与定子电流之间的夹角。

        FOC控制系统的主要目标是通过控制电流和电压来控制电机转矩和磁通,因此我们需要建立电流和电压的数学模型。电流和电压的关系可以用下面的公式表示:

V = R*i + d*λ/dt

其中,V是电压,R是电阻,i是电流,d是微分算子,λ是永磁体磁链,dt是时间微分。

二、FOC定向控制实现步骤

基于FOC的PMSM控制系统实现步骤如下:

  1. 初始化:设置控制系统的参数,包括电机参数、控制器参数、采样周期等。
  2. 速度估算:根据电机的运行状态,利用速度估算算法估算电机的速度。常用的速度估算算法包括电流法、反电动势法等。
  3. 电流控制:根据电流控制器输出和电机实际电流的差异,通过PID控制器调整电流,实现电流的精确控制。
  4. 电压控制:根据电压控制器输出和电机实际电压的差异,通过PID控制器调整电压,实现电压的精确控制。
  5. 转矩和磁通控制:根据电机的运行状态和控制系统目标,通过FOC算法计算出电机需要的转矩和磁通,然后通过电流和电压控制器实现精确控制。
  6. 采样和反馈:通过采样电路采集电机的电流、电压、转速等信息,然后反馈给控制系统。
  7. 保护控制:根据电机的运行状态和安全保护需求,实现过热、过流、过压等保护控制。

三、具体实现

        在具体实现FOC控制系统时,我们需要选择合适的硬件和软件平台。硬件平台包括电机、功率器件、采样电路、保护电路等;软件平台包括控制算法、通讯协议、用户界面等。

      在硬件平台上,我们通常选择高性能的电机、功率器件和采样电路。例如,我们可以选择具有高功率密度、高效率的永磁同步电机,选择具有快速响应、高开关频率的IGBT或MOSFET功率器件,选择具有高精度、快速响应的电流和电压采样电路。

       在软件平台上,我们通常选择具有快速响应、高精度的控制算法。例如,我们可以选择具有快速响应、高稳定性的比例-积分-微分(PID)控制器,选择具有快速傅里叶变换(FFT)的速度估算算法。此外,我们还需要实现通讯协议和用户界面,以便实现远程控制和参数调整。

四、实验验证

       为了验证FOC控制系统的性能和稳定性,我们需要进行实验验证。实验验证包括硬件在环实验(HIL)和实际运行实验。HIL实验是在模拟环境下进行的实验,能够模拟电机的实际运行状态,从而验证控制系统的稳定性和性能。实际运行实验是在真实环境下进行的实验,能够验证控制系统的实际运行效果。

       在实验中,我们可以通过调整控制系统的参数,如PID控制器的比例、积分、微分系数等,来优化控制系统的性能。此外,我们还可以通过实验来验证控制系统的过热、过流、过压等保护功能的可靠性和有效性。

       总之,基于FOC定向控制的永磁同步电动机控制系统是一种高性能、高效率的电机控制系统,具有广泛的应用前景。在实现这种控制系统时,我们需要选择合适的硬件和软件平台,并实现精确的电流、电压、转矩和磁通控制以及保护控制。通过实验验证,我们可以优化控制系统的性能,并验证保护功能的可靠性和有效性。

五、核心程序

PWM_frequency 	= 30e3;             %%Hz//转换器s/w频率
T_pwm           = 1/PWM_frequency;  %s//PWM开关时间周期

%设置采样时间
Ts          	= T_pwm;        %控制器的采样时间步长
Ts_simulink     = T_pwm/2;      %模型模拟的模拟时间步长
Ts_motor        = T_pwm/2;      %模拟采样时间
Ts_inverter     = T_pwm/2;      %平均值逆变器的模拟时间步长
Ts_speed        = 30*Ts;        %速度控制器的采样时间

%设置控制器的数据类型和代码生成
dataType = 'single';            %浮点代码生成

%系统参数//硬件参数

%设置目标参数
target.CPU_frequency        = 84e6;					%时钟频率
target.PWM_frequency        = PWM_frequency;   		%PWM频率
target.PWM_Counter_Period   = round(target.CPU_frequency/target.PWM_frequency/2); % 上下计数器的PWM计时器计数
target.ADC_Vref             = 3.3;					%V		ADC参考电压
target.ADC_MaxCount         = 4095;					%12位ADC的最大计数

%电机参数
pmsm.p      = 4;                %电机极对数
pmsm.Rs     = 0.4;              %欧姆//定子电阻器
pmsm.Ld     = 0.6e-3;           %D轴电感值
pmsm.Lq     = 0.6e-3;           %Q轴电感值
pmsm.J      = 4.8018552467e-06; %惯性
pmsm.B      = 9.6037104933e-06; %摩擦系数
pmsm.Ke     = 4;                %扭矩常数
pmsm.Kt     = 0.04103;          %额定电流
pmsm.I_rated= 3.5;              %最大速度
pmsm.N_max  = 10000;            %位置偏移
pmsm.PositionOffset = 0.1712;	%QEP编码器狭缝
pmsm.QEPSlits       = 1250;     %根据Ke计算的PM通量
pmsm.FluxPM     = (pmsm.Ke)/(sqrt(3)*2*pi*1000*pmsm.p/60); % 
pmsm.T_rated    = (3/2)*pmsm.p*pmsm.FluxPM*pmsm.I_rated;   %从I_rated获取T_rated

pmsm.N_base = 4000; %电机基本速度
pmsm.PositionOffset = 0.1917; % 不需要无传感器

%设置逆变器详细信息 

inverter.V_dc          = 24;       				%设置逆变器详细信息(X-NUCLEO-IHM07M)
inverter.I_trip        = 3.55;       			%安培//跳闸的最大电流
inverter.Rds_on        = 2e-3;     				%欧姆//Rds ON(来自电机驱动芯片)
inverter.Rshunt        = 0.33;    				%欧姆
inverter.CtSensAOffset = 1665;        			%计数//ADC偏移
inverter.CtSensBOffset = 1943;        			%计数//ADC偏移
inverter.ADCGain       = 1;                     %通过SPI缩放的ADC增益因子(不可能进行板载放大)
inverter.EnableLogic   = 1;    					% X-NUCLEO-IHM07M1使能引脚(EN_GATE)的激活高电
inverter.invertingAmp  = -1;   					% 非反相电流测量放大器
inverter.ISenseVref    = 3.3;					%V/逆变器电流检测电路的电压参考
inverter.ISenseVoltPerAmp = 0.505; 				%V每1A电流的电流感应电压输出(Rshunt*iSense运算放大器增益)
inverter.ISenseMax     = inverter.ISenseVref/(2*inverter.ISenseVoltPerAmp); %Amp%Amps//可通过逆变器电流感应测量的最大峰值中性点电流
inverter.R_board       = inverter.Rds_on + inverter.Rshunt/3;  %Ohms
inverter.ADCOffsetCalibEnable = false;

%%PU系统详细信息//设置PU转换的基本值
PU_System.V_base   = (inverter.V_dc/sqrt(3));
PU_System.I_base   = inverter.ISenseMax;
PU_System.N_base   = pmsm.N_base;
PU_System.T_base   = (3/2)*pmsm.p*pmsm.FluxPM*PU_System.I_base;
PU_System.P_base   = (3/2)*PU_System.V_base*PU_System.I_base;

acceleration = 20000/PU_System.N_base;                  % P.U/Sec//最大允许加速度

%%开环参考值
T_Ref_openLoop          = 1;                    %开环启动时间
Speed_openLoop_PU       = 0.1;                  %开环启动的单位速度参考
Vd_Ref_openLoop_PU      = Speed_openLoop_PU*2;  %Dyno设置使用1.2倍,其他设置使用2倍

%控制器设计
PI_params = mcb.internal.SetControllerParameters(pmsm,inverter,PU_System,T_pwm,2*Ts,Ts_speed);

%更新模拟延迟
PI_params.delay_Currents    = int32(Ts/Ts_simulink);
PI_params.delay_Position    = int32(Ts/Ts_simulink);
PI_params.delay_Speed       = int32(Ts_speed/Ts_simulink);
PI_params.delay_Speed1      = (PI_params.delay_IIR + 0.5*Ts)/Ts_speed;

%将数据类型double的所有参数转换为single
disp(pmsm);
disp(inverter);
disp(target);
up3037

六、MATLAB仿真结果

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/132677940