资源简介
S曲线 MATLAB仿真通过 共分三段:平方曲线;直线;平方曲线倒转并移动
代码片段和文件信息
%**********************************************************%
%指令最后加分号,表示该变量不显示;指令最前面加%表示注释该行
%时间都以ms为单位,频率都以Hz为单位
%**********************************************************%
%下面几条参数是S曲线调用时的参数传递进来的
MIN_F=0 %先假设最低频率为0
MAX_F=2000 %先假设最高频率为2K,目前做最高可达20K
N=10000; %假设总脉冲个数为<=10000
T=100 %假设总时间为1S
%**********************************************************%
%下面3个参数调用伺服里面的或者PLC自己设定的
UP_T=30 %加速时间(单位:mS)%T1T2把UP_T分割成三段
DN_T=30 %减速时间(单位:mS)
S_T =10 %第一段平方曲线时间(单位:mS);由此可以调节
%它在整个S型曲线时间(UP_T或DN_T)
%所占比例,从而调节S曲线的程度
%**********************************************************%
%把时间转换成以10us为基本单位
T3=UP_T*100 %加速时间2S%T1T2把UP_T分割成三段
DN_TT=DN_T*100 %减速时间2S
S_TT=S_T*100 %第一段平方曲线时间(单位:mS);由此可以调节
TT=T*100 %总时间T/10us=多少个10us
%**********************************************************%
%S曲线中间的6个分界点时间计算
%加速段的两个分界时间
T1= S_TT
T2=T3-S_TT
%中间保持段的两端时间
T3= T3
T4=TT-DN_TT
%减速段的两个分界时间
T5=T4 +S_TT
T6=TT-S_TT
%**********************************************************%
Supt=0.5* (MAX_F+MIN_F) * T3 %到UP_T时刻的面积
Sroundt= (T4-T3)*MAX_F %ROUND_T段的面积
Sdnt=0.5*MAX_F*DN_TT %从DN_T开始到结束段的面积
Sall= Supt+ Sroundt+ Sdnt %整个S曲线的面积
%**********************************************************%
%if S_T ~= 0
A1= (MAX_F-MIN_F)/( T1 *T3- T1^2) %平方曲线系数 %T1<0.5UP_T
%第二步:判断T3是否
%if 2*T3>T
%晚点做
%**********************************************************%
%画图f1
t=linspace(0TTTT+1);
B=0
a=zeros(TT+11);
for t1=1:T1-1
C= ((1/6)*t1^3*A1 +MIN_F*t1) *N /Sall;
a(t1)=round(C-B);
if a(t1)~=0
B= B+a(t1);
end
end
f1_c=C;
plot(ta);
grid on
%**********************************************************%
%**********************************************************%
%画图f2
if T1~=T2
for t2=T1:T2-1
C= ( (MIN_F-0.5*A1*T1^2)*(t2-T1)+0.5*A1*T1*(t2^2-T1^2) )*N/Sall;
a(t2)=round(C+ f1_c -B);
if a(t2)~=0
B= B+a(t2);
end
end
f2_c=C+ f1_c ;
plot(ta);
grid on
end
%**********************************************************%
%**********************************************************%
%画图f3
for t3=T2:T3-1
C=( MAX_F*(t3-T2)-0.5*A1*( T3^2*(t3-T2)-T3*(t3^2-T2^2)+(1/3)*(t3^3-T2^3) ) )*N/Sall;
a(t3)=round(C+f2_c-B);
if a(t3)~=0
B= B+a(t3);
end
end
f3_c=C+f2_c;
plot(ta);
grid on
%**********************************************************%
%画图f4
for t4= T3: T4-1
C=(t4-T3)* MAX_F*N/Sall;
a(t4)=round(C+f3_c-B);
if a(t4)~=0
B= B+a(t4);
end
end
f4_c=C+f3_c;
plot(ta)
grid on
;
A2= MAX_F /( T1 *DN_TT- T1^2) %平方曲线系数
%**********************************************************%
%画图f5
for t5= T4: T5-1
C=(MAX_F*(t5-T4)-(0.5*A2*((1/3)*t5^3-T4*t5^2+T4^2*t5-(1/3)*T4^3)))*N/Sall;
a(t5)=round(C+f4_c-B);
if a(t5)~=0
B= B+a(t5);
end
end
f5_c=C+f4_c;
plot(ta)
grid on
%**
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3916 2008-12-18 17:09 完整的S曲线下次还加判断S部分=0时变线性的.m
----------- --------- ---------- ----- ----
3916 1
- 上一篇:用MATLAB编写的高斯脉冲
- 下一篇:外点牛顿罚函数优化matlab代码
评论
共有 条评论