怎么控制发出的PWM脉冲个数?
我想用PWM输出驱动步进电机, 如果我想精确控制输出脉冲数量(即控制步进电进步数)有什么好办法呢?PWM频率在10-40K左右. 这个基本上很难,大概只有在匹配后产生中断,然后在中断中计数,符合条件就停PWM.产生的不良后果就是PWM只能是比较低的频率. 那一般大家都用什么方式控制步进电机的步数的?
不会是用IO来产生脉冲信号吧? 脉冲发送脚接到计数器的脚上读计数器寄存器的值就可以了 是不是输入到T1然后用计数器控制脉冲数? 不是。。。
你可以用AVR的一个口来发脉冲,应该有几个口是不占任何CPU时间就可以直接发出占空比为50%的方波。。。。然后你将发脉冲的这个口接到计数器的口上,当然不让计数器中断,你直接读计数器寄存器的值就知道发出去多少个脉冲了。 楼主是不是做步进/伺服电机的控制器? 交流一下/// 谢谢大家意见.总结一下:
用PWM如OC2输出固定频率的脉冲.. OC2脚与T1输入脚相连.因为T/C1为16位计数器.
所以可以计数65535个脉冲. 即我要输出N步的脉冲时首先设置T/C1初值,使计数器计N脉冲后溢出产生中断. 启动PWM输出脉冲... 同时T/C1计数器开始计数. 当溢出中断里关闭PWM输出. 即可以控制输出的脉冲数.
以上理解是否正确呢? 或还有没有更好的方法. 因如果这样就要占用两个定时器, 一个IO口.
还有如果我要发的脉冲数大于65535又怎么样实现呢?
希望大家多提点意见...谢谢大家! 关注,看大伙有没有好的算法!! 16M晶振能产生的pwm波最大频率是多少? 还是用T1计数比较好。一直读计数器值的办法可能因为别的中断程序而滞后执行,这样就可能多发脉冲。反正都要在中断程序里面处理,当步数大于65536时用个软件计数器在中断里面计数不就行了。先把余数写进计数器,等待n次中断后停止脉冲。 也正在研究这个怎么实现,请问有实现这个功能的吗? 发代码上来 关注此贴 网上说通过两个定时器来做这个怎么实现的谁清楚 控制步进和伺服就是用IO口发脉冲啊,采用PWM除了不好控制脉冲数量 外 加减速也不能控制。 关注。。。 坐等高人,详细解说,这个我也很有兴趣 要实现加减速控制还是用tms320f系列的吧,主频150M,可以比较快了。别指望那些8位机能搞这么复杂的。 正遇到这个问题了,,怎么没了结果。{:shocked:} 我已经用stm32f1实现0CPU占用发脉冲,用的是定时器级连方式,但是这样却遇到麻烦---不好控制频率,希望有人能够交流,一起搞定这个问题。 我的想法是,两个定时器,通过内部触发相连,一个用来生成pwm,另外一个对pwm计数。加减速想仿造欧姆龙plc,每个4毫秒改一次频率。可是打不到那种效果,希望有高手扶一把。。。。 cicnx 发表于 2007-3-25 17:21 static/image/common/back.gif
那一般大家都用什么方式控制步进电机的步数的?
不会是用IO来产生脉冲信号吧? ...
LZ找到办法了没
IO控制的话,不能实现多轴联动吧 本帖最后由 feng_matrix 于 2013-12-24 16:33 编辑
PWM发生器+计数器+与门可行不?
比如AVR32,把20位精度的PWM工作在变频、或变占空比模式,可用MCU原有功能动态调整频率
然后每次写入PWM的同时,启动计数器,计数器未到前控制与门输出脉冲,计数到位与门反转停止输出。
整个过程中PWM始终在工作。
可以想到的两个问题是:
1.PWM工作在变频模式,寄存器更新过快时,PWM不能及时响应的
需要等到一个计数周期结束才能产生新频率,这样从低频脉冲向高频脉冲变化时,可能有延时
2.如果用MCU自己的计数器中断来控制个数,当输出脉冲频率较高时,MCU会被频繁中断,压力可能较大 IO脚控制应该可以实现多轴联动的吧?求大神普及 用比较输出的方式做
页:
[1]