搜索
bottom↓
回复: 77

原创:很早以前在RTT上做的S型电机加减速表计算,欢迎拍砖

  [复制链接]

出0入0汤圆

发表于 2014-8-31 22:53:34 | 显示全部楼层 |阅读模式
本帖最后由 wangpengcheng 于 2014-9-1 13:04 编辑

为了配合理解,我做了一个EXCEL的数学模型传上来:

EXCEL文件:

注释已经很详细了,呵呵,我就不多说了!在RTT平台上实现的,虽然跟飞思卡尔没关系,但是看到有很多做电机驱动的,就发出来给大家!
做这段代码的时候用到高中物理中的知识,发点感慨,人不知道什么时候学的东西就能用的上,呵呵!

  1. #ifndef __SPEED_H__
  2. #define __SPEED_H__
  3. #include "rtthread.h"
  4. #include "finsh.h"
  5. /*  三分之一加减速法则:
  6. 加速路程不超过三分之一总路程,
  7. 这样做的目的是给减速留有足够的时间去检测减速点,
  8. 进而实现平稳的将速度减到初速度,
  9. 如果在处理速度够快的情况下,
  10. 可以选择二分之一加减速
  11. */
  12. //加减速法则,2分之一法则或3分之一法则
  13. #define SPEEDPRINCIPLE              3
  14. //电机最大转速,单位转/min
  15. #define MOTOMAXSPEED                1500   
  16. //电机每转对应的传动距离,单位:mm
  17. #define MOTOROUNDLENGTH             36
  18. //电机最大初速度,初速度超过该值会对电机造成伤害,单位转/min
  19. #define MOTOMAXSTART                200
  20. //驱动器细分数
  21. #define DRIVERSFRACTION             1
  22. //电机细分数
  23. #define MOTOFRACTION                200
  24. //根据初速度,末速度,以及时间,计算加速路程
  25. #define ACCELERATESPACE(V0,Vt,t)    (((V0) + (Vt)) * (t) / 2)
  26. //根据加速路程,初速度,以及时间,计算末速度
  27. #define LASTVELOCITY(S,V0,t)        (2 * (S) / (t) - (V0))
  28. //根据电机转速(转/min),计算电机步速度(step/s)
  29. #define STEPSPEED(RV)               ((RV) * MOTOFRACTION * DRIVERSFRACTION / 60)
  30. //根据长度计算电机所需走的步数,S的单位为mm
  31. #define TOTALSTEP(S)                S * MOTOFRACTION * DRIVERSFRACTION / MOTOROUNDLENGTH
  32. struct SPEED
  33. {
  34.     int         V0;                 //初速度,单位:step/s
  35.     int         Vt;                 //末速度,单位:step/s
  36.     long long   S;                  //路程,单位:step
  37.     double      t;                  //加速时间,单位:s
  38.     int         time;               //加速次数    单位:次
  39.     int         *SpeedTab;          //加速速度表,速度单位:step/s
  40.     int         SecSpeedPoint;      //减速点 单位:step(在电机运动过程中,如果剩余路程小于等于该值,那么电机开始减速)
  41. };
  42. typedef struct SPEED * Speed_t;


  43. //各参数范围值,可以在此设置参数范围
  44. //初速度大于0小于电机最高起速,末速度大于初速度,小于电机最高转速
  45. #define IS_SPEED(V0,Vt)     (((V0) >= 0) && ((V0) <= STEPSPEED(MOTOMAXSTART))  \
  46.                             && ((Vt) >= (V0)) && ((Vt) <= STEPSPEED(MOTOMAXSPEED)))                           
  47. #define IS_SPACE(S)         ((S) > 0)
  48. #define IS_ADDTIMING(t)     ((t) > 0)            
  49. #define IS_ADDTIME(time)     ((time) >= 32)        //让加速次数必须大于等于32,否则计算表格就没什么意义

  50. #endif


  51. #include "Speed.h"
  52. //函数名称: CalculateSpeedTab
  53. //函数功能:计算加减速表
  54. //参数参数:Speed 速度结构体
  55. //             V0;                //初速度,单位:step/s
  56. //             Vt;                //末速度,单位:step/s
  57. //             S;                 //路程,单位:step
  58. //             t;                 //加速时间,单位:s
  59. //             time;              //加速次数    单位:次
  60. //             *SpeedTab;         //加速速度表,速度单位:step/s
  61. //             SecSpeedPoint;     //减速点 单位:step
  62. //返回输出:速度结构体
  63. static Speed_t CalculateSpeedTab(Speed_t Speed)
  64. {
  65.     int i;                        
  66.     double aa;                    //加加速
  67.     int DeltaV;                   //速度变化量
  68.     int tempVt;
  69.     //如果速度记录表的指针为空,说明没有分配内存
  70.     RT_ASSERT(Speed->SpeedTab != RT_NULL);
  71.     //各参数是否超范围
  72.     RT_ASSERT(IS_SPEED(Speed->V0, Speed->Vt));
  73.     RT_ASSERT(IS_SPACE(Speed->S));
  74.     RT_ASSERT(IS_ADDTIMING(Speed->t));
  75.     RT_ASSERT(IS_ADDTIME(Speed->time));
  76.     //根据加速法则计算末速度
  77.     tempVt = LASTVELOCITY(Speed->S / SPEEDPRINCIPLE, Speed->V0, Speed->t);
  78.     Speed->Vt = (tempVt > Speed->Vt) ? Speed->Vt : tempVt;                                                   
  79.     Speed->SecSpeedPoint = ACCELERATESPACE(Speed->V0, Speed->Vt, Speed->t);        //计算减速点位置,剩余路程为该值时开始减速
  80.     aa = (double)((Speed->Vt - Speed->V0) / 2)      //加速度变化拐点时的速度值                           a|   /|\            
  81.         * 2                                         //知道直角三角形面积,逆推三角型高度时将面积*2        |  / | \面积为DeltaV
  82.         / (Speed->time / 2)                         //除以底边                                            | /  |  \            
  83.         / (Speed->time / 2);                        //再除以底边,得到斜率,即加加速                      |/___|___\__time   
  84.     //开始速度计算
  85.     for(i = 0; i < ((Speed->time / 2) + 1); i++)
  86.     {
  87.         DeltaV = (aa * i * i) / 2;                                     //V = V0 + a * t / 2;  a = aa * t;
  88.         *(Speed->SpeedTab + i) = Speed->V0 + DeltaV;                   //当前点的速度
  89.         *(Speed->SpeedTab + Speed->time - i) = Speed->Vt - DeltaV;     //对称点的速度
  90.     }
  91.     return Speed;
  92. }
  93. //函数名称:TestSpeed
  94. //函数功能:测试速度表计算函数
  95. //函数参数:V0      初速度,单位:转/min
  96. //          Vt      末速度,单位:转/min
  97. //          S       路程,单位:mm
  98. //          time    加速次数
  99. //函数返回:无
  100. void TestSpeed(int V0, int Vt, int S, int time)
  101. {
  102.     int i;
  103.     Speed_t Speed = (Speed_t)rt_malloc(sizeof(struct SPEED));
  104.     Speed->V0 = STEPSPEED(V0);    //起速
  105.     Speed->Vt = STEPSPEED(Vt);    //末速
  106.     Speed->S = TOTALSTEP(S);      //路程
  107.     Speed->t = 0.2;               //加速时间设为0.2秒
  108.     Speed->time = time;           //加速次数
  109.     Speed->SpeedTab = (int *)rt_malloc(sizeof(int) * (Speed->time + 1)); //根据加速次数申请表格内存,加1,以防用的时候超界
  110.     CalculateSpeedTab(Speed);       //开始计算
  111.     for(i = 0; i < Speed->time; i++)
  112.     {
  113.         rt_kprintf("SpeedTab[%d] = %d, Acceleration = %d\n"
  114.                   , i
  115.                   , *(Speed->SpeedTab + i)
  116.                   , *(Speed->SpeedTab + i + 1) - *(Speed->SpeedTab + i));
  117.     }
  118.     rt_kprintf("SpeedTab[%d] = %d\n", i, *(Speed->SpeedTab + i));
  119.     rt_free(Speed->SpeedTab);              
  120.     rt_free(Speed);                    
  121. }

  122. FINSH_FUNCTION_EXPORT(TestSpeed, Test Speed table calculate);

