搜索
bottom↓
回复: 35

STM32驱动步进电机精确可控输出脉冲个数方案及对比

  [复制链接]

出0入0汤圆

发表于 2021-11-22 19:20:57 | 显示全部楼层 |阅读模式
本帖最后由 磊磊映画 于 2021-11-22 19:25 编辑

最近在调试 步进电机, 控制方式主要是通过  脉冲计数方式 控制步进电机运动,具体的运动距离由 发送的脉冲数来决定实现的。
以前的项目用需要两路步进电机信号,主从定时器脉冲计数方式需要占用两个定时器,
现在项目用了6路步进电机 继续用主从计数方式明显 定时器不够用了,经过查阅资料 转帖原贴

发现还可以使用:
定时器CHx独立通道dma,改变dma传输长度控制个数方式来实现可控脉冲数控制步进电机运动
节省单片机资源 一路定时器最多可输出4路,还不需要CPU介入。
比之前用的主从计数方式方便多了。特分享如下:
精确可控输出脉冲个数方案 总共有7种:
各有优缺点 :
7种实现方案对比:

1.低频定时器翻转io,中断内统计个数           优点:简单                                             缺点:浪费cpu,频率可能低
2.
输出比较模式,中断内统计个数                 优点:可变周期 占空比,路数多的去了     缺点:浪费cpu,频率也可能低
3.pwm
连通外部中断或外部计数数个数          优点:简单                                            缺点:浪费cpu,浪费定时器待测(懒得用这个方法)
4.
高级定时器 重复计数寄存器+单脉冲模式    优点:频率比前俩高点                            缺点:定时器固定了,只能高级定时器,路数少待测(懒得用这个方法)
5.
定时器主从模式                                       优点:周期占空比都可变                         缺点:用两个定时器,路数也少
6.
定时器UP溢出通道dma,改变dma传输长度控制个数     优点:能读取剩余脉冲个数
                                                               
