产品展示

PRODUCTS

+
  • 主图02(1788924947460).jpg

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

直接转矩控制常用于希望获得较快转矩响应的交流调速场合,例如负载突变较明显的小功率伺服、教学实验平台和需要快速观察转矩变化的电机控制样机。它的优点是控制目标直接指向磁链和转矩,动态响应直观;不足是对参数、采样、母线电压和速度反馈比较敏感,低速区若磁链估算不稳,转矩输出也会随之波动。 本例程与传统滞环比较器加开关表的DTC控制不同,保留SVPWM调制方式,在FOC框架中增加磁链环和转矩环,磁链环输出d轴电压,转矩环输出q轴电压。本文以YXDSP-EMBOXC-01 PMSM-100W-DTC工程为例,说明这类DTC-SVM控制在研旭小功率带载电机实验箱上的实现和调试方法。

关键词:

DSP28335

DTC控制

永磁同步电机

SVPWM调制

所属分类:

嵌入式开发套件

嵌入式开发板

DSP实验箱


联系我们

产品描述

 

 

前言
 

直接转矩控制常用于希望获得较快转矩响应的交流调速场合,例如负载突变较明显的小功率伺服、教学实验平台和需要快速观察转矩变化的电机控制样机。它的优点是控制目标直接指向磁链和转矩,动态响应直观;不足是对参数、采样、母线电压和速度反馈比较敏感,低速区若磁链估算不稳,转矩输出也会随之波动。

本例程与传统滞环比较器加开关表的DTC控制不同,保留SVPWM调制方式,在FOC框架中增加磁链环和转矩环,磁链环输出d轴电压,转矩环输出q轴电压。本文以YXDSP-EMBOXC-01 PMSM-100W-DTC工程为例,说明这类DTC-SVM控制在研旭小功率带载电机实验箱上的实现和调试方法。
 

 

一、DTC-SVM控制原理

 

1.1 DTC与DTC-SVM

传统DTC通常根据转矩误差、磁链误差和磁链扇区直接选择逆变器电压矢量。它的控制结构非常直接,但开关频率和转矩脉动往往不够均匀。DTC-SVM则把“直接控制转矩和磁链”的目标保留下来,把最终电压矢量交给SVPWM合成,从而让开关频率和调制输出套用常规矢量控制。

本工程采用的就是后一种结构。速度环给出转矩参考,磁链参考与估算磁链形成磁链误差,转矩参考与估算转矩形成转矩误差,两个PI环分别生成d轴和q轴电压指令,再通过反Park变换和SVPWM更新三相PWM。这种结构的本质是通过q轴电流直接控制转矩。

 

1.2 磁链与转矩估算

磁链描述的是电机内部磁场建立的程度。对于近似表贴式永磁同步电机,d轴磁链主要由永磁体磁链和d轴电流产生的磁链组成,q轴磁链主要来自q轴电流。工程中的磁链估算先在d/q坐标系计算磁链分量,再反变换到α/β坐标系。

式中,ψd和ψq分别表示d/q轴磁链,Ld和Lq表示d/q轴电感,id和iq为d/q轴电流,ψf为永磁体磁链。定子磁链幅值用于与磁链给定比较。工程把d/q轴磁链反变换到α/β坐标系后,再计算磁链幅值。

式中,ψαψβ表示静止坐标系下的磁链分量,|ψs|表示定子磁链幅值。这个量并不直接描述某一相电流,而是描述电机磁场状态的整体强弱。

转矩估算反映的是当前q轴电流和永磁体磁链共同产生的电磁转矩。本工程使用简化表贴式PMSM转矩模型:

式中,Te表示电磁转矩估计值,p表示极对数,ψf表示永磁体磁链,iq表示q轴电流。该公式的作用是把转矩反馈压缩成一个便于闭环比较的量,后续转矩环就围绕Te与转矩参考之间的误差工作。

 

1.3 双环电压指令生成

DTC-SVM的控制指令形式是电压矢量。磁链环根据磁链误差生成d轴电压,转矩环根据转矩误差生成q轴电压。

 

式中,ud*和uq*分别是d/q轴电压指令,ψref为磁链给定,Tref为转矩给定。工程随后用当前电角度把电压指令转换到α/β坐标系,并用母线电压Vdc归一化后送入SVPWM。这样既保留DTC对磁链和转矩的直接调节目标,又避免开关表输出造成的离散矢量跳变。

二、硬件设计与故障指令

 

2.1 硬件整体架构

本例程面向研旭小功率电机带载控制实验箱和100W永磁同步电机台架。硬件接线图如下:

 

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目录。

