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 最近从 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 的输出声明
//########################################################################################################################
声明的变量为 PI、50kHz (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
好的、我会等待几天、但除此之外、我想现在所有这些都在正常工作、案例可以关闭。
感谢您的支持