問題タブ [pid-controller]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
controller - PID コントローラの積分部分がわかりません
PIDコントローラーの不可欠な部分を理解していません。ウィキペディアからのこの擬似コードを想定しましょう:
Integral は、最初はゼロに設定されています。そして、ループ内で、時間の経過とともにエラーを統合しています。測定値または設定値に (正の) 変更を加えると、誤差は正になり、積分は時間の経過とともに (最初から) 値を「食い尽くし」ます。しかし、私が理解していないのは、エラーが安定してゼロに戻ると、積分部分にはまだ何らかの値(時間の経過とともに積分されたエラー)があり、コントローラーの出力値に寄与することですが、そうではありません。
誰か説明してくれませんか?
c - PID コントローラーの使用方法を教えてください。
現在、温度調節器の製作中です。
操作変数 (P、I、および D 項の合計) を返す Temperature_PID() 関数がありますが、この出力をどうすればよいですか?
温度は PWM によって制御されるため、デューティ サイクル 0% = ヒーター オフ、デューティ サイクル 100% = ヒーター オンです。
これまで試した
Iという用語は基本的にこのシステムを非常に不安定にするため、これはうまくいきませんでした。領域を統合し、別の小さなデータ ポイントを追加し、領域を再度統合してそれらを合計することを想像してみてください。何度も。つまり、各データ ポイントがこの制御方式を指数関数的に悪化させます。
他に試してみたいのは、
ここで、Expected_Duty_Cycle は、コントローラーが安定点に達した時点で温度を設定する必要がある値であり、Temperature_PID() は 0 です。ただし、Expected_Duty_Cycle は、ヒーターの条件 (天候など) に応じて常に変化するため、これも機能しません。 .
だから私の質問は、PIDの出力で正確に何をするのですか? PID 出力に基づいてデューティ サイクルを割り当てる方法がわかりません。理想的には、温度がほぼ設定値に達し、より低いデューティ サイクルに低下し始めるまで、これは 100% のデューティ サイクルに留まります。しかし、最初の方法 (I ゲインをゼロに設定) を使用すると、デューティ サイクルが既にオーバーシュートした後でのみ、デューティ サイクルが低下し始めます。
これは私の最初の投稿です。私の答えが見つかることを願っています。スタックオーバーフローありがとう。
編集: これが私の PID 関数です。
編集 2: これまでにこれを使用したことがないため、リンクが壊れている場合はお知らせください。 https://picasaweb.google.com/113881440334423462633/January302013
申し訳ありませんが、軸またはタイトルの名前を変更しようとすると、Excel がクラッシュします。注: システムにはまだファンがないため、ヒーターを加熱できるほど速く冷却することはできません。最初の写真はシンプルなオンオフコントローラーです。2番目の写真は私のPDコントローラーです。ご覧のとおり、温度がオーバーシュートする前に減算を行わず、デューティ サイクルから減算する前に温度がオーバーシュートするまで待機し、減算が遅すぎるため、温度が低下するのに非常に長い時間がかかります。コントローラが最大温度に達する前にデューティ サイクルを下げるようにコントローラに指示するにはどうすればよいですか?
c++ - バランシングロボット PID チューニング
趣味で二輪バランシングロボットを作ろうとしています。私はすべてのハードウェアを構築して組み立てており、コーディングも行っていると思います。ジャイロと加速度計を備えた IMU を使用して、信号を平滑化するための補助フィルターで傾斜角を見つけています。IMU からの入力信号は、0.7 未満の分散 + または - 実際の傾斜角度のように、非常に滑らかに見えます。
私の IMU サンプリング レートは 50 Hz で、PID計算も 50 Hz で行っていますが、これは十分に速いと思います。
基本的に、PID Libraryにある PID ライブラリを使用しています。
P 値を低い値に設定すると、車輪は正しい方向に進みます。
P 値を大きな値に設定すると、グラフのような出力が得られます。
algorithm - 絶対単位ではなくパーセンテージで動作する PID コントローラー?
私は、コントロールの概念をインタラクティブPID
に教えるために、コントロール ソフトウェア シミュレーターに取り組んでいます。PID
私はVelocity
コントローラーの例に取り組んでいます。例は機能していますが、プロセスが増加する固定値である出力ではなく、プロセスへの入力をパーセンテージにしたいのです。
現在、サンプル ステップの最大加速度によって出力の増加を補間し、出力をパーセンテージにスケーリングする必要があります。問題は、ドライブトレインの速度と現在のギアリングに応じて、加速率が非線形になることです。
これは機能しますが、柔軟性や適応性は高くありません。たとえば、速度に近づくまですべてを最大に加速しsetpoint
、その後オーバーシュートして数周期振動するか、オーバーシュートせずに最後の少しを取得するのに同じくらい長い時間がかかります。 .
この最大加速動作が必要な場合もあれば、バッテリー/燃料源を管理して最大効率で加速したい場合もあります。両方のビットが必要な場合もあります。
私が現在行っているような出力のスケーリングは力ずくであり、あまり巧妙ではありません。P
、I
およびゲインを動的に調整することにより、出力の計算に出力修飾子を挿入したいのD
ですが、どれに焦点を合わせ、どの順序で行うべきかわかりません。
一度に 1 つずつ手動で調整すると、非常に良い結果が得られますが、自動調整を開始しようとすると、すべてが狂ってしまいます。
私は先週、制御理論と自動調整について読んでいましたが、数学表記は私にとって不可解なものになりました。コードで何らかの実装を見つけることができれば、数学を理解できます。言語に関係なく。
ZN ヒューリスティックを適用してみましたが、それでも乱暴なスイングが発生し、オーバーシュートを補正するのは非常に困難です。加速できる速度のほんの一部でしか減速できない場合、多くのオーバーシュートを許容するのは困難です。能動的なブレーキがなく、受動的な抗力のみに依存して減速するシステムを想像してみてください
速度制御にダイナミック ゲイン チューニングを挿入するための適切なアプローチは何ですか?
controls - 壁追従ロボットのPIDチューニング
現在、学部のプロジェクト用にロボットを設計しています。このロボットのタスクの 1 つは、壁をたどることです。目的のために、参照が超音波センサーから与えられる PID 制御システムを使用しています。ここでの私の問題は、PID の調整に苦労していることです。目的の設定範囲と目的のモーター出力速度をプロットすることで、P係数を簡単に見つけることができることを私は知っています。それでもロボットが安定しないので、PID の DI 部分を追加しようと思います。しかし、ランダムな値を試す (手動チューニング) だけでなく、これらの係数の値を大まかに調べるにはどうすればよいでしょうか。どうもありがとう。とても有難い。stackExchange での無関係な投稿で申し訳ありません。プログラマーはエンジニアよりも深い洞察力を持っていると思います ;) よい一日を
delay - 遅延のあるシステムで pid を調整する
遅延が非常に大きいシステムで PI(D) ゲインを調整する必要があります。一般的な温度調節器ですが、温度プローブがヒーターから離れています。さらに詳しい情報:
プローブの応答は、ヒーターの変化から約 10 秒遅れます。
温度は 1 Hz でサンプリングされ、分解能は 0.01 °C です。
ヒーターは、1 Hz の周期で 10 ビット PWM の PWM でコントローラーです。
目標は、振動を ±0.05 °C 未満に維持することです。
現在、コントローラーをPIとして使用しています。揺れは避けられません。ゲインが高いほど、振動は小さく速くなります。まだ高すぎる (約 ±0.15 °C)。P および I ゲインを下げると、非常に長く深い振動が発生します。
これは遅れのせいだと思います。整定時間は問題ではありません。必要なだけ時間がかかる場合があります。
システムを機能させる方法について頭を悩ませています。Iだけで考えてみましょう。プローブが目標値に到達し、I出力が減少し始めると、温度は再び上昇します。変動が遅すぎて dError がゼロに非常に近いため、微分項を使用できません (dGain を大きな値に設定すると、ノイズが多すぎます)。
何か案が?
android - C++ で実装された制御理論
Windows 8.1 で Java-Eclipse Luna を使用して Android プログラミングを行っています。また、ネイティブ環境 (C++) を使用しています。私のプロジェクトの次のステップとして、Android でアプリを作成してモバイル ロボットを制御する必要があります。
私の質問は、C++ コードにインポートして使用するだけで、C++ に既に実装されている制御理論ライブラリはありますか? PID、LQR、LQG ...などが必要です。
java - Java の PID コントローラーが正しく動作しない
Java での PID コントローラーの実装を探していたところ、次のものが見つかりました。
だから、私がそれについて理解できることのために、私はそれをこのように使用しています:
しかし、彼は決して安定しません。彼は PID のようにまったく動作しません...これは私が得る出力です:
誰かが私が欠けているものを教えてくれますか?
ありがとうございました!
simulink - simulink で参照として正弦波を使用する PID
PID コントローラーを使用して DC/DC バック コンバーターの出力 DC 電圧を制御する例を見てきました。
DC-ACコンバーターを実装したい。
PIDコントローラーを使ってみました。
出力AC信号(連続的に変化する)を基準正弦波信号と比較しているため、PIDコントローラーは期待される出力を提供していません。
DC to DC の場合、両方の基準信号は一定でした。
私の場合、それは連続的に変化する正弦波です。
正確な DC から AC への変換を行う方法を提案できる人はいますか?
PS PIDコントローラーは、高周波(100Hz)で連続的に変化する基準信号で動作しますか?