TI公司官网源代码基于TMS320F2812的永磁同步电动机空间矢量控制的算法实现

  • 格式:docx
  • 大小:25.49 KB
  • 文档页数:29

下载文档原格式

  / 35
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第7章基于TMS320F2812的永磁同步电动机控制例1、空间矢量算法实现

SVGEN_DQ对象结构体定义

typedef struct {

_iq Ualpha;//输入:轴参考电压

_iq Ubeta;

_iq Ta;

_iq Tb;

_iq Tc;

} SVGENDQ;

typedef SVGENDQ *SVGENDQ_handle;

SVGEN_DQ模块调用方法:

main(){}

void interrupt periodic_interrupt_isr(){svgen_dq

1.Ualpha = Ualpha1;

svgen_dq

1.Ubeta = Ubeta1;

svgen_dq

2.Ualpha = Ualpha2;

svgen_dq

2.Ubeta = Ubeta2;

1.calc(&svgen_dq1); svgen_dq

2.calc(&svgen_dq2); Ta1 = svgen_dq

1.Ta;

Tb1 = svgen_dq 1.Tb;

Tc1 = svgen_dq

1.Tc;

Ta2 = svgen_dq

2.Ta;

Tb2 = svgen_dq 2.Tb;

Tc2 = svgen_dq

2.Tc;

}//提供输入参数:svgen_dq1

//提供输入参数:svgen_dq1

//提供输入参数:

//提供输入参数:

svgen_dq2

//调用函数模块svgen_dq1 //调用函数模块svgen_dq2 //访问运算结果svgen_dq1 //访问运算结果svgen_dq1 //访问运算结果svgen_dq1 //访问运算结果svgen_dq2 //访问运算结果svgen_dq2 //访问运算结果svgen_dq2 //输入:轴参考电压

//输出:

参考相位a开关函数

//输出:

参考相位b开关函数

//输出:

参考相位c开关函数

函数指针

void (*calc)(); //

为进一步了解空间矢量算法的基本原理,下面给出空间矢量模块的源代码:

void svgendq_calc(SVGENDQ *v){_iq Va,Vb,Vc,t1,t2;

_iq sector = 0;/*设相位置(sector)等于Q0*/

/*逆clarke变换*/

Va = v->Ubeta;

Vb = _IQmpy(_IQ(-

0.5),v->Ubeta) + _IQmpy(_IQ(

0.),v->Ualfa);/*

0. = sqrt

(3)/2 */Vc = _IQmpy(_IQ(-

0.5),v->Ubeta) - _IQmpy(_IQ(

0.),v->Ualfa);/*

0. = sqrt

(3)/2 *//* 60度sector的确定*/

if (Va>_IQ

(0))

sector = 1;

if (Vb>_IQ

(0))

sector = sector + 2;

if (Vc>_IQ

(0))

sector = sector + 4;

/* X,Y,Z (Va,Vb,Vc)的计算*/

Va = v->Ubeta;/* X = Va */

Vb = _IQmpy(_IQ(

0.5),v->Ubeta) + _IQmpy(_IQ(

0.),v->Ualfa);/* Y = Vb */

Vc = _IQmpy(_IQ(

0.5),v->Ubeta) - _IQmpy(_IQ(

0.),v->Ualfa);/* Z = Vc */

if (sector==1)/* sector 1: t1=Z and t2=Y (abc ---> Tb,Ta,Tc) */{t1 = Vc;

t2 = Vb;

v->Tb = _IQmpy(_IQ(

0.5),(_IQ

(1)-t1-t2));/* tbon = (1-t1-t2)/2 */

v->Ta = v->Tb+t1;/* taon = tbon+t1 */

v->Tc = v->Ta+t2;/* tcon = taon+t2 */}else if (sector==2)/* sector 2: t1=Y and t2=-X (abc ---> Ta,Tc,Tb) */{t1 = Vb;

t2 = -Va;

v->Ta = _IQmpy(_IQ(

0.5),(_IQ

(1)-t1-t2));/* taon = (1-t1-t2)/2 */

v->Tc = v->Ta+t1;/* tcon = taon+t1 */

v->Tb = v->Tc+t2;/* tbon = tcon+t2 */}else if (sector==3)/* sector 3: t1=-Z and t2=X (abc ---> Ta,Tb,Tc) */{t1 = -Vc;

t2 = Va;

v->Ta = _IQmpy(_IQ(

0.5),(_IQ

(1)-t1-t2));/* taon = (1-t1-t2)/2 */

v->Tb = v->Ta+t1;/* tbon = taon+t1 */

v->Tc = v->Tb+t2;/* tcon = tbon+t2 */}else if (sector==4)/* sector 4: t1=-X and t2=Z (abc ---> Tc,Tb,Ta) */{t1 = -Va;

t2 = Vc;

v->Tc = _IQmpy(_IQ(

0.5),(_IQ

(1)-t1-t2));/* tcon = (1-t1-t2)/2 */

v->Tb = v->Tc+t1;/* tbon = tcon+t1 */

v->Ta = v->Tb+t2;/* taon = tbon+t2 */}else if (sector==5)/* sector 5: t1=X and t2=-Y (abc ---> Tb,Tc,Ta) */{t1 = Va;

t2 = -Vb;

v->Tb = _IQmpy(_IQ(

0.5),(_IQ

(1)-t1-t2));/* tbon = (1-t1-t2)/2 */

v->Tc = v->Tb+t1;/* tcon = tbon+t1 */