qaya 发表于 2018-4-23 10:03:17

一种步进电机加速曲线的实现方式

本帖最后由 qaya 于 2018-4-24 08:44 编辑

在论坛学习了这么久,无以回报,把自己的一个雕虫小技发上来给大家参考,做成PDF方便下载。

补充一下,楼下有朋友问到S曲线,这里加上一段求S曲线的代码。代码是从其他地方拷贝来的,已经不记得来源了,这里对作者表示感谢。
/*calculate the Period and Freq array value, fill the Period value into the Period register during the timer interrupt.

*calculate the acceleration procedure , a totally 1000 elements array.

* parameter    fre[]: point to the array that keeps the freq value.

*   period[]: point to the array that keeps the timer period value.

*   len: the procedure of acceleration length.it is best thing to set the float number, some compile software maybe transfer error if set it as a int

*   fre_max: maximum speed, frequency vale.

*   fre_min: start minimum speed, frequency vale.mind : 10000000/65535 = 152, so fre_min can't less than 152.

*   flexible:flexible value. adjust the S curves

*/

void CalculateSModelLine(float fre[],unsigned short period[],   floatlen,float fre_max,float fre_min, float flexible)
{
    int i=0;
    float deno ;
    float melo ;
    float delt = fre_max-fre_min;
    for(; i<len; i++)
    {
      melo = flexible * (i-len/2) / (len/2);
      deno = 1.0 / (1 + expf(-melo));   //expf is a library function of exponential(e)
      fre = delt * deno + fre_min;
      period = (unsigned short)(10000000.0 / fre);    // 10000000 is the timer driver frequency
    }


    return ;
}

lisingch 发表于 2018-4-23 10:20:02

不错,多谢!

weiwei4 发表于 2018-4-23 10:21:54

不错,写得挺详细的

UCboy 发表于 2018-4-23 10:22:48

很详细, 谢谢LZ无私分享

KK_kong 发表于 2018-4-23 10:31:46

谢谢分享

东瓜 发表于 2018-4-23 10:37:37

可以,学习了,谢谢!

xf331785508 发表于 2018-4-23 12:00:04

帮你把首页截下来,先睹为快,再决定下载与否。

xingzhong 发表于 2018-4-23 12:31:41

谢谢,写得挺详细的

ysoni 发表于 2018-4-23 12:52:46

谢谢分享

krdzw 发表于 2018-4-23 13:08:50

谢谢分享

No.5 发表于 2018-4-23 13:20:07

就冲分享精神也要顶

wthzack 发表于 2018-4-23 14:09:27

谢谢LZ无私分享

ylei12 发表于 2018-4-23 15:37:49

楼主辛苦了

1785345205 发表于 2018-4-23 17:18:59

谢谢分享

flyzouyao 发表于 2018-4-23 17:32:50

学习了,谢谢分享!

honeybear 发表于 2018-4-23 17:42:29

谢谢楼主的分享,进来学习一下

wsh 发表于 2018-4-23 18:31:44

步进电机 顶一下

xuxueliang 发表于 2018-4-23 19:05:57

学习了,以前都是用inderect指令,没想到有更简单方便的

amxx 发表于 2018-4-23 20:47:08

楼主的方法和我的很像哦,但是我的限定值是为时间,比如从2K升到20K,限定0.1s,也是通过EXCEL得出的,貌似现在也只能用于直线加减速,S的还没有找到和是的公式

amxx 发表于 2018-4-23 20:48:15

不过最近搞了STM32F4(有浮点指令),准备直接在MCU里面运算出相应的数据了,这样也灵活得多了

ap0705307 发表于 2018-4-23 20:59:40

MARK!!!!!!

qzwx741 发表于 2018-4-23 21:12:21

谢谢分享

xbmo1234 发表于 2018-4-24 00:58:17

又占空间又占时间,直接上STM32 DMA传送,省时又省力

tarzar 发表于 2018-4-24 08:04:39

楼主,棒棒的,谢谢分享!

pmair 发表于 2018-4-24 08:45:33

顶楼主,十分感谢

小康之家 发表于 2018-4-27 11:03:04

谢谢分享!

XTXB 发表于 2018-7-21 09:34:47

本帖最后由 XTXB 于 2018-7-21 10:15 编辑

amxx 发表于 2018-4-23 20:47
楼主的方法和我的很像哦,但是我的限定值是为时间,比如从2K升到20K,限定0.1s,也是通过EXCEL得出的,貌似 ...

楼主的计算方法高明!楼主以距离为加速度曲线的横坐标,个人觉得以时间为横坐标才是加速度的本意。

advarx21ic 发表于 2018-7-21 09:58:56

感谢分享

amxx 发表于 2018-7-21 13:53:36

向楼主学习一下

lcmdw 发表于 2018-7-21 21:09:01

学习   

bg6agf 发表于 2018-7-21 22:23:40

用了自然对数?不如把这个对数改成一个表?应该问题也不大吧。

sandeant 发表于 2018-7-23 14:05:06

谢谢LZ无私分享
页: [1]
查看完整版本: 一种步进电机加速曲线的实现方式