TI公司官网源代码基于TMS320F2812的永磁同步电动机空间矢量控制的算法实现
- 格式:docx
- 大小:25.49 KB
- 文档页数:29
第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 */