OpenEdv-开源电子网

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

步进电机控制输出比较与PWM优缺点

[复制链接]

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
发表于 2020-4-8 21:05:55 | 显示全部楼层 |阅读模式
想请教一下各位大侠,控制步进电机,用的是定时器的输出比较模式还是PWM模式,两者有什么优缺点
单选投票, 共有 412 人参与投票

距结束还有: 29661 天8 小时13 分钟

您所在的用户组没有投票权限
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1694
金钱
1694
注册时间
2012-5-10
在线时间
437 小时
发表于 2020-4-8 22:43:04 | 显示全部楼层
都没用,在定时器中断里面控制io,这样可实现无限个电机控制,
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2020-4-9 10:02:13 | 显示全部楼层
xsx127 发表于 2020-4-8 22:43
都没用,在定时器中断里面控制io,这样可实现无限个电机控制,

老大似乎说的很有道理,相当于通过定时器中断来控制外部接口的电平翻转,这样就人为的产生了脉冲输出,是不是这样理解呢?还有如果在一个定时器里,添加无数个变量比如变量一个定时器中断+1,这样的话就相当于拥有了无数个定时器来使用对吧?如果把这些变量做成全局变量,就可以在不同的地方对定时器清零或其他处理对吧?
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2020-4-9 10:03:31 | 显示全部楼层
我现在想要问的是,定时器比较输出模式,与PWM模式的区别是什么呢?是脉宽调整方便还是频率的调整方便呢?
回复

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1694
金钱
1694
注册时间
2012-5-10
在线时间
437 小时
发表于 2020-4-9 11:02:12 | 显示全部楼层
凌凌漆 发表于 2020-4-9 10:02
老大似乎说的很有道理,相当于通过定时器中断来控制外部接口的电平翻转,这样就人为的产生了脉冲输出,是 ...

你说这是把定时器当成基准时钟了,freertos有软件定时器组,很好用,不用自己实现
如有技术问题,微信扫头像交流,STM32,JAVA,服务器
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2020-4-9 11:11:53 | 显示全部楼层
xsx127 发表于 2020-4-9 11:02
你说这是把定时器当成基准时钟了,freertos有软件定时器组,很好用,不用自己实现

还没有学系统,现在就是单纯的跑裸机呢,
回复

使用道具 举报

64

主题

446

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1032
金钱
1032
注册时间
2017-7-26
在线时间
275 小时
发表于 2020-4-9 11:33:50 | 显示全部楼层
都没用
步进电机的控制没这么简单的

你试试能不能输出一系列波形,周期越来越小的
频率可调,周期变化速率可调
能做到这个就比较好控制了
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2020-4-9 12:25:51 | 显示全部楼层
a3748622 发表于 2020-4-9 11:33
都没用
步进电机的控制没这么简单的

嗯,正在学呢,我现在也想做成这样的,主要是速度可控,时间或者步数可以控制
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1665
金钱
1665
注册时间
2016-4-29
在线时间
266 小时
发表于 2020-4-9 12:33:37 | 显示全部楼层
哪有那么简单,128细分的情况下你试试看
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2020-4-9 15:28:27 | 显示全部楼层
d1z1y2 发表于 2020-4-9 12:33
哪有那么简单,128细分的情况下你试试看

话说128细分有什么意义啊?是要做精确控制吗?还是说步进电机+编码器实现闭环控制呢?
回复

使用道具 举报

64

主题

446

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1032
金钱
1032
注册时间
2017-7-26
在线时间
275 小时
发表于 2020-4-10 08:54:30 | 显示全部楼层
凌凌漆 发表于 2020-4-9 15:28
话说128细分有什么意义啊?是要做精确控制吗?还是说步进电机+编码器实现闭环控制呢?

他的意思是,需要输出的频率比较高,这时候你用定时器中断改变IO电平,很难做到。一般都是要硬件定时器了
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1665
金钱
1665
注册时间
2016-4-29
在线时间
266 小时
发表于 2020-4-14 22:07:38 | 显示全部楼层
a3748622 发表于 2020-4-10 08:54
他的意思是,需要输出的频率比较高,这时候你用定时器中断改变IO电平,很难做到。一般都是要硬件定时器了

是这意思,频率上不去,中断会占用大量CPU时间,更别说加减速了
回复

使用道具 举报

3

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
332
金钱
332
注册时间
2019-6-3
在线时间
102 小时
发表于 2020-4-15 22:23:24 来自手机 | 显示全部楼层
xsx127 发表于 2020-4-8 22:43
都没用,在定时器中断里面控制io,这样可实现无限个电机控制,

定时器翻转的话怎么控制方向和不熟的人的?
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2020-4-19
在线时间
4 小时
发表于 2020-4-22 14:12:54 | 显示全部楼层
请问步进电机用什么测速比较好  编码器还是槽形红外对射管?
回复

