MEC项目代码注释[自用]

做MEC项目,用到了三相DQ,单相DQ,负序等,组内人员参考此坐标系的定义编写代码,以下文章节选自以下各位大神们.感谢各位作者的辛苦推导.

版权声明:本文为CSDN博主「JaySur」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jaysur/article/details/100673823

1.项目之前用的PLL为

D + D_+ D+ = s i n ∗ a l p h a − c o s ∗ b e t a sin*alpha - cos*beta sinalphacosbeta
Q + Q_+ Q+ = c o s ∗ a l p h a + s i n ∗ b e t a cos*alpha + sin*beta cosalpha+sinbeta
D − D_- D = − s i n ∗ a l p h a − c o s ∗ b e t a -sin*alpha - cos*beta sinalphacosbeta
Q − Q_- Q = c o s ∗ a l p h a + s i n ∗ b e t a cos*alpha + sin*beta cosalpha+sinbeta
得到如下:
C P a r k C_{Park} CPark = [ s i n θ − c o s θ c o s θ s i n θ ] \begin{bmatrix} sin\theta & -cos\theta\\ cos\theta & sin\theta \\ \end{bmatrix} [sinθcosθcosθsinθ] \qquad\qquad\qquad (1-1)

C P a r k − 1 C_{Park}^{-1} CPark1 = [ − s i n θ − c o s θ c o s θ s i n θ ] \begin{bmatrix} -sin\theta & -cos\theta\\ cos\theta & sin\theta \\ \end{bmatrix} [sinθcosθcosθsinθ] \qquad\qquad\qquad (1-2)

之前的代码

#if !SPLL_3PH_DDSRF
    int temp0 = 0;
    float32 zZ,zB,zC,AGCVal;

    //del zero sequence
    zZ  = (GridVoltAF + GridVoltBF + GridVoltCF)*S1DIV3;
//  zA  = GridVoltAF-zZ;
    zB  = GridVoltBF-zZ;
    zC  = GridVoltCF-zZ;

    //id=sqrt(2/3)*[ cos(wt)  cos(wt-pi*2/3)  cos(wt-pi*4/3)]*[a b c]'
    //iq=sqrt(2/3)*[-sin(wt) -sin(wt-pi*2/3) -sin(wt-pi*4/3)]*[a b c]'

    //3s/2s transfer
    GridVoltAlpha=  SQRT_2DIV3 *(GridVoltAF-zZ - 0.5f*zB - 0.5f*zC);    //,zA=(GridVoltAF-zZ)
    GridVoltBeta=   SQRT2_DIV2 *(zB - zC);                              //=
    //2s/2r transfer
    GridPLLVoltD= DCL_runDF22(&gridVoltPosiDFilter, GridVoltAlpha*PLLResCos + GridVoltBeta *PLLResSin);
    GridPLLVoltQ= DCL_runDF22(&gridVoltPosiQFilter, GridVoltBeta *PLLResCos - GridVoltAlpha*PLLResSin);

    AGCVal =1/(DCL_runDF22(&PLLAGCFilter, sqrt(GridPLLVoltD*GridPLLVoltD+GridPLLVoltQ*GridPLLVoltQ)));

    if(AGCVal>1/(5.0f*SQRT2*SQRT_3DIV2))        AGCVal=1/(5.0f*SQRT2*SQRT_3DIV2);           //5V
    if(AGCVal<1/(690*1.2f*SQRT2*SQRT_3DIV2))    AGCVal=1/(690*1.2f*SQRT2*SQRT_3DIV2);   //220V

    PllPiOutput =DCL_runPI(&PLLPICtrl, GridPLLVoltQ*AGCVal , 0);    //PID,AGC
    Theta=IntergrateBackEuler(PllPiOutput,Theta);       //Integration and get same phase as the voltage 0 degrees
    if(Theta > PI2) {Theta -= PI2;}                     //2*PI limiting
    if(Theta < 0)   {Theta += PI2;}                     //2*PI limiting
    gridFreq = DCL_runDF22(&bwForFreq, PllPiOutput *(1/PI2));

    temp0 = (int16)(Theta*PLL_STEP);                    //float convert to int
    temp0 %=  SINE_LOOKTABLE_LEN;                       //Take a remainder
    PLLResSin=-pCoseLookTab(temp0);
    PLLResCos= pSineLookTab(temp0);

    VoltTheta=Theta-PllCalibrPhase+(PI/2);              //Corrected to the lead of the PI/2 phase-locked angle
    if(VoltTheta > PI2) VoltTheta -= PI2;               //2*PI limiting
    if(VoltTheta < 0)   VoltTheta += PI2;               //2*PI limiting
    temp0 = (int16)(VoltTheta*PLL_STEP);                //float convert to int
    temp0 %=  SINE_LOOKTABLE_LEN;
    resSin=pSineLookTab(temp0);
    resCos=pCoseLookTab(temp0);

