モーターの動作制御アルゴリズムの概要

+スターの公開アカウントをフォローして、エキサイティングなコンテンツを見逃さないようにしましょう

01773e5cd7e12b9a2d135e7321d25d01.gif

より転載|小麦おじさん

モーターやモーションの制御に携わったことがある方は、S 字カーブが非常に重要であることを知っているはずです。次のアニメーション画像を見比べると、S 字カーブの利点がわかるでしょう。

aa88eb5d9552fa51f23a231a6d85552d.gif

今日は、S 速度曲線計画アルゴリズムについて説明します。


1 はじめに

S 字加減速の最も重要な特徴は、アルゴリズムの加減速曲線が文字 S のような形状であることです。S 字加減速の速度曲線が滑らかであるため、制御処理への影響が軽減され、補間処理が柔軟になります[ ^1]。実際のT字カーブは加速から定速に切り替わる過程で大きなオーバーシュートがあるため、実際のT字カーブと7分割S字カーブの過程を比較してみます。

  • T字型加速→定速→減速

  • S字加速度()→等加速度()→減速度()→等速( )→加速度)→等減速度()→減速度(

加速に関する上記の説明は少し複雑で読みにくいかもしれません。以下の図を参照してください。
c72b40a7942b9f8dd0f4e536c853ecc1.png

2 理論的分析

S 字カーブの加速度は加減速中に変化するため、ここでは新しい変数gerkを導入します。

したがって、上図に対応する7 セグメント S 速度曲線では、最大加速度が 、最小加速度が と規定され、加速度の関係は次のようになります。

  • ジャーク(): 徐々に増加します。

    • 現時点では

  • 等加速度(): 最大値に達します。

    • 現時点では

  • 減速度(): 徐々に減少します。

    • 現時点では

  • 均一(): 変更なし。

    • 現時点では

  • 加速/減速(): 徐々に増加します。

    • 現時点では

  • 等速減速度(): 最大値に達します。

    • 現時点では 

  • 減少(): 徐々に減少します。

    • 現時点では

は加速度の絶対値です。

したがって、通常は、システムの最大速度、最大加速度 a_{max}、およびジャークという 3 つの最も基本的なシステム パラメーターを決定する必要があります。そうすれば、全体の動作プロセスを決定できます [^2]。

  • 最大速度: システムの最大動作能力を反映します。

  • 最大加速度: システムの最大加速および減速能力を反映します。

  • Jerk : システムの柔軟性を反映します。

    • 柔軟性が高いほど、オーバーシュートが大きくなり、実行時間が短くなります。

    • 柔軟性が小さいほどオーバーシュートは小さくなり、実行時間は長くなります。

2.1 加速時間関係式

加速度変更プロセス全体を以下の図に具体的に示します。

d939fbc4b3c4be6ef5d15e4ab2fe45b8.png

ここでも、 と の関係を強調し、変数を導入します。

たとえば、現在の瞬間が間隔内にある場合、それが初期点として使用され、その瞬間を基準とした時間である場合、次のようになります。

加速度と時間の関係関数は次のように求めることができます。

「」

式①に従って、式②に代入すると、次のようになります。

上の式では;

2.2 速度と時間の関係式

速度と加速度は満たされ、ジャークと速度の関係は次のとおりです。

加速時間の関係と式②を組み合わせると速度曲線の関係が得られ、具体的な関係は下図のようになりますが、
8a7f2a2474b162a73f325b45096da13c.png
さらに簡略化すると次のようになります。
13b15374eba38bbde4dc9fdb27688d59.png

2.3 変位時間関係式

変位と加加速度は次の関係を直接満たします。

単純な導出

したがって、次のことが得られます。

ポイントをほとんど忘れてしまったので、戻ったら復習します。

最終的な変位の式を以下に示します。
e2de0e258f396f35770b1731d4b84105.png

3 プログラム実施のアイデア

前述したように、S 字カーブ計画では、動作プロセスを決定できるように、システムの最大速度、最大加速度 a_{max}、ジャークという 3 つの最も基本的なシステム パラメーターを決定する必要があります。ここには暗黙の条件があります。つまり、動作中に最大速度に到達できるということです。これは完全な7 セグメントの S カーブです。さらに、いくつかの中間パラメータがあります。

  • 、あります。

  • ぴくぴく動く;

  • 、ユーザーは実行プロセス全体に必要な時間を指定します。

しかし、実際のプロセスでは通常、私たちが気にするのは、、;

3.1 導出

理想的な状態が存在すると仮定するおよび導出プロセスは次のとおりです。

したがって、次のことが得られます。

単純化すると次のようになります。

式②より、次のことがわかります。

最終的に得たもの:

は初速度です。

変位と時間の関係式に基づいて、次の離散化プログラムを作成できます。

最大速度に到達でき、ユーザーがプロセス全体の実行時間を与えたと仮定すると、 の導出は次のようになります。

上記の式を単純化すると、次のようになります。

上記の式によれば、次のことが得られます。

3.2の導出

現時点では、測定値から推定できる計算を実行する必要があります。まず、変位が次の関係を満たすことです。

ここで、加速ゾーンの長さは、減速ゾーンの長さは、

具体的な導出; [^2] 前述したように、 =0 の場合、

「」

簡単な推論は次のとおりです。

¤

④によれば、⑤は最終的に次のように簡略化されます

: は総走行時間 : は総走行距離

詳細な導出プロセスは次のとおりです。

なぜなら:

なぜなら:

したがって、単純化すると次のようになります。

したがって、次のものを取得できます。

なぜなら:

これを代入すると次のようになります。

最終結果を取得するために簡略化します

4つのMATLABプログラム

Matlabプログラムは、個人的なテスト後に簡単な変更を加えて実行できます。実行プロセス全体の時間がここで直接指定されているため、SCurvePara加速度の値は関数内で見つける必要があり、距離は 1 です。

SCurvePara

function [Tf1,V,A,J,T] = SCurvePara(Tf, v, a)
 T = zeros(1,7);
for i=1:1000
    % 加加速度 J
    J = (a^2 * v) / (Tf*v*a - v^2 - a);
    % Tk
    T(1) = a / J;
    T(2) = v / a - a / J; % t2 = v / a - t1;
    T(3) = T(1);
    T(4) = Tf - 2 * a / J - 2 * v / a;    % t4 = Tf - 4*t1 - 2*t2;
    T(5) = T(3);
    T(6) = T(2);
    T(7) = T(1);
    % 根据T2和T4判断S曲线的类型
    if T(2) < -1e-6
        a = sqrt(v*J);
        display('t2<0');
    elseif T(4) < -1e-6
        v = Tf*a/2 - a*a/J;
        display('t4<0');
    elseif J < -1e-6
        Tf = (v^2 + a) / (v*a) + 1e-1;
        display('J<0');
    else
        break;
    end
end

 A = a;
 V = v;
 Tf1 = Tf;
 end

SCurveScaling

function s = SCurveScaling(t,V,A,J,T,Tf)
% J = (A^2 * V) / (Tf*V*A - V^2 - A);
% T(1) = A / J;
% T(2) = V / A - A / J; % T(2) = V / A - T(1);
% T(3) = T(1);
% T(4) = Tf - 2 * A / J - 2 * V / A;    % T(4) = Tf - 4*T(1) - 2*T(2);
% T(5) = T(3);
% T(6) = T(2);
% T(7) = T(1);
%%
if (t >= 0 && t <= T(1))
    s = 1/6 * J * t^3;
elseif (  t > T(1) && t <= T(1)+T(2) )
    dt = t - T(1);
    s = 1/2 * A * dt^2 + A^2/(2*J) * dt...
        + A^3/(6*J^2);
elseif ( t > T(1)+T(2) && t <= T(1)+T(2)+T(3) )
     dt = t - T(1) - T(2);
     s = -1/6*J*dt^3 + 1/2*A*dt^2 + (A*T(2) + A^2/(2*J))*dt ...
         + 1/2*A*T(2)^2 + A^2/(2*J)*T(2) + A^3/(6*J^2);
elseif ( t > T(1)+T(2)+T(3) && t <= T(1)+T(2)+T(3)+T(4) )
     dt = t - T(1) - T(2) - T(3);
     s = V*dt ...
         +  (-1/6*J*T(3)^3) + 1/2*A*T(3)^2 + (A*T(2) + A^2/(2*J))*T(3) + 1/2*A*T(2)^2 + A^2/(2*J)*T(2) + A^3/(6*J^2);
elseif ( t > T(1)+T(2)+T(3)+T(4) && t <= T(1)+T(2)+T(3)+T(4)+T(5) )
     t_temp = Tf - t; 
     dt = t_temp - T(1) - T(2);
     s = -1/6*J*dt^3 + 1/2*A*dt^2 + (A*T(2) + A^2/(2*J))*dt ...
         + 1/2*A*T(2)^2 + A^2/(2*J)*T(2) + A^3/(6*J^2);
     s = 1 - s;
elseif ( t > T(1)+T(2)+T(3)+T(4)+T(5) && t <= T(1)+T(2)+T(3)+T(4)+T(5)+T(6) )
     t_temp = Tf - t; 
     dt = t_temp - T(1);
     s = 1/2 * A * dt^2 + A^2/(2*J) * dt + A^3/(6*J^2);
     s = 1 - s;  
elseif ( t > T(1)+T(2)+T(3)+T(4)+T(5)+T(6) && t <= T(1)+T(2)+T(3)+T(4)+T(5)+T(6)+T(7) + 1e5 )
     t_temp = Tf - t; 
     s = 1/6 * J * t_temp^3;
     s = 1 - s;     
end
 
end

テストのコードは次のとおりです。TEST

%%
N = 500;

ThetaStart = 0; %起始位置
ThetaEnd = 90; %最终位置
VTheta = 90;    %1   速度
ATheta = 135;   %1.5   加速度
Tf = 1.8;  % 总行程时间

v = VTheta/(ThetaEnd - ThetaStart);
a = ATheta/(ThetaEnd - ThetaStart);
v = abs(v);
a = abs(a);


Theta = zeros(1,N);
s = zeros(1,N);
sd = zeros(1,N);
sdd = zeros(1,N);

[TF,V,A,J,T] = SCurvePara(Tf, v, a);
display(J, 'J:');
display(TF,'Tf:');
display(V,'v:');
display(A, 'da:');

display(TF-Tf,'dTf:');
display(V-v,'dv:');
display(A-a, 'da:');

t=linspace(0,TF,N);
dt = t(2) - t(1);
for i = 1:N
    if i == N
        a = a;
    end
    s(i) = SCurveScaling(t(i),V,A,J,T,TF);
    Theta(i) = ThetaStart + s(i) * (ThetaEnd - ThetaStart);
    if i>1
        sd(i-1) = (s(i) - s(i-1)) / dt;
    end
    if i>2
        sdd(i-2) = (sd(i-1) - sd(i-2)) / dt;
    end
end

subplot(3,1,1);
legend('Theta');
xlabel('t');
subplot(3,1,1);
plot(t,s)
legend('位移');
xlabel('t');
title('位置曲线');

subplot(3,1,2);
plot(t,sd);
legend('速度');
xlabel('t');
title('速度曲线');

subplot(3,1,3);
plot(t,sdd);
legend('加速度');
xlabel('t');
title('加速度曲线');

最終的なシミュレーション結果が予想どおりであることを確認してください。6c89c80d75fbcd55c17edae9cb26a238.jpeg

最後に、T 字型と S 字型の速度曲線計画の効果を比較してみましょう。

5 まとめ

この記事では、7 セグメントの S カーブ計画の詳細な導出と紹介のみを提供します。MATLAB のプログラムは、4 セグメントと 5 セグメントの両方に実装されています。それらの多くは、理想的な条件下で推定されます。初期速度はデフォルトで 0 です。終端速度も0であり、加速領域と減速領域は対称であると仮定されます。最終的な実行結果は期待どおりです。

6 参考

[1]: Chen Youdong、Wei Honxing、Wang Qikui. CNC システム用の線形および S 字型加速および減速離散アルゴリズム [D]. 北京: 中国機械工学、2010. [2]: Guo Xingui、Li Congxin、研究S 字加減速アルゴリズム、上海交通
大学国立金型 CAD 工学研究センター、200030

------------ 終了 ------------

f64f38b0a33cb761097c196473ef91f1.gif

●コラム「組み込みツール

●コラム「組込み開発」

●コラム「Keilチュートリアル」

●埋め込み列選択チュートリアル

公式アカウントをフォローして「グループを追加」と返信するとルールに従って技術交流グループに参加でき、「1024」と返信するとさらにコンテンツが閲覧できます。

bb2cd42857e58c7942a7483f9013bdf7.jpeg

b2b57a90d06581841ef7bf4a20a57e12.png

さらに共有を表示するには、「元のテキストを読む」をクリックしてください。

おすすめ

転載: blog.csdn.net/ybhuangfugui/article/details/132893206