衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

電機運動控制算法之S速度曲線規劃算法

strongerHuang ? 來源:小麥大叔 ? 作者:小麥大叔 ? 2023-09-14 09:28 ? 次閱讀

轉自| 小麥大叔

搞過電機或運動控制的小伙伴應該知道,S曲線很重要,下面一張動圖對比一下,你就知道S曲線的好處。

今天就給大家描述一下S速度曲線規劃算法。

1 前言

S形加減速的最重要特征是該算法的加速度/減速度曲線的形狀如字母 S。S形加減速的速度曲線平滑 ,從而能夠減少對控制過程中的沖擊,并使插補過程具有柔性 [^1]。由于T形曲線在加速到勻速的切換過程中,實際中存在較大過沖,因此這里對比一下T曲線和7段S曲線的實際過程;

T形:加速 -> 勻速 -> 減速

S形:加加速(T1) -> 勻加速(T2) -> 減加速(T3)-> 勻速(T4)-> 加減速(T5)-> 勻減速(T6)-> 減減速(T7)

上文在加速這塊的文字描述可能讀起來起來有點繞,下面看圖:
fe6dc1b4-5294-11ee-a25d-92fbcf53809c.png

2 理論分析

由于S曲線在加減速的過程中,其加速度是變化的,因此這里引入了新的一個變量 J,即加加速度
image.png

因此對應上圖的7段S速度曲線中,規定最大加速為amax,最小加速度為-amax,則加速度的關系;

image.png

所以通常需要確定三個最基本的系統參數 :系統最大速度umax ,最大加速度a_{max} ,加加速度,就可以可確定整個運行過程[^2] ;

最大速度:反映了系統的最大運行能力 ;

最大加速度:反映了系統的最大加減速能力 ;

加加速度:反映了系統的柔性;

柔性越大,過沖越大,運行時間越短;

柔性越小,過沖越小,運行時間越長;

2.1 加速度時間關系方程

整個加速度變化的過程具體如下圖所示;

fe8a3970-5294-11ee-a25d-92fbcf53809c.png

image.png

2.2 速度時間關系方程

速度和加速度滿足 ;加加速度和速度的關系滿足:

結合加速度時間關系并結合② 式可以得到速度曲線關系,具體關系如下圖所示;
fe9930ce-5294-11ee-a25d-92fbcf53809c.png
進一步簡化可以得到:
feb4bb5a-5294-11ee-a25d-92fbcf53809c.png

2.3 位移時間關系方程

image.png

積分忘的差不多了,回去再復習一下;

最終位移的方程如下所示;
feca83ea-5294-11ee-a25d-92fbcf53809c.png

3 程序實現的思路

正如前面所提到的,S曲線規劃需要確定三個最基本的系統參數 :系統最大速度 ,最大加速度a_{max} ,加加速度,這樣就可以確定這個運行過程。這里有一個隱性的條件,就是在運行的過程中可以達到最大速度,這樣才是完整的7段S曲線,另外這里還有一些中間參數:

image.png
image.png

image.png

4 matlab 程序

matlab程序親測可以運行,做了簡單的修改,因為這里直接給定了整個運行過程的時間,所以需要在SCurvePara函數中求出加加速度 的值,路程為 1:

SCurvePara

function[Tf1,V,A,J,T]=SCurvePara(Tf,v,a)
T=zeros(1,7);
fori=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曲線的類型
ifT(2)

SCurveScaling

functions=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);
fori=1:N
ifi==N
a=a;
end
s(i)=SCurveScaling(t(i),V,A,J,T,TF);
Theta(i)=ThetaStart+s(i)*(ThetaEnd-ThetaStart);
ifi>1
sd(i-1)=(s(i)-s(i-1))/dt;
end
ifi>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('加速度曲線');

看到最終仿真結果和預期相同;fef5f17e-5294-11ee-a25d-92fbcf53809c.jpg

最后再看一下T形和S形速度曲線規劃的效果對比:

5 總結

本文只對7段的S曲線規劃做了詳細的推導和介紹,matlab中的程序對于4段和5段都有做實現,很多是在理想情況下進行推導的,初始速度默認為0,終止速度也為0,并且假設加減速區域相互對稱。最終運行結果符合預期效果。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 電機
    +關注

    關注

    142

    文章

    9081

    瀏覽量

    146369
  • 運動控制
    +關注

    關注

    4

    文章

    588

    瀏覽量

    32981
  • 控制算法
    +關注

    關注

    4

    文章

    166

    瀏覽量

    21795

