搜索
bottom↓
回复: 32

大家来讨论一下步进电机加速方式...

[复制链接]

出0入0汤圆

发表于 2012-12-9 21:02:05 | 显示全部楼层 |阅读模式
本帖最后由 myqiang1990 于 2012-12-9 21:40 编辑

不是讨论加速曲线(比如直线,S,指数,梯形,不是讨论这类加速曲线),而是加速方式。。。

一般的加速方法就是:按照某种加速曲线公式算出一个加速频率表,然后程序里面按照这张表不断更新定时器初值产生不同的定时中断,在定时中断发脉冲以达到电机加速的目的。
而且这种方式还分两种(据我观察和研究 ):
    一种就是分段式加速(特点是:除了有一个频率加速表外,还会有一个每个频点内的步数表):
    分段加速就是把整个加速曲线分段,既分成N个频率点逼近曲线,然后每个频点内会有相应的步数,当走完当前频点步数后才会加或者减到下一个频点。以我的经验,因为我接触到得就是这种加速方式。这种加速方式有个缺点就是在加速得时候计步数容易出错。一些资料说,在某个频点让电机多走几步可以防止电机失步,其实我试验了那么久,确实如此,特别是带动大负载,转动惯量大的。但是我一直就觉得这种方式计步数比较容易出错,特别是在舞台灯这种电机状态变化多端的东西上,感觉计步容易出错。我目前的产品就是用这种分段加速方式的,跑起来好是好,但是感觉控制起来比较复杂,容易出错。下面的资料就是一个典型的分段式加速的全过程。



还有一种我具体不清楚大家是怎么加速的(这种方式的特点就是只有一个加速表,没有频点内步数表),我发现很多人都用这种加速方式。比如下面这些朋友的:

http://www.amobbs.com/thread-4719105-1-1.html
http://www.amobbs.com/forum.php?mod=viewthread&tid=4440711

如果只是按照这上面这两位朋友的加速表加速,虽然能加速,但是感觉不怎么好,我试验过了,只要加上重一点的负载就启动不了。因为加速太快了。我不知道他们怎么就用这么一张表就能加速?不再每个频点多走几步来缓冲,如果电机是转动惯量大的,而且有一定重量得负载,就这么短的加速过程,能启动吗???按照第一个朋友的加速表,对应2细分来加速,貌似还可以,他的加速表是180个频点,如果按照每发一个脉冲(微步脉冲,不是整步脉冲),也就是发了180个微步脉冲就会到最高速,按照2细分,1.8度的步进角算的话,那么就是单片机发了180 / 2 = 90这个整步脉冲后(注意是整步脉冲)也就是电机转过90 * 1.8 = 162度,电机就会达到最高速。貌似还可以用,但是对于大负载来说,貌似有点快了。  但是如果把这种表跑128细分,表内每个频点初值按比例缩小1/64..保持加速过程不变...那么当单片机发出180个微步脉冲后电机就会达到最高速,按照128细分算的话,180 / 128 = 1.4个整步..也就是说电机才走了一个整步,也就是电机走了1.4 * 1.8 =2.52度,电机就加到了最高速!!!!电机明显是不能启动的,因为启动时间太短,太快了。才走了1.4个整步(电机转过2.52度)整个加速表就走完了。电机是不可能会动的,严重失步!!!!所以我实在搞不懂用这种方式的朋友是怎么加速,怎么让电机加速过程变得平滑的。难道不能简单的按照这种表来发微步脉冲,软件里面还要做什么特殊处理吗?


除了定时加速外,还有什么加速方法吗??我现在用的是分段式加速,加速过程还可以,很不错,但是控制起来比较麻烦,特别是刚刚写的时候,很容易记错步数。我现在想研究研究其他的加速方式,比如上面那两位朋友的,或者其他的加速方式

本帖子中包含更多资源

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

x

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

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

出0入0汤圆

发表于 2012-12-9 21:24:55 | 显示全部楼层
查表要根据细分数不同作相应调速,不管多少细分,我经验是从起步加速到最高速大约是1/2转完成,轻载1500rpm不掉步

出0入0汤圆

 楼主| 发表于 2012-12-9 21:33:36 | 显示全部楼层