工程仍采用CCS下的DSP28335裸机工程结构,控制中断由EPWM1触发,ADC采样、编码器读取、保护判断、控制计算和SVPWM更新都围绕该中断展开。与普通FOC工程相比,本文重点关注DTC-SVM新增的磁链估算、转矩估算、磁链环和转矩环。    

 

3.2 工程文件结构

表1 工程文件结构

文件

关注内容

main.c

DTC控制参数、开环启动、转矩/磁链环接入

DTC_PMSM.c

估算磁链和电磁转矩

DSP2833x_UserDefine.h

FEstimator结构体、PWM装载宏定义

DSP2833x_EQep.c

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

DSP2833x_EPwm.c / svpwm.c

10kHz控制周期和SVPWM输出

 

四、工程参数与关键逻辑

参数分析应以main.c中最终赋值为准,而不是只看默认宏。100W永磁同步电机参数已在工程中的FEstimator结构体下示出,具体参数如下:Ld/Lq值为1.1e-4H,磁链值为0.0052Wb,定子电阻值为0.17Ω

表2 DTC工程参数

参数/变量

当前配置

配置理由

Speed_set

初始值为-1000 rpm

                   

Flux_pidreg.Ref

初始值为永磁磁链值

等效于Id参考值设为0

Flux_pidreg

Kp=3,Ki=0.3

磁链误差生成d轴电压指令

Torque_pidreg

Kp=3,Ki=0.3

转矩误差生成q轴电压指令

Speed_pidreg

Kp=0.001,Ki=0.001,OutMax=±9

速度外环生成转矩参考

FEstimator.Ts

1e-4 s

控制采样周期100 μs

 

 

4.1 最终参数赋值

下面的代码摘录保留了主函数中生效的DTC-SVM参数。可以看到,磁链环和转矩环都输出电压指令,速度环输出转矩参考,FEstimator结构体保存电机模型参数。

代码摘录:DTC-SVM最终参数

Flux_pidreg.Kp = 3;

Flux_pidreg.Ki = 0.3;

Flux_pidreg.OutMax = 24.0;

Flux_pidreg.OutMin = -24.0;

Flux_pidreg.ErrMax = 1;

Flux_pidreg.ErrMin = -1;

                   

Torque_pidreg.Kp = 3;

Torque_pidreg.Ki = 0.3;

Torque_pidreg.OutMax = 24.0;

Torque_pidreg.OutMin = -24.0;

Torque_pidreg.ErrMax = 1;

Torque_pidreg.ErrMin = -1;

                   

Speed_pidreg.Kp = 0.001;

Speed_pidreg.Ki = 0.001;

Speed_pidreg.OutMax = 9;

Speed_pidreg.OutMin = -9;

Speed_pidreg.ErrMax = 1000;

Speed_pidreg.ErrMin = -1000;

                   

FEstimator.Rs = 0.17f;

FEstimator.Ld = 1.1e-4f;

FEstimator.Lq = 1.1e-4f;

FEstimator.Flux_pm = 0.0052f;

FEstimator.pole_pairs = 5.0f;

FEstimator.Ts = 1e-4f;

                   

Speed_pidreg.Ref = Speed_set;

Flux_pidreg.Ref = FEstimator.Flux_pm;

 

 

4.2 开环启动与闭环切换

程序上电后不会立即进入DTC-SVM闭环,而是先用小幅旋转电压矢量带动转子寻找编码器index。只有EQEP2检测到index事件并置位start_done后,才开始使用编码器角度、电流反馈和转矩/磁链闭环。

代码摘录:开环启动逻辑

if(!start_done)

{

    if(!QEP_CLR)

    {

        QEP_CLR = 1;

        EQep2Regs.QCLR.bit.IEL = 1;

    }

                   

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

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

                   

    if(Speed_pidreg.Ref < 0)

    {

        temp = svgen.Ualpha;

        svgen.Ualpha = svgen.Ubeta;        

        svgen.Ubeta = temp;

    }

                   

    step++;

    if(step > 1999) step = 0;

}

                   

if(EQep2Regs.QFLG.bit.IEL)

{

    start_done = 1;

}

 

 

4.3 磁链和转矩计算

闭环阶段先由三相电流得到d/q轴电流,再把电流送入FEstimator。工程没有启用传统电压积分磁链模型,而是按电感和永磁体磁链得到d/q轴磁链,再反变换到静止坐标系计算磁链幅值。

代码摘录:磁链与转矩估算

v->Psi_d = v->Ld * v->I_d + v->Flux_pm;

v->Psi_q = v->Lq * v->I_q;

                   

v->Psi_est = sqrtf(v->Psi_alpha * v->Psi_alpha

                 + v->Psi_beta  * v->Psi_beta);

                   

