前言
坐标变换作为实现逆变器并网运行的第一步,实现三相静止坐标系(ABC坐标系)与两相旋转坐标系(αβ坐标系 )变换,即为通常所说的3s/2r变换。相关的代码在网上已经能够一搜一大把,而本博文的创新点在于对其中的代码进行解析,从而为读懂代码节约时间,以及最后全文完成整个系统的控制(DSP+FPGA)。
C语言实现
/*
* c_t.h
*coordinate transformation
*Created on: 2021年03月13日
*Author: Arvin
*/
#ifndef USER_c_t_H_
#define USER_c_t_H_
#include "C28x_FPU_FastRTS.h"
typedef struct{
float32 As;
float32 Bs;
float32 Cs;
float32 Theta;
float32 Alpha; //2s坐标系上的α轴分量
float32 Beta; //2s坐标系上的β轴分量
float32 Dr; //输出:2r坐标系上的d轴分量
float32 Qr; //输出:2r坐标系上的q轴分量
void (*calc)();
} c_t;
typedef c_t * c_t_handle;
/*结构体初始化*/
#define PARK_DEFAULTS { 0,0,\
0,0,\
0,0,\
0,0,\
(void(*)(Uint32))c_t_calc}
/*坐标变换函数声明*/
void ct_calc(c_t_handle);
#endif /* USER_c_t_H_ */
/*
* c_t.c
*coordinate transformation
*Created on: 2021年03月13日
*Author: Arvin
*/
#include "DSP2833x_Project.h"
#include "C28x_FPU_FastRTS.h"
#include <math.h>
#include "c_t.h"
/*坐标变换函数定义*/
void ct_calc(c_t * p)
{
//sqrt(2/3)=0.8164965809; sqrt(3)/2=0.8660254038
//clark变换
p->Alpha=0.8164965809*(p->As-p->Bs*0.5-p->Cs*0.5);
p->Beta=<