光伏逆變器MPPT算法嵌入式實(shí)現(xiàn):變步長(zhǎng)擾動(dòng)觀察法的定點(diǎn)數(shù)優(yōu)化
引言
在光伏發(fā)電系統(tǒng)中,最大功率點(diǎn)跟蹤(Maximum Power Point Tracking,MPPT)算法是提高光伏逆變器效率的關(guān)鍵技術(shù)。擾動(dòng)觀察法(Perturb and Observe,P&O)因其簡(jiǎn)單易實(shí)現(xiàn)而被廣泛應(yīng)用。然而,傳統(tǒng)的擾動(dòng)觀察法存在步長(zhǎng)固定的缺陷,可能導(dǎo)致跟蹤速度與精度難以兼顧。同時(shí),在嵌入式系統(tǒng)中,浮點(diǎn)數(shù)運(yùn)算會(huì)消耗大量資源,定點(diǎn)數(shù)優(yōu)化成為提升系統(tǒng)性能的重要手段。本文將探討變步長(zhǎng)擾動(dòng)觀察法的原理及其在光伏逆變器嵌入式實(shí)現(xiàn)中的定點(diǎn)數(shù)優(yōu)化方法。
擾動(dòng)觀察法原理與變步長(zhǎng)改進(jìn)
(一)傳統(tǒng)擾動(dòng)觀察法原理
傳統(tǒng)擾動(dòng)觀察法通過(guò)周期性地改變光伏陣列的輸出電壓(或電流),觀察輸出功率的變化,從而調(diào)整工作點(diǎn)向最大功率點(diǎn)移動(dòng)。若功率增加,則保持?jǐn)_動(dòng)方向;若功率減小,則改變擾動(dòng)方向。但固定步長(zhǎng)在快速變化的工況下可能跟蹤速度慢,在穩(wěn)定狀態(tài)附近又易產(chǎn)生振蕩。
(二)變步長(zhǎng)擾動(dòng)觀察法改進(jìn)
變步長(zhǎng)擾動(dòng)觀察法根據(jù)功率變化量動(dòng)態(tài)調(diào)整擾動(dòng)步長(zhǎng)。功率變化量大時(shí),采用大步長(zhǎng)以加快跟蹤速度;功率變化量小時(shí),采用小步長(zhǎng)以提高跟蹤精度。
假設(shè)光伏陣列的輸出功率為P,輸出電壓為V,功率變化量為ΔP=P(k)?P(k?1),電壓變化量為ΔV=V(k)?V(k?1)。步長(zhǎng)調(diào)整公式可表示為:
定點(diǎn)數(shù)優(yōu)化原理
在嵌入式系統(tǒng)中,浮點(diǎn)數(shù)運(yùn)算需要專門(mén)的浮點(diǎn)運(yùn)算單元,會(huì)增加硬件成本和運(yùn)算時(shí)間。定點(diǎn)數(shù)運(yùn)算通過(guò)將小數(shù)部分用整數(shù)表示,利用整數(shù)運(yùn)算來(lái)實(shí)現(xiàn)近似的小數(shù)運(yùn)算,能夠有效減少資源占用。
定點(diǎn)數(shù)表示方法為:Q
m,n
,其中m為整數(shù)位數(shù),n為小數(shù)位數(shù),數(shù)值x的定點(diǎn)數(shù)表示為x
fixed
=x×2
n
。
嵌入式實(shí)現(xiàn)與代碼示例
(一)系統(tǒng)初始化
在嵌入式系統(tǒng)中,首先需要對(duì)相關(guān)變量進(jìn)行初始化,并設(shè)置定點(diǎn)數(shù)表示格式。
c
// 定義定點(diǎn)數(shù)格式,假設(shè)Q12.4格式,即整數(shù)12位,小數(shù)4位
#define Q_FORMAT 4
#define INT_TO_FIXED(x) ((int32_t)((x) * (1 << Q_FORMAT)))
#define FIXED_TO_INT(x) ((x) >> Q_FORMAT)
#define FIXED_MUL(a, b) (((int64_t)(a) * (b)) >> Q_FORMAT)
// 初始化變量
int32_t voltage_fixed = INT_TO_FIXED(24.0); // 初始電壓,24V,定點(diǎn)數(shù)表示
int32_t power_fixed_prev = 0;
int32_t power_fixed_curr = 0;
int32_t delta_power_fixed = 0;
int32_t delta_voltage_fixed = 0;
int32_t step_size_fixed = INT_TO_FIXED(0.5); // 初始步長(zhǎng),0.5V
// 功率閾值設(shè)定
int32_t power_threshold1_fixed = INT_TO_FIXED(10.0); // P_th1,10W
int32_t power_threshold2_fixed = INT_TO_FIXED(2.0); // P_th2,2W
// 步長(zhǎng)系數(shù)
int32_t k1_fixed = INT_TO_FIXED(1.5);
int32_t k2_fixed = INT_TO_FIXED(1.0);
int32_t k3_fixed = INT_TO_FIXED(0.3);
(二)變步長(zhǎng)擾動(dòng)觀察法實(shí)現(xiàn)
c
void mppt_control() {
// 模擬獲取當(dāng)前功率(實(shí)際中通過(guò)采樣電路獲取)
power_fixed_curr = get_current_power(); // 獲取當(dāng)前功率的定點(diǎn)數(shù)表示
// 計(jì)算功率變化量
delta_power_fixed = power_fixed_curr - power_fixed_prev;
// 計(jì)算電壓變化量(假設(shè)每次擾動(dòng)固定電壓)
delta_voltage_fixed = step_size_fixed;
// 更新上一次功率值
power_fixed_prev = power_fixed_curr;
// 根據(jù)功率變化量調(diào)整步長(zhǎng)
if (ABS(delta_power_fixed) > power_threshold1_fixed) {
step_size_fixed = FIXED_MUL(k1_fixed, delta_voltage_fixed);
} else if (ABS(delta_power_fixed) > power_threshold2_fixed) {
step_size_fixed = FIXED_MUL(k2_fixed, delta_voltage_fixed);
} else {
step_size_fixed = FIXED_MUL(k3_fixed, delta_voltage_fixed);
}
// 調(diào)整電壓(根據(jù)擾動(dòng)方向)
if (delta_power_fixed > 0) {
voltage_fixed += step_size_fixed;
} else {
voltage_fixed -= step_size_fixed;
}
// 輸出調(diào)整后的電壓(定點(diǎn)數(shù)轉(zhuǎn)實(shí)際值用于控制)
float voltage_actual = FIXED_TO_FLOAT(voltage_fixed);
// 將voltage_actual用于控制光伏逆變器的輸出電壓
}
// 輔助函數(shù):定點(diǎn)數(shù)轉(zhuǎn)浮點(diǎn)數(shù)
float FIXED_TO_FLOAT(int32_t fixed) {
return (float)fixed / (1 << Q_FORMAT);
}
// 輔助函數(shù):計(jì)算絕對(duì)值(定點(diǎn)數(shù))
int32_t ABS(int32_t x) {
return (x < 0) ? -x : x;
}
結(jié)論
通過(guò)采用變步長(zhǎng)擾動(dòng)觀察法并對(duì)其進(jìn)行定點(diǎn)數(shù)優(yōu)化,能夠在光伏逆變器的嵌入式實(shí)現(xiàn)中有效提高M(jìn)PPT算法的跟蹤速度和精度,同時(shí)減少資源占用。在實(shí)際應(yīng)用中,開(kāi)發(fā)者可以根據(jù)具體硬件平臺(tái)的性能和光伏系統(tǒng)的特點(diǎn),進(jìn)一步調(diào)整定點(diǎn)數(shù)格式和步長(zhǎng)調(diào)整策略,以實(shí)現(xiàn)最佳的MPPT效果。