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.

[参考译文] 具有 PSIM 仿真 C 块的 controlSUITE SPLL_3ph_SRF_x

Guru**** 2033340 points
Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE-DIGITALPOWER-SDK, TIDA-01606
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1187335/controlsuite-spll_3ph_srf_x-with-psim-simulation-c-blocks

主题中讨论的其他器件:controlSUITEC2000WARE-DIGITALPOWER-SDKTIDA-01606

您好!

我有一个问题 可能在这里得到解答(抱歉、PSIM 最近从 Altair 收购、他们缺乏这样 的问题的论坛)。  

我正在尝试为 controlSUITE Solar/v1.2中包含的*。h 文件生成 SimCoder C 块。 到目前为止,我在创建一些区块方面取得了一定的成功。

但是 、SPLL_3ph_SRF 块具有声明为向量 v_q[]的输入:

情况是、其 C 块中的 PSIM 只有"线"输入连接、我真的不知道如何将该信号作为矢量传递到该 C 块。 我甚至创建了 ABD-DQ0模块、认为它可以解决这个问题:

但是、由于该矢量 需要一个介于[-1、1]之间的值、我仍然会遇到错误:

现在、有两 个 ABD-DQ0_x 文件、正文件和负文件、但在 SolarLib.pdf 中、仅考虑 ABD-DQ0_Pos/Neg、当然、输出不是向量。

关于如何解决此问题的一些想法?

是否需要将一 个 ABD-DQ0_Pos 连接到 Pos/SPLL_3ph_SRF、然后将 一个 ABD-DQ0_Neg 连接到 neg/SPLL_3ph_SRF?  