使用道具 举报

9

主题

92

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1134
金钱
1134
注册时间
2014-7-25
在线时间
176 小时
发表于 2020-4-22 18:30:12 | 显示全部楼层
本帖最后由 孤心寒 于 2020-4-22 18:38 编辑

1、PWM是需要频率可调,因为电机需要做加减速,最好是S型的
2、最好PWM占空比是50%
3、用定时器翻转肯定是不行的,电机多了程序一大,频繁进中断肯定不行的
4、可以使用定时器捕获+定时器PWM
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2020-4-28 14:19:49 | 显示全部楼层
a3748622 发表于 2020-4-10 08:54
他的意思是,需要输出的频率比较高,这时候你用定时器中断改变IO电平,很难做到。一般都是要硬件定时器了

硬件定时器,是不是就是说用stm32自带的定时器功能了
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2020-4-28 14:20:34 | 显示全部楼层
d1z1y2 发表于 2020-4-14 22:07
是这意思,频率上不去,中断会占用大量CPU时间,更别说加减速了

哦哦,这样啊,那加减速的话用什么方式比较好呢?
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2020-4-28 14:21:18 | 显示全部楼层
孤心寒 发表于 2020-4-22 18:30
1、PWM是需要频率可调,因为电机需要做加减速,最好是S型的
2、最好PWM占空比是50%
3、用定时器翻转肯定 ...

大神啊,您那有没有例程啊,学习一下啊(*^▽^*)
回复

使用道具 举报

9

主题

92

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1134
金钱
1134
注册时间
2014-7-25
在线时间
176 小时
发表于 2020-4-28 19:47:51 | 显示全部楼层
凌凌漆 发表于 2020-4-28 14:21
大神啊,您那有没有例程啊,学习一下啊(*^▽^*)

例程不是很方便,但是可以给你思路,加速,你可以分成10断,比如第一段是需要100个脉冲,捕获的定时器再100个脉冲之后中断,重新装载,PWM的定时器频率改变,然后以此类推。你可以加速10断,匀速是1断,减速是10断,总共就产生21个中断就可以了
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2020-4-29 13:42:51 | 显示全部楼层
孤心寒 发表于 2020-4-28 19:47
例程不是很方便,但是可以给你思路,加速,你可以分成10断,比如第一段是需要100个脉冲,捕获的定时器再1 ...

嗯,好的谢谢
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2020-5-2 07:37:33 | 显示全部楼层
孤心寒 发表于 2020-4-28 19:47
例程不是很方便,但是可以给你思路,加速,你可以分成10断,比如第一段是需要100个脉冲,捕获的定时器再1 ...

还有一点想咨询一下,步进电机的话启动速度是多大合适呢?比如我设置成300转/分钟,没有问题,可是我如果设置成70转的话就会卡卡卡的响而且也不转
回复

使用道具 举报

2

主题

88

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
467
金钱
467
注册时间
2017-12-20
在线时间
60 小时
发表于 2020-5-9 08:51:07 | 显示全部楼层
凌凌漆 发表于 2020-5-2 07:37
还有一点想咨询一下,步进电机的话启动速度是多大合适呢?比如我设置成300转/分钟,没有问题,可是我如果 ...

这个跟电机本身特性、驱动器性能有关看说明
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3988
金钱
3988
注册时间
2015-11-14
在线时间
541 小时
发表于 2020-7-12 08:13:08 | 显示全部楼层
有控制器的,输出一定频率的脉冲波可以驱动步进电机,至于需要什么速度,加减速控制就是控制脉冲波的周期。与PWM毫无关系,PWM最大的作用是调整占空比。
回复

使用道具 举报

4

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2014-6-2
在线时间
21 小时
发表于 2020-8-1 17:29:26 | 显示全部楼层
PWM+DMA 方案 优点:不占用CPU时间,频率做的可以到1Mhz,缺点 1中途不太好控制.比如转了一半突然需要减速等情况.2脉冲口为固定的,硬件设计会麻烦,轴数也做不上去,纯定时器方案:优点是例程多,好理解.   缺点是 频率做不上去,一个电机一个定时器,假如6轴,那么需要6个定时器,浪费定时器资源不说,最关键的是,进出定时器需要.1.5us的时间,在这段时间内,CPU不产生任何
效率.假如每轴都以100K运行,那么浪费的时间是 100000*1.5*6=900000US = 900MS =0.9秒,剩下只有0.1秒供中断和 main程序
假如算上中断服务内消耗的时间,那么main函数中就得不到任何CPU 资源(死机了),而且中断频率也不可能到达100K,因此采用传统的办法,单轴最高理论上
只能到500K ,实际上应用单轴估计可以到300K,6轴联动 CPU利用率急剧下降, 估计 不会超过20K,因此降低中断次数是提高速度的关键
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2020-7-28
在线时间
2 小时
发表于 2020-8-1 17:47:45 | 显示全部楼层
楼主实现了吗?有没有例程呢,我是初学者,有点懵
回复

