打印

STM32的PWM怎么实现精确控制输出脉冲数?

[复制链接]
12616|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
行不改名|  楼主 | 2011-10-9 09:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教城主及各位大侠:
在用STM32做一个简单的步进电机控制器,脉冲50-100K,要求能任意调速,且能给定脉冲数给控制器让电机走完指定步数。用定时器测试了一下,功能基本可以实现,但感觉不理想,主要是频繁进中断频率不能太高及速度调整不便问题,所以想用PWM来实现,用PWM调速和加减速处理倒不是问题,但不知怎么实现精确到一个输出脉冲的控制。

谢谢回复!
沙发
sharp4016| | 2011-10-9 10:13 | 只看该作者
PWM的输出接到IO口的外部中断输入,通过上升沿或者下降沿检测

使用特权

评论回复
板凳
sharp4016| | 2011-10-9 10:16 | 只看该作者
通过这样的方式计数,计到合适的数目在中断里关停即可

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
行不改名 + 2 赞一个!
地板
香水城| | 2011-10-9 10:49 | 只看该作者
可以使用另一个定时器计时,计时结束中断时停止PWM输出。

比如需要输出120个50kHz的脉冲,计算得知每个脉冲是20us,120个脉冲需要2.4ms,这样计时2.4ms后停止PWM输出即可。只要中断响应的时间不超过20us就没有问题。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
行不改名 + 2 赞一个!
5
行不改名|  楼主 | 2011-10-10 10:09 | 只看该作者
sharp4016的方法也曾想到过,但要浪费一些IO端口。。。

城主的方法倒是一个创新,我试一下。

如果PWM有一个类似输出比较寄存器就好了。

使用特权

评论回复
6
winloop| | 2011-10-10 10:24 | 只看该作者
没那么复杂,把输出PWM所在的定时器开溢出中断就可以,在中断里计数儿,非常准确,上月刚做完一个步进电机控制项目,就这么实现的,效果非常OK

使用特权

评论回复
7
xhtxzxw| | 2011-10-10 20:07 | 只看该作者
单脉冲方式啊!!保证只发一个脉冲并且进中断,在中断里面在开单脉冲方式,结合计数就是了。

使用特权

评论回复
8
行不改名|  楼主 | 2011-10-12 09:36 | 只看该作者
winloop:
xhtxzxw:
如果PWM每一个脉冲都进中断,还要在中断里做一些简单的比较等处理,如果做成几个电机单独调节控制,则要用到几个PWM输出,程序还要做其它一大堆工作,这样会不会忙不过来呢?

使用特权

评论回复
9
xhtxzxw| | 2011-10-18 01:40 | 只看该作者
几个us而已。小意思。

使用特权

评论回复
10
rlingxing| | 2015-3-23 21:48 | 只看该作者
我也有一样的问题 !

使用特权

评论回复
11
mrfighting| | 2015-12-2 16:36 | 只看该作者
您好,请问您的pwm精确控制输出脉冲数的问题解决了吗?可以把您的例程发给我参考一下嘛?

使用特权

评论回复
12
拉普拉思| | 2018-10-4 16:44 | 只看该作者
定时器设置为计数器模式如何,接到输出脉冲引脚,脉冲计数达到设定值,进入中断,关闭PWM模块

使用特权

评论回复
13
brucewoo| | 2018-10-6 14:32 | 只看该作者
驱动步进电机不是应该采用更新中断并且修改ARR值的方式来控制步数和转速吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:ST中国代理:STM32/STM8/STMF0/STM32F2/4免费样片工具,STM8S003/STM8S005/STM8L051现货. QQ:574140203;  电话:13590247954 ST 技术开发QQ群30764097;

3

主题

153

帖子

2

粉丝