欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 使用Excel 对S型曲线加减速算法进行仿真

使用Excel 对S型曲线加减速算法进行仿真

2025/4/22 20:51:01 来源:https://blog.csdn.net/m0_53089597/article/details/144313292  浏览:    关键词:使用Excel 对S型曲线加减速算法进行仿真

项目场景:

项目场景:代码中写了S型加减速算法,相查看生成的加减速数组,直观的展示出来,USB通信一次64字节,对于我几个个32位的频率值不太方便,于是采用Excel进行仿真。


代码中如何生成S加减速曲线数组?

这是原理:传送门
不再过多赘述,本文要点在于仿真。

这是我用代码复现:
使用2种曲线对比效果

uint32_t CurveS_Para[100]={0};  //频率列表/*正常版
*pbuff 存放S曲线的脉冲对应 ARR寄存器的值fre_max  最大频率fre_min  起始频率count 需要加速次数
*/
void CurveS_init_1(uint32_t *pbuff,uint32_t fre_max, uint32_t fre_min,int16_t count)
{int16_t i;uint16_t flexible =4;//曲线区间4-6float del_fre = fre_max-fre_min;float deno;float melo;float fre;for(i = 0;i<count;i++){melo = flexible* (i-count/2.0f) / (count/2.0f);deno = 1.0f / (1 + expf(-melo));fre = del_fre * deno + fre_min;pbuff[i] = (uint32_t)ceil((float)TIM1_CLOCK_FREQ/fre);}	
}
/*
平移拉伸版
*/
void CurveS_init_2(uint32_t *pbuff,uint32_t fre_max, uint32_t fre_min,int16_t count)
{int16_t i;float del_fre = fre_max-fre_min;float deno;//分母部分float melo;//指数函数自变量float fre;for(i = 0;i<count;i++){melo = ((-i*14.0f) /count)+7.0f;deno = 1.0f / (1.0f + expf(melo));fre = del_fre * deno + fre_min;pbuff[i] = (uint32_t)ceil((float)TIM1_CLOCK_FREQ/fre);}	
}

Excel如何实现上述仿真:

  • 代码中有循环,在Excel中某列输入顺序数,右下角下拉,生成需要的数组个数。
    在这里插入图片描述
  • 第二列编辑公式,保存后下拉。

正常版:=CEILING.MATH((495001)/(1+EXP(-4((A1-50)/50)))+500)

在这里插入图片描述

拉伸版:=CEILING.MATH((49500)/(1+EXP((-14*A1/100)+7))+500)
在这里插入图片描述
选中AB 或AC列生成散点图
在这里插入图片描述

  • 修改名称
    正常版:
    在这里插入图片描述
    拉伸版:
    在这里插入图片描述

效果展示:

经过Excel仿真后,用这个数组在代码中对步进电机进行加减速控制。生成PWM波形如下:

  • 百步加减速:

在这里插入图片描述

  • 按比例20步加减速:

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词