MPPT_INCC_I_IQ_MACRO 宏定义 - 最大功率点跟踪算法
//*********** 宏定义 ***********//
#define MPPT_INCC_I_IQ_MACRO(v)
if (v.mppt_enable==1)
{ /MPPT 模式使能/
if (v.mppt_first == 1)
{
v.ImppOut= *v.Ipv + v.StepFirst;
v.VpvOld=*v.Vpv;
v.IpvOld=*v.Ipv;
v.mppt_first=0;
}
else
{
v.DeltaV = v.Vpv-v.VpvOld ; / PV 电压变化 */
v.DeltaI = v.Ipv-v.IpvOld ; / PV 电流变化 /
/if(v.DeltaV <v.VpvH && v.DeltaV >-v.VpvL )/ / 容错范围内的 PV 电压变化不计算 */
/*v.DeltaV= 0; /
/ if(v.DeltaI <v.IpvH && v.DeltaI >-v.IpvL ) / / 容错范围内的 PV 电流变化不计算 */
/*v.DeltaI = 0; /
if(v.DeltaV >= 0) / DeltaV=0,处于 MPP 点 /
{
if(v.DeltaI !=0 ) / dI=0,处于 MPP 点 /
{
if ( v.DeltaI > 0 ) / 电流正在向 MPP 点增加 */
{v.ImppOut=v.Ipv-v.Stepsize;} / 增加电流值 */
else
{v.ImppOut=v.Ipv+v.Stepsize;} / 减小电流值 */
}
}
else
{
v.Cond = *v.Ipv/(v.Vpv); / 计算 Cond 值 /
v.IncCond = v.DeltaI/ v.DeltaV; / 计算 IncCond 值 /
if (v.IncCond != v.Cond) / 不处于 MPP 点 /
{
if (v.IncCond > (-v.Cond)) / 在 MPP 点左侧 */
{
v.ImppOut=v.Ipv-v.Stepsize; / 改变电流值 /
}
else / 在 MPP 点右侧 */
{
v.ImppOut=v.Ipv+v.Stepsize; / 改变电流值 /
}
}
}
v.ImppOut=(v.ImppOut<v.MinI)?v.MinI: v.ImppOut; / 限制最小 MPP 电流值 /
v.ImppOut=(v.ImppOut>v.MaxI)?v.MaxI: v.ImppOut; / 限制最大 MPP 电流值 */
v.VpvOld = *v.Vpv;
v.IpvOld = *v.Ipv;
}
} \
注:本代码为嵌入式领域中的 C 语言代码,主要用于控制太阳能电池板的最大功率点跟踪 (MPPT)。注释中的“PV”是“photovoltaic”的缩写,意为“光伏”。
原文地址: https://www.cveoy.top/t/topic/nNwd 著作权归作者所有。请勿转载和采集!