复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2014-8-31 23:10:38 来自手机 | 显示全部楼层
好东西啊,先顶一下,明天细看

出0入0汤圆

发表于 2014-8-31 23:12:03 | 显示全部楼层
收藏         

出0入0汤圆

 楼主| 发表于 2014-8-31 23:12:50 | 显示全部楼层
cn_x 发表于 2014-8-31 23:10
好东西啊,先顶一下,明天细看

以前因为公司限制了网络,只能上CSDN,所以在CSDN上建了个博,然后都放那上面,这是刚才才发现的,现在转过来

出0入0汤圆

 楼主| 发表于 2014-8-31 23:13:32 | 显示全部楼层

谢谢支持哦!

出0入0汤圆

发表于 2014-8-31 23:14:30 来自手机 | 显示全部楼层
楼主做了好多东西呢,很给力

出0入0汤圆

发表于 2014-8-31 23:16:07 | 显示全部楼层

好东西我们都会支持的

出0入0汤圆

 楼主| 发表于 2014-8-31 23:19:00 | 显示全部楼层
sunnyqd 发表于 2014-8-31 23:14
楼主做了好多东西呢,很给力

飞币上不去,呵呵,现在都开始翻老本了!

出0入0汤圆

发表于 2014-8-31 23:20:39 | 显示全部楼层
好东西,收藏学习了。

