jaky80000 发表于 2019-3-24 18:01:03

STM32控制步进电机的脉冲大家用什么方法来产生的?

STM32控制步进电机的脉冲大家用什么方法来产生的?
有2种方法可以产生,1:由定时器产生,通过IO改变电平来驱动,2:通过硬件产生pwm来输出电平。
想请教一下大家一般用什么方法来做的,在改变电机的速度时,也就是改变脉冲的周期,是在每个脉冲后修改周期呢,还是在一定的时间内来修改周期呢?
如果是以输出几个脉冲后修改周期,那么这个PWM的输出个数是如何获取到的,是在PWM输出脚接到一个IO,挂在一个定时器上计数来获取吗?
谢谢!

jyrpxj 发表于 2019-3-24 19:17:58

定时器PWM输出啊, 计数的话,可以设为每个PWM周期中断一下来计数。 改变速度可以用另一个定时器来间隔多长时间来改一下PWM输出周期。

jaky80000 发表于 2019-3-24 19:29:48

jyrpxj 发表于 2019-3-24 19:17
定时器PWM输出啊, 计数的话,可以设为每个PWM周期中断一下来计数。 改变速度可以用另一个定时器来间隔多长 ...

是的,PWM输出是比较好的。你说的PWM周期中断一下来计数,是需要加个IO口连接吧。
很多的s曲线加速,或者是梯形加速都是需要获取到输出了几个脉冲的。
一般的这样的加速曲线,都是以定长时间内来改变一次周期吗?我之前的加速都是这样做的

jyrpxj 发表于 2019-3-24 19:32:18

PWM周期中断, 用定时器周期中断就可,每中断一次,进入中断,脉冲计数变量增1 。没必有将PWM输出信号又引入另一个输入引脚。

落叶知秋 发表于 2019-3-24 20:52:20

定时器翻转电平用dda法,硬件pwm需要进行反馈计数用时间分割法

g921002 发表于 2019-3-25 00:27:35

PWM有中斷,每完成一次脈波計算步進數。要調整脈波週期就改變timer的ARR暫存器就可以。

wongT 发表于 2019-3-25 09:12:07

网上有例程,用两个定时器,主从,可以输出固定脉冲数

lnso 发表于 2019-3-25 09:14:24

频繁启停

lnso 发表于 2019-3-25 09:15:53

频繁启停如何保证不失步

hzpyl 发表于 2019-3-25 09:24:23

3轴,4轴,联动,更加麻烦。

Error.Dan 发表于 2019-3-25 09:43:51

各种奇淫巧计都试过,最后老老实实用定时器中断翻IO实现。
其他的方法限制还是太大,特别是真的需要频繁启停,需要跑高速的情况下,不做各种加减速算法是没法用的,电机受不了。

至于CPU负载么无所谓的,现在单片机这么便宜103不够就上405,405不够就上42X~,再不济还有H7和F7呢~

ZL_electric 发表于 2019-3-25 10:21:04

jaky80000 发表于 2019-3-24 19:29
是的,PWM输出是比较好的。你说的PWM周期中断一下来计数,是需要加个IO口连接吧。
很多的s曲线加速,或者 ...

四轴联动怎么搞?同步问题,有一个周单独要加速了,另一个要减速停止了

落叶知秋 发表于 2019-3-25 11:27:49

ZL_electric 发表于 2019-3-25 10:21
四轴联动怎么搞?同步问题,有一个周单独要加速了,另一个要减速停止了 ...

1个PWM模块控制1个轴就可以了,虽然很浪费资源{:titter:}

ZL_electric 发表于 2019-3-25 12:58:24

落叶知秋 发表于 2019-3-25 11:27
1个PWM模块控制1个轴就可以了,虽然很浪费资源

这样单轴控制,具体动作听从G代码,4轴需要8个定时器,我开始搞过两个定时器脉冲方案,发现这个问题就OVER了

coleyao 发表于 2019-3-25 13:13:01

ZL_electric 发表于 2019-3-25 10:21
四轴联动怎么搞?同步问题,有一个周单独要加速了,另一个要减速停止了 ...

四轴联动可以用PWM模式中的一种,开PWM中断实现。我是在考虑马达跟随编码器动作时走一个规定的位移怎么实现,如果同向的话,可以两个同时发脉冲,如果反向,我预计会有问题,因为频繁切换方向可能实际情况会有异常。

TigerRay 发表于 2019-3-25 13:46:58