谢谢你。

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

    您好!

    由于假期,专家不在办公室。 请在星期二之前回复。

    谢谢。

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

    您好、Jacobo、

    您能否使用最新版本的 C2000Ware-DigitalPower-SDK 中提供的更新库。 请告诉我您是否仍在遇到这些问题。

    此致、

    Ozino

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

    您好、Ozino、

    由于假期原因,我无法尝试您的建议,我很快会回来尝试您的建议结果。

    谢谢你。

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

    您好、Ozino、

    我现在又来讨论这个问题。

    我使用了 C2000Ware-DigitalPower-SDK 上的最新库、并意识到这些文件不包含可直接在 PSIM 上使用的宏。

    例如、使用旧文件的 ABD_DQ0宏、我成功地在 Altair PSIM 上创建了 SimCoder C Block、 (以下代码):

    秘书长的报告

    #ifndef ABC_DQ0_POS_F_H
    #define ABC_DQ0_POS_F_H

    //*** 正结构定义***** //
    typedef struct{float a;//输入:phase a 变量
    浮点 b;//输入:PHASE-b 变量
    float c;//输入:phase -c 变量
    float sin;//输入:网格角的 sin
    float cos;//输入:电网角的 cos
    float alpha;//内部:固定 alpha 轴变量
    float beta;//内部:静止 β 轴变量
    浮点 d;//输出:固定 d 轴变量
    float q;//输出:固定 q 轴变量
    float z;//输出:零序列变量
    }ABC_DQ0_POS_F;

    //*** 函数声明***** //
    void ABC_DQ0_POS_F_init (ABC_DQ0_POS_F*v);
    void ABC_DQ0_POS_F_FUNC (ABC_DQ0_POS_F*v);

    //*** 宏定义******** //
    #define ABC_DQ0_POS_F_MACRO (v)\
    V.alpha=(0.6666666667)*(V.A - 0.5*(V.B + v.c));\
    v.beta=(0.57735026913)*(v.b - v.c);\
    v.z =0.57735026913*(V.A + V.B + v.c);\
    V.d=v.alpha*v.cos + v.beta*v.sin;\
    V.q=-v.alpha*v.sin + v.beta*v.cos;


    #endif /* ABC_DQ0_POS_F_H_*/

    (二

    这是块的内部变量。

    现在、我尝试对 SPLL_SFR 的建议新文件执行相同的操作(以下代码):

    (二

    #ifndef __SPLL_3PH_SRF_H__
    #define __SPLL_3PH_SRF_H__

    //##########################
    //
    //宏定义
    //
    //##########################
    #ifndef C2000_IEEE754_Types
    #define C2000_IEEE754_Types
    #ifdef __TI_EABI
    typedef float 32_t;
    typedef double float64_t;
    else // TI COFF
    typedef float 32_t;
    typedef long double float64_t;
    #endif //_TI_EABI _
    #endif // c2000_IEEE754_Types

    //! \brief 定义环路滤波器的系数
    //!
    //! 详细说明环路滤波器系数
    //!
    typedef 结构{
    float32_t b1;
    float32_t b0;
    }SPLL_3PH_SRF_LPF_COEff;

    //! \brief 定义 SPLL_3PH_SRF 结构
    //!
    //! 详细说明此软件模块实现了软件锁相环
    //! 基于的同步基准帧
    //! 并网连接到三相电网
    //!
    typedef 结构{
    float32_t v_q[2];//!<旋转参考系 Q 轴值
    float32_t VQ;//! 已添加 var
    float32_t ylf[2];//!<用于环路滤波器输出的数据缓冲器
    float32_t fo;//!< PLL 的输出频率
    float32_t fn;//!<标称频率
    float32_t theta[2];//!<网格相位角
    float32_t delta_t;//!<调用模块时 ISR 速率的反转
    SPLL_3PH_SRF_LPF_COEff LPF_COEff;//!<环路滤波器系数
    } SPLL_3PH_SRF;

    //!
    静态内联 void SPLL_3PH_SRF_init (SPLL_3PH_SRF * spll_obj)

    spll_obj->v_q[0]=(float32_t)(0.0);
    spll_obj->v_q[1]=(float32_t)(0.0);

    spll_obj->ylf[0]=(float32_t)(0.0);
    spll_obj->ylf[1]=(float32_t)(0.0);

    spll_obj->fo =(float32_t)(0.0);
    spll_obj->fn =(float32_t)(50.0);//! "添加的值"

    spll_obj->theta[0]=(float32_t)(0.0);
    spll_obj->theta[1]=(float32_t)(0.0);

    spll_obj->delt_t =(float32_t)(20e-6);//! 在 SolarLib 数据处为50kHz 添加了值

    spll_obj->VQs =(float32_t)(0.0);//! 已添加初始值 Q


    #define B1 -166.322444
    #define b0 166.877556

    //*** 宏定义********* //
    #define SPLL_3PH_SRF_F_MACRO (spll_obj)\
    spll_obj.v_q[0]= spll_obj.Vqs;\
    spll_obj.yf[0]= spll_obj.yf[1]+(b0*spll_obj.v_q[0])+(b1*spll_obj.v_q[1]);\
    spll_obj.yf[1]=spll_obj.yf[0];\
    spll_obj.v_q[1]=spll_obj.v_q[0];\
    spll_obj.yf[0](spll_obj.yf[0])(float32_t)(200.0)?(float32_t)(200.0):spll_obj.ylf[0];\
    spll_obj.fo = spll_obj.fn+spll_obj.yf[0];\
    spll_obj.theta[0]= spll_obj.theta[1]+(spll_obj.fo * spll_obj.delta_t)*(float32_t)(2.0*3.1415926));\
    if (spll_obj.theta[0])(float32_t)(2.0*3.1415926))\
    {\
    spll_obj.theta[0]= spll_obj.theta[0]-(float32_t)(2.0*3.1415926);\
    }\ spll_obj.theta[1]=spll_obj.theta[0];\
    #endif

    //_SPLL_3PH_SRF_H_定义结束

    (二

    但我有几个错误、主要是提到我创建的变量"VQs"未定义(根据 PSIM)。

    您可能会注意到、PSIM 中没有太多可声明的内容。

    很抱歉、我没有那么熟练的编程技术、可能遗漏了一些定义。 您能给我一些解决此问题的提示吗?

     

    感谢你能抽出时间。

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

    您好、Jacobo、

    对延迟答复表示歉意。 我不熟悉 PSIM、但我想确认 、您在调用宏之前是否更新了 v_q[0]术语? 该库的旧版基于宏的版本要求这样做。 您是否能够利用 PSIM 模块中的 C 函数例程? 请参阅有关如何调用和初始化此模块的 API 文档: https://dev.ti.com/tirex/explore/node?node=A__AK-ZgXfLkBjr9Pafs40lNw__digital_power_c2000ware_sdk_software_package__5C6SEVO__LATEST&placeholder=true 

    您还可以参考 TIDA-01606来了解如何在应用中调用此库。

    此致、

    Ozino

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

    你好,Ozino,最后我让这个东西起作用了!!

    互联网上有很多搜索、我在这里和那里都发现了一些拼写错误...

    让我从 SolarLib.pdf (C28x 太阳能库 v1.2)开始:  

    除了上述代码缺少一些数据外、文本中还有以下拼写错误:

    根据 Excel 计算器:

    上述值不匹配。

    建议稳定时间应为30msec、这是错误的;要获得正确的 b0 = 166.877556和 b1 =-166.322444值、则应为40msec。

    将计算器上的稳定时间更改为40msec 还会给出文本中提到的自然频率(119.0144)和 Kp (166.7619)的正确值;但文本上的 ki 对于40msec (甚至30msec)仍然是错误的。 Ki (30msec)= 25181.22、Ki (40msec)= 14164.44

    现在 是  PSIM 上的 SPLL_3PH_SRF_F.h、

    我修改了新编码以适应 PSIM 上的简化 C 块(抱歉、我无法使用 SimCoder C 块)、下面是列表:

    //########################################################################################################################
    //
    //宏定义
    //
    //########################################################################################################################
    #ifndef C2000_IEEE754_Types
    #define C2000_IEEE754_Types
    #ifdef __TI_EABI
    typedef float 32_t;
    typedef double float64_t;
    #else //< TI COFF
    typedef float 32_t;
    typedef long double float64_t;
    #endif //<_TI_EABI _
    #endif //< C2000_IEEE754_Types

    //
    //
    //! \brief 定义环路滤波器的系数
    //!
    //! 详细说明环路滤波器系数
    //!
    // float32_t b1;
    // float32_t b0;

    //
    //
    //! \brief 定义 SPLL_3PH_SRF 结构
    //!
    //! 详细说明此软件模块实现了软件锁相环
    //! 基于的同步基准帧
    //! 与三相电网的电网连接
    //!
    float32_t v_q[2];//!<旋转参考系 Q 轴值
    float32_t ylf[2];//!<用于环路滤波器输出的数据缓冲器
    float32_t fo;//!< PLL 的输出频率
    float32_t fn;//!<标称频率
    静态浮点 θ[2];//!<网格相位角
    float32_t delta_t;//!<调用模块时 ISR 速率的反转

    //
    //
    //! 简要初始化 SPLL_3PH_SRF 模块
    //!
    //! \param grid_freq 电网频率
    //! \param delta_t 1/调用 PLL 例程的频率
    //! \param * spll_obj SPLL_3PH_SRF 结构
    //! \无返回
    //!
    v_q[0]=(float32_t)(0.0);
    v_q[1]=(float32_t)(0.0);

    ylf[0]=(float32_t)(0.0);
    ylf[1]=(float32_t)(0.0);

    fo =(float32_t)(0.0);
    fn =(float32_t)(grid_freq);

    Theta[0]=(float32_t)(0.0);
    // theta[1]=(float32_t)(0.0);

    Δ t =(float32_t)(Δ);

    //
    //
    //! \brief 运行 SPLL_3PH_SRF 模块
    //!
    //! 电网电压的\param v_q Q 分量
    //! \param * spll_obj SPLL_3PH_SRF 结构
    //!

    //
    //使用网格值更新 v_q[0]
    //
    V_q[0]= x1;//!< PSIM 的输入声明

    //
    //环路滤波器
    //
    ylf[0]= ylf[1]
    +(b0 * v_q[0])
    +(B1 * v_q[1]);
    ylf[1]= ylf[0];
    v_q[1]= v_q[0];

    ylf[0]=(ylf[0]>(float32_t)(200.0))? (float32_t)(200.0):ylf[0];
    //
    // VCO
    //
    fo = fn + ylf[0];

    Theta[0]= theta[1]+
    ((fo * delta_t)*
    (float32_t)(2.0*PI));
    if (theta[0]>(float32_t)(2.0*PI))

    Theta[0]= theta[0]-(float32_t)(2.0*PI);

    Theta[1]= theta[0];
    Y1 = theta[0];//!< PSIM 的输出声明

    //########################################################################################################################

    声明的变量为 PI50kHz (20e-6)的增量、grid-freq 50;b1 b0 (之前提到的值)。

    -在列表中可以看到、必须将 theta[2]声明为静态浮点值(浮点值根本不起作用)、为什么?

    也不应初始化 theta[1],否则 PSIM 将返回错误的信号图。

    在 PSIM 上运行后、该模块仍然无法锁定信号:

    我注意到在 PSIM 教程- PLL 和增强型 PLL 块的实现和设计中、传统三相 PLL 的下图:

    q d 的绝对值之间有一个分频器、因此我将其添加到了仿真原理图中:

    这就是结果,现在它就像魅力一样!!:

    它会锁定不同频率的信号、甚至是相位变化的信号。 我想知道、在完整编码中、main.c 是否是这个除法(或某种操作)、它将作为这个仿真执行。

    无论如何、我也会将此 SRF 用于 Sogi、然后在我的设计中实现它。

    我们欢迎您的反馈。

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

    您好、Jacobo、

    感谢您的详细反馈。 很高兴听到您能够在应用程序中利用 SPLL 库。 我注意到了您对文档和 Excel 电子表格之间不匹配的反馈。 我已继续、并提出了在我们的下一个 C2000WARE-DIGITALPOWER-SDK 版本中修复该问题的请求。

    至于分压器、让我交叉检查我们的参考设计、看看是否在利用它。 我还将与我们的专家之一核实 、以获取他们的意见。

    此致、

    Ozino

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

    好的、我会等待几天、但除此之外、我想现在所有这些都在正常工作、案例可以关闭。

    感谢您的支持