出0入0汤圆

发表于 2014-9-1 00:11:26 | 显示全部楼层
wangpengcheng 发表于 2014-8-31 23:12
以前因为公司限制了网络,只能上CSDN,所以在CSDN上建了个博,然后都放那上面,这是刚才才发现的,现在转 ...

据了解有几个公司把  www.rt-thread.org 列入了白名单

出0入0汤圆

 楼主| 发表于 2014-9-1 00:17:34 来自手机 | 显示全部楼层
aozima 发表于 2014-9-1 00:11
据了解有几个公司把  www.rt-thread.org 列入了白名单

rtt还是蛮不错的一个os,我挺喜欢用的

出0入0汤圆

发表于 2014-9-1 00:22:39 | 显示全部楼层
太晚了每天看                        

出0入0汤圆

发表于 2014-9-1 00:54:59 | 显示全部楼层
等明天有空了看,先收藏

出0入0汤圆

发表于 2014-9-1 00:58:00 来自手机 | 显示全部楼层
好东西得顶

出100入101汤圆

发表于 2014-9-1 06:23:51 | 显示全部楼层
这个适用于什么类型的电机?

出0入0汤圆

发表于 2014-9-1 08:24:36 | 显示全部楼层
aozima 发表于 2014-9-1 00:11
据了解有几个公司把  www.rt-thread.org 列入了白名单

啥叫白名单? 就是指定要使用?  

出0入0汤圆

发表于 2014-9-1 08:28:10 | 显示全部楼层

楼主博客在哪?  话说, 有使用例程和电机类型(步进电机吗?)

出0入0汤圆

发表于 2014-9-1 09:10:11 | 显示全部楼层
哈,这个给力!赶紧给加精吧。

出0入0汤圆

发表于 2014-9-1 09:16:06 | 显示全部楼层
kinsno 发表于 2014-9-1 08:24
啥叫白名单? 就是指定要使用?

大部分外网不能访问,只能访问白名单里面的内容。
一般要上外网查资料的话,有小网吧。

出0入0汤圆

发表于 2014-9-1 09:26:52 | 显示全部楼层
wangpengcheng 发表于 2014-8-31 23:19
飞币上不去,呵呵,现在都开始翻老本了!

是呢,莫大会不会来下一波精华

出0入0汤圆

 楼主| 发表于 2014-9-1 09:40:54 | 显示全部楼层
fengyunyu 发表于 2014-9-1 06:23
这个适用于什么类型的电机?

适用于带驱动器的,用脉冲跟方向驱动的电机!

出0入0汤圆

 楼主| 发表于 2014-9-1 09:41:47 | 显示全部楼层
kinsno 发表于 2014-9-1 08:28
楼主博客在哪?  话说, 有使用例程和电机类型(步进电机吗?)

没有,呵呵!当时用的电机是步进电机,用驱动芯片进行驱动!

出0入0汤圆

 楼主| 发表于 2014-9-1 09:47:57 | 显示全部楼层
sunnyqd 发表于 2014-9-1 09:26
是呢,莫大会不会来下一波精华

肯定会有吧,呵呵!

出0入0汤圆

发表于 2014-9-1 10:42:16 | 显示全部楼层
wangpengcheng 发表于 2014-9-1 09:40
适用于带驱动器的,用脉冲跟方向驱动的电机!

          看了很久,果然不错。

           没看懂

出0入0汤圆

发表于 2014-9-1 11:00:26 | 显示全部楼层
zhangchaoying 发表于 2014-9-1 10:42
看了很久,果然不错。

           没看懂

再看看,总共才130行,还有好多注释呢

可是,我也没看懂……

出0入0汤圆

 楼主| 发表于 2014-9-1 13:07:55 | 显示全部楼层