使用道具 举报

13

主题

263

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5337
金钱
5337
注册时间
2017-8-14
在线时间
236 小时
发表于 2020-8-4 22:13:21 | 显示全部楼层
本帖最后由 zml13917492379 于 2021-4-9 11:27 编辑

我们用的 是 定时器 方式:
stm302.jpg
GDF103C8T6源码,程序含步进电机丢步及死区补偿
功能,详细见:
http://www.openedv.com/forum.php ... D%BD%F8%B5%E7%BB%FA



详细资料扣扣群204408503自行下载
回复

使用道具 举报

0

主题

4

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2320
金钱
2320
注册时间
2020-4-23
在线时间
196 小时
发表于 2020-8-20 20:52:10 | 显示全部楼层
步进电机的控制脉冲生成,要考虑的因素至少有
1)是单轴运动的还是多轴联动的
2)如果是多轴联动的,那么要考虑多轴插补运算算法的实现,如:逐点比较法,DDA法,Bresenham法
3)速度规划:确定各轴每一个运行段的进场速度,名义速度,最大交汇速度等等
4)在速度规划的基础上对各轴的速度进行加减速控:一般用梯形加减速算法即可;如果要求高的,可以用S型加减速算法。

如果是单轴的或者各轴直接不要联动的,那么用PWM或脉冲输出比较都是可行的。
如果是多轴联动的,那么步进电机的脉冲控制机制是复杂而灵活的,用PWM或脉冲比较都难以胜任。比较可行的是在定时器更新中断中来控制步进电机的脉冲输出。
道法自然
回复

使用道具 举报

4

主题

15

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2020-9-2
在线时间
8 小时
发表于 2020-9-2 20:23:58 | 显示全部楼层
xsx127 发表于 2020-4-8 22:43
都没用,在定时器中断里面控制io,这样可实现无限个电机控制,

老大说的有一些道理,但是一个定时器一般是自动重装载寄存器周期的值,当然也可以改变预装载周期值,但是再下一个周期。而且io口电平改变一个周期,预装载周期值要改变两次,还必须执行中断服务函数,复杂化程序和增加单片机执行难度。
回复

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1694
金钱
1694
注册时间
2012-5-10
在线时间
437 小时
发表于 2020-9-3 11:12:23 | 显示全部楼层
1枝独秀 发表于 2020-9-2 20:23
老大说的有一些道理,但是一个定时器一般是自动重装载寄存器周期的值,当然也可以改变预装载周期值,但是 ...

那看你怎么写程序了,我就一个定时器,溢出中断50us,每个电机的时基就是50us,各个电机自己计数,想要几个50us高,几个50us低都可以任意控制
如有技术问题,微信扫头像交流,STM32,JAVA,服务器
回复

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2020-2-16
在线时间
16 小时
发表于 2020-9-9 10:16:26 | 显示全部楼层
孤心寒 发表于 2020-4-22 18:30
1、PWM是需要频率可调,因为电机需要做加减速,最好是S型的
2、最好PWM占空比是50%
3、用定时器翻转肯定 ...

占空比有什么讲究呀,为什么是50%
回复

使用道具 举报

11

主题

39

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2016-6-30
在线时间
21 小时
发表于 2020-9-9 13:34:45 | 显示全部楼层
我刚做完一个步进项目。使用STM32F407控制两个步进电机(同时运动)。
硬件:STM32F407+DRV8889-Q1(步进驱动芯片,该芯片不含运动算法)
运动模型:梯形加减速曲线(算法直接参考AVR446)
控制控制参数:  位置,加速度,减速度,加速度

回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2020-8-31
在线时间
17 小时
发表于 2020-9-10 14:59:31 | 显示全部楼层
步进电机
回复

使用道具 举报

4

主题

15

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2020-9-2
在线时间
8 小时
发表于 2020-10-24 11:03:14 | 显示全部楼层
PWM相比输出比较方式控制步进电机,前者更方便调参数,如占空比,频率等。
回复

使用道具 举报

