OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 67621|回复: 53

步进电机 加减速的STM32的实现。

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-5-25
在线时间
2 小时
发表于 2014-6-15 11:55:48 | 显示全部楼层 |阅读模式
5金钱
    我正在做一个步进电机的控制项

目,众所周知,步进电机的加减速有梯形控制和S曲线两种方式。我目前用STM32实现了梯形加速。具体波形如图所示。
      我的算法是把最大速度分成16级或32级。每级用时为总加速时间的1/16或1/32,然后逐级加速。但是感觉两级之间的速度切换还太硬。想用S曲线来实现加减速。但是我看7段加减速的公式比较复杂,是否要用查表的方式来减少计算时间呢。
   有做过的,,麻烦告诉我一下思路。谢谢。

最佳答案

查看完整内容[请看2#楼]

谢谢原子哥帮顶,         经过两天的调试。我根据别人介绍的一篇算法,把步进电机的加减速过程按照S曲线的公式 进行了32段离散化。每个电机都用了一个通用定时器来控制,分别是TIM2,TIM3,TIM4. 这样步进电机的加减速基本做到比较平滑了,失步也很小了。      但是有个问题。因为我对速度量化时是按照5毫秒来一步来计算的。但是5毫秒的定时只是用更新中断粗略 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-5-25
在线时间
2 小时
 楼主| 发表于 2014-6-15 11:55:49 | 显示全部楼层
谢谢原子哥帮顶,
        经过两天的调试。我根据别人介绍的一篇算法,把步进电机的加减速过程按照S曲线的公式 进行了32段离散化。每个电机都用了一个通用定时器来控制,分别是TIM2,TIM3,TIM4. 这样步进电机的加减速基本做到比较平滑了,失步也很小了。
     但是有个问题。因为我对速度量化时是按照5毫秒来一步来计算的。但是5毫秒的定时只是用更新中断粗略计算的(比如我的PWM频率是400HZ,这样每次更新中断就是2.5ms,两次就是5毫秒。但是如果PWM频率是500HZ,每次更新中断就只有2ms,要精确达到5ms定时就没法实现了。这样就要么是4毫秒要么是6毫秒。这样就比较粗了)。想问问你们:
       一个定时器能否既产生PWM波,又能准确定时呢? 象这种情况是否要两个定时器呢?有做过的朋友帮我回答下。谢谢。
 附上我的算法来源文章。希望对需要的人有好处。

基于AT91SAM9261的步进电机S曲线?加减速控制研究与实现.pdf

1.75 MB, 下载次数: 21619

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-6-15 23:16:17 | 显示全部楼层
帮顶....
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-6-17 00:10:37 | 显示全部楼层
回复【3楼】wu_wgg:
---------------------------------
用2个定时器吧。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-5-25
在线时间
2 小时
 楼主| 发表于 2014-6-17 08:49:20 | 显示全部楼层
我有3个电机要同时控制,我用的是STM32F103CB,48脚的,没有这么多定时器啊。这样是否需要3*2=6个定时器呢?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-6-17 23:11:48 | 显示全部楼层
回复【5楼】wu_wgg:
---------------------------------
换个RC吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2014-6-18 17:56:24 | 显示全部楼层
可以,我以前做那个马达控制的时候,就是用列表的方式去控制的,,,
利用查表的方法是最有效率的,而且维护性也很强,,
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-5-25
在线时间
2 小时
 楼主| 发表于 2014-6-18 20:32:23 | 显示全部楼层
  我是做一个天线控制的,每次电机转动的角度不一样的,速度也不一样,用查表法还是需要二次计算,我现在是在每次转动之前根据需要转动的角度和时间先算一个ARR和COMP的表,然后再定时调用。
回复

使用道具 举报

17

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2014-6-4
在线时间
19 小时
发表于 2015-3-2 10:37:46 | 显示全部楼层
你脉冲输出用的是PWM方式?
回复

使用道具 举报

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
发表于 2015-3-4 01:20:23 | 显示全部楼层
回复【5楼】wu_wgg:
---------------------------------
一个定时器就可以啊,我就是用一个定时器做的,S曲线加速。42两相步进电机最高加速到了3000转每分钟,加速用了200级,分为普通加速和局部加速。
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2015-5-30
在线时间
0 小时
发表于 2015-5-30 18:34:31 | 显示全部楼层
回复【10楼】龙胜阳子:
---------------------------------
你用的是什么驱动
回复

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2015-5-12
在线时间
0 小时
发表于 2015-6-15 17:15:55 | 显示全部楼层
回复【10楼】龙胜阳子:
---------------------------------
有代码吗大神求分享qq1350872378
回复

使用道具 举报

3

主题

62

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2015-5-29
在线时间
0 小时
发表于 2015-6-15 21:48:17 | 显示全部楼层
我最近也在学习这个,我用的驱动是L298N+STM32F103RCT6
 EN脚用了PWM控制,
回复

使用道具 举报

3

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-3-5
在线时间
5 小时
发表于 2015-10-11 19:55:16 | 显示全部楼层
回复【13楼】XCDesigner:
---------------------------------
能给个程序瞧瞧吗
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2015-10-26
在线时间
16 小时
发表于 2015-10-26 17:04:19 | 显示全部楼层
亲,给个代码,学习一下
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-3-30
在线时间
1 小时
发表于 2015-12-15 16:44:13 | 显示全部楼层
我用的梯形算法加减速,以设置v0 vt a还有t4个参数,里面做了DDA插补,可以做到任意6个轴同时回零,用了一个定时器哇,还可以支持运动过程中任意加减速的
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-1-5
在线时间
1 小时
发表于 2016-1-5 16:57:54 | 显示全部楼层
大神们,可以给些建议吗?刚初入门STM32,公司要求做电机的产品,一头冒水不知道从哪里入手啊..........驱动用的A3977SLP....
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2015-11-24
在线时间
32 小时
发表于 2016-1-15 16:41:44 | 显示全部楼层
楼主 你参考的这个论文我看了 有很大的缺陷,算法本身就是丢步的算法,要在结构体重加上 double dn,用dn来取每个分段时间内步数的小数部分,以防止丢步。
关于你的问题我是这么理解的,在中断函数中进行if判断,以168M的主频,消耗的指令周期是非常小的,你可以反汇编试一下,我的中断函数延时大概是3us。可以忽略不计啦。。。。。。
最好的法子是每个频率走一步。但要用s型加速要解S=CT^3/6+VT,S已知,求T. 实在是不方便。。。。。。。楼主要是有啥好办法,咱们讨论一下。。。
回复

使用道具 举报

7

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2015-11-28
在线时间
30 小时
发表于 2016-1-22 22:17:07 | 显示全部楼层
楼主,看到你这贴好激动,我最近也在做这个,不太会呢,能共享一下代码看看么,381781382@qq.com,谢谢啦
回复

使用道具 举报

11

主题

52

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2014-11-23
在线时间
192 小时
发表于 2016-1-23 17:26:31 | 显示全部楼层
s加减速曲线我之前在做项目的时候用过,具体公式为:Y=(K-C)/(1+E^(-A(X-B)))+C,其中K为曲线的最高频率,C为起始频率,E为自然数,A为斜率(我一般取的值为1,值越大,曲线坡度越抖),X为变化量(我一般用0.5),B为常数 (5、10、15都可以,数值越大,曲线坡度越抖),通过以上公式就可以得出Y;按照我的想法:先建个excel表格,X从0开始变化,每次+0.5,然后算出Y,一直到Y接近最大频率,(比如说当X为50的时候到最大频率,就是经过100次加速,每一次都有一个对应频率Y值,假如要得到频率从0到2000的曲线,细分100次,就是说每20就改一次频率), 我是单片机菜鸟,刚搞了1年,之前搞PLC思路是这样!要是有不明白的再讨论可加我qq281340955!这个论坛非常好,我学了不少东西,但菜鸟一个能帮助别人的机会忒少!另外楼主是否能提供你的梯形加速代码,分享一下 ,让大家也学习学习嘛!  
菜鸟不可怕,就怕菜鸟不愿飞 | | | -===+=====_/(T)\_=====+===- | |/.\| | `-|\_/|-'
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2016-1-23
在线时间
0 小时
发表于 2016-1-23 17:39:17 | 显示全部楼层
你好我最近也在用STM32做驱动步进电机的项目,但是始终驱动是TB6600 电机是54BYG230C 始终无法让它转动,现在一直很郁闷,不知道该咋办啊,楼主能给点思路吗?
回复

使用道具 举报

10

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2012-12-18
在线时间
29 小时
发表于 2016-4-1 17:44:24 | 显示全部楼层
hxyqq87 发表于 2016-1-23 17:26
s加减速曲线我之前在做项目的时候用过,具体公式为:Y=(K-C)/(1+E^(-A(X-B)))+C,其中K为曲线的最高频率,C ...

347828751
回复

使用道具 举报

22

主题

147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3983
金钱
3983
注册时间
2015-4-18
在线时间
403 小时
发表于 2016-4-1 21:27:39 | 显示全部楼层
都是高手啊。。。。
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2015-9-4
在线时间
0 小时
发表于 2016-7-13 09:30:42 | 显示全部楼层
hxyqq87 发表于 2016-1-23 17:26
s加减速曲线我之前在做项目的时候用过,具体公式为:Y=(K-C)/(1+E^(-A(X-B)))+C,其中K为曲线的最高频率,C ...

我也这么做过  我是一个频率走一步  离散4000个点 但是启动时抖动很大
回复

使用道具 举报

6

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2016-1-7
在线时间
54 小时
发表于 2016-7-15 11:35:44 | 显示全部楼层
先收藏,到时候,咨询各位大师
回复

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2613
金钱
2613
注册时间
2011-1-25
在线时间
176 小时
发表于 2016-7-15 16:40:06 | 显示全部楼层
我是按加减速时间来算的。应用过伺服电机,脉冲数精准,加减速可动态调整。后来开发成自拟合曲线的加减速。
一直努力就很好。
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2016-4-27
在线时间
10 小时
发表于 2016-7-17 11:12:24 | 显示全部楼层
楼主,最近我也在研究步进电机的调速,能不能分享一下代码,929222083@qq.com,小弟感激不尽
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-8-20
在线时间
2 小时
发表于 2016-8-20 21:27:03 | 显示全部楼层
学习了。。。。。。。
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-8-3
在线时间
1 小时
发表于 2016-10-27 20:05:38 | 显示全部楼层
有个贴子是有关S曲线算法的研究但是我做了很不理想
刚开始的加速过程很慢 最后的加速也很慢 就是中间的快点 这个刚好符合S型曲线 。
由于开始的时候加速很慢参数很难调 试了很多参数都不行 你试试吧.这个网址http://blog.csdn.net/pengzhihui2 ... 28822?locationNum=6
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2016-10-28 09:52:03 | 显示全部楼层
qq942266575 发表于 2016-7-15 16:40
我是按加减速时间来算的。应用过伺服电机,脉冲数精准,加减速可动态调整。后来开发成自拟合曲线的加减速。

我想问一下,你们的这些方法都只是纯软件的算法 还是有什么外围电路支持啊
我的四相电机直接IO驱动(有电流驱动芯片),最后也是驱动了,但是速度和
震动是硬伤,速度快了 那么就震动,速度慢了就达不到我们的要求。  
后面查资料 老是看到什么细分       请问不用细分能不能通过纯软件决解电机转动速度慢
震动等问题吗  
自己选择的路,成家前走完。
回复

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2613
金钱
2613
注册时间
2011-1-25
在线时间
176 小时
发表于 2016-10-28 13:02:08 | 显示全部楼层
aiyeba 发表于 2016-10-28 09:52
我想问一下,你们的这些方法都只是纯软件的算法 还是有什么外围电路支持啊
我的四相电机直接IO驱动(有 ...

步进低速运转会有一个震动区,提速就可以。
一直努力就很好。
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2016-10-28 13:23:27 | 显示全部楼层
qq942266575 发表于 2016-10-28 13:02
步进低速运转会有一个震动区,提速就可以。

提速了对负载有什么要求没,我现在就是负载有点重。
自己选择的路,成家前走完。
回复

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2613
金钱
2613
注册时间
2011-1-25
在线时间
176 小时
发表于 2016-10-30 14:49:43 | 显示全部楼层
aiyeba 发表于 2016-10-28 13:23
提速了对负载有什么要求没,我现在就是负载有点重。

速度越高扭矩越小。
一直努力就很好。
回复

使用道具 举报

3

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-12-10
在线时间
11 小时
发表于 2016-12-15 17:13:20 | 显示全部楼层
龙胜阳子 发表于 2015-3-4 01:20
回复【5楼】wu_wgg:
---------------------------------
一个定时器就可以啊,我就是用一个定时器做的,S曲 ...

3000rpm,1s就是50转,一转3200脉冲的话,脉冲频率就是160K
200级加速?你确定机架不会咣咣响?
回复

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2016-12-16 09:06:28 | 显示全部楼层
加速度和加加速度,搞清这两个量在电机控制中的作用,不要使用固定表
回复

使用道具 举报

5

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2016-7-30
在线时间
82 小时
发表于 2016-12-16 15:08:34 | 显示全部楼层
mark,以后在学习
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2012-9-12
在线时间
3 小时
发表于 2017-3-9 09:23:25 | 显示全部楼层
楼主,求指教。我在做TB6600HG驱动步进电机,确认输入信号,电平都对,但是AB相的输出波形成0°或者180°,电机不转,应该是90°,能指导一下吗?490285195@qq.com
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-3-3
在线时间
2 小时
发表于 2017-3-10 08:52:16 | 显示全部楼层
aiyeba 发表于 2016-10-28 09:52
我想问一下,你们的这些方法都只是纯软件的算法 还是有什么外围电路支持啊
我的四相电机直接IO驱动(有 ...

可以,用细分驱动,闭环步进电机驱动
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-3-3
在线时间
2 小时
发表于 2017-3-10 08:55:00 | 显示全部楼层
zx3321569 发表于 2017-3-9 09:23
楼主,求指教。我在做TB6600HG驱动步进电机,确认输入信号,电平都对,但是AB相的输出波形成0°或者180°, ...

你这应该是驱动部分的电路有问题
回复

使用道具 举报

3

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2013-12-24
在线时间
28 小时
发表于 2017-3-10 09:04:05 | 显示全部楼层
我用一个定时器控制两个步进电机,用输出比较模式,S曲线加减速,很流畅。
用的是查表方式,先生成一个很大的数组,然后根据数组里的值修改频率
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2017-7-25
在线时间
1 小时
发表于 2017-7-25 16:42:28 | 显示全部楼层
13688063643 发表于 2016-1-23 17:39
**** 作者被禁止或删除 内容自动屏蔽 ****

电路搭正确的话,pwm波作为信号输入,频率设置为20khz以下,1khz以上试试
回复

使用道具 举报

6

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-3-22
在线时间
8 小时
发表于 2017-9-1 13:20:50 | 显示全部楼层
wmaxwell 发表于 2017-3-10 09:04
我用一个定时器控制两个步进电机,用输出比较模式,S曲线加减速,很流畅。
用的是查表方式,先生成一个很 ...

有代码可以参考吗
回复

使用道具 举报

6

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-3-22
在线时间
8 小时
发表于 2017-9-1 13:22:39 | 显示全部楼层
aiyeba 发表于 2016-10-28 09:52
我想问一下,你们的这些方法都只是纯软件的算法 还是有什么外围电路支持啊
我的四相电机直接IO驱动(有 ...

你好,请问有关于步进电机的控制方法吗
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2017-9-1 13:57:37 | 显示全部楼层
VU情 发表于 2017-9-1 13:22
你好,请问有关于步进电机的控制方法吗

A
B
C
D
分别表示io
于是
在定时里面有

switch(motor_step)
{
  case 1:
              A=1;
              motor_step=2;
              break;
case 2:
             A=1;
             B=1;
             motor_step=3;
             break;
case 3:
            

}
频率要对上。概括就是  A,AB,B,BC,C,CD,D,DA。八步
自己选择的路,成家前走完。
回复

使用道具 举报

6

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2016-1-7
在线时间
54 小时
发表于 2018-3-21 12:12:25 | 显示全部楼层
定5MS的阶频,进行升频
回复

使用道具 举报

0

主题

43

帖子

0

精华

高级会员

Rank: 4

积分
685
金钱
685
注册时间
2018-4-17
在线时间
104 小时
发表于 2018-4-19 13:13:09 | 显示全部楼层
顶一下吧,到处查资料。。。
回复

使用道具 举报

26

主题

355

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1770
金钱
1770
注册时间
2017-4-1
在线时间
432 小时
发表于 2018-4-20 17:15:44 | 显示全部楼层
留个眼0.0
回复

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2018-4-20 20:38:37 | 显示全部楼层
加入加速度变量就能很好的控制加速的斜率的平滑比变化,当然根据负载不同所能实现加速扭矩和加速度也要考量,开环的需要自己去试,根据电机功率和负载,闭环的可以通过电流闭来得出a值,采纳我的我再多说点,嘿嘿
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-7
在线时间
7 小时
发表于 2018-7-31 15:45:19 | 显示全部楼层
mark一下,步进电机真不简单
回复

使用道具 举报

3

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2016-10-8
在线时间
50 小时
发表于 2018-10-12 15:18:56 | 显示全部楼层
加减速算法,不错,学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 06:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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