zhangchaoying 发表于 2014-9-1 10:42
看了很久,果然不错。

           没看懂

呵呵,我用EXCEL表做了个模型,应该差不多了!

出0入0汤圆

 楼主| 发表于 2014-9-1 13:08:42 | 显示全部楼层
javabean 发表于 2014-9-1 11:00
再看看,总共才130行,还有好多注释呢

可是,我也没看懂……

其实就是加速度跟加加速在算当前点的速度!高中物理有学过,现在再看看

出0入0汤圆

发表于 2014-9-1 13:25:19 | 显示全部楼层
好东西,果断收藏!

出0入0汤圆

发表于 2014-9-1 15:14:32 | 显示全部楼层
加减速很不错的东西

出0入0汤圆

发表于 2014-9-1 15:19:27 | 显示全部楼层
发现你真是土豪啊 7896飞币 我的乖乖

出0入0汤圆

发表于 2014-9-1 15:24:22 | 显示全部楼层
谢谢分享!!!!!!!!!!!!!

出0入0汤圆

 楼主| 发表于 2014-9-1 20:20:52 | 显示全部楼层
霸气侧漏 发表于 2014-9-1 15:19
发现你真是土豪啊 7896飞币 我的乖乖

看看那个白条的,比我多多了,呵呵!

出0入0汤圆

 楼主| 发表于 2014-9-1 20:21:21 | 显示全部楼层
霸气侧漏 发表于 2014-9-1 15:19
发现你真是土豪啊 7896飞币 我的乖乖

你的币呢?不至这么点吧?换了什么?

出0入0汤圆

发表于 2014-9-1 20:25:50 | 显示全部楼层
谢谢楼主,收藏先

出0入0汤圆

发表于 2014-9-1 20:29:40 | 显示全部楼层
wangpengcheng 发表于 2014-9-1 20:20
看看那个白条的,比我多多了,呵呵!

卧槽 一天就变成8千多   怎么做到的

出0入0汤圆

 楼主| 发表于 2014-9-1 20:32:11 | 显示全部楼层
霸气侧漏 发表于 2014-9-1 20:29
卧槽 一天就变成8千多   怎么做到的

回复啊!咱是很有礼貌的人,总会回别人的话

出0入0汤圆

发表于 2014-9-1 20:33:02 | 显示全部楼层
wangpengcheng 发表于 2014-9-1 20:32
回复啊!咱是很有礼貌的人,总会回别人的话

好吧我也是有礼貌的孩子

出0入0汤圆

 楼主| 发表于 2014-9-1 20:49:16 | 显示全部楼层
霸气侧漏 发表于 2014-9-1 20:33
好吧我也是有礼貌的孩子

出0入0汤圆

发表于 2014-9-1 21:00:44 | 显示全部楼层

我关心的是你这个公式咋推来的,能把公式原型附上吗?要不从程序倒推公式,好痛苦啊,没准还错了呢?
我原来的步进是用的建表法,也还不错;但感觉吧,不咋智能;现在发现新东西了,就得改进,是不是,而且现在ARM也越来越快了,不在乎那点计算速度的;

出0入0汤圆

 楼主| 发表于 2014-9-1 21:07:24 | 显示全部楼层
kinsno 发表于 2014-9-1 21:00
我关心的是你这个公式咋推来的,能把公式原型附上吗?要不从程序倒推公式,好痛苦啊,没准还错了呢?
我 ...

看到那个EXCEL图了吗?蓝色的直线是梯形加减速的速度,根据这个做出来的。都是高中物理的知识,加加速导出当前点加速度 a = aa * t / 2;再用加速度计算当前点的速度:V = V0 + a * t / 2,在纸上画一下就知道了,呵呵,不外乎就是算面积!梯形跟三角形的面积

出0入0汤圆

发表于 2014-9-1 21:12:30 | 显示全部楼层
本帖最后由 kinsno 于 2014-9-1 21:14 编辑
wangpengcheng 发表于 2014-9-1 21:07
看到那个EXCEL图了吗?蓝色的直线是梯形加减速的速度,根据这个做出来的。都是高中物理的知识,加加速导 ...


为啥是算面积呢?表面看是高中物理(好象我把高中物理都忘了,加速度和速度完全忘了)?但实事上,我是指如何把这个公式或你说的面积和这个S加减速关系起来?其实是我寻求理论的出入和推导;
如果只是为了用,把你这个扛走,然后也不求来源去处,稀里糊涂的搞呗,对不对!那样不好;
PS:我去百度了一下加速度和速度的关系,貌似有进展,估计不需要楼主的公式了;确实应该高中物理知识,可惜早忘光光了;这个丢人啊;

