今日も自己満足温度調整器の電力制御部
市販の温度調整器でよくある制御はONの時間とOFFの時間の比率を調整するタイプ。
例えば75%の出力が欲しくて、制御周期が1秒(50Hzを想定)の場合はこんな感じ。
青の縦棒は瞬間電力で、赤の線は平均電力。
100%と0%と出力の差が大きく、それぞれのブロックが大きいので周囲の電灯をちらつかせてしまう。
そこで0-100ではなく、50%と100%を組み合わせて75%を作る場合。
制御周期の半分で切り替えることができるのでこんな感じ。
切り替え時の電圧差が小さくなるのは当たり前。
あと、さっきより早いタイミングで平均電力が100%から動き始めるのもメリット。
もっと細かい周期でHighとLowを切り替えたい。
考えたのは直前の平均電力が目標(設定)電力以下であれあばHigh、それ以外はLowにするという単純なアルゴリズム。
1山目の判断
1山目は強制的にHigh
平均=100%
2山目の判断
直前の平均が100%(目標超過)→Low
平均=75%
3山目の判断
直前の平均が75%(目標以下)→High
平均=83.3%
・
・
・
グラフだとこんな感じ。
しかし、電力ではなくプラスマイナスのある電流で見ると、、、
プラス(上)とマイナス(下)で対称になっておらずNG
※高調波(ノイズ)が発生する可能性あり。
先ほどのアルゴリズムに以下を加えます。
1. 直近(最後)のHighがプラスかマイナスか記録
2. 直近のHighの正負と次の制御の正負が一致するときはLow
電力パターン
さっきよりは少し収束が遅れますが許容範囲内。
問題の電流パターン
上下(+-)が対称になっているのでめでたしめでたし。
と思ったら、ちょっとした問題発生。
まずは問題のない51%出力
1山目と52山目にHighが選択されており問題なし。
問題の99%出力
Lowを連測して選択されてしまっています。
100山終了時はちゃんと99%とになっているとはいえ、理想形ではないですね。
※99に限らず、Highの割合が多いとNGっぽい。
なので、アルゴリズムを修正します。
1. 目標が0~12.5%、25~37.5%、50~75%、100%の時は上記のアルゴリズムを採用(それ以外の目標の時は下記アルゴリズム採用)。
2. 既存アルゴリズムのHighとLowを入れ替えた感じのアルゴリズム。
51%出力
ちゃんと1山目と52山目でLowが選択されています。
いろんな出力パターンを動画でキャプチャしました。
0~50%までは0.25%刻み。
50~100%までは0.5%刻みで出力を調整してくれています。
これでアルゴリズムは完成です!
あとは一山一山を正確に制御するための仕組み作りですかね?