cicnx 发表于 2007-3-25 16:20:17

怎么控制发出的PWM脉冲个数?

我想用PWM输出驱动步进电机, 如果我想精确控制输出脉冲数量(即控制步进电进步数)有什么好办法呢?



PWM频率在10-40K左右.

w_ang 发表于 2007-3-25 16:22:54

这个基本上很难,大概只有在匹配后产生中断,然后在中断中计数,符合条件就停PWM.产生的不良后果就是PWM只能是比较低的频率.

cicnx 发表于 2007-3-25 17:21:41

那一般大家都用什么方式控制步进电机的步数的?

不会是用IO来产生脉冲信号吧?

luhuaren 发表于 2007-3-25 18:44:39

脉冲发送脚接到计数器的脚上读计数器寄存器的值就可以了

cicnx 发表于 2007-3-25 18:50:43

是不是输入到T1然后用计数器控制脉冲数?

luhuaren 发表于 2007-3-25 19:09:24

不是。。。

你可以用AVR的一个口来发脉冲,应该有几个口是不占任何CPU时间就可以直接发出占空比为50%的方波。。。。然后你将发脉冲的这个口接到计数器的口上,当然不让计数器中断,你直接读计数器寄存器的值就知道发出去多少个脉冲了。

luhuaren 发表于 2007-3-25 19:10:40

楼主是不是做步进/伺服电机的控制器?   交流一下///

cicnx 发表于 2007-3-25 19:22:19

谢谢大家意见.总结一下:

用PWM如OC2输出固定频率的脉冲.. OC2脚与T1输入脚相连.因为T/C1为16位计数器.

所以可以计数65535个脉冲. 即我要输出N步的脉冲时首先设置T/C1初值,使计数器计N脉冲后溢出产生中断. 启动PWM输出脉冲... 同时T/C1计数器开始计数. 当溢出中断里关闭PWM输出. 即可以控制输出的脉冲数.



以上理解是否正确呢? 或还有没有更好的方法. 因如果这样就要占用两个定时器, 一个IO口.

还有如果我要发的脉冲数大于65535又怎么样实现呢?



希望大家多提点意见...谢谢大家!

fangmcu 发表于 2007-3-25 22:46:34

关注,看大伙有没有好的算法!!

fantianqi 发表于 2007-3-25 23:29:35

16M晶振能产生的pwm波最大频率是多少?

herobansee 发表于 2007-3-26 00:02:20

还是用T1计数比较好。一直读计数器值的办法可能因为别的中断程序而滞后执行,这样就可能多发脉冲。反正都要在中断程序里面处理,当步数大于65536时用个软件计数器在中断里面计数不就行了。先把余数写进计数器,等待n次中断后停止脉冲。

pilihuo81 发表于 2012-11-14 22:07:57

也正在研究这个怎么实现,请问有实现这个功能的吗? 发代码上来

ylei12 发表于 2012-11-14 22:20:36

关注此贴

pilihuo81 发表于 2012-11-15 09:39:41

网上说通过两个定时器来做这个怎么实现的谁清楚

lmly 发表于 2012-12-26 13:04:24

控制步进和伺服就是用IO口发脉冲啊,采用PWM除了不好控制脉冲数量 外 加减速也不能控制。

happyxiaoxiao 发表于 2012-12-26 13:36:56

关注。。。

bbssilverkey 发表于 2012-12-26 14:12:08

坐等高人,详细解说,这个我也很有兴趣

richyhuang 发表于 2012-12-26 17:13:03

要实现加减速控制还是用tms320f系列的吧,主频150M,可以比较快了。别指望那些8位机能搞这么复杂的。

shendade 发表于 2013-8-23 21:39:30

正遇到这个问题了,,怎么没了结果。{:shocked:}

hmd420304805 发表于 2013-8-23 21:49:17

我已经用stm32f1实现0CPU占用发脉冲,用的是定时器级连方式,但是这样却遇到麻烦---不好控制频率,希望有人能够交流,一起搞定这个问题。

hmd420304805 发表于 2013-8-23 21:52:59

我的想法是,两个定时器,通过内部触发相连,一个用来生成pwm,另外一个对pwm计数。加减速想仿造欧姆龙plc,每个4毫秒改一次频率。可是打不到那种效果,希望有高手扶一把。。。。

kingie2006 发表于 2013-11-3 08:30:05

cicnx 发表于 2007-3-25 17:21 static/image/common/back.gif
那一般大家都用什么方式控制步进电机的步数的?

不会是用IO来产生脉冲信号吧? ...

LZ找到办法了没

IO控制的话,不能实现多轴联动吧

feng_matrix 发表于 2013-12-24 16:17:03

本帖最后由 feng_matrix 于 2013-12-24 16:33 编辑

PWM发生器+计数器+与门可行不?

比如AVR32,把20位精度的PWM工作在变频、或变占空比模式,可用MCU原有功能动态调整频率
然后每次写入PWM的同时,启动计数器,计数器未到前控制与门输出脉冲,计数到位与门反转停止输出。
整个过程中PWM始终在工作。


可以想到的两个问题是:

1.PWM工作在变频模式,寄存器更新过快时,PWM不能及时响应的
需要等到一个计数周期结束才能产生新频率,这样从低频脉冲向高频脉冲变化时,可能有延时

2.如果用MCU自己的计数器中断来控制个数,当输出脉冲频率较高时,MCU会被频繁中断,压力可能较大

huangguimina4 发表于 2013-12-24 16:58:46

IO脚控制应该可以实现多轴联动的吧?求大神普及

zj2003 发表于 2014-9-5 10:52:30

用比较输出的方式做
页: [1]
查看完整版本: 怎么控制发出的PWM脉冲个数?