出0入0汤圆

 楼主| 发表于 2014-9-1 21:22:37 | 显示全部楼层
kinsno 发表于 2014-9-1 21:12
为啥是算面积呢?表面看是高中物理(好象我把高中物理都忘了,加速度和速度完全忘了)?但实事上,我是指 ...

我也不知道怎么回答你了,呵呵,公式我那个注释里面有两个,一个是用加加速算加速度,一个是用加速度算当前点速度,加加速事实上是加速度与时间成正比的一个关系,我做的这个S型是把加速度按时间等分了,然后每次都给加速度加上个加加速!

出0入0汤圆

发表于 2014-9-1 21:23:47 | 显示全部楼层
正要整步进电机,来研究一下

出0入0汤圆

 楼主| 发表于 2014-9-1 21:25:42 | 显示全部楼层
cn_x 发表于 2014-9-1 21:23
正要整步进电机,来研究一下

分涨的很快啊!

出0入0汤圆

发表于 2014-9-1 21:27:58 | 显示全部楼层

没有精华,一点点在爬

出0入0汤圆

 楼主| 发表于 2014-9-1 21:30:59 | 显示全部楼层
cn_x 发表于 2014-9-1 21:27
没有精华,一点点在爬

做几个原创的上来,莫大肯定会给你精华的!

出0入0汤圆

发表于 2014-9-1 21:41:14 | 显示全部楼层
wangpengcheng 发表于 2014-9-1 21:22
我也不知道怎么回答你了,呵呵,公式我那个注释里面有两个,一个是用加加速算加速度,一个是用加速度算当 ...

哈哈,估计你没看到我后面写的PS,我已经搞明白了,确实是高中公式,需要回头捡一下加速度和加加速度,然后就容易理解了;

出0入0汤圆

 楼主| 发表于 2014-9-1 21:44:19 | 显示全部楼层
kinsno 发表于 2014-9-1 21:41
哈哈,估计你没看到我后面写的PS,我已经搞明白了,确实是高中公式,需要回头捡一下加速度和加加速度,然 ...

理解了就好,呵呵,祝你顺利!

出0入0汤圆

发表于 2014-9-1 21:46:02 | 显示全部楼层
wangpengcheng 发表于 2014-9-1 21:44
理解了就好,呵呵,祝你顺利!

出0入0汤圆

发表于 2014-9-1 21:47:49 | 显示全部楼层
wangpengcheng 发表于 2014-9-1 21:30
做几个原创的上来,莫大肯定会给你精华的!

原创也没见加啊,就像你这个帖子
无所谓了
本来300块的板子已经满足的
弄个飞币3倍+精华把目标推到了6000
转眼6000也达到了,再奔12000? 好累········
边学习边发贴吧,不刻意去折腾了,偶尔回复一些,赚点飞币吧

出0入0汤圆

 楼主| 发表于 2014-9-1 21:49:25 | 显示全部楼层
cn_x 发表于 2014-9-1 21:47
原创也没见加啊,就像你这个帖子
无所谓了
本来300块的板子已经满足的

审帖也要时间啊,我有几个帖子就是好久之后才加上的!

出0入0汤圆

发表于 2014-9-1 21:53:50 | 显示全部楼层
wangpengcheng 发表于 2014-9-1 21:49
审帖也要时间啊,我有几个帖子就是好久之后才加上的!

慢慢来吧,对塔式开发板满是没啥感觉
不过感觉版主们没在管理这个社区,只是在埋头回答问题和做研究
阿莫一个人在审样的

出0入0汤圆

 楼主| 发表于 2014-9-1 21:56:43 | 显示全部楼层
cn_x 发表于 2014-9-1 21:53
慢慢来吧,对塔式开发板满是没啥感觉
不过感觉版主们没在管理这个社区,只是在埋头回答问题和做研究
阿莫 ...

呵呵,其实塔式板我也玩过,跑过例程,感觉还可以,一开始学MQX的时候就是在塔式板上跑的,上面资源不是很多,但可以扩展,好像有USB、串口、CAN、网络等等。优点是做实验的时候可以自己画个扩展板,直接插上就可以用!

至于版主的问题,估计分工不同吧!

出0入0汤圆

发表于 2014-9-1 22:36:55 | 显示全部楼层
对电机控制不懂,感谢楼主分享

出0入0汤圆