原文標題:電機運動控制算法總結

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    DSP 速度曲線規劃 電機

    請教大家,如何做DSP 電機速度曲線規劃? eg:做一個梯形的速度曲線規劃,有一個先加速,再勻速,再減速的過程。程序上如何實現呢?已經實現了位置環控制。本人想在位置環內
    發表于 04-25 18:04

    動態規劃算法。

    動態規劃算法資料。
    發表于 08-30 20:44

    LCS的動態規劃算法

    LCS的動態規劃算法(自底向上)
    發表于 05-25 15:06

    步進電機T型與S速度曲線

    一種用于步進電機速度的新算法可以實現速度曲線的實時參數化和計算。該算法可以在低端微控制器上運行
    發表于 06-28 10:15

    有什么方法可以實時生成步進電機速度曲線

    實時生成步進電機速度曲線一種用于步進電機速度的新算法可以實現速度曲線的實時參數化和計算。該
    發表于 07-07 07:18

    步進電機驅動算法——S形加減速算法原理 精選資料下載

    目錄步進電機S形加減速簡介七段S形加減速算法原理分析五段S形加減速算法實現
    發表于 07-08 09:18

    電機的梯形曲線規劃的問題

    ??電機驅動是很常見的應用,在很多系統中我們都會碰到需要改變電機速度以實現相應的控制功能,這就涉及到電機
    發表于 09-03 08:34

    電機S曲線規劃的問題

    ??電機驅動是很常見的應用,在很多系統中我們都會碰到需要改變電機速度以實現相應的控制功能,這就涉及到電機
    發表于 09-03 06:51

    實時生成步進電機速度曲線

    步進電機加速的新算法能夠將速度曲線參數化并進行實時計算。這種算法能在低端微控制器上運行,只采用簡單的定點運算,沒有數據表。它為恒加速和減速線
    發表于 01-02 11:09 ?206次下載

    工業機器人空間曲線實時軌跡規劃算法

    本文設計了一種六軸機械臂沿空間曲線行走的控制算法算法使機器人對輸入空間曲線計算出各關節的電機
    發表于 02-23 13:52 ?49次下載

    多軸聯動線性插補及其_S加減規劃算法

    多軸聯動線性插補及其_S加減速”規劃算法
    發表于 05-03 14:23 ?15次下載

    基于路徑跟蹤方法的路徑規劃算法

    為解決拖掛式移動機器人系統路徑規劃算法精準性低、穩定性差和無法考慮系統間安全性等的問題,提出一種基于路徑跟蹤方法的路徑規劃算法。該算法融合快速拓展隨機樹( RRT)基本算法和路徑跟蹤
    發表于 12-04 14:18 ?6次下載
    基于路徑跟蹤方法的路徑<b class='flag-5'>規劃算法</b>

    如何使用S曲線進行步進電機加減速的控制設計資料說明

    針對不同約束條件下步進電機加減速的控制問題,首先分析了 S 曲線算法原理,尋找 S
    發表于 03-13 08:00 ?0次下載
    如何使用<b class='flag-5'>S</b><b class='flag-5'>曲線</b>進行步進<b class='flag-5'>電機</b>加減速的<b class='flag-5'>控制</b>設計資料說明

    CNC系統中S曲線加減速規劃算法的研究實現

    技術難題。 優良的升降速控制能在很大程度上提高加工精度。 對 S曲線加減速算法進行了深入的理論和應用研究, 通過該算法使系統的
    發表于 03-16 17:09 ?18次下載
    CNC系統中<b class='flag-5'>S</b><b class='flag-5'>曲線</b>加減速<b class='flag-5'>規劃算法</b>的研究實現

    詳解S型加減速曲線規劃算法總結

    S形加減速的最重要特征是該算法的加速度/減速度曲線的形狀如字母 SS形加減速的
    的頭像 發表于 04-09 17:18 ?3.2w次閱讀
    詳解<b class='flag-5'>S</b>型加減速<b class='flag-5'>曲線規劃算法</b>總結
    百家乐娱乐注册就送| 百家乐官网怎么会赢| 都江堰市| 百家乐官网游戏真人游戏| 百家乐官网怎么对冲打| 百家乐官网赌博博彩赌博网| 回力百家乐官网的玩法技巧和规则| 百家乐玩法守则| 百家乐可以破解吗| bet365娱乐官网| 百家乐官网怎么玩了| 红宝石百家乐官网娱乐城 | 品尊国际娱乐| 百家乐官网连跳规律| 圣淘沙百家乐官网的玩法技巧和规则 | 筠连县| 棋牌游戏开发商| 澳门百家乐洗码提成查询| 太阳城百家乐娱乐开户| 遂宁市| 百家乐官网视频多开器| 太阳百家乐官网代理| 百家乐怎么玩会| 网上现金棋牌| 百家乐官网真人娱乐城| 定制百家乐官网桌垫| 百家乐视频金币| 试玩百家乐帐| 淄博市| 澳门百家乐官网打法百家乐官网破解方法 | 博彩网18good| 娄烦县| 百家乐官网路单统| 威尼斯人娱乐场cqsscgw88| 江川县| 做生意摆放什么财神爷| 大发888游戏平台 46| 百家乐作弊| 發中發百家乐官网的玩法技巧和规则| 百家乐过滤| 网络百家乐官网免费试玩|