忍者ブログ

Fグループ電子工作講座

秋月電子SH7125ボードで始めるマイコン開発

PID制御の概要

制御で広く使用されているPID制御に関してP比例、I積分、D微分の各要素の役割を説明する動画を作成しました。
目標と出力軸の角度をそれぞれ測定し、誤差(比例)、誤差の変化速度(微分)、誤差の累積(積分)に係数(ゲイン)を掛けて出力します

PID制御概説1「比例要素の効果」

比例要素は誤差を小さくする効果があります。
ゲインを大きくすればある程度誤差が小さくなりますが、大きくしすぎると動きが不安定になります。


PID制御概説2「微分要素の効果」

微分要素は反応速度を向上させる効果があります。
また、比例要素が大きくてふらつく場合にふらつきを抑制する効果もあります。

PID制御概説3「積分要素の効果」

成分要素は位置の微調整を行う効果があります。
個人的にはあまり使いません。


解説(雑)

プログラムの構造としてはタイマー機能などを使ってシステム時刻を生成しループ周期を安定化させます。

メイン関数{
    初期化処理
    無限ループ{
        if(システム時刻>=設定時刻){
            設定時刻=システム時刻+実行周期

            定期処理

        }
    }
}

Arduino系を使う場合はmillis()関数を使う事でシステム時刻を取得できます。


定期処理部は
・情報取得部
現在の出力角度の取得
現在の目標角度の取得
出力角速度=(現在の出力角度-1周期前の出力角度)/実行周期
目標角速度=(現在の目標角度-1周期前の目標角度)/実行周期
1周期前の出力角度=現在の出力角度
1周期前の目標角度=現在の目標角度
角度誤差=現在の目標角度-現在の出力角度
速度誤差=目標角度速-出力角速度
累積誤差+=角度誤差*実行周期

にて誤差等を計算します。
取得した角度にノイズが乗る場合、そのまま速度を計算するとノイズが増幅されるので少しだけローパスフィルタをかけると安定します。ローパスフィルタが強すぎると遅れが発生し、挙動が不安定になります。
累積誤差は誤差があると無限に増え続けるのである程度リミットをかけておいた方が安全です。

・出力部
出力=角度誤差*比例ゲイン
出力+=速度誤差*微分ゲイン
出力+=累積誤差*積分ゲイン
PWMポートへ出力

にて実際にモーターを動かします。
PIDによる誤差フィードバックのみだと誤差0=出力0となり誤差0の状態を作来るのが難しいので、目標速度を満たす推定出力値をオープンループとして追加する事で挙動が安定します。
また、過去の調査結果からDCモーターの出力は常時回生で使用した方が制御性が良いようです。
PR

コメント

プロフィール

HN:
ぼんどF博士
性別:
男性
自己紹介:

最新コメント