本帖最后由 myqiang1990 于 2012-12-9 21:34 编辑
shinehjx 发表于 2012-12-9 21:24
查表要根据细分数不同作相应调速,不管多少细分,我经验是从起步加速到最高速大约是1/2转完成,轻载1500rpm ...


恩。。。但是问题是,比如啊,就第一个连接的网友的加速表,一共180个频点,假如这个表是按照128细分生成的,如果按照一个微步脉冲加速一个频点,那么按照这种表,发出180个微步脉冲后就会达到最高速,也就是电机才走了1.4个整步(180 / 128 = 1.4..按步进角1.8度算)只走了1.4 * 1.8 = 2.5度这样电机就会加到最高速,电机貌似是不会动的,因为太快了,是不是要把表的频点在多加一点?:
曲线表=   
{
    32000,27352,21959,17755,14987,13241,12003,11065,10321, 9711,/*10*/
    9200, 8762, 8383, 8049, 7753, 7488, 7248, 7031, 6832, 6649,/*20*/
    6480, 6324, 6179, 6043, 5917, 5798, 5686, 5580, 5480, 5386,/*30*/
    5296, 5211, 5129, 5052, 4978, 4907, 4840, 4775, 4712, 4653,/*40*/
    4595, 4540, 4486, 4435, 4385, 4337, 4291, 4246, 4203, 4161,/*50*/
    4120, 4080, 4042, 4005, 3969, 3933, 3899, 3866, 3834, 3802,/*60*/
    3771, 3741, 3712, 3684, 3656, 3629, 3602, 3576, 3551, 3526,/*70*/
    3502, 3478, 3455, 3432, 3410, 3388, 3367, 3346, 3326, 3306,/*80*/
    3286, 3267, 3248, 3229, 3211, 3193, 3176, 3159, 3142, 3125,/*90*/
    3109, 3093, 3077, 3061, 3046, 3031, 3016, 3002, 2988, 2974,/*100*/
    2960, 2946, 2933, 2919, 2906, 2894, 2881, 2869, 2856, 2844,/*110*/
    2832, 2821, 2809, 2798, 2786, 2775, 2764, 2754, 2743, 2733,/*120*/
    2722, 2712, 2702, 2692, 2682, 2672, 2663, 2653, 2644, 2635,/*130*/
    2626, 2617, 2608, 2599, 2591, 2582, 2574, 2565, 2557, 2549,/*140*/
    2541, 2533, 2525, 2517, 2509, 2502, 2494, 2487, 2479, 2472,/*150*/
    2465, 2458, 2451, 2444, 2437, 2430, 2423, 2417, 2410, 2403,/*160*/
    2397, 2391, 2384, 2378, 2372, 2366, 2360, 2354, 2348, 2342,/*170*/
    2336, 2330, 2324, 2319, 2313, 2307, 2302, 2296, 2291, 2286,/*180*/
}

出0入0汤圆

发表于 2012-12-9 21:42:46 | 显示全部楼层
可以走数步再更新一次频点,也可以将频点加多些,理论上后者更平稳些,我没实际对比过

出0入0汤圆

发表于 2012-12-9 21:43:15 | 显示全部楼层
项目原因我习惯用的梯形加速
参考下面文章的算法,好像和LZ的差不多

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2012-12-9 21:49:16 | 显示全部楼层
本帖最后由 myqiang1990 于 2012-12-9 21:50 编辑
shinehjx 发表于 2012-12-9 21:42
可以走数步再更新一次频点,也可以将频点加多些,理论上后者更平稳些,我没实际对比过 ...


恩。。从事多年电机控制的朋友跟我说,他说后面那种会比较平稳。。。所以我想换其他加速方式试试。。。不才用分段加速。。

出110入0汤圆

发表于 2012-12-9 21:52:30 | 显示全部楼层
我现在用脉冲控制伺服也是分段梯形加速的,但是伺服自己是闭环的,只要不让伺服加速度过大就行

预先算好分段表,运行的时候还要根据外部负载做微调,达到在规定的时间内发规定的脉冲数

准备改进方法,边跑变算,负载响应更快