发表于 2014-9-1 23:14:03 | 显示全部楼层
收藏了,谢谢!

出0入0汤圆

 楼主| 发表于 2014-9-2 00:15:28 来自手机 | 显示全部楼层
lisingch 发表于 2014-9-1 23:14
收藏了,谢谢!

不客气           

出0入0汤圆

发表于 2014-9-2 08:06:46 来自手机 | 显示全部楼层
楼主这是要屠版的节奏啊,感谢分享

出0入0汤圆

发表于 2014-9-2 09:11:37 | 显示全部楼层
楼主有没有梯形加减速的资料?如梯形加减速的EXCEL表.

出0入0汤圆

发表于 2014-9-2 09:15:33 | 显示全部楼层
原来表中有包含梯形的了

出0入0汤圆

 楼主| 发表于 2014-9-2 12:27:41 | 显示全部楼层
soos 发表于 2014-9-2 09:15
原来表中有包含梯形的了

出0入0汤圆

发表于 2014-9-2 12:52:18 | 显示全部楼层
做的是伺服?还是步进电机?

出0入0汤圆

 楼主| 发表于 2014-9-2 12:55:02 | 显示全部楼层
wanstrive 发表于 2014-9-2 12:52
做的是伺服?还是步进电机?

算出来的是加速点速度表,可以应用到伺服或者步进!

出50入10汤圆

发表于 2014-9-2 13:19:40 来自手机 | 显示全部楼层
不错!先收着

出0入0汤圆

发表于 2014-9-2 20:44:38 | 显示全部楼层
L2=((D3-B3)/2)*2/(I3/2)/(I3/2),为什么要先除2再乘2?

出0入0汤圆

 楼主| 发表于 2014-9-2 20:46:48 | 显示全部楼层
gginhouse 发表于 2014-9-2 20:44
L2=((D3-B3)/2)*2/(I3/2)/(I3/2),为什么要先除2再乘2?

为了将来自己好理解,每步都写清楚!

出0入4汤圆

发表于 2015-9-22 09:24:54 | 显示全部楼层
请问函数怎么调用

出0入0汤圆

发表于 2015-10-19 16:10:07 | 显示全部楼层
同求函数如何调用!楼主能不能解答一下!谢谢!

出0入0汤圆

发表于 2015-10-22 13:22:13 | 显示全部楼层
mark一下。。。

出0入0汤圆

发表于 2015-10-25 18:35:39 来自手机 | 显示全部楼层
好东东,马克

出0入0汤圆

发表于 2015-10-26 17:54:13 | 显示全部楼层
这个非常好的资料啊。感谢楼主分享

出0入0汤圆

发表于 2015-11-6 10:14:41 | 显示全部楼层
再用加速度计算当前点的速度:V = V0 + a * t / 2, 这个公式是不是错了 我记得是 V=V0+at

出0入0汤圆

发表于 2017-6-4 19:11:11 | 显示全部楼层

不错!先收着

出0入0汤圆

发表于 2017-7-20 09:43:33 | 显示全部楼层
标记下 收藏

出0入0汤圆

发表于 2017-8-13 22:24:53 来自手机 | 显示全部楼层
明天上班研究一下,应该能学到东西,谢谢

出0入0汤圆

发表于 2017-8-14 11:43:18 | 显示全部楼层
mark 学些一下了

出0入0汤圆

发表于 2018-8-3 15:39:48 | 显示全部楼层
最近在想,使用查表方式实现的S加减速就只能控制速度,不能控制位置,能否实现一个查表,可以同个脉冲的位置查找当前的速度?
比方说提供一个函数 给定 开始速度 ,结束速度,总步数, 当前步数, 即可查找到 当前步数对应的速度?
抛砖引玉,请问各位如何做一个根据当前步数实时计算S加减速的速度的方法?
我做了一个S曲线的的表格,表格是根据当前步数查找当前的速度,使用一下函数可实现该功能,但是该表格只能应用于升速中:初速度为0 的情况或者降速中:末尾速度为0的情况。