可变占空比,周期,用于可以调速等         缺点:好像没哈缺点(与7比路数少浪费定时器,推荐7)
7.定时器CHx独立通道dma,改变dma传输长度控制个数(上一个用的溢出dma一个定时器只能产生一路有点浪费,改成用通道dma
                                                              一个定时器可以产生3路或4路,dma限制不能是4,例如定时器5、8可以4路
                                                               
优点:能读取剩余脉冲个数
                                                               
可变占空比,周期,用于可以调速等         缺点:好像没哈缺点

















本帖子中包含更多资源

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

x

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

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

出0入0汤圆

发表于 2021-11-22 19:52:55 | 显示全部楼层
好贴,赞一个

出0入0汤圆

发表于 2021-11-22 19:56:36 来自手机 | 显示全部楼层
本帖最后由 advarx21ic 于 2021-11-22 19:59 编辑

方法6可能好一点,频率可调

更正:
搞错了,7也是频率可调

出75入0汤圆

发表于 2021-11-23 04:42:20 来自手机 | 显示全部楼层
值得参考,感谢!

出0入4汤圆

发表于 2021-11-23 08:04:46 来自手机 | 显示全部楼层
用ch通道如果同一个timer 下2个ch的脉冲需要频率不一样就比较难以实现。

出0入115汤圆

发表于 2021-11-23 09:01:00 | 显示全部楼层
楼主不错,已经玩精通了单片机控制步进电机,但是加上编码器反馈单片机就很吃力了,我以前的项目用的主从定时器方案,不过现在的运动控制方案,已经改用fpga了,最多支持16路步进,带编码,脉冲频率从1k->1M 无压力输出,支持t型和s型,路程都是动态计算的,fpga其实要比单片机实现简单的。

出0入0汤圆

发表于 2021-11-23 09:05:48 | 显示全部楼层
xiaoergao 发表于 2021-11-23 08:04
用ch通道如果同一个timer 下2个ch的脉冲需要频率不一样就比较难以实现。

对,刚刚看了数据手册,每个定时器只有一个ARR寄存器用来控制周期,所以,每个ch独立控制周期是不可能的了。

出0入135汤圆

发表于 2021-11-23 09:30:45 来自手机 | 显示全部楼层
方式7受限于dma通道数量吧?stm32f4能做多少轴?

出0入300汤圆

发表于 2021-11-23 09:49:06 来自手机 | 显示全部楼层
电机用的话主要是加减速,加减速一进去就复杂了。然后可靠一点的要闭环,如果采用绝对编码器闭环又会严重开销速度,然后挂入系统要有总线协议再加上协议基本概念已经是体系级别的了,外设配置只不过是必须要攻克的项目之一罢了

出0入0汤圆

 楼主| 发表于 2021-11-23 14:45:37 | 显示全部楼层
xiaoergao 发表于 2021-11-23 08:04
用ch通道如果同一个timer 下2个ch的脉冲需要频率不一样就比较难以实现。

要求不高的话,可以串行实现。并行实现不了了

出0入0汤圆

 楼主| 发表于 2021-11-23 14:46:13 | 显示全部楼层
ibmx311 发表于 2021-11-23 09:49
电机用的话主要是加减速,加减速一进去就复杂了。然后可靠一点的要闭环,如果采用绝对编码器闭环又会严重开 ...

嗯,先把驱动调通

出0入0汤圆

发表于 2021-11-23 15:04:55 | 显示全部楼层
值得参考,感谢!

出0入0汤圆

发表于 2021-11-23 21:13:03 来自手机 | 显示全部楼层
谢谢楼主,最近正好要用上

出100入85汤圆

发表于 2021-11-23 22:08:00 来自手机 | 显示全部楼层
谢谢共享,正好需要

出0入0汤圆

发表于 2021-11-23 22:21:49 来自手机 | 显示全部楼层
值得参考,感谢!

出0入0汤圆

发表于 2021-11-23 23:09:09 | 显示全部楼层
三年模拟 发表于 2021-11-23 09:01
楼主不错,已经玩精通了单片机控制步进电机,但是加上编码器反馈单片机就很吃力了,我以前的项目用的主从定 ...

我正在做ZYNQ的方案,动态计算都是FPGA实现那就太牛了.

出0入0汤圆

发表于 2021-11-23 23:14:40 来自手机 | 显示全部楼层
最近一直在研究多轴的方案,这资料真贴心,谢谢楼主

出0入4汤圆

发表于 2021-11-24 10:17:07 | 显示全部楼层
6.定时器UP溢出通道dma,改变dma传输长度控制个数     优点:能读取剩余脉冲个数

其他的机种都用过,目前使用的是这个方式。相对来说比较折中。
另外DMA的方式有个问题,即在高速的时候停止timer可能会过冲。如果1Mhz的频率发送脉冲的时候,DMA产生中断后停止TIMER可能会多发几个脉冲。我使用F4和H7测试500kHz以内的速度都没有问题。

出0入4汤圆

发表于 2021-11-24 10:23:06 | 显示全部楼层
另外很多坛友提到加减速的问题,我是这样做的。
在CPU空闲的时候不断轮训已经发送的脉冲数,动态改变Timer的频率。因为大多数应用加减速的过程中对速度要求不太严格。所以速度变化晚那么几个ms影响不大。这样实际是利用CPU的空闲资源。另外既然是运动控制,像急停、极限等信号也是要不断判断的,也需要CPU不断的轮训。采用中断的话如果机械开关或者光电感应器会有信号抖动,处理起来会稍微麻烦一些。

出0入0汤圆

 楼主| 发表于 2021-11-24 10:23:10 | 显示全部楼层
chenhuiedu 发表于 2021-11-23 23:14
最近一直在研究多轴的方案,这资料真贴心,谢谢楼主

这是个套餐,各种方案都有  

出100入85汤圆

发表于 2021-11-26 13:02:58 来自手机 | 显示全部楼层
dma怎么实现插补有没有研究?

出0入0汤圆

 楼主| 发表于 2021-11-26 13:34:58 | 显示全部楼层
whatcanitbe 发表于 2021-11-26 13:02
dma怎么实现插补有没有研究?

st官方有个步进电机 驱动方案    用了DMA和 中断实现的 我下载资料  还没来得及看 发上来你看看


本帖子中包含更多资源

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

x

出100入85汤圆

发表于 2021-11-26 14:26:14 | 显示全部楼层
磊磊映画 发表于 2021-11-26 13:34
st官方有个步进电机 驱动方案    用了DMA和 中断实现的 我下载资料  还没来得及看 发上来你看看

里面有插补相关的?

出0入0汤圆

发表于 2021-11-26 14:45:57 | 显示全部楼层
好资料!收藏了。

出50入0汤圆

发表于 2021-11-26 20:31:30 来自手机 | 显示全部楼层
收藏一下。

出20入62汤圆

发表于 2022-3-23 21:41:49 | 显示全部楼层
多谢分享。看了7.1的办法。我试了下,低速还好,高速(大概在250Khz)的脉冲速度以上,数量就不对了。比如我发10个,实际示波器上,只有9个。~
对着芯片手册的定时器和dma部分分析了半天也没想明白咋回事。
有高手指点下么。

出0入53汤圆

发表于 2022-11-4 08:25:36 | 显示全部楼层
磊磊映画 发表于 2021-11-23 14:45
要求不高的话,可以串行实现。并行实现不了了
(引用自10楼)

串行  能说说原理不?

出100入312汤圆

发表于 2022-11-4 08:55:53 来自手机 | 显示全部楼层
三年模拟 发表于 2021-11-23 09:01
楼主不错,已经玩精通了单片机控制步进电机,但是加上编码器反馈单片机就很吃力了,我以前的项目用的主从定 ...
(引用自6楼)


步进电机控制看起来也很复杂

出0入4汤圆

发表于 2022-11-7 09:54:12 | 显示全部楼层
DMA方式没用过,一直是比较输出模式(PWM1/PWM2)可控占空比

出100入85汤圆

发表于 2022-11-7 10:05:44 | 显示全部楼层
yangpeng012 发表于 2022-11-7 09:54
DMA方式没用过,一直是比较输出模式(PWM1/PWM2)可控占空比
(引用自29楼)

你的比较输出模式是怎么弄的?

出0入4汤圆

发表于 2022-11-7 10:53:19 | 显示全部楼层
whatcanitbe 发表于 2022-11-7 10:05
你的比较输出模式是怎么弄的?
(引用自30楼)

可以参考楼主发的示例,原理基本一样的

出0入4汤圆

发表于 2022-11-8 14:26:07 | 显示全部楼层
楼主有时间帮忙看一下这个问题吗? 输出比较模式,中断内统计个数

出0入0汤圆

发表于 2022-11-8 20:54:00 | 显示全部楼层
赞一个  谢谢楼主

出0入0汤圆

发表于 2023-6-29 21:19:52 | 显示全部楼层
请问一个7.1和7.2可以做到频率动态改变吗?

出0入0汤圆

发表于 2023-7-5 13:50:52 | 显示全部楼层
Tangdonghua 发表于 2023-6-29 21:19
请问一个7.1和7.2可以做到频率动态改变吗?
(引用自34楼)

可以的。完全没问题

出0入0汤圆

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

本版积分规则

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

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

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

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