E32-SolarCharger の PWM制御 ーベランダ太陽光発電所への道4ー
さてこれまでソーラー充電コントローラの基本機能を学んできましたが、いよいよ発電開始!です。
実際にソーラーパネルとバッテリをつないで動かしていきましょう。
目次
構成
ソーラーパネルと鉛蓄電池をコントローラに接続します。今回は負荷はつなげていません。
コントローラと蓄電池の+側の配線には3Aヒューズを挿入しています。
部品
- ソーラー充電コントローラ E32-SolarCharger
回路図は以下
http://indoor.lolipop.jp/IndoorCorgiElec/E32-SolarCharger/E32-SolarCharger-Schematic.pdf
- ソーラーパネル 12W
- 鉛蓄電池 12V12Ah
- インラインヒューズ
PWM充電方式
以下のサンプルコードを使用しました。
http://indoor.lolipop.jp/IndoorCorgiElec/E32-SolarCharger/PWM.zip
システム概要
電力モニタ INA219でバッテリの電圧と電流を観測して、スイッチング回路のスイッチングパルス幅を制御(パルス幅変調 PWM)します。
電流はINA219のIN+, IN-ピン間の抵抗0.01Ωの電圧降下で測定します。今回は負荷は接続しないので観測される電流はバッテリへのチャージ電流となります。
負荷が接続されてチャージ電流より負荷電流のほうが大きくなると観測電流は負の値となります。
サンプルコードPWM制御部
以下がサンプルコードのPWM制御部の記述です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
// Battery control const float vBatTarget = 13.8; // バッテリー充電電圧の目標値 const float vBatG1 = 0.2; // 目標値+/-0.2Vに収まるようにPWMを調整 const float vBatG2 = 0.8; // 大きく外れた場合は調整幅を大きくする const float cBatTarget = 1; // バッテリー充電電流の目標値 const float cBatG1 = 0.1; // 目標値+/-0.1Aに収まるようにPWMを調整 const float cBatG2 = 0.5; // 大きく外れた場合は調整幅を大きくする const uint8_t pinPWM = 32; ledcSetup(0, 3000, 8); // PWM 3kHz, 8bit(0-256) ledcAttachPin(pinPWM, 0); // PWMピン割り当て // PWM制御 void pwmControl(){ float vBat = ina219.vbus(); // バッテリー電圧取得 float cBat = ina219.current(); // バッテリー電流取得 // 目標の電圧、電流に応じてPWMデューティーを変更 if(vBat > vBatTarget + vBatG2 || cBat > cBatTarget + cBatG2){ if(pwm<=10){ pwm = 0; }else{ pwm-=10; } }else if(vBat > vBatTarget + vBatG1 || cBat > cBatTarget + cBatG1){ if(pwm>=1){ pwm-=1; } }else if(vBat < vBatTarget - vBatG2 && cBat < cBatTarget - cBatG2){ if(pwm>=246){ pwm = 256; }else{ pwm+=10; } }else if(vBat < vBatTarget - vBatG1 && cBat < cBatTarget - cBatG1){ if(pwm<=255){ pwm+=1; } } ledcWrite(0, pwm); |
PWM信号はESP32のledcxxxx関数で生成します。ここではESP32のIO32ピンから周波数3kHzのスイッチング信号を出力します。パルス幅は8ビット(0-255)で指定します。
INA219でバッテリの電圧と電流を観ながらパルス幅をコントロールします。バッテリ電圧目標値は13.8V、チャージ電流 1Aとしています。
- バッテリ電圧が14.6Vより大きいか、バッテリチャージ電流が1.5A以上であればパルス幅を10減らす。
- バッテリ電圧が13.8Vより大きいか、バッテリチャージ電流が1.1A以上であればパルス幅を1減らす。
- バッテリ電圧が13.0Vより小さくバッテリチャージ電流が0.5以下であればパルス幅を10増やす。
- バッテリ電圧が13.6Vより小さくバッテリチャージ電流が0.9以下であればパルス幅を1増やす。
上記のPWM制御を施してバッテリ電圧を13.8Vにします。
動作
PWM制御でバッテリチャージ#ベランダ太陽光発電 pic.twitter.com/tEjOwR3aGj
— HomeMadeGarbage (@H0meMadeGarbage) 2019年5月31日
バッテリがほぼターゲット電圧である13.8V付近までジャージされているのでパルス幅はほぼ0に近い状態です。
ソーラーパネルを手で隠すと電圧降下してパルス幅が少し大きくなります。
チャージ時初めのころはバッテリ電圧が12V程度でしたのでスイッチングはフルオン(パルス幅Max 255)でソーラーパネルからの電圧が直接バッテリに供給されていました。
これでソーラー発電でバッテリ充電できることが確認できました。
ソーラーパネル
今回使用したソーラーパネルのSY-M12W-12の仕様は以下の通りです。
- 最大出力電力 :12W
- 開放電圧 :21.8V
- 短絡電流 :0.73A
- 最大出力時電圧:17.4V
- 最大負荷時電流:0.69A
最大で12W出力します。最大出力が17.4Vですのでコントローラやバッテリの耐圧はこれ以上にする必要があります。
最大電流値をもとにヒューズやPWM制御時のしきい値も考慮が必要です。
参考
バッテリ
今回は定格容量 12Ah(12V)の完全密封型鉛蓄電池 WP12-12を使用しました。仕様は以下の通りです。
- 定格容量:12V 12Ah
- 充電電圧:14.4~15.0V(サイクルユース)、13.5~13.8V(スタンバイユース)
サイクルユースとは普通の充電池のように満充電状態から放電をして一定まで放電後に再充電をくり返す使用で、
スタンバイユースとは常に充電しておいて停電などの非常時に使用する方法です。
WP12-12の寿命はデータシート上は以下のとおりです。
サイクルユース
- 100% 放電 250 cycles
- 80% 放電 350 cycles
- 50% 放電 550 cycles
スタンバイユース
- 3~5年
バッテリ寿命は外気温などでも変わるようですし、スタンバイユースは非常時の放電量によっても寿命が変わりそうですね。
今回のベランダ発電では日照時はバッテリチャージしつつソーラーからの電気を使用し、無日照時はバッテリの電気を使用するのでスタンバイユースになります。
無日照時の放電量もケアする必要ありそうです。
参考
- http://akizukidenshi.com/download/ds/long/WP12-12.pdf
- http://akizukidenshi.com/catalog/faq/goodsfaq.aspx?goods=B-00066
- http://www.bwt.jp/wiki/index.php?SEALED_BATTERY