步进电机S曲线加速数据计算小软件
本帖最后由 coleyao 于 2012-8-19 16:41 编辑前一阵有个朋友需要,我把我的步进电机S曲线生成表格给他参考了一下,这位朋友将生成表格放到网上了,还挺受欢迎的,不过也有一些朋友觉得表格不好用,看不清楚生成原理,我特意冒着酷暑(室内30度)赶制了一个小工具软件,希望能解决这些朋友的困惑,如果大家觉得好用的话,请留下你的看法和宝贵意见,谢谢! 感谢分享,速度很快哦! 厉害,太感谢了 楼主牛逼,谢谢分享 佩服楼主的技术 楼主厉害呀!!!!!!!! 你这个是不是生成一条固定的S曲线?如果步进的速度、转动量都变化的话,有什么办法吗? 厉害{:victory:} ylei12 发表于 2012-8-19 22:01 static/image/common/back.gif
你这个是不是生成一条固定的S曲线?如果步进的速度、转动量都变化的话,有什么办法吗? ...
理论上有两种办法:1)加装编码器,通过负反馈控制的方式控制加速度连续减小/增加,效果和控制方式和算法有关;
2)单片机把加减速数据实时计算出来,效果要看加减速模式需要的计算量,如果单片机算不过来,就没办法了!
以上纯粹是个人看法,仅供参考! 学习!!! 还没用到,先收藏着。 没搞过此东东,先收藏了 收藏备用,谢谢楼主 收藏备用,谢谢楼主 其实等他,我等了很久啦。 非常感谢,一定要试试。。。。
好东西,收藏先. 谢谢楼主哦。下载下来在研究研究!! 这个可以有 还没用到,先收藏着。 能否把代码贴出来研究一下啊 wenfengcom 发表于 2012-8-20 21:16
能否把代码贴出来研究一下啊
这个可以有,今天睡了,改天想起一定发! 挺好的小软件!辛苦LZ啦 本帖最后由 coleyao 于 2012-8-21 20:12 编辑
//代码如下,不复杂的,谁有空可以试下单片机实时计算的可能性!
//本来是直接贴代码的,太费流量了,还是传附件吧。 楼主能举个具体的例子吗,比如我要求频率从0HZ加速到10KHZ,软件上面怎么设置 资料收集,谢谢楼主! 楼主技术真好,懂的也多 5袋苹果 发表于 2012-8-21 08:08 static/image/common/back.gif
楼主能举个具体的例子吗,比如我要求频率从0HZ加速到10KHZ,软件上面怎么设置 ...
0HZ周期为无穷大,当然不可能用于设置,只能取近似值,至于取多少,看情况吧,10KHZ周期为100uS,除以机器周期1.25E-7秒为800,故最高速时PWM机器周期数一空填800,PWM机器周期初始值必须大于800,可以填8000,再在速度上升时间框中填一个需要加速的时间,0.1秒-0.3秒左右的样子,可以填200毫秒,然后点击“计算及绘图”生成数据,生成的数据复制成单片机使用的数组就可以了(格式1.90E02必须改成190,否则C编译器可能认不出来,可以在WPS表格软件中进行转换)。 这个得顶~ coleyao 发表于 2012-8-21 20:25 static/image/common/back.gif
0HZ周期为无穷大,当然不可能用于设置,只能取近似值,至于取多少,看情况吧,10KHZ周期为100uS,除以机 ...
这里的加速时间,就是8000到800的时间吧 收藏 mark 本帖最后由 coleyao 于 2012-8-22 18:53 编辑
5袋苹果 发表于 2012-8-21 21:50 static/image/common/back.gif
这里的加速时间,就是8000到800的时间吧
是的,加速时间就是从最低速1/8000-最高速1/800的时间,至于从0-1/8000,可以直接启动(会略微带来振动,但肯定比从0直接到1/800直接启动好,甚至比从1/8000到1/800的分段式效果也要好),也可以自己发挥一下,通过其它方式弥补。
另外顺便解释一下从低速到高速的而不是从静止到高速的原因,那是因为我继承的代码做的方式就是从低速到高速分段加速的,在我看到S型曲线加速对运行速度有帮助后就改成S型曲线加速了,但是留了个尾巴,算是历史遗留问题吧,等以后有空我会考虑怎么解决,如果哪位网友能轻松搞定的话别忘了和大家分享!{:loveliness:} 先顶了!! 写的很详细。楼主好人! {:handshake:}{:handshake:}{:handshake:} 谢谢分享 留着以后用{:lol:} 向你学习了 最近正在做这个,标记一下,到时有问题请教楼主 coleyao 发表于 2012-8-21 20:25 static/image/common/back.gif
0HZ周期为无穷大,当然不可能用于设置,只能取近似值,至于取多少,看情况吧,10KHZ周期为100uS,除以机 ...
想问下我这个数据生成的了,是改变定时器的值吗,还是PWM的周期 xxoo14 发表于 2012-10-15 23:21 static/image/common/back.gif
想问下我这个数据生成的了,是改变定时器的值吗,还是PWM的周期
改pwm周期值,所以最终的数据是PWM周期增量值 啥样的好人都有啊。 入库收藏, 有个问题,什么时候确定该加减还是减速? 启动时加速,减速是逆过程,将一个位移分成两半,前一半加速到指定值后恒速,记忆加速参数,给后半程用。 coleyao 发表于 2012-10-16 05:53 static/image/common/back.gif
改pwm周期值,所以最终的数据是PWM周期增量值
谢谢了程序正在编写 用cortex-m0 coleyao 发表于 2012-8-21 05:40 static/image/common/back.gif
//代码如下,不复杂的,谁有空可以试下单片机实时计算的可能性!
//本来是直接贴代码的,太费流量了,还 ...
这个代码是生成工具的源代码还是使用示例?看了一下好像是工具的代码,有没有使用示例也来一份 示例没有,手头只有机器目前使用的程序,因版权问题,无法给出,如果原理领悟的话,似乎示例也就是可有可无的事了吧! coleyao 发表于 2012-8-21 05:40 static/image/common/back.gif
//代码如下,不复杂的,谁有空可以试下单片机实时计算的可能性!
//本来是直接贴代码的,太费流量了,还 ...
有沒有 vc++的{:sad:} sky5566 发表于 2012-10-18 20:52 static/image/common/back.gif
有沒有 vc++的
没有,我习惯用Delphi,VC++没用过,其实核心代码就那么几行,读懂了自己用VC++加个壳,重编译运行一下就好了! 电机加减速曲线,不错的工具。 这个意洽也用EXCEL计算过,看下楼主的原理!{:lol:} 幸苦了,顶一下 coleyao 发表于 2012-10-16 10:24 static/image/common/back.gif
启动时加速,减速是逆过程,将一个位移分成两半,前一半加速到指定值后恒速,记忆加速参数,给后半程用。 ...
我想实时计算PWM的周期值,能否贴一下你的计算方法,公式之类的 xxoo14 发表于 2012-10-22 12:19 static/image/common/back.gif
我想实时计算PWM的周期值,能否贴一下你的计算方法,公式之类的
24F里面有的 感谢分享,速度很快哦! 如何使用这个东东 lixingling 发表于 2012-11-3 16:11 static/image/common/back.gif
如何使用这个东东
利用软件算出PWM脉宽的递增/递减量,每次PWM中断按照算好的数组修改PWM脉宽,就可以得到S加速的步进电机运动曲线。 不错的工具,谢谢收藏了 mark{:smile:} coleyao 发表于 2012-10-22 14:53 static/image/common/back.gif
24F里面有的
想问下你的速度的单位是什么?还有你那个AccK是怎么计算得来的
? xxoo14 发表于 2012-11-18 12:26 static/image/common/back.gif
想问下你的速度的单位是什么?还有你那个AccK是怎么计算得来的
?
能不能把你这个计算S形的一些原理和方法 贴出来呢?比如说公式的推导 xxoo14 发表于 2012-11-18 12:26 static/image/common/back.gif
能不能把你这个计算S形的一些原理和方法 贴出来呢?比如说公式的推导
在24楼的原码里面找下,没几行代码的! 收藏不解释 单片机能用吗? X 表示时间 Y轴表示速度 ? wind2100 发表于 2012-11-19 19:02 static/image/common/back.gif
单片机能用吗? X 表示时间 Y轴表示速度 ?
X 表示时间 Y轴表示速度和加速度. xxoo14 发表于 2012-11-18 12:26 static/image/common/back.gif
能不能把你这个计算S形的一些原理和方法 贴出来呢?比如说公式的推导
原先写的时候是一鼓作气就写完了,注释没写的很详细,我以正弦加速为例把注释重新标了出来,希望对你有帮助!
VT:=VT+AccT*Tpwm; //v=v0+at
nT_Idea:=1/VT; //pwm周期(除以计数周期的值),速度的倒数
nT_Real:=Int(nT_Idea); //pwm周期取整
Inc_nT:=nT_Real-nT_Real; //pwm周期差异
Tpwm:=nT_Idea*DivTOsc/FreqOsc; //pwm周期(实际时间)
T_His:=T_His+Tpwm; //时间轴t
AccT:=AccK*SIN(w_v*T_His); //加速度计算
begin
ifABS(strtofloat(Edit7.Text))>0.01 then
Edit9.Text:=floattostr(2*Pi/(2*strtofloat(Edit7.Text)/1000)); //角速度w_v计算
Edit8.Text:=floattostr((1/strtofloat(Edit6.Text)-1/strtofloat(Edit5.Text))*strtofloat(Edit9.Text)/2); //加速度斜率AccK计算
end; //InitPwmCount:Edit5.text 最低速pwm周期 MaxSpeedPwmC:Edit6.text 最高速pwm周期 coleyao 发表于 2012-11-20 12:11 static/image/common/back.gif
原先写的时候是一鼓作气就写完了,注释没写的很详细,我以正弦加速为例把注释重新标了出来,希望对你有帮 ...
有两个地方不太明白,1:速度怎么会等于计数周期的倒数,2:加速度斜率计算原理有点不明白,不知道参照的公式是哪一个,最好贴一下所需要的一些公式。谢谢 xxoo14 发表于 2012-11-20 14:29 static/image/common/back.gif
有两个地方不太明白,1:速度怎么会等于计数周期的倒数,2:加速度斜率计算原理有点不明白,不知道参照的 ...
1)速度是相对值,速度与每一个脉冲的时间(近似计数周期*2)成反比;
2)加速度在整个加速周期的一半时取得最大值,其最终值与初始值都为零,将其积分可得其与速度关系,因为速度的最终值与初始值都是给定值,里面积分后只有AccK是变量,这样就可以推导出来了,具体的步骤我也记不大清楚了,你有空自己推导一下吧,或许我以前的公式也不一定正确。 很好
coleyao 发表于 2012-11-20 19:24 static/image/common/back.gif
1)速度是相对值,速度与每一个脉冲的时间(近似计数周期*2)成反比;
2)加速度在整个加速周期的一半时 ...
谢谢,我尝试一下实时计算,不过这么多浮点可能跑不起,只能扩大倍数来算了 楼主辛苦了 步进电机步距角不知道啊,可能1200脉冲一圈也可能600脉冲一圈。这个软件怎么能够生成在不同步距角下满足在固定上升时间内固定起始频率的曲线呢? 我觉的还要加上上升步数是多少步这个参数。 我是用EXCEL 直接用宏函数导出加速表。。。
上位机软件功力没楼主强,哈哈~~
有个小软件挺好用的,数学函数生成工具,这样各种曲线都能用函数的方式模拟出来,然后计算出加速表 jingwaner 发表于 2012-11-22 14:39 static/image/common/back.gif
我是用EXCEL 直接用宏函数导出加速表。。。
上位机软件功力没楼主强,哈哈~~
http://www.amobbs.com/thread-5489204-1-1.html
呵呵,一开始我也是用EXcel做的,把表格放到论坛上后,总是有些人说表格不直观,看不清原理(确实当时也做得有点粗糙),后来干脆用Delphi写了一个小软件。 xxoo14 发表于 2012-11-20 23:49 static/image/common/back.gif
谢谢,我尝试一下实时计算,不过这么多浮点可能跑不起,只能扩大倍数来算了 ...
实时计算有点难的,主要是正余弦计算,要快且省空间的话,查表+插值应该是最佳的,不过即使这样我也担心用stm32f0x都跑不起来。 coleyao 发表于 2012-11-22 15:58 static/image/common/back.gif
实时计算有点难的,主要是正余弦计算,要快且省空间的话,查表+插值应该是最佳的,不过即使这样我也担 ...
现在确实是跑不起来 收藏备用,谢谢楼主 有没有QQ,以后多多交流 lixingling 发表于 2012-11-25 23:45 static/image/common/back.gif
有没有QQ,以后多多交流
论坛不鼓励qq交流,尽量发帖子讨论。 改变PWM脉宽有什么用,PWM增量没有明白 改变PWM脉宽有什么用,PWM增量没有明白 本帖最后由 coleyao 于 2012-11-26 11:56 编辑
lixingling 发表于 2012-11-26 11:00 static/image/common/back.gif
改变PWM脉宽有什么用,PWM增量没有明白
一般每个PWM脉宽或每两个脉宽产生一个电脉冲(即0->1,再1->0,具体是1:1还是2:1与PWM方式有关),电脉冲除以步进电机控制器的细分数就是步进电机走的步数。
每个PWM脉冲的时间一般是系统频率的倍数,Tpwm=nTsys,PWM增量是指Tpwm的变化是由几个Tsys引起的,即T‘pwm=(n+m)Tsys,,T'pwm-Tpwm=mTsys,m就是增量。 mark~~~~~~~~~~~~ PWM 脉宽,就是占空比,那你不是要用到PWM中断,改变占空比就是改变进入中断的时间,输出脉冲信号那你PWM要多少级 你生成的表格从开始速度到最高速度,走了好多步,如果PWM没有那么多级,怎么办 你每个PWM周期都要进入中断PWM周期一般都是设定好的,所以应该改变不了PWM周期,只能改变占空比,能不能用定时器了, 本帖最后由 coleyao 于 2012-11-26 16:13 编辑
lixingling 发表于 2012-11-26 15:49 static/image/common/back.gif
你每个PWM周期都要进入中断PWM周期一般都是设定好的,所以应该改变不了PWM周期,只能改变占空比,能不能用 ...
msp430 pwm有7个模式,你可以仔细研究一下,你说的应该是最基本的一种。(提示一下,要用翻转的,另外还有点小技巧{:biggrin:} ) 支持,有时间看看,学习下 利用软件算出PWM脉宽的递增/递减量,每次PWM中断按照算好的数组修改PWM脉宽,就可以得到S加速的步进电机运动曲线。
你是改变占空比,还是改变PWM周期, 你改变占空比好象没有意义 本帖最后由 coleyao 于 2012-11-26 18:26 编辑
lixingling 发表于 2012-11-26 16:21 static/image/common/back.gif
你改变占空比好象没有意义
pwm脉宽就是周期,特殊的使用方式,那个TBCL0不用管,翻转和它没关系。 好强,收藏了 如果目标位置随时都可能变化,那能不能达到目标位置是,速度为0而且不失步,有什么办法,何时加,何时减
如何知道 lixingling 发表于 2012-11-26 22:29 static/image/common/back.gif
如果目标位置随时都可能变化,那能不能达到目标位置是,速度为0而且不失步,有什么办法,何时加,何时减
...
S加速只适用于从固定速度低速到固定高速的加速或相反的减速过程,如果目标位置是变的,就不知道何时可以减速,那样加速可以用S曲线加速,减速就不可以了,建议用伺服控制(闭环负反馈),效果决定于控制算法,一般来说应该属于自动控制的范畴了。 如果目标位置随时都可能变化,那能不能达到目标位置是,速度为0而且不失步,有什么办法,何时加,何时减
如何知道
目标位置短,可能达不到最大速度,加速,多久,减速多久,如何知道 本帖最后由 coleyao 于 2012-11-27 06:03 编辑
lixingling 发表于 2012-11-26 22:35 static/image/common/back.gif
如果目标位置随时都可能变化,那能不能达到目标位置是,速度为0而且不失步,有什么办法,何时加,何时减
...
和位移大小没有关系,而且你说的目标位置随时变化在你移动前,能算出从当前位置到目标位置的位移吗?如果可以算出来,那么该目标不应该当作一个随动系统,而应该是作为一个固定目标系统。
至于为啥和位移大小没有关系,这和S加速没有关系,稍微想一下就知道了(以加速曲线的对称轴为中心,去掉中间对称的部分,剩下的就是想要的,怎么实现就不要问了。。。{:dizzy:} ) 刚好接触到步进电机,不顶对不起楼主{:lol:} 我的意思是我开始的目标地是6000步,但在我加速过程中,的指令,要返回原点,那应该如何处理 PWM周期值不变为什么速度还在变? lixingling 发表于 2012-11-27 08:37 static/image/common/back.gif
我的意思是我开始的目标地是6000步,但在我加速过程中,的指令,要返回原点,那应该如何处理 ...
刹车,然后正常返回。