DSP空间矢量脉宽调制技术

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

第6章空间矢量脉宽调制技术

例1、CLARK变换的DSP实现

图CLARK变换实现波形图

/*---------------------------------------------------------------------------------------------------------------------------------------- CLARKE变换相关变量定义

----------------------------------------------------------------------------------------------------------------------------------------*/ typedef struct { float32 As; // 输入:A相定子电流

float32 Bs; // 输入:B相定子电流

float32 Alpha; // 输出:静止坐标系d轴定子电流

float32 Beta; // 输出:静止坐标系q轴定子电流

void (*calc)(); // 计算函数指针

} CLARKE;

typedef CLARKE *CLARKE_handle;

/*---------------------------------------------------------------------------------------------------------------------------------------- 定义CLARKE变换初始化参数

----------------------------------------------------------------------------------------------------------------------------------------*/ #define CLARKE_DEFAULTS { 0, \

0, \

0, \

0, \

(void (*)(Uint32))clarke_calc }

/*---------------------------------------------------------------------------------------------------------------------------------------- CLARKE变换函数原型CLARKE.C

----------------------------------------------------------------------------------------------------------------------------------------*/ void clarke_calc(CLARKE_handle);

#include "dmctype.h"

#include "clarke.h"

void clarke_calc(CLARKE *v)

{

v->Alpha = v->As;

v->Beta = (v->As + 2*v->Bs)*0.57735026918963; // 1/sqrt(3) = 0.57735026918963

}

例2、PARK变换的DSP实现

图PARK变换DSP实现坐标映射

/*---------------------------------------------------------------------------------------------------------------------------------------- PARK变换相关变量定义

----------------------------------------------------------------------------------------------------------------------------------------*/ typedef struct { float32 Alpha; // 输入:静止坐标系d轴定子变量

loat32 Beta; // 输入:静止坐标系q轴定子变量

float32 Angle; // 输入:转子角度(弧度)

float32 Ds; // 输出:旋转d轴定子变量(M轴)

float32 Qs; // 输出:旋转q轴定子变量(T轴)

void (*calc)(); // 函数指针

} PARK;

typedef PARK *PARK_handle;

/*---------------------------------------------------------------------------------------------------------------------------------------- PARK变换变量初始化参数

----------------------------------------------------------------------------------------------------------------------------------------*/ #define PARK_DEFAULTS { 0, \

0, \

0, \

0, \

0, \

(void (*)(Uint32))park_calc }

/*---------------------------------------------------------------------------------------------------------------------------------------- PARK函数原型

----------------------------------------------------------------------------------------------------------------------------------------*/ void park_calc(PARK_handle);

#include "dmctype.h"

#include "park.h"

extern float32 sin_tab[];

void park_calc(PARK *v)

{

float32 Cosine,Sine;

// 采用查表法

// (PI/2)/(2*PI) = 0.25

// ((PI/2)/(2*PI))*256 = 0.25*256 = 64

// ((PI/2)-2*PI)/(2*PI) = -0.75

// (((PI/2)-2*PI)/(2*PI))*256 = -0.75*256 = -192

// 查表发求解正弦

if (v->Angle+0.25 > 1.0)

{

Sine = sin_tab[(int16)(v->Angle*256)];

Cosine = sin_tab[(int16)(v->Angle*256) - 192];

}

else

{

Sine = sin_tab[(int16)(v->Angle*256)];

Cosine = sin_tab[(int16)(v->Angle*256) + 64];

}

v->Ds = v->Alpha*Cosine + v->Beta*Sine;

v->Qs = v->Beta*Cosine - v->Alpha*Sine;

}

相关文档
最新文档