出0入0汤圆

 楼主| 发表于 2012-12-9 21:54:11 | 显示全部楼层
Flyback 发表于 2012-12-9 21:52
我现在用脉冲控制伺服也是分段梯形加速的,但是伺服自己是闭环的,只要不让伺服加速度过大就行

预先算好分 ...

这样说你的程序里面除了一张加速表外,还会有一张步数表咯。。呵呵。。。

出110入0汤圆

发表于 2012-12-9 22:01:31 | 显示全部楼层
myqiang1990 发表于 2012-12-9 21:54
这样说你的程序里面除了一张加速表外,还会有一张步数表咯。。呵呵。。。 ...

原本想一步一个频率,使用s曲线加上去,无奈要控制多路伺服,中断太频繁,只能放弃

正在升级的是用stm32做的,103暂时已经很吃紧,不行就上407,哈哈

出0入0汤圆

 楼主| 发表于 2012-12-9 22:02:40 | 显示全部楼层
本帖最后由 myqiang1990 于 2012-12-9 22:03 编辑
Flyback 发表于 2012-12-9 22:01
原本想一步一个频率,使用s曲线加上去,无奈要控制多路伺服,中断太频繁,只能放弃

正在升级的是用stm32 ...


你说的一步一个频率,一步指的是一个细分微步,还是一个整步。。。单片机吃紧的话的可以考虑变细分。。。

出110入0汤圆

发表于 2012-12-9 22:08:36 | 显示全部楼层
myqiang1990 发表于 2012-12-9 22:02
你说的一步一个频率,一步指的是一个细分微步,还是一个整步。。。单片机吃紧的话的可以考虑变细分。。。 ...

楼主误会了,我这使用脉冲控制伺服控制器,脉冲比由伺服提供

难度比驱动步进电机小

出0入0汤圆

 楼主| 发表于 2012-12-9 22:09:49 | 显示全部楼层
Flyback 发表于 2012-12-9 22:08
楼主误会了,我这使用脉冲控制伺服控制器,脉冲比由伺服提供

难度比驱动步进电机小 ...

哦。。原来如此。。我没控制过伺服电机。。

出0入0汤圆

发表于 2012-12-13 17:34:44 | 显示全部楼层
看过很多人做的加速表,一般才255个点,好多的不解

出0入0汤圆

发表于 2012-12-13 17:36:46 | 显示全部楼层
myqiang1990 发表于 2012-12-9 22:02
你说的一步一个频率,一步指的是一个细分微步,还是一个整步。。。单片机吃紧的话的可以考虑变细分。。。 ...

为什么我做的好S加速表,转速跑到800RPM。在32 和64细分下丢步了,8 4 2 细分下都没丢步,每一个频点保持的都在100个脉冲了

出0入0汤圆

发表于 2012-12-13 18:12:36 | 显示全部楼层
7L用STM32控制伺服用的是定时的方式还是计数的方式?

出0入4汤圆

发表于 2012-12-13 18:26:56 | 显示全部楼层
LZ是做球机的?

出0入0汤圆

发表于 2012-12-13 18:35:57 | 显示全部楼层
S加速有个 时间常数 该常数是和系统的惯性相关的 负载不一样就不一样,  选取合适的时间常数,或者说S曲线的丰满程度,可以做到不失步的  不过步进电机一般是开环 没反馈的话,不太适合需要动态调整时间常数的控制  当然你可以取得大一点,但是  速度响应就慢了

出0入0汤圆

 楼主| 发表于 2012-12-14 17:09:30 | 显示全部楼层
本帖最后由 myqiang1990 于 2012-12-14 17:14 编辑
xxoo14 发表于 2012-12-13 17:36
为什么我做的好S加速表,转速跑到800RPM。在32 和64细分下丢步了,8 4 2 细分下都没丢步,每一个频点保持 ...


不会吧。。低细分倒不对不?高细分倒丢步?800RMP你的是什么电机?有负载吗。。。

出0入0汤圆

 楼主| 发表于 2012-12-14 17:14:33 | 显示全部楼层
xxoo14 发表于 2012-12-13 17:34
看过很多人做的加速表,一般才255个点,好多的不解

