OpenEdv-开源电子网

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

请教一个关于stm32tim计时器的问题!急!

[复制链接]

5

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2016-7-27
在线时间
13 小时
发表于 2016-9-7 23:27:31 | 显示全部楼层 |阅读模式
5金钱
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

TIM_TimeBaseStructure.TIM_Prescaler = 18-1;
TIM_TimeBaseStructure.TIM_Period = 10-1;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM3,& TIM_TimeBaseStructure);
TIM_ARRPreloadConfig(TIM3, DISABLE);

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse = 10-1;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC2Init(TIM3,& TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

TIM_CtrlPWMOutputs(TIM3,ENABLE);
TIM_ARRPreloadConfig(TIM3, ENABLE);
TIM_Cmd(TIM3, ENABLE);
这个是TIM3里的设定,现在我想问一下这个计时器输出的PWM波最多可以达到多少MHz?(不是理论值我要的是实际值)我这边最多只能到0.4MHz
如果达不到10MHz我就打算改用FPGA做题目了,求大神们能尽快给我一个答案可好?
是哪里出了问题呢?之前我自己做的计时器也是出现这个问题,只能达到0.2MHz

我在mian函数里用了GPIO_SetBits的函数,是这个影响的吗?

最佳答案

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

经过换导线确认就是连接到示波器的导线的原因,希望以后可以帮到再有这种问题的人
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2016-7-27
在线时间
13 小时
 楼主| 发表于 2016-9-7 23:27:32 | 显示全部楼层
经过换导线确认就是连接到示波器的导线的原因,希望以后可以帮到再有这种问题的人
回复

使用道具 举报

5

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2016-7-27
在线时间
13 小时
 楼主| 发表于 2016-9-8 00:08:20 | 显示全部楼层
TIM_TimeBaseStructure.TIM_Period = 10-1;
TIM_OCInitStructure.TIM_Pulse = 10-1;
好像是由于这两个计算得到的占空比的原因,现在可以达到36MHz了,但就是频率越大波形就越差

那么问题又来了,请问一下为什么占空比会影响波形的显示呢?这个到底是怎么计算的?我看网上是
(Pulse+1)/(Pulse+1)-(Period+1)??那个减号貌似应该是加号吧?
我数字示波器和模拟示波器都用了,都看不到占空比1/10 的,都只能显示到0.2—0.4MHz再往后波形就消失了
后来我把Pulse和Period改成一样的才看到了后续的频率(1M、2M、4M、9M、18M、36M)
请教一下为什么
回复

使用道具 举报

5

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2016-7-27
在线时间
13 小时
 楼主| 发表于 2016-9-8 07:38:19 | 显示全部楼层
这个程序是PWM波输出实验,PWM波输出的速率可以达到36MHz,那按道理应该计时器直接也是可以达到36MHz的吧?
可是如果我只用
TIM_TimeBaseStructure.TIM_Prescaler = 18-1;
TIM_TimeBaseStructure.TIM_Period = 10-1;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
这一段貌似没法计时一到然后计时产生标志位,标志位再在主函数里执行任务后清零,是达不到这么高频率的。。。

求大神们告知为什么会这样?该如何解决频率不够高的问题?
回复

使用道具 举报

5

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2016-7-27
在线时间
13 小时
 楼主| 发表于 2016-9-8 07:40:04 | 显示全部楼层
@正点原子
@openedvadmin
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-9-8 09:34:30 | 显示全部楼层
马克,帮顶,我也想知道tim输出的PWM频率最大多少
回复

使用道具 举报

5

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2016-7-27
在线时间
13 小时
 楼主| 发表于 2016-9-8 11:32:18 | 显示全部楼层
憨厚诚实大叔 发表于 2016-9-8 09:34
马克,帮顶,我也想知道tim输出的PWM频率最大多少

输出PWM我现在可以设到36MHz,但是就是波形非常难看,不知道是不是插针接的导线的问题
有可能是导线太差把PWM波的高频部分给滤掉了
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11537
金钱
11537
注册时间
2014-4-1
在线时间
1314 小时
发表于 2016-9-8 11:40:37 | 显示全部楼层

寄存器有个频率参数,改成最高试试。
但可能改善不大。

这种高频PWM波形,受外围电路分布参数的影响很大,
基本都接近三角波的形状。
解决起来需要一些技巧。




回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 18:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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