const uint16_t sigmoid_speed[1025] = { 1,384,765,1145,1522,1897,2269,2640,3008,3375,3739,4101,4461,4818,5174,5528,5879,6228,6576,6921,7265,7606,7945,8283,8618,8952,9283,9613,9940,10266,10590,10912,11232,11550,11866,12181,12494,12804,13113,13421,13726,14030,14331,14632,14930,15226,15521,15814,16106,16396,16684,16970,17255,17538,17819,18099,18377,18653,18928,19201,19473,19743,20011,20278,20544,20807,21070,21330,21589,21847,22103,22358,22611,22863,23113,23362,23609,23855,24100,24343,24584,24824,25063,25300,25536,25771,26004,26236,26467,26696,26924,27150,27375,27599,27822,28043,28263,28482,28699,28915,29130,29344,29556,29767,29977,30186,30393,30600,30805,31008,31211,31413,31613,31812,32010,32207,32402,32597,32790,32983,33174,33364,33553,33740,33927,34113,34297,34481,34663,34844,35024,35204,35382,35559,35735,35910,36084,36257,36429,36600,36770,36939,37107,37274,37440,37605,37769,37932,38094,38256,38416,38575,38734,38891,39048,39204,39358,39512,39665,39817,39968,40119,40268,40417,40564,40711,40857,41002,41147,41290,41433,41574,41715,41855,41995,42133,42271,42408,42544,42679,42813,42947,43080,43212,43343,43474,43604,43733,43861,43989,44116,44242,44367,44492,44615,44739,44861,44983,45104,45224,45344,45463,45581,45698,45815,45931,46047,46161,46276,46389,46502,46614,46725,46836,46946,47056,47165,47273,47381,47488,47594,47700,47805,47910,48013,48117,48219,48322,48423,48524,48624,48724,48823,48922,49020,49117,49214,49310,49406,49501,49596,49690,49783,49876,49969,50061,50152,50243,50333,50423,50512,50601,50689,50777,50864,50950,51036,51122,51207,51292,51376,51460,51543,51626,51708,51789,51871,51951,52032,52112,52191,52270,52348,52426,52504,52581,52657,52734,52809,52885,52959,53034,53108,53181,53254,53327,53399,53471,53543,53614,53684,53754,53824,53894,53962,54031,54099,54167,54234,54301,54368,54434,54500,54565,54630,54695,54759,54823,54886,54950,55012,55075,55137,55199,55260,55321,55381,55442,55502,55561,55620,55679,55738,55796,55854,55911,55968,56025,56082,56138,56194,56249,56304,56359,56414,56468,56522,56576,56629,56682,56734,56787,56839,56891,56942,56993,57044,57095,57145,57195,57244,57294,57343,57392,57440,57488,57536,57584,57631,57678,57725,57772,57818,57864,57910,57955,58001,58046,58090,58135,58179,58223,58266,58310,58353,58396,58438,58481,58523,58565,58607,58648,58689,58730,58771,58811,58851,58891,58931,58971,59010,59049,59088,59126,59165,59203,59241,59279,59316,59353,59390,59427,59464,59500,59536,59572,59608,59644,59679,59714,59749,59784,59819,59853,59887,59921,59955,59988,60022,60055,60088,60120,60153,60185,60218,60250,60281,60313,60344,60376,60407,60438,60468,60499,60529,60559,60589,60619,60649,60678,60708,60737,60766,60795,60823,60852,60880,60908,60936,60964,60992,61019,61046,61073,61100,61127,61154,61181,61207,61233,61259,61285,61311,61336,61362,61387,61412,61437,61462,61487,61512,61536,61560,61585,61609,61632,61656,61680,61703,61727,61750,61773,61796,61818,61841,61864,61886,61908,61930,61952,61974,61996,62018,62039,62060,62082,62103,62124,62145,62165,62186,62206,62227,62247,62267,62287,62307,62327,62347,62366,62386,62405,62424,62443,62462,62481,62500,62519,62537,62556,62574,62592,62610,62628,62646,62664,62682,62699,62717,62734,62752,62769,62786,62803,62820,62837,62853,62870,62886,62903,62919,62935,62951,62968,62983,62999,63015,63031,63046,63062,63077,63092,63108,63123,63138,63153,63168,63182,63197,63212,63226,63241,63255,63269,63283,63297,63311,63325,63339,63353,63367,63380,63394,63407,63421,63434,63447,63460,63473,63486,63499,63512,63525,63537,63550,63563,63575,63587,63600,63612,63624,63636,63648,63660,63672,63684,63696,63707,63719,63730,63742,63753,63765,63776,63787,63798,63809,63820,63831,63842,63853,63864,63875,63885,63896,63906,63917,63927,63937,63948,63958,63968,63978,63988,63998,64008,64018,64028,64037,64047,64057,64066,64076,64085,64095,64104,64113,64123,64132,64141,64150,64159,64168,64177,64186,64195,64203,64212,64221,64229,64238,64246,64255,64263,64272,64280,64288,64296,64305,64313,64321,64329,64337,64345,64353,64361,64368,64376,64384,64391,64399,64407,64414,64422,64429,64436,64444,64451,64458,64466,64473,64480,64487,64494,64501,64508,64515,64522,64529,64536,64542,64549,64556,64562,64569,64576,64582,64589,64595,64602,64608,64614,64621,64627,64633,64639,64646,64652,64658,64664,64670,64676,64682,64688,64694,64699,64705,64711,64717,64722,64728,64734,64739,64745,64751,64756,64762,64767,64772,64778,64783,64789,64794,64799,64804,64810,64815,64820,64825,64830,64835,64840,64845,64850,64855,64860,64865,64870,64874,64879,64884,64889,64893,64898,64903,64907,64912,64917,64921,64926,64930,64935,64939,64943,64948,64952,64957,64961,64965,64969,64974,64978,64982,64986,64990,64995,64999,65003,65007,65011,65015,65019,65023,65027,65031,65034,65038,65042,65046,65050,65053,65057,65061,65065,65068,65072,65076,65079,65083,65086,65090,65094,65097,65101,65104,65107,65111,65114,65118,65121,65124,65128,65131,65134,65138,65141,65144,65147,65151,65154,65157,65160,65163,65166,65169,65172,65175,65179,65182,65185,65187,65190,65193,65196,65199,65202,65205,65208,65211,65214,65216,65219,65222,65225,65227,65230,65233,65236,65238,65241,65244,65246,65249,65251,65254,65257,65259,65262,65264,65267,65269,65272,65274,65277,65279,65282,65284,65286,65289,65291,65294,65296,65298,65301,65303,65305,65307,65310,65312,65314,65316,65319,65321,65323,65325,65327,65329,65332,65334,65336,65338,65340,65342,65344,65346,65348,65350,65352,65354,65356,65358,65360,65362,65364,65366,65368,65370,65372,65374,65376,65377,65379,65381,65383,65385,65387,65388,65390,65392,65394,65395,65397,65399,65401,65402,65404,65406,65408,65409,65411,65413,65414,65416,65417,65419,65421,65422,65424,65425,65427,65429,65430,65432,65433,65435,65436,65438,65439,65441,65442,65444,65445,65447,65448,65450,65451,65452,65454,65455,65457,65458,65459,65461,65462,65464,65465,65466,65468,65469,65470,65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65484,65485,65487,65488,65489,65490,65492,65493,65494,65495,65496,65497,65499,65500,65501,65502,65503,65504,65505,65506,65508,65509,65510,65511,65512,65513,65514,65515,65516,65517,65518,65519,65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532
};

