锁相环
原理
众所周知,三相电的锁相环只需要进行Clark变换和Park变换得到dq分量,进行PI运算就可以轻松的完成锁相,这里就不简述Clark变换和Park变换了,网上一搜一大把资料,在此简单阐述
锁相环的原理:
锁相环就是讲ABC三相通过clark变换和Park变换转换成dq分量,通过dq来进行锁相,锁相环框图如下
clark变换:将abc 变换到 静止 的αβ 坐标系下。
设ABC三相电压为:
通过U=x+ac+a^c变换合成矢量为
如图所示,将它们投影到αβ轴上,有
Clark transformation 3s−2s(仅考虑三相三线制情形,零序分量被忽略,详细推导可参考陈伯时《电力拖动自动控制系统-运动控制系统》第三版 P263)
Park变换:将abc 变换到 旋转 的 dq 坐标系下
clark变换到park变换
变换矩阵为
仿真
源码
主要代码
//
// Included Files
//
#include <math.h>
#include "Interrupt.h"
/* ABC电压值变量定义 */
FLOAT32 g_f32Ua;
FLOAT32 g_f32Ub;
FLOAT32 g_f32Uc;
typedef struct STRUCT_SPLL
{
/* input data */
FLOAT32 g_f32VoltD;
FLOAT32 g_f32VoltQ;
FLOAT32 g_f32Theta;
/* output data */
FLOAT32 g_f32SinWT;
FLOAT32 g_f32CosWT;
/* parameter */
FLOAT32 g_f32VoltAlpha;
FLOAT32 g_f32VoltBeta;
PI_CONTROL_STRUCT PllLoop;
}ST_SPLL;
/* 锁相环PI控制 */
#define PLL_MAX_OUT 2000
#define PLL_MIN_OUT -2000
#define PLL_KP 48.0 * 2.0//12 // 0.3
#define PLL_KI 0.1 * 2.0//0.04 // 0.001
ST_SPLL g_stSpll = {
0};
UINT16 g_u16VoltageIndex = 0;
UINT16 g_u16SendFlag = 0;
FLOAT32 g_f32VoltageSample[3] = {
0};
void ISR_APP_ThreePhaseSPLL(ST_SPLL *t_spll, const FLOAT32 *VABC, UINT32 Ts);
//中断频率50k
#pragma CODE_SECTION(ISR_InterruptTask