私の手元にあるPUPPYではPWMデューティ最大で32rad/secでした。前ページの式に代入すると
Kp=-3.125
となります。
次に求めたKpで実際に車輪の速度制御をしてみます。ただしKiはまだ決まっていませんので0とします。
下のボタンをクリックして開発環境をダウンロードし、下図の場所にコピーします。
演習の回を進める毎にマイコンの初期設定が煩雑になってきましたので、今回からマイコン初期設定、周辺機能の設定などを行う関数をまとめて「hardware.c」を作ってみました。
以下、主な関数の説明をします。
void init()
I/Oポート、タイマ、割り込みなどの設定を行うルーチンです。
unsigned char get_cflag()
タイマB1オーバフロー割り込みで10msごとにセットされるCflagを返します。Cflagがセットされている場合は1を返しCflagをリセットします。
void wait_m(long msec)
引数で指定した時間(単位はミリ秒)だけ空ループします。
int ad_conv(unsinged char ch)
引数で指定したチャネルのA/D変換を実行し、10ビットのA/D変換結果を返します。
void output_wheel(int duty)
引数で指定したDUTYをモータに出力する関数。引数の値が正の場合正転、不の場合逆転
以上がhardware.cに含まれる主な関数です。ココからはこれら関数をmainルーチンから呼び出して使用していきます。mainルーチンの中で実際に車輪制御を行っている部分は
if(get_cflag())の中がサンプリング周期中の処理になり、10msごとに入ります。ここで制御偏差(角速度現在値ー目標値)にKpを掛けて制御入力を設定し、車輪に出力します。
いろいろなKpを用いて車輪の角速度の応答がどうかわるか確かめてみましょう。