static double lookup_step = 1024;
static int32_t total_counts = 1024;
static int32_t v_start = 0;
static int32_t v_end = 1;
static int32_t v_half = 0;
static int64_t v_delta = 0;
static int32_t step_half = 0;
void   sigmoid_init(uint32_t vs, uint32_t ve, uint32_t step_event_count)
{
        v_start = vs;
        v_end = ve;
        v_half = (v_start + v_end) / 2;
        lookup_step = 1024.0f / step_event_count;
        v_delta = (int64_t)(v_end - v_start);
        step_half = (step_event_count + 1) / 2;
        total_counts = step_event_count;
}

uint32_t sigmoid_get_speed_by_dstance(uint32_t steps)
{



        if (steps >= total_counts) return v_end;
        if (steps == 0) return v_start;
        int32_t speed, st;
        if(v_delta>0)
        {

                st = steps * 1024 / (total_counts );
                speed = (v_delta*sigmoid_speed[st]) >> 16;
                speed += v_start;
                if (speed < 0) speed = 0;
        }
        else
        {
                st = steps * 1024 / (total_counts);
                speed = (v_delta*sigmoid_speed[1024-st]) >> 16;
                speed = v_end- speed;
                if (speed < 0) speed = 0;

        }
        return   speed;
}

出0入0汤圆

 楼主| 发表于 2018-8-18 11:17:38 | 显示全部楼层
qq302011 发表于 2018-8-3 15:39
最近在想,使用查表方式实现的S加减速就只能控制速度,不能控制位置,能否实现一个查表,可以同个脉冲的位 ...

这是以前做的理想状态的情况,后来发现不是这样,一般加速表都根电机有关,正规的电机厂商会提供最适合的加速表!

出0入0汤圆

发表于 2018-8-18 13:34:22 来自手机 | 显示全部楼层
学习一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 09:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表