OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5910|回复: 9

输出固定个数的 PWM 波

[复制链接]

6

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2013-7-23
在线时间
21 小时
发表于 2017-2-7 15:43:48 | 显示全部楼层 |阅读模式
2金钱
采用哪些方法可以输出固定个数的 PWM 波形?

目前有两种方法:
1.通过 TIM0 发送 PWM 波,然后通过 TIM1 定时,到达一定时间后(一般PWM周期是固定的),通过TIM1的定时器中断来关闭 PWM 输出。
2.讲 TIM0 输出 PWM 波的引脚链接到其他 GPIO 口上,通过外部中断每次捕捉出下降沿来实现软件计数,或者 TIM1 的计数模式捕捉计数。

以上两种设想应该可以实现,但都会占用额外的资源或者需要更改硬件,有没有办法,可以不需要占用其他外设且可以输出固定个数的 PWM 波?

这边我设想:TIM0 产生 PWM 时,定时器应该每次也会溢出,开启定时器中断,然后每产生一个 周期的PWM 波时,进入一次中断函数,软件计数加1,达到个数时关闭中断。

实验结果:多次实验,发现开启中断后 PWM 就会输出异常,多次尝试未果。

问题:是否可以通过我上述说的 PWM 加自身定时器中断来实现计数?

最佳答案

查看完整内容[请看2#楼]

TIM1有一个重复计数器,可以用来输出固定脉冲个数,但是数量不超过65535个。 其他的,利用中断也是一个办法,不过频率不能过高,而且影响CPU运行
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-2-7 15:43:49 | 显示全部楼层
TIM1有一个重复计数器,可以用来输出固定脉冲个数,但是数量不超过65535个。  其他的,利用中断也是一个办法,不过频率不能过高,而且影响CPU运行
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2017-2-7 16:35:13 | 显示全部楼层
开tim0的溢出中断,溢出一次就是发送了一个完整脉冲了
我有故事,你有酒吗
回复

使用道具 举报

6

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2013-7-23
在线时间
21 小时
 楼主| 发表于 2017-2-7 17:15:24 | 显示全部楼层
来俩不甜的 发表于 2017-2-7 16:35
开tim0的溢出中断,溢出一次就是发送了一个完整脉冲了

实验了,但问题是中断开启后, PWM 波还没有产生,就已经有溢出进入中断了。
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2017-2-8 08:36:18 | 显示全部楼层
noparkinghere 发表于 2017-2-7 17:15
实验了,但问题是中断开启后, PWM 波还没有产生,就已经有溢出进入中断了。

初始化tim0的时候没把pwm也初始化了吗
我有故事,你有酒吗
回复

使用道具 举报

6

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2013-7-23
在线时间
21 小时
 楼主| 发表于 2017-2-8 08:57:33 | 显示全部楼层
来俩不甜的 发表于 2017-2-8 08:36
初始化tim0的时候没把pwm也初始化了吗

初始化的时候是开启了 PWM 的,关闭中断 PWM 可以输出,开启中断 PWM 就会输出异常,示波器看过,发现 PWM 总会在第一个周期之后才会开始产生 PWM 波,也就是产生这个波之前已经进入中断了。
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2017-2-8 09:16:00 | 显示全部楼层
noparkinghere 发表于 2017-2-8 08:57
初始化的时候是开启了 PWM 的,关闭中断 PWM 可以输出,开启中断 PWM 就会输出异常,示波器看过,发现 PW ...

这个我还真没注意过,那就在初始化的时候先不要输出pwm,在某次你认为已经稳定的中断开启pwm输出,关闭的时候也不要关定时器,只配置不要输出pwm就好了。看TIMx_CCER寄存器
我有故事,你有酒吗
回复

使用道具 举报

6

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2013-7-23
在线时间
21 小时
 楼主| 发表于 2017-2-8 10:48:23 | 显示全部楼层
来俩不甜的 发表于 2017-2-8 09:16
这个我还真没注意过,那就在初始化的时候先不要输出pwm,在某次你认为已经稳定的中断开启pwm输出,关闭的 ...

用的并不是 st 的芯片,但也是一款 m3 内核的芯片,做过多个实验,从 PWM 开启后,开始计数,然后第一个周期似乎被特意跳过去了,只能从第二个周期开始输出。实在不行的话,也只能怀疑,这个芯片就是如此设计的了。
回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2015-12-7
在线时间
59 小时
发表于 2017-2-23 12:01:16 | 显示全部楼层
本帖最后由 包子 于 2017-2-23 12:02 编辑

使用定时器级联,可以一轮同步输出4路PWM脉冲计数 .   我就用在了控制伺服上,没问题。跑一天都不错一个.CH1:输出10个
CH2:输出2222个
CH3:输出3333个
CH4:输出8888个.

算作一轮.  用来控制跑坐标很爽.


< 主啊,请你温柔的笑吧 >
回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2015-12-7
在线时间
59 小时
发表于 2017-2-23 12:11:39 | 显示全部楼层
我现在还在解决的问题是,输出4路不同频率的PWM脉冲计数.=   =、只有可以改频率而且是单独改某个channel的输出频率才可以实现多路电机的不一样PID控速. 那样才完美.

你自己先试试吧。我试过 1M频率的PWM 4路都可以精确输出.更高应该也可以.没试过
< 主啊,请你温柔的笑吧 >
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 13:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表