回路図はこんな感じ。
太陽電池は最大電力点が6Vで電流333mAの2Wタイプ。
開放電圧7V程なので、レギュレータで3.3Vに落としてマイコンの電源に使う。
マイコンで2SC2655 (50V 2A)をスイッチング。1Ω抵抗を並列にして0.33Ωとし、オシロスコープで電流測定する。
開放電圧測定の際に、太陽電池と並列に入れたコンデンサが電圧上がりきるまでの時間を決めるので、コンデンサの容量は余り大きくしないほうが良さそう。
電流を相当小さく見積もって、100uFのコンデンサ電圧を5Vから7Vに10mAで充電すると仮定。2V×100uF=200uC, 200uC/10mA = 200uC/10000uA = 1/50 = 20ms
スイッチング休止時間は20msもあれば十分でしょう。
アルゴリズム。これうまくいってないw
開放電圧は2秒に一回読み取る。2秒の間は20msごとにduty比を変更していく。duty比は1ループにつき1ずつしか変化しないので急激な変動はしないだろう。
最初の一回の大きなループはうまくいく感じなんだけど、そこから運転電圧がどんどん下がっていってしまって、最後には電圧下がりすぎでマイコンリセットかかる。
スイッチング部分に問題があるかと思ったけど、目標電圧を固定した状態でのスイッチングは問題なく動く。
ということで、開放電圧読み取りの部分が何かおかしいんじゃないかと思っている。
単純にタイマーを無くせば発振が止まるかも。
それでもだめなら、デューティー変数値の範囲をを0-2560までとして、その値の1/10をPWMにセットする。
(負帰還の係数値を下げる)
整数のビット数を増やす作戦は変数定義しなおさないと面倒なので、まだトライしてないですが、良さそうですね。
ただ、いろいろやってみると、解放電圧測定のあとの演算部分が上手くいってないような気がするのです。ADCを多数繰り返してアナログフィルタを再現する方法も上手くいかずでちょっとマイコン内部がどうなっているのか要確認な予感です。
今は28ピンのマイコン使って8bitのポート2つ使ってADCの結果と目標値を出力するようにしようとしてます。