This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/CCStudio-C2000:PLL 问题

Guru**** 2535880 points
Other Parts Discussed in Thread: CONTROLSUITE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/600314/ccs-ccstudio-c2000-pll-problem

器件型号:CCSTUDIO-C2000

工具/软件:Code Composer Studio

我正在使用 C2000、我在使用 PLL 时遇到了问题、当我尝试锁定 PLL 时、有一个小的相移我无法消除。 我将生成一个锁定到交流电网电压的基准信号、然后从生成的基准中减去电网电压、由于基准较大、输出信号应与交流电网电压相移180。 但并非如此。 这里是我的与 PLL 相关的代码。  

#include "cla_adc_shared.h"
#include
#include "SPLL_1ph.h"

SPLL_1ph spll1;

#define PI_2 6.2831853
#define PWM_TBPRD 50000 //100MHz/PWM_TBPRD/2=TSW=1/1kHz
#define PWM_TBPRD_Half 25000
#define PWM_TBPRD_HI 100
#define PWM_TBPRD_LO 1250
#define OCP_LIMIT_HI 4000//2600 //此限制正常
#define OCP_LIMIT_LO 0//1500 //此限制应小于1800,问题仍然存在???


// PLL 的初始化
SPLL_1ph_init ((float)(60)、(float)(0.000025)、&spll1);

//PLL 到源电压
spll1.ac_input= VS_LPF;
SPLL_1ph_run (&spll1);
PLL_PHASE_=spll1.theta[0];
// PLL 到源极电压、振幅为1
PLL_VS = 1*sin ((PLL_PHASE/2)*(float) pi_2);
//负载电压参考
VOR=(float)(VM*sqrt (2)*PLL_VS);
VOREF=(0.545*VOREF+0.455*(浮点)VOR);
//APF 电压参考
//VSact =(float)(5.6*sqrt (2)*PLL_VS)-0.3;

VSact =(float)(19*0.00073242187*(float) VS_LPF)-0.36);
//Boundry 控制计算
Vd=(float)((VS_LPF)-(VOref));

提前感谢、