2.经过修改的坐标系:

电机控制中Clarke变换的等幅值变换和等功率变换
​​在这里插入图片描述
在这里插入图片描述
得到图形如下:
在这里插入图片描述
得到的
[ I d I q ] \begin{bmatrix} I_{d} \\ I_{q}\\\end{bmatrix} [IdIq] = [ I m ∗ c o s θ − I m ∗ s i n θ ] \begin{bmatrix} I_{m}*cos\theta \\ -I_{m}*sin\theta \\ \end{bmatrix} [ImcosθImsinθ] \qquad\qquad\qquad (2-3)
得到了SPLL.Theta锁相的角度 θ \theta θ即电网电压A相 ∗ c o s θ *cos\theta cosθ
在这里插入图片描述
重新生成VoltTheta=SPLL.Theta+ p i / 2 pi/2 pi/2,即电网电压A相 ∗ s i n θ *sin\theta sinθ

单相DQ的伪代码如下:

if(++VoltPrvPos >= VOLT_FUNDPOINT) VoltPrvPos=0; 	
VoltSlid[VoltPrvPos] = 外部PT经过模拟滤波器后经AD采样得到的值经过数字滤波器

VoltPos = VoltPrvPos+VoltLeadPoints; //超前校正指针,超前了360*VoltLeadPoints/VOLT_FUNDPOINT度
#define CAP_VOL_POINT				((PWMFREQUENCY/(50*4))*2*3)	//每周波的3/4
CapVoltPos = VoltPos+CAP_VOL_POINT; //电容电压一周波缓冲区指针,滞后270度,即超前90度

CapAlpha    = VoltSlid[VoltPos];
pCapBeta    = VoltSlid[CapVoltPos];

if(!StateFlag.VoltFilterEn)	//用上周波值校正电网电压滞后的相差
	pOutSrc=  VoltSlid[VoltPos];
else                   		//做电流前馈时,打算用dq校正电网电压滞后的相差,此时未校正
	pOutSrc=  VoltSlid[VoltPrvPos];
D=(beta *resSin + alpha*resCos)*(SQRT2_DIV2);    //D
Q=(beta *resCos - alpha*resSin)*(SQRT2_DIV2);    //Q

得到 a l p h a alpha alpha b e t a beta beta波形在这里插入图片描述
得到 a l p h a alpha alpha与电网电压A相 ∗ c o s θ *cos\theta cosθ同相,即在这里插入图片描述
得到DQ值

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
边缘计算(MEC)系统源代码是用于实现边缘计算架构的软件程序。边缘计算是一种将计算和存储资源离开云数据中心,部署到网络边缘(例如智能设备或边缘节点)的计算模式。MEC系统源代码的主要目标是实现边缘计算的功能,包括资源分配、任务调度与执行、数据处理和传输等。 MEC系统源代码通常包括以下几个重要部分: 1. 资源管理:这部分代码用于监控边缘设备节点上的计算、存储和网络资源,并进行资源分配和管理。它可以根据任务需求和设备状况,将任务分配给合适的边缘设备节点。 2. 任务调度与执行:这部分代码负责将任务分配给边缘设备节点,并监控任务的执行过程。它可以根据任务的优先级、设备性能和网络状况等因素,选择最佳的边缘设备节点来执行任务。 3. 数据处理和传输:这部分代码用于处理边缘设备节点上的数据,并负责将数据传输到云端或其他边缘设备。它可以对数据进行预处理和筛选,以减少传输带宽和延迟。 4. 安全与隐私保护:这部分代码用于确保边缘计算系统的安全性和隐私保护。它包括身份验证、数据加密、访问控制和安全审计等功能。 MEC系统源代码的编写需要掌握一些相关的编程语言和技术,如Java、Python、C++等。开发者需要了解边缘计算的架构原理和相关标准,如ETSI MEC架构和API规范。此外,开发者还需要考虑设备的硬件资源限制、网络状况和安全性等因素,以确保MEC系统的性能和稳定性。 总之,边缘计算MEC系统源代码是实现边缘计算功能的软件程序,它包括资源管理、任务调度与执行、数据处理和传输、安全与隐私保护等功能模块。其编写需要掌握相关的编程语言和技术,并考虑设备资源、网络状况和安全性等因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值