4

短い質問
それ以外の場合は均一な制御領域内で非常に大きな異常 (桁違い) を処理する一般的な方法はありますか?

背景
私は、一般的に均一な制御領域でモーターを駆動する制御アルゴリズムに取り組んでいます。負荷なし/最小限の負荷で、PID 制御はうまく機能します (応答が速く、オーバーシュートがほとんどまたはまったくありません)。私が直面している問題は、通常、負荷の高い場所が少なくとも 1 つあるということです。位置はインストール中にユーザーが決定するため、いつ/どこでそれを期待するかを知る合理的な方法はありません.

高負荷の場所を処理するように PID を調整すると、負荷のない領域で大きなオーバーシュートが発生します (これは完全に予想していたことです)。移動の途中でオーバーシュートしても問題ありませんが、筐体には機械的なハード ストップはありません。ハードストップがないということは、大幅なオーバーシュートが発生すると、コントロール アームがモーターから切り離される可能性があることを意味します (デッド ユニットが生成されます)。

私がプロトタイピングしているもの

  • ネストされた PID (ターゲットから遠く離れている場合は非常に積極的、近くにある場合は保守的)
  • 遠い時は固定ゲイン、近い時はPID
  • 保守的な PID (無負荷で動作) + PID が失速し、目標が達成されるか急速な変化率が検出される (つまり、高負荷領域を離れる) まで追加のエネルギーを適用する外部制御

ハードウェアの制限

  • フルトラベル定義
  • ハードストップは追加できません(現時点では)

更新
私の答えは、これが最善の解決策であることを示していません。私が共有すると思ったのは、私の現在のソリューションです。

4

1 に答える 1

0

初期ソリューション

stalled_pwm_output = PWM / | ΔE|

PWM=最大PWM値
ΔE=last_error-new_error

初期の関係は、モーターに変化がないことに基づいて、PWM出力を正常にランプアップします。サンプル出力については、以下のグラフを参照してください。

このアプローチは、非アグレッシブなPIDが停止した状況に対応します。ただし、非アグレッシブPIDが設定値を達成できて速度を落とそうとすると、stalled_pwm_outputが増加するという不幸な(そして明らかな)問題があります。このランプアップにより、負荷のない位置に移動するときに大きなオーバーシュートが発生します。

1/ΔEvsΔE

現在のソリューション

仮説

stalled_pwm_output =(kE * PID_PWM)/ | ΔE|

kE=スケーリング定数
PID_PWM=非アグレッシブPIDからの現在のPWM要求
ΔE=last_error--new_error

私の現在の関係はまだ1/ΔEの概念を使用していますが、非アグレッシブPIDPWM出力を使用してstall_pwm_outputを決定しています。これにより、PIDは、目標設定値に近づき始めたときにstall_pwm_outputを抑制しますが、ストールした場合は100%PWM出力を許可します。PWMが飽和点(下のグラフで10,000を超える)に確実に到達するには、スケーリング定数kEが必要です。

擬似コード

cal_stall_pwmの結果は、現在の制御ロジックのPIDPWM出力に 追加されることに注意してください。

int calc_stall_pwm(int pid_pwm, int new_error)
{
    int ret = 0;
    int dE = 0;
    static int last_error = 0;
    const int kE = 1;

    // Allow the stall_control until the setpoint is achived
    if( FALSE == motor_has_reached_target())
    {
        // Determine the error delta
        dE = abs(last_error - new_error);
        last_error = new_error;

        // Protect from divide by zeros
        dE = (dE == 0) ? 1 : dE;

        // Determine the stall_pwm_output
        ret = (kE * pid_pwm) / dE;
    }

    return ret;
}

出力データ

ストールしたPWM出力 ストールしたPWM出力

ストールしたPWM出力グラフでは、モーターが所定の時間内に位置に到達できなかったため、約3400での突然のPWM降下がアクティブ化された組み込みの安全機能であることに注意してください。

無負荷PWM出力 無負荷PWM出力

于 2013-02-08T08:41:30.817 に答える