[STM32F1] 精确控制PWM输出数量

[复制链接]
2103|43
renyaq 发表于 2020-12-15 19:05 | 显示全部楼层
定时器同步功能实现脉冲计数,开启影子寄存器和缓冲功能,实现实时改变频率
supernan 发表于 2020-12-15 19:08 | 显示全部楼层
貌似方法不错哎 尝试下
xxrs 发表于 2020-12-15 19:13 | 显示全部楼层
TIM模块本身就是定时器,每一次PWM更新中断不就是PWM输出的数量嘛,你要想控制输出个数,在PWM更新中断里技术就好了啊,同时也可以改变PWM比较器翻转值更改频率,几条代码执行一下,时间很短。
houcs 发表于 2020-12-15 19:16 | 显示全部楼层

每次进中断以后,可以改变定时器的初值来改变中断间隔嘛,进一次改一次。就可以实现频率改变啦。
用一个变量来记录中断次数。
liuzaiy 发表于 2020-12-15 19:19 | 显示全部楼层
楼主实现了吗。
yinxiangh 发表于 2020-12-15 19:24 | 显示全部楼层
启动DMA传输,103很方便的实现,通过DMA发送占空比数据,改变PWM的占空比,DMA传输完毕进中断,
yinxiangh 发表于 2020-12-15 19:27 | 显示全部楼层
PWM脉冲的数量也就统计到了,500KHz没什么问题。注意DMA传输完毕进中断时,最后一个PWM还没有发完,切换为单脉冲模式,PWM就停止了。407还有些bug,修正后和103一样用。
pangb 发表于 2020-12-15 19:30 | 显示全部楼层
楼主,请教一下,用DMA的话,可以实现多少路的输出?
chenjunt 发表于 2020-12-15 19:43 | 显示全部楼层
整一个数在定时器中断减,减的快慢控制一下不就是加减速吗
ousj 发表于 2020-12-15 19:43 | 显示全部楼层
基本思路:
步进电机加速曲线一般算好各步的频率、步数,生成数组:
{脉宽1, 步数1, 脉宽2, 步数2, 。。 脉宽N, 步数N}
启动DMA,用TIM的Update触发,源地址为脉宽1,地址固定,数量为步数2,目标地址为TIM的ARR,开DMA中断。在DMA完成中断里设置下一步的参数,直到全部完成。
以上只更新了ARR改频率,没更新CCRx保证占空比50%,看一下manual里TIMx_DCR、TIMx_DMAR寄存器介绍以及后面的Example of how to use the DMA burst feature。
ousj 发表于 2020-12-15 19:47 | 显示全部楼层
不可能同步吧 总归会有一个延时的
houcs 发表于 2020-12-15 19:50 | 显示全部楼层
精准的同步基本做不到的
houcs 发表于 2020-12-15 19:57 | 显示全部楼层
默默的支持一下楼主吧
morrisk 发表于 2020-12-15 20:00 | 显示全部楼层
主要看楼主要求的精确等级
lium 发表于 2020-12-15 20:04 | 显示全部楼层
这个 我这儿没有啥好办法
yufe 发表于 2020-12-15 20:08 | 显示全部楼层
没有控制过电机  不太了解
zhuww 发表于 2020-12-15 20:12 | 显示全部楼层
现在定时器一般都会有PWM功能的
 楼主| tian111 发表于 2020-12-15 20:18 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家
wowu 发表于 2021-1-9 16:13 | 显示全部楼层
需要精确到什么程度啊
xiaoqizi 发表于 2021-1-9 16:14 | 显示全部楼层
是控制路数还是单路的频率啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部