DSP空间矢量脉宽调制技术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}