Repo
kjana00@gmail.com
2011-11-22 01:37:47
今朝はくもり。朝ごはんはパンとサラダとソーセージ。何か急に冷え込んできたような、などと思いつつ仕事場へ。思ったより体調は大丈夫みたい。と言いつつやっぱり眠かったりはするわけだけど。
先週末思い付いたことを試してみる感じであれこれ。とりあえず設定しようとしたデューティの最大値をシリアルで吐かせてみたら、やっぱり激しく上限を越えた値を設定しようとした跡がある。この領域だと結構大幅に下がったとしても、まだ上限より上だよねっていう。それじゃ、計算値が十分に小さくなるようにしてやれば良いわけだよね。
PID の計算が前回の計算値と何世代かの誤差の線形結合っていう形だから、外でデューティを上書きした時には PID の状態も書き換えてやればいいはず、と手を入れてみる。と、出力が立ち上がらなくてソフトスタートが終わらない。あれ? 計算に使ってる分だと前回の計算値は単に足されてるだけだし、他の状態は出力値に依存しないよね、とちまちまいじりつつ悩んでみる。
あきらめてちょっと違うことをして効果そのものは確かめられた。で、コードを整理したらまた動かない……ということをしていて、ふとスケーリングのために右シフトした値を戻すっていうと、1bit 落ちるんだよなというのが気になり出す。ソフトスタートの時だと、計算値の差分は 1 とか 2 であり得るのだよね。っていうことは、1bit 落ちると全然増えなくなる場合があるはず。
そういうことで上書きするのをデューティ制限がかかった時に限定してみたら真面目に立ち上がってくれた。やっぱり、これか。で、下限を割った時っていうのも一応考慮に入れたいよね、なんていうことでちょっと条件に迷ったりしつつ、無事に変な出力の跳ね上がりを解消。良かった、良かった。これだと緊急停止のコードを生かしといても普通の状態なら落ちないね。
いらなくなったコードの整理だのコンパイルオプションに対するコードの修正だのをちまちまやって今日はおしまい。何か妙に寒いようなと思ったら 10℃ とか言ってるねと思いつつ帰って、晩ごはんに豚汁うどんと冷奴。豆腐あっためようかと思わなくもなかったけど、部屋に入るとそれほど寒いわけでもないわけで。でも、うどんはあったまるな。ちょっと足元は冷えてくるし。
後は WWW 見たりゲームしたり。のほほんと 20 階まで行って、適当に金策して帰ってくる感じ。28 レベルになったし、そろそろオークの洞窟にでも行くかね。