我觉得他们不太可能就通过255个脉冲来加速(假如这255个脉冲是按照微步脉冲算的话,如果是整步脉冲倒还可以)。。他们肯定在加速的时候做了处理的了,要么就是按照细分多走对于的细分值,比如128细分就多走128微步,假如一个255个加速脉冲表是按照128细分生成的,然后按照每一个微步一个频点,这是不可能加速的了得~~~算算就知道了。。所以我也不解他们是怎么就用这种表加速的,我觉得他们是在发脉冲的时候做了步数处理的了。~~~

出0入0汤圆

发表于 2012-12-18 23:01:21 | 显示全部楼层
myqiang1990 发表于 2012-12-14 17:14
我觉得他们不太可能就通过255个脉冲来加速(假如这255个脉冲是按照微步脉冲算的话,如果是整步脉冲倒还可 ...

我现在也做加速,也是查表,点有一千个的样子,加速到3000RPM,越到后面的点,保持的步数越多,那样才能不丢步!!3000转内 ,不论在哪个细分都可以精确控制

出0入0汤圆

发表于 2012-12-18 23:04:05 | 显示全部楼层
myqiang1990 发表于 2012-12-14 17:09
不会吧。。低细分倒不对不?高细分倒丢步?800RMP你的是什么电机?有负载吗。。。 ...

这个问题已经解决,是PWM时钟频率太低,PWM频率 = 时钟频率/PWM计数值,如果要得到相同的频率,PWM计数值变化一个单位,对应的PWM频率变化值变化量就大  。。。。对应的速度变化就大,这样就造成丢步了!!当然还有其他的原因

出0入0汤圆

 楼主| 发表于 2012-12-18 23:49:32 | 显示全部楼层
本帖最后由 myqiang1990 于 2012-12-19 00:22 编辑
xxoo14 发表于 2012-12-18 23:01
我现在也做加速,也是查表,点有一千个的样子,加速到3000RPM,越到后面的点,保持的步数越多,那样才能 ...


3000RPM。。。不会吧。。什么电机那么厉害~~你用在哪个方面啊~~~

出0入0汤圆

 楼主| 发表于 2012-12-18 23:56:32 | 显示全部楼层
xxoo14 发表于 2012-12-18 23:01
我现在也做加速,也是查表,点有一千个的样子,加速到3000RPM,越到后面的点,保持的步数越多,那样才能 ...

是啊。。频率越高,步数也要多一点。。

出0入0汤圆

发表于 2013-8-21 15:13:18 | 显示全部楼层
好贴,仔细看了一遍收获大大滴

出0入0汤圆

发表于 2013-8-23 10:25:41 | 显示全部楼层

出0入0汤圆

发表于 2013-8-23 21:24:25 来自手机 | 显示全部楼层
欧姆龙的plc是用每4毫秒升一次频,不知道楼主有没有研究过,我用stm32f1做了一下,效果不是很理想,我用的是双定时器内部级连方式发送脉冲。一个产生pwm一个用来计数,这样cpu就解放出来了。但是频率控制却碰到麻烦。希望和楼主交流。

出0入0汤圆

发表于 2013-10-29 15:30:31 | 显示全部楼层
这个问题是说细分模式变了但是表还是那个表,可以这样子,2细分的话,每个数据用2次,4细分用4次,依次类推,不就是一样了啊 呵呵呵

出90入0汤圆

发表于 2013-10-29 17:24:30 | 显示全部楼层
本帖最后由 hzpyl 于 2013-10-29 17:26 编辑

我2细分一般用124步从500Hz升到4000Hz。

到是发现频率不稳定,比较影响失步。

出0入0汤圆

发表于 2016-10-9 21:56:03 | 显示全部楼层
看看,谢谢分享

出0入0汤圆

发表于 2016-10-10 13:49:31 | 显示全部楼层
多谢分享~~~~

出0入0汤圆

发表于 2016-10-18 14:18:26 | 显示全部楼层
收获颇多

出0入0汤圆

发表于 2016-11-30 15:11:11 | 显示全部楼层
收藏,多谢各位楼主的讨论

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-24 23:06

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

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