インクリメンタル エンコーダ インクリメンタル エンコーダは、機器が動いているときのみ信号を出力します 多くのインクリメンタル エンコーダは、エンコーダの特定の基準位置を示すために追加のチャネル Z 出力信号も設定します センサーが 1 回転します Z 軸信号がオンになったときのみ 1 つのパルスが出力されます回転させられます。インクリメンタル エンコーダは、デバイスの絶対位置ではなく、位置変化とデバイスの動きの方向のみを出力します。
アブソリュートエンコーダの バイナリコードは、エンコーダシャフトのそれぞれの異なる角度に一意に対応します
ハイブリッドアブソリュートエンコーダは 、アブソリュート情報機能を備えた磁極位置検出用の情報と、インクリメンタルエンコーダの出力情報と全く同じ情報を出力します。
PID制御の本質は、目標値と実際の値との誤差を比例演算、積分演算、微分演算した結果を出力に作用させることです。
Kp が大きいほど、偏差は早く減少しますが、ショックが発生しやすくなります。Kp が小さいほど
、ショックは発生しにくくなりますが、調整速度は遅くなります。純粋な比例制御は静的特性を持っています。排除できないエラー。
Tiが小さいほど積分速度が速くなり、積分効果が強くなります。積分効果が強すぎると、システムのオーバーシュートが増加し、システムが発振することさえあります。
Td 差動制御の大きな欠点は、高周波ノイズが発生しやすく、すべてのフロー制御システムに深刻な干渉信号が発生することです。
システムに差動制御を導入することは適切ではありません。
位置
PIDの長所と短所
:
利点:
:
位置
PID は
、アクチュエータ (バランス トロリーなど)、
u(k)の値
、および実行を直接制御できる非再帰アルゴリズムです。
機構の実際の位置(トロリの現在の角度など)は 1 対 1 に対応するため、一体部品のないアクチュエータのオブジェクトでは、
よく適用されます
。
短所:
:
各出力は過去の状態に関連しており、計算中に
e(k)
を累積する必要があり、計算負荷が大きい。
インクリメンタル
PIDの長所と短所
:
利点:
:
1.
誤操作の影響が少なく、必要に応じて論理的判断により誤ったデータを削除できます。
2.
手動
と
自動の切り替え時の衝撃が少なく、邪魔にならずに切り替えられます。
3.
式に累積する必要はありません。制御増分
Δu(k)の決定は
、最新の
3 つの
サンプリング値のみに関係します。速度閉ループ制御中
優れたリアルタイム性能を持っています。
欠点:
1.
積分トランケーション効果が大きく、定常誤差が存在します。
2.
波及効果が大きい。一部の制御オブジェクトではインクリメンタルを使用するのは良くありません
typedef struct //位置式 PID 的算法
{ float target_val; //目标值
float actual_val; //实际值
float err; //定义偏差值
float err_last; //定义上一个偏差值
float Kp,Ki,Kd; //定义比例、积分、微分系数
float integral; //定义积分值
}_pid;
void PID_param_init()
{ /* 初始化参数 */
printf("PID_init begin \n");
pid.target_val=0.0;
pid.actual_val=0.0;
pid.err=0.0;
pid.err_last=0.0;
pid.integral=0.0;
pid.Kp = 0.31;
pid.Ki = 0.070;
pid.Kd = 0.3;
printf("PID_init end \n");
}
/**
* @brief PID 算法实现 位置式 PID 的算法
* @param val 实际值
* @note 无 5 * @retval 通过 PID 计算后的输出
*/
float PID_realize(float temp_val)
{ /* 目标值只在这里参与计算,计算目标值与实际值的误差 */
pid.err=pid.target_val-temp_val;
/* 误差累积 */
pid.integral+=pid.err;
/*PID 算法实现 */
pid.actual_val=pid.Kp*pid.err+pid.Ki*pid.integral+pid.Kd*(pid.err-pid.err_last);
/* 误差传递 */
pid.err_last=pid.err;
/* 返回的值是经过 pid 运算以后的值 */
return pid.actual_val;
}
float val=PID_realize(pid.actual_val);
int temp = val;
// 给通道 1 发送实际值
set_computer_value(SEED_FACT_CMD, CURVES_CH1, &temp, 1);
PID_realize(flfloat temp_val) 関数では、実際の値はパラメーターを渡す形式で関数に渡され、ターゲット値はここでの計算にのみ関与します。pid.err=pid.target_val-temp_val; 戻り値は次のとおりです
。 pid 操作後の値 return pid .actual_val; その後、すべての計算値は pid 構造体のメンバーの操作になります。
/*pid*/ //增量式 PID
typedef struct
{ float target_val; //目标值
float actual_val; //实际值
float err; //定义当前偏差值
float err_next; //定义下一个偏差值
float err_last; //定义最后一个偏差值
float Kp, Ki, Kd; //定义比例、积分、微分系数
}_pid;
void PID_param_init()
{ /* 初始化参数 */
printf("PID_init begin \n");
pid.target_val=0.0;
pid.actual_val=0.0;
pid.err = 0.0;
pid.err_last = 0.0;
pid.err_next = 0.0;
// pid.Kp = 0.21;
// pid.Ki = 0.070;
// pid.Kd = 0.32;
pid.Kp = 0.21;
pid.Ki = 0.80;
pid.Kd = 0.01;
printf("PID_init end \n");
}
float PID_realize(float temp_val)
{
/* 目标值只在这里参与计算,计算目标值与实际值的误差 */
pid.err=pid.target_val-temp_val;
/*PID 算法实现 */
float increment_val = pid.Kp*(pid.err - pid.err_next) + pid.Ki*pid.err␣ , pid.Kd*(pid.err - 2 * pid.err_next + pid.err_last);
/* 累加 */
pid.actual_val += increment_val;
/* 传递误差 */
pid.err_last = pid.err_next;
pid.err_next = pid.err;
/* 返回的值是经过 pid 运算以后的值 */
return pid.actual_val;
}
PID_realize(flfloat temp_val) 関数では、実際の値がパラメーターの形式で関数に渡され、ターゲット値はここでの計算にのみ関与します。pid.err=pid.target_val-temp_val; 戻り値は次のとおりです。
pid
操作後の値はpid .actual_val
を返します。
試行錯誤
1.
まず比率 (
P
) を積分してから (
I
)、最後に微分 (
D
)
2.
デバッグするときは、
PID
パラメータを最も影響の少ない位置に配置します。つまり、
P
が最大、
I
が最大、
D
が最小になります。
3.
純粋な比例システムに従って比例を設定し、理想的な調整プロセス曲線が得られるようにし、比例を
1.2 倍に拡大します。
より良い調整プロセス曲線が得られるように、積分時間を大きい値から小さい値に変更します。
4.
最後に、この積分時間の下で再び比例を変更し、調整プロセス曲線が改善されるかどうかを確認します。
5.
改善する場合は、元の設定比率を下げたり、積分時間を変更したりして、繰り返しを繰り返すことで適切な値が得られるようにすることができます。
比例性と積分時間。
6.
外部干渉下でシステムの安定性が良好でない場合は、比例性と積分時間を適切に増加してシステムを十分にすることができます。
安定させてください。
7.
調整された比例と積分時間を適切に短縮し、微分動作を追加して、最小のオーバーシュートと調整動作の時間を取得します。
最短の調整プロセス。
クリティカルレシオ法
クリティカル比率法: レギュレーターが純粋な比例の作用下に置かれ、レギュレーターの値が大きい値から小さい値に徐々に変化する閉ループ制御システムに適しています。
比例性、および等しい振幅の振動プロセスは臨界比例性と呼ばれます。
1.
レギュレータの積分を最大に設定し、微分を
0に
設定し、一定期間バランスをとるのに適切な比例係数を設定し、システムを動作させます。
自動運転へ。
2.
次に、比率を徐々に増加させて等振幅現象を生成し、臨界比例係数と等振幅での 2 つのピークを記録します。
時間間隔。
3.
記録された比例係数と周期に従って、経験式を使用してレギュレータのパラメータを計算します。
制御方法
一般的な規制
a.
比例ゲイン
Pを決定する
: 比例ゲイン
Pを決定するときは
、まず
PID
の積分項と微分項を除去し、通常は
Ti=0に設定します
。
Td=0
(詳細については、
PID
パラメータ設定の説明を参照) なので、
PID は
純粋な比例調整になります。入力はシステムで許容される最大値に設定されています
値の
60% ~ 70% 、
システムが発振するまで比例ゲインPを0
から徐々に増加させます。
システムの振動がなくなるまでゲイン
P は
徐々に減少します。このときの比例ゲイン
Pを記録し
、
PIDの
比例ゲイン
Pを
次のように設定します。
現在値の
60%~70%
。比例ゲイン
P
のデバッグが完了しました。
b.
積分時定数
Tiの決定
比例ゲイン
Pが決定したら
、積分時定数
Tiの初期値を大きめに設定し
、
システムが発振するまでTi を
徐々に減少させ
、
システムの発振がなくなるまで逆に
Ti を徐々に増加させます。
記録
このときの
Tiは
、
PIDの
積分時定数
Tiを
現在値の
150%~180%に設定します
。積分時定数
Ti
をデバッグします
なる。
c.
積分時定数
Tdを決定する
一般に、
積分時定数
Tdは設定する必要はなく、
0でかまいません。設定するにはPで確定し、
Tiの場合も方法
は同じで、非発振時間の
30%を取ります
。
d.
システムの無負荷時と負荷時共同デバッグを行い、要件が満たされるまで
PID
パラメータを微調整します: 理想的な時間で 2 つの波、前部が高く、後部が高い
ロー
4
対
1
。
サンプリング周期は整数周期の 1/2 未満である必要があり、サンプリング周波数は元の周波数の2 倍より大きくなければなりません。
STM32
下位コンピュータと上位コンピュータの共同デバッグ例
Wildfire
PIDデバッグ
用のホスト コンピューター プロトコルの説明