v->Te_est = 1.5f * v->pole_pairs

          * v->I_q * v->Flux_pm;

这段代码决定了DTC-SVM两个反馈量的来源:Psi_est代表磁链幅值,Te_est代表电磁转矩估计值。若电机参数不准或电流采样方向反了,两个闭环会同时受到影响。

 

4.4 转矩磁链双环接入

工程先用开环SVPWM牵引转子,并用QEP index确认转子0位置。闭环后,估算磁链和转矩,再在速度外环中更新转矩参考并控制速度给定斜坡,磁链参考被限制在永磁体磁链附近;随后磁链环和转矩环分别计算电压指令,并按母线电压归一化后送入反Park和SVPWM。

代码摘录:DTC-SVM闭环接入

FEstimator.I_d = I_park.PDs;

FEstimator.I_q = I_park.PQs;

Fdq_Calc(&FEstimator);

Psi_ipark.IPDs    = FEstimator.Psi_d;

Psi_ipark.IPQs    = FEstimator.Psi_q;

Psi_ipark.IPSine  = I_park.PSine;

Psi_ipark.IPCosine= I_park.PCosine;

ipark_calc(&Psi_ipark);            

FEstimator.Psi_alpha    = Psi_ipark.IPAlpha;

FEstimator.Psi_beta     = Psi_ipark.IPBeta;

FsTe_Calc(&FEstimator);

                   

if((!motor_dat.pos_cnt) && (mode_select & 0x1))

{

    if(Flux_pidreg.Ref > 0.006)

    {

        Flux_pidreg.Ref = 0.006;        

    }

    else if(Flux_pidreg.Ref < 0.004)

    {

        Flux_pidreg.Ref = 0.004;

    }

}

pid_reg_calc(&Torque_pidreg);

I_ipark.IPQs    = Torque_pidreg.Out;

pid_reg_calc(&Flux_pidreg);

I_ipark.IPDs    = Flux_pidreg.Out;

从信号传递看,速度误差并不直接生成Iq参考,而是生成转矩参考;磁链误差和转矩误差最终生成电压矢量。这是本工程区别于普通FOC速度电流双闭环的地方。

 

4.5 QEP速度反馈

eQEP2仍然是启动牵引和估算结果对照的基准。工程用1ms位置差计算motor_dat.speed,并与扭矩传感器采样得到的速度Speed_sensor进行比较。

 

五、实验运行与观察

建议先空载运行,观察速度是否稳定,之后再加载观察转矩、磁链变化。

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

记录对象

变量

用于说明的问题

开环寻零

start_done

寻零完成标志

速度外环

Speed_set / motor_dat.speed

实际速度是否跟随目标速度

磁链反馈

FEstimator.Psi_d / FEstimator.Psi_q

磁链估算是否稳定

转矩反馈

FEstimator.Te_est / Torque_pidreg.Ref

估算转矩是否跟踪参考转矩

双环输出

Flux_pidreg.Out / Torque_pidreg.Out

参考电压输出是否饱和

扭矩传感器

Speed_sensor / Torque

查看速度和输出转矩

保护状态

run_sts.fault1/fault2

启停控制、故障监测

六、参数整定与故障调试

● 先确认三相电流零点和方向,再观察FEstimator.Psi_est与FEstimator.Te_est。采样方向错误时,转矩和磁链反馈可能看似有数值,但闭环方向会整体错误。

● FEstimator.Rs、Ld、Lq和Flux_pm决定磁链与转矩模型。Ld/Lq过大时磁链反馈对电流过于敏感,过小时磁链环难以体现电流变化;Flux_pm不准会同时影响磁链限幅和转矩估算。

● Flux_pidreg.Ref在代码中被限制到±0.00935附近,调试时不要只修改初始0.2而忽略后续限幅。若Psi_est长期接近0或跳变,应先检查FEstimator.Psi_alpha/Psi_beta的计算链路。

● Torque_pidreg.Out和Flux_pidreg.Out最终会除以Vdc并限幅到±1。若母线电压采样不准,SVPWM输入会被错误放大或压缩,表现为输出饱和或转速无力。

●速度环只在motor_dat.pos_cnt清零时更新,节拍约为1 ms。若motor_dat.pos_cnt长时间不变化,应检查EQEP2的UTO事件和QEP初始化。

● 第一次运行建议在空载或小负载下进行,先降低Speed_set幅值,再逐步增加转速或负载。若出现冲击,优先降低Torque_pidreg.Kp/Ki和Speed_pidreg.OutMax。

 

七、实验结果附图

图1 DTC空载阶跃 -2000 rpm比较

         

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

              

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

         

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

              

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