13

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
749
金钱
749
注册时间
2020-6-24
在线时间
311 小时
发表于 2020-12-21 10:13:20 | 显示全部楼层
本帖最后由 ColeSofCJ 于 2020-12-21 10:25 编辑
175891641 发表于 2020-8-1 17:29
PWM+DMA 方案 优点:不占用CPU时间,频率做的可以到1Mhz,缺点 1中途不太好控制.比如转了一半突 ...

   一般多轴步进电机控制器6轴左右不用纯定时器方案,可以用输出比较中断做,一般一个定时器有四路输出比较,6轴占用两路定时器就够了,进出中断时如果是一个定时器的输出比较中断同时来2个及以上,只需要进出中断一次就可以了,因此效率没有你算得那么低,但也没多高,用stm32F407做的话应该4路100-200k没有问题,再高就需要更高主频的单片机了!
   通常步进电机要不了100-200K那么高的速率,所以通常stm32F103就够用了,不过要是控制伺服电机的话就有点勉强(伺服电机转速高,需要的脉冲速率也高)。   用输出比较中断做的话,如果是比较平滑的S加减速的话,需要一个记忆加减速数据的数组,这个比较占RAM空间,因此需要比较多的RAM,stm32F103只是刚刚够,要RAM比较宽松的话可以考虑stm32F407或更高主频更大RAM的单片机。
回复

使用道具 举报

13

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
749
金钱
749
注册时间
2020-6-24
在线时间
311 小时
发表于 2020-12-21 10:21:04 | 显示全部楼层
孤心寒 发表于 2020-4-22 18:30
1、PWM是需要频率可调,因为电机需要做加减速,最好是S型的
2、最好PWM占空比是50%
3、用定时器翻转肯定 ...

定时器的比较翻转是比较好的方案,至于电机多了中断频繁这个问题是因为单片机资源有限引起的,通常通过增加主频或者增加单片机来解决,总不可能一个单片机带1个电机跑的很顺畅,带10个20个电机还要求它做平滑S加减速,这时候通常就需要多单片机通过通讯方式联合了。
回复

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2020-12-23
在线时间
13 小时
发表于 2021-1-3 17:32:18 | 显示全部楼层
孤心寒 发表于 2020-4-28 19:47
例程不是很方便,但是可以给你思路,加速,你可以分成10断,比如第一段是需要100个脉冲,捕获的定时器再1 ...

大佬能不能给个简单一点的例程,就两三断就可以,新手再弄这个东西。
回复

使用道具 举报

5

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2020-12-22
在线时间
17 小时
发表于 2021-1-14 09:04:54 | 显示全部楼层
感觉还有一大段路要走。
回复

使用道具 举报

4

主题

173

帖子

0

精华

高级会员

Rank: 4

积分
637
金钱
637
注册时间
2019-7-28
在线时间
59 小时
发表于 2021-3-2 16:43:02 | 显示全部楼层
最好用TIM1/8高级定时器的PWM,实用RCR完成分段计数,这样MPU资源最省。
回复

使用道具 举报

45

主题

267

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1091
金钱
1091
注册时间
2018-6-24
在线时间
156 小时
发表于 2021-3-31 22:30:36 来自手机 | 显示全部楼层
定时器会伴有杂波,pwm好
回复

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2018-5-8
在线时间
6 小时
发表于 2021-10-4 14:28:23 | 显示全部楼层
关键是步进电机人家都是来计步的,你靠中断来计数吗
回复

使用道具 举报

1

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2020-11-8
在线时间
23 小时
发表于 2021-12-24 17:10:02 | 显示全部楼层
a3748622 发表于 2020-4-9 11:33
都没用
步进电机的控制没这么简单的

S型曲线加速没毛病
回复

使用道具 举报

28

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2021-2-4
在线时间
146 小时
发表于 2022-6-5 20:57:41 | 显示全部楼层
我想问一下 定时器比较输出模式 和 放在定时器里面翻转IO有什么区别?
回复

使用道具 举报

28

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2021-2-4
在线时间
146 小时
发表于 2022-6-6 14:16:28 | 显示全部楼层
xsx127 发表于 2020-4-8 22:43
都没用,在定时器中断里面控制io,这样可实现无限个电机控制,

想问一下,这样做的话梯形算法该怎么写?
我目前是直接改ARR的值
回复

使用道具 举报

13

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
749
金钱
749
注册时间
2020-6-24
在线时间
311 小时
发表于 2022-9-16 13:23:58 | 显示全部楼层
电子控2021 发表于 2022-6-6 14:16
想问一下,这样做的话梯形算法该怎么写?
我目前是直接改ARR的值

  一般不改ARR而是ARR定值,改CCR1~CCR4.
回复

使用道具 举报

2

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2020-6-7
在线时间
13 小时
发表于 2023-1-11 17:04:21 | 显示全部楼层
凌凌漆 发表于 2020-4-9 12:25
嗯,正在学呢,我现在也想做成这样的,主要是速度可控,时间或者步数可以控制

用定时器控制引脚反转脉冲频率控制转速,用外部中断检测电机转动的角度参数的脉冲个数控制跑的距离
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 06:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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