梯形运动曲线

把运动分成加速、恒速、减速三部分,当输入运动的总脉冲数N,初速度V0,末速度V1,加速度a,目标速度V,
求出加减速过程中的最大速度:
N>=(2V_Max2-(V12-V0^2))/2a
转换得:
V_Max=sqrt(((V12+V02)-2a*N)/2)

然后比较目标速度V和系统能达到的最大速度V_Max的大小,若目标速度V大于最大速度,则目标速度V只能按最大速度V_Max运行,是^型运动,反之梯形运动
if(V<V_Max)
Vlim=V;
else
Vlim=V_Max;
分别计算匀加速、匀速、匀减速的时间和位移:
匀加速运动时间T1=(Vlim-V0)/a
匀加速位移量S1=V0T1+(a1T1^2)/2

恒速运动时间T2=(N-(Vlim2-V_Start2)/(2A_Max)-(V_End2-Vlim2)/2-A_Max)/Vlim; //(总脉冲数-加速量-减速量)/速度=t
恒速运动位移S2=Vlim*T2;

匀减速运动时间T3=(V1-Vlim)/-a;
匀减速运动位移量S3=V0T3+(a1T3^2)/2

总运动时间T=T1+T2+T3
于是求出各匀加速、匀减速、恒速阶段的瞬时的路程S,速度V,加速度A
for(t=0;t<=T; t++)//t表示某一时刻
{
if(t>=0&&t<T1)//加速阶段
{
S=V_Startt+A_Maxt^2/2;
V=V_Start+A_Maxt;
A=A_Max;
printf(“V=%d\r\n”,V);
fprintf(fpy,"%d",V);
fprintf(fpy,"\n");
}
else if(t>=T1&&t<T1+T2)//恒速阶段
{
S=S1+Vlim
(t-T1);
V=Vlim;
A=0;
printf(“V=%d\r\n”,V);

  	fprintf(fpy,"%d",V);
fprintf(fpy,"\n");
  }
  else if(t>T1+T2&&t<=T)//减速速阶段
  {
	  S=S1+S2+Vlim*(t-T1-T2)-A_Max*pow(t-T1-T2,2)/2;
      V=Vlim-A_Max*(t-T1-T2);
	  A=-A_Max;
	  	printf("V=%d\r\n",V);
  	fprintf(fpy,"%d",V);
fprintf(fpy,"\n");
  }

下载源码请加嵌入式+C#上位机学习资源QQ群:257536638

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值