直接使用IO翻转就可以了,可以使用一种算法(其实都有现成的参考)同时多少轴都可以!

落叶知秋 发表于 2019-3-25 14:38:33

ZL_electric 发表于 2019-3-25 12:58
这样单轴控制,具体动作听从G代码,4轴需要8个定时器,我开始搞过两个定时器脉冲方案,发现这个问题就OVE ...

8个定时器对STM32这种定时器资源丰富的片子来说不是问题吧?当然,如果你说要做什么16/32/64轴的另说

ZL_electric 发表于 2019-3-25 14:41:09

落叶知秋 发表于 2019-3-25 14:38
8个定时器对STM32这种定时器资源丰富的片子来说不是问题吧?当然,如果你说要做什么16/32/64轴的另说 ...

我当时用的LPC1768,搞了一个轴发现日狗了

落叶知秋 发表于 2019-3-25 15:03:47

ZL_electric 发表于 2019-3-25 14:41
我当时用的LPC1768,搞了一个轴发现日狗了

LPC系列的定时器资源都不算丰富,如果是驱动步进的话,用IO翻转的办法吧{:biggrin:}

whatcanitbe 发表于 2019-3-25 21:53:18

落叶知秋 发表于 2019-3-24 20:52
定时器翻转电平用dda法,硬件pwm需要进行反馈计数用时间分割法

能否再详细一点

jaky80000 发表于 2019-3-25 22:12:41

jyrpxj 发表于 2019-3-24 19:32
PWM周期中断, 用定时器周期中断就可,每中断一次,进入中断,脉冲计数变量增1 。没必有将PWM输出信号又引 ...

还有定时器中断这一个呀,我去看看。
比如在s曲线加速时,有段加速非常快,这段时间的加速会不会是比如输出了几个脉冲后进行速度改变呢,那这样会不会曲线就变成了有阶梯的加速了,会不会不平滑。
然后如果加速太快的话,会导致频繁的中断,cpu都没法做其他事情了。
这就是说的用IO翻转来控制,有些场合无法满足的原因了,有些还要搞个128细分,IO翻转没法搞呀

lengyun 发表于 2019-3-25 22:24:10

第一种。

gonggu8181 发表于 2019-3-26 08:02:38

定时模拟12路,挺好用的

落叶知秋 发表于 2019-3-26 08:55:00

whatcanitbe 发表于 2019-3-25 21:53
能否再详细一点

DDA就是数字微分分析(Digital Differential Analyzer),其实更准确来说是一种直线画图的方法,
在运控里一般被用作直线插补方法,主要是以像素,运控里就是换成脉冲来拟合成直线轨迹,
一般是根据脉冲周期来调整定时器周期翻转脉冲脚电平,开源项目的grbl里就是这种方法

时间分割法就是以规定的时间周期内输出不同个数的脉冲来拟合轨迹,一般定时器的周期固定了,
然后每个周期里使用硬件发脉冲,这种方法需要用到硬件脉冲机制,优点是脉冲速度能做到很快,
且不会像IO翻转那样定时器周期动态变化,可能影响系统性能;缺点是计算量相对来说更大些,控制精度也稍微差些。

wkman 发表于 2019-3-26 09:21:02

{:titter:}绝大多数的应用,没那么矫情,,,就梯形了事。

whatcanitbe 发表于 2019-3-26 10:02:11

落叶知秋 发表于 2019-3-26 08:55
DDA就是数字微分分析(Digital Differential Analyzer),其实更准确来说是一种直线画图的方法,
在运控 ...

谢谢分享

时间分割是不是需要fpga或者cpld参与?

落叶知秋 发表于 2019-3-26 10:55:27

whatcanitbe 发表于 2019-3-26 10:02
谢谢分享

时间分割是不是需要fpga或者cpld参与?

最好是用FPGA或是CPLD这种精度高的逻辑器件来实现,但也可以直接用MCU的PWM模块来实现,只不过有可能精度不够的话,脉冲会有一小段不连续的情况出现

jaky80000 发表于 2019-3-26 22:32:33

gonggu8181 发表于 2019-3-26 08:02
定时模拟12路,挺好用的

高速时,吃不消的,会丢步,如果速度低,一个脉冲周期比较长的,定时器是最有利于代码控制的。
如果用上高细分,到128细分的话,控制周期真要到100K,甚至更高,没法用定时器了
页: [1]
查看完整版本: STM32控制步进电机的脉冲大家用什么方法来产生的?