//*********** 宏定义 ***********// #define MPPT_INCC_I_IQ_MACRO(v)
if (v.mppt_enable==1) \ // 如果MPPT模式使能 {
if (v.mppt_first == 1) \ // 如果是第一次运行MPPT模式 {
v.ImppOut= *v.Ipv + v.StepFirst; \ // 设置初始电流值 v.VpvOld=*v.Vpv; \ // 记录上一次的PV电压 v.IpvOld=*v.Ipv; \ // 记录上一次的PV电流 v.mppt_first=0; \ // 将第一次运行MPPT模式的标志位设为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”的缩写,意为“光伏”

Macro Definition #define MPPT_INCC_I_IQ_MACROv if vmppt_enable==1

原文地址: https://www.cveoy.top/t/topic/d85F 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录