三相锁相环仿真及其代码验证,附C语言源码

  • 锁相环
    • 原理
    • 仿真
    • 源码

锁相环

原理

众所周知,三相电的锁相环只需要进行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.001ST_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, ".TI.ramfunc");
__interrupt void ISR_InterruptTask(void)
{g_u16VoltageIndex++;if(g_u16VoltageIndex > 1000)g_u16VoltageIndex = 0;g_f32VoltageSample[0] = sinf(2 * M_PI * 100 / 1000 * g_u16VoltageIndex);//模拟输出A相电压,可由adc采样值替换g_f32VoltageSample[1] = sinf(2 * M_PI * 100 / 1000 * g_u16VoltageIndex - 2*M_PI/3.0f);//模拟输出B相电压g_f32VoltageSample[2] = sinf(2 * M_PI * 100 / 1000 * g_u16VoltageIndex + 2*M_PI/3.0f);//模拟输出C相电压g_f32Ua = g_f32VoltageSample[0];g_f32Ub = g_f32VoltageSample[1];g_f32Uc = g_f32VoltageSample[2];ISR_APP_ThreePhaseSPLL(&g_stSpll, g_f32VoltageSample, 1000);//锁相环函数}void APP_InitSpll(ST_SPLL *t_spll)
{t_spll->g_f32VoltD = 0;t_spll->g_f32VoltQ = 0;t_spll->g_f32Theta = 0;/* output data */t_spll->g_f32SinWT = 0;t_spll->g_f32CosWT = 0;/* parameter */t_spll->g_f32VoltAlpha = 0;t_spll->g_f32VoltBeta = 0;t_spll->PllLoop.m_u16CtrFlg = INCREMENTAL_CONTROL;     /* 增量式PI控制标志  */t_spll->PllLoop.m_f32Ref = 0;                           /* 给定                       */t_spll->PllLoop.m_f32Fed = 0;                         /* 反馈                       */t_spll->PllLoop.m_f32Err = 0;                         /* 误差                       */t_spll->PllLoop.m_f32ErrPre = 0;                      /* 前拍误差                */t_spll->PllLoop.m_f32Kp = PLL_KP;                      /* 比例参数                 */t_spll->PllLoop.m_f32Ki = PLL_KI;                     /* 积分参数                 */t_spll->PllLoop.m_f32Acc = 0;                         /* 积分累加               */t_spll->PllLoop.m_f32LoopOut = 0;                       /* 输出                       */t_spll->PllLoop.m_f32KiMaxACC = PLL_MAX_OUT;              /* 积分累加最大限幅  */t_spll->PllLoop.m_f32KiMinACC = PLL_MIN_OUT;             /* 积分累加最小限幅  */t_spll->PllLoop.m_f32MaxOutput = PLL_MAX_OUT;            /* 输出最大限幅           */t_spll->PllLoop.m_f32MinOutput = PLL_MIN_OUT;             /* 输出最小限幅           */
}
#pragma CODE_SECTION(ISR_APP_ABC2ab, ".TI.ramfunc");
void ISR_APP_ThreePhaseSPLL(ST_SPLL *t_spll, const FLOAT32 *VABC, UINT32 Ts)
{FLOAT32 t_f32TempValue = 0;t_spll->g_f32VoltAlpha = 0.6666667f * (VABC[0]-(0.5f*VABC[1])-(0.5*VABC[2]));//Clark变换t_spll->g_f32VoltBeta = 0.6666667f*(((sqrtf(3)/2)*VABC[1])-((sqrtf(3)/2)*VABC[2]));#if 0                       //开环theta = 2 * M_PI * 50;#endif//Park变换t_spll->g_f32VoltD = t_spll->g_f32CosWT * t_spll->g_f32VoltAlpha + t_spll->g_f32SinWT * t_spll->g_f32VoltBeta;t_spll->g_f32VoltQ = -t_spll->g_f32SinWT * t_spll->g_f32VoltAlpha + t_spll->g_f32CosWT * t_spll->g_f32VoltBeta;//锁相环环路计算t_spll->PllLoop.m_f32Ref = t_spll->g_f32VoltD;//0;t_spll->PllLoop.m_f32Fed = 0;//t_spll->g_f32VoltD;t_spll->PllLoop.m_f32Err = t_spll->PllLoop.m_f32Ref - t_spll->PllLoop.m_f32Fed;t_f32TempValue = t_spll->PllLoop.m_f32Ki * t_spll->PllLoop.m_f32Err;                              /* 积分计算  */t_f32TempValue += t_spll->PllLoop.m_f32Kp * (t_spll->PllLoop.m_f32Err - t_spll->PllLoop.m_f32ErrPre);          /* 比例计算  */t_spll->PllLoop.m_f32LoopOut += t_f32TempValue;/* 增量运算  */t_spll->PllLoop.m_f32ErrPre = t_spll->PllLoop.m_f32Err;if (t_spll->PllLoop.m_f32LoopOut > t_spll->PllLoop.m_f32MaxOutput)                                    /* 输出限幅   */{t_spll->PllLoop.m_f32LoopOut = t_spll->PllLoop.m_f32MaxOutput;}if (t_spll->PllLoop.m_f32LoopOut < t_spll->PllLoop.m_f32MinOutput){t_spll->PllLoop.m_f32LoopOut = t_spll->PllLoop.m_f32MinOutput;}t_spll->g_f32Theta += (t_spll->PllLoop.m_f32LoopOut / Ts);//环路输出即为w,需要t积分if(t_spll->g_f32Theta > (2 * M_PI)){t_spll->g_f32Theta = t_spll->g_f32Theta - (2 * M_PI);}if(t_spll->g_f32Theta < 0){t_spll->g_f32Theta = t_spll->g_f32Theta + (2 * M_PI);}t_spll->g_f32SinWT = sinf(t_spll->g_f32Theta);t_spll->g_f32CosWT = cosf(t_spll->g_f32Theta);
}//
// End of File
//

三相锁相环仿真及其代码验证,附C语言源码相关推荐

  1. QQ自动点赞PHP源码_QQ好友批量回名片赞工具-QQ自动点赞附易语言源码V1.0电脑版PC端回赞-西西软件下载...

    QQ自动点赞附易语言源码是一款电脑版QQ好友批量回名片赞工具下载附易语言源码和导入QQ号码方,PC端QQ回赞和源码,然后打开软件导入QQ号码即可批量赞了,每个好友可以赞10次,同时附带了源码可以编译成 ...

  2. 远程服务器批量管理v1.6(附易语言源码)

    介绍: 使用第三方远程工具的时候,最担心的问题就是密码泄露,这款软件提供了易语言源代码,可以放心使用! 同时也给大家提供了成品软件,无需懂代码,无需编译,下载即用! 远程服务器管理工具成品+源码是一款 ...

  3. 0基础学会 端口复用(内附C语言源码)

    一.端口复用最常用的用途是: 1.防止服务器重启时之前绑定的端口还未释放: 2.程序突然退出而系统没有释放端口 二.相关API #include <sys/types.h> #includ ...

  4. 0基础学会 守护进程(内附C语言源码)

    1.当父进程创建子进程的时候,默认子进程与父进程同属一个进程组,可以用kill -SIGKILL -进程组id(负数)来将整个进程组的id全部杀死. 2.组长进程不能创建会话. 3.setsid 函数 ...

  5. 备忘录模式详解 (附java语言源码)

    备忘录模式(Memento Pattern): 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保持该状态,这样以后就可以将该对象恢复到保存的状态.(Without violating ...

  6. 在simulink中采用模块搭建了基于双二阶广义积分器的三相锁相环,整个仿真环境完全离散化

    三相锁相环. 在simulink中采用模块搭建了基于双二阶广义积分器的三相锁相环,整个仿真环境完全离散化,运行时间更快,主电路与控制部分以不同的步长运行,更加贴合实际. 基于双二阶双二阶广义积分器的三 ...

  7. 基于双二阶广义积分器的三相锁相环。

    基于双二阶广义积分器的三相锁相环. 在simulink中采用模块搭建了三相锁相环,整个仿真环境完全离散化. 锁相结果如下图所示,其中黑色的是电网相位.

  8. 基于双二阶广义积分器的三相锁相环 在simulink中采用模块搭建了三相锁相环

    基于双二阶广义积分器的三相锁相环. 在simulink中采用模块搭建了三相锁相环,整个仿真环境完全离散化. 锁相结果如下图所示,其中黑色的是电网相位. ID:9330672932353743

  9. 我的CSDN笔记总索引(阅读量降序,代码自动遍历生成HTML5源码)

    Python代码用"命令容器"方法os.system(),调用Linux命令行工具crul获取CSDN博文页面源码,Python内置re正则解析出博文笔记信息,按阅读量降序模块输出 ...

  10. 多智能体系统——竞争网络下异构多智能体系统的分组一致性问题 Group consensus of heterogeneous multi-agent system (附论文链接+源码Matlab)

    多智能体系统--竞争网络下异构多智能体系统的分组一致性问题 (附论文链接+源码Matlab) Yu F, Ji L, Yang S. Group consensus for a class of he ...

最新文章

  1. 人工智能正在激活互联网类脑系统,2018年,云脑将成为新热点
  2. 《计算机科学概论》—第2章2.2节位置记数法
  3. Android 开发 Activity里获取View的宽度和高度 转载
  4. NOVO Nordisk IT SOP List
  5. LeetCode之Search Insert Position
  6. 事务控制 新增后修改_分布式事务科普(初识篇)
  7. python qt信号在qml 的使用_Python和C++混合使用QML开发GUI
  8. 心心念念的安卓简单和多功能计算器来了
  9. win 7 虚拟机VMware Tools安装
  10. java随机数生成字母_java生成随机数字和字母组合
  11. 数学建模神经网络模型,数学建模神经网络算法
  12. 单片机做计算机乘法,基于单片机实现的四则运算计算器.DOC
  13. vscode无法识别头文件“cannot open source file “gnu/stubs-64.h“”
  14. access四舍五入取整round_access把浮点字段取整是什么函数
  15. 你的人生你定义!享你所想,无惧冒险
  16. 移动桌面位置,再也不怕C盘爆满!
  17. 如何使用S32DS进行Debug刷写
  18. 5、frida进阶-Android逆向之旅---Hook神器家族的Frida工具使用详解
  19. 免费开源IM聊天项目,附截图github源码,启动简单
  20. maya软件需要计算机配置,【答疑】Maya软件对电脑的配置要求 - 视频教程线上学...

热门文章

  1. 最大流 Ford-Fulkerson 算法
  2. Tabular Editor学习笔记_3:警告标志及解决办法
  3. ftp客户端使用详细说明【linux和windows】
  4. 信息化建设成功的重要因素
  5. 一文全记录斐讯K3刷机+打印服务器+私人云盘+frp内网穿透+ftp远程上传下载
  6. ASCLL码表完整版
  7. iptables 性能 测试
  8. MySQL字符串拼接的两种方式
  9. MMKV_浅析 - MMKV 1.1.1
  10. 入门程序员如何写博客