Radwa

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Radwa

    您的帖子已分配给工程师并正在调查中。

    谢谢、
    标记
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    www.ti.com/.../sprabt3.pdf

    请参阅上述应用手册、

    我们观察到良好的相关性、并且没有太多的相位偏移、应用手册中还包含 MATLAB 脚本、因此您可以自行进行实验、了解和解决您的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Manish:  

    感谢您的回复、我将按照 PDF 中的示例以及 C:\ti\controlSUITE\development_kits\TMDSSOLARUINVKIT_V100\MicroInv_F2803x 上的示例进行操作

    我遇到未解析的 PBS 错误、以下是错误和我包含的文件

    感谢你的帮助

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    可以有人回复吗?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Radwa

    很清楚、问题不在 saru inv 套件项目中、

    它是在您为使用 PLL 模块而创建的新项目中?

    从其中一个错误中,您似乎没有包括#include“Solar_iq.h”,因为它抱怨未定义功能。

    我还看到您已在项目中将源代码添加为包含路径、这将不起作用、也不符合说明。 我会从 include 路径中删除 soldar lib 的源文件夹
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Manish、您好!  

    感谢您的回复。

    是的,这是我创建的一个项目,我将  #include“Solar_iq.h”包含在内,所以这不是问题。 我已按照建议删除源文件。

    我包括了以下内容:

    #ifndef MATH_TYPE
    #define MATH_TYPE IQ_MATH

    #endif  

    错误消失了、但现在调用 PLL 函数不起作用

    spll1.ac_input =(long)(VS_LPF;

    SPLL_1ph_run (&spll1);

    它说"表达式必须具有整数类型"

    P.S 我现在正在使用此处发送的函数 u:  

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/118563/829261?tisearch=e2e-quicksearch&keymatch=unresolved%20symbols%20remain#829261

    按照 PDF 中的说明进行操作

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请仅使用 controlSUITE 中的代码,这是唯一支持的代码。

    并展示您有哪些错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Manish:

    感谢您的耐心和帮助

    我使用的是控制套件支持的代码、我在生成一个与输入信号匹配的正弦波时遇到了问题。 我认为我的问题是在 ISR 中调用函数。 我目前没有错误。 我将随附我的代码、如果您突出显示该错误、请执行此操作。

    P.S:在所附的 PDF u 中、有以下行:InvSine=spll2.sin<<3;//从 Q21转换到 Q24

    我不明白为什么它在最初定义 spll1时使用 spll2、以及信号移位的目的是什么。

    #ifndef _SPLL_1ph_H_
    #define _SPLL_1ph_H_
    #define SPLL_Q _IQ21
    #define SPLL_Qmpy _IQ21mpy
    typedef 结构{
    int32 b2_陷 波;
    int32 B1_陷 波;
    int32 B0_陷 波;
    int32 A2_陷 波;
    int32 A1_陷 波;
    }SPLL_NOTCE_COEFF;
    typedef 结构{
    Int32 B1_LF;
    Int32 B0_LF;
    Int32 A1_LF;
    }SPLL_LPF_COEff;
    typedef 结构{
    int32 ac_input;
    int32 theta[2];
    int32 cos[2];
    int32 sin [2];
    Int32 WO;
    int32 wn;
    SPLL_NOTCH_COEff NOTCH_COEff;
    SPLL_LPF_COEff LPF_COEff;
    int32 Upd[3];
    int32 ynote[3];
    int32 ylf[2];
    int32 delta_t;

    SPLL_1ph;
    void SPLL_1ph_init (int Grid_freq、long Delta_T、SPLL_1ph * spll、SPLL_LPF_Coeff LPF_coeff);
    void SPLL_1ph_bot_coeff_update (float delta_T、float wn、float C2、float C1、SPLL_1ph * spll_obj);
    内联 void SPLL_1ph_run_FUNC (SPLL_1ph * spll1);
    void SPLL_1ph_init (int Grid_freq、long Delta_T、SPLL_1ph * spll_obj、SPLL_LPF_Coeff LPF_coeff)

    spll_obj->Upd[0]= SPLL_Q (0.0);
    spll_obj->Upd[1]=SPLL_Q (0.0);
    spll_obj->Upd[2]=SPLL_Q (0.0);
    spll_obj->ynote[0]= SPLL_Q (0.0);
    spll_obj->ynote[1]=SPLL_Q (0.0);
    spll_obj->ynote[2]=SPLL_Q (0.0);
    spll_obj->ylf[0]= SPLL_Q (0.0);
    spll_obj->ylf[1]=SPLL_Q (0.0);
    spll_obj->sin [0]= SPLL_Q (0.0);
    spll_obj->sin [1]=SPLL_Q (0.0);
    spll_obj->cos[0]= SPLL_Q (0.999);
    spll_obj->cos[1]=SPLL_Q (0.999);
    spll_obj->theta[0]= SPLL_Q (0.0);
    spll_obj->theta[1]=SPLL_Q (0.0);
    spll_obj->wn=SPLL_Q (2*3.14* Grid _freq);
    环路滤波器的//系数
    spll_obj->LPF_coeff_B1_LF=LPF_coeff_B1_LF;
    spll_obj->LPF_coeff.B0_LF=LPF_coeff.B0_LF;
    spll_obj->LPF_coeff.a1_lf=LPF_coeff.a1_LF;
    spll_obj->delt_t=Delta_T;

    void SPLL_1ph_bot_coeff_update (float delta_T、float wn、float C2、float C1、SPLL_1ph * spll_obj)

    //注<c1 for the notch to work
    float x、y、z;
    X=(float)(2.0*C2*w*delta_T);
    y=(float)(2.0*c1*w*delta_T);
    z=(float)(w*delt_t*w*delt_T);
    spll_obj->bot_coeff.a1_bot=SPLL_Q (y-2);
    spll_obj->bot_coeff.a2_bot=SPLL_Q (z-y+1);
    spll_obj->bot_coeff.b0_bot=SPLL_Q (1.0);
    spll_obj->bot_coeff.b1_bot=SPLL_Q (x-2);
    spll_obj->bot_coeff.b2_bot=SPLL_Q (z-x+1);

    内联 void SPLL_1ph_run_FUNC (SPLL_1ph * spll_obj)

    //-------- //
    //相位检测//
    //-------- //
    spll_obj->Upd[0]= SPLL_Qmpy (spll_obj->ac_input、spll_obj->cos[1]);
    //-------- //
    //陷波滤波器结构//
    //-------- //
    spll_obj->ynote[0]-SPLL_Qmpy (spll_obj->bot_coeff.a1_b缺口、spll_obj->ybound[1])-SPLL_Qmpy (spll_eff ->bot_coeff.a2_botch、spll_obj ->yb1+sple_b1、sple_b1、sple_b1、splobj 1、splmp_b1、sple_b1、sple_b1、splobj、sple_b1、splobj、splobj、sple_b1、splobj、splobj、splobj、sple_1、splmp1、splobj、sple_1、splp1、splmp1、splobj、splp1、spl
    //将来更新 Upd 阵列
    spll_obj->Upd[2]=spll_obj->Upd[1];
    spll_obj->Upd[1]=spll_obj->Upd[0];
    ///---------------- //
    // PI 环路滤波器//
    ///---------------- //
    spll_obj->ylf[0]-SPLL_Qmpy (spll_obj->LPF_coeff.a1_LF、spll_obj->yf[1])+SPLL_Qmpy (spll_eff->LPF_coobj.b0_LF、spll_obj->splyb1]+l_qualeff (spl_obj)
    //更新数组以供将来使用
    spll_obj->ynote[2]=spll_obj->ynote[1];
    spll_obj->ynote[1]=spll_obj->ynote[0];
    spll_obj->ylf[1]=spll_obj->ylf[0];
    //------ //
    // VCO //
    //------ //
    spll_obj->w=spll_obj->w+spll_obj->ylf[0];
    //积分过程来计算正弦和余弦
    spll_obj->sin [0]= spll_obj->sin [1]+SPLL_Qmpy ((SPLL_Qmpy (spll_obj->delt_t、spll_obj->wo))、spll_obj->cos[1]);
    spll_obj->cos[0]=spll_obj->cos[1]-SPLL_Qmpy ((SPLL_Qmpy (spll_obj->delt_t、spll_obj->wo))、spll_obj->sin [1]);
    if (spll_obj->sin [0])>SPLL_Q (0.99)
    spll_obj->sin [0]= SPLL_Q (0.99);
    否则 if (spll_obj->sin [0]<SPLL_Q(-0.99))
    spll_obj->sin [0]= SPLL_Q (-0.99);
    if (spll_obj->cos[0])>SPLL_Q (0.99)
    spll_obj->cos[0]= SPLL_Q (0.99);
    否则 if (spll_obj->cos[0]<SPLL_Q(-0.99))
    spll_obj->cos[0]= SPLL_Q (-0.99);
    //计算 θ 值
    spll_obj->theta[0]=spll_obj->theta[1]+SPLL_Qmpy (SPLL_Qmpy (spll_obj->wo、SPLL_Q (0.159154943))、spll_obj->delt_t);
    if (spll_obj->sin [0])>SPLL_Q (0.0)&& spll_obj->sin [1]<=SPLL_Q (0.0))

    spll_obj->theta[0]= SPLL_Q (0.0);
    spll_obj->theta[1]=spll_obj->theta[0];
    spll_obj->sin [1]=spll_obj->sin [0];
    spll_obj->cos[1]=spll_obj->cos[0];


    #endif

    //主代码

    #include "IQmathLib.h"
    #include "SPLL_1ph.h"

    SPLL_1ph spll1;
    SPLL_LPF_Coeff spll_LPF_coef1;

    // PLL 的初始化
    SPLL_1ph_init (60、_IQ21 ((float)(0.00002))、&spll1、spll_LPF_coef1);
    C1=0.1;
    C2=0.00001;
    SPLL_1ph_note_coeff_update (((float)(0.00002))、(float)(pi_2*60*2)、(float) C2、(float) C1、&spll1);
    #define B0_LPF SPLL_Q (166.877556)
    #define B1_LPF SPLL_Q (-166.322444)
    #define A1_LPF SPLL_Q (-1.0)
    spll_LPF_coef1.b0_lf=B0_LPF;
    spll_LPF_coef1.b1_lf=b1_LPF;
    spll_LPF_coef1.a1_lf=a1_LPF;

    //ISR

    //使用角度值计算正弦值
    spll1.ac_input=(long) vS>3;// Q24至 Q21
    SPLL_1ph_run_FUNC (&spll1);
    VOref=(long) spll1.sin <3;

    非常感谢、

    Radwa

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我建议您查看 controlSUITE C:\ti\controlSUITE\development_kits\TMDSSOLARUINVKIT_V100\MicroInv_F2803x 中的示例、并比较两者之间的区别。

    遗憾的是、除非发现器件问题、否则调试客户代码不是我们可以帮助的一部分。