打印

STM32怎样才能输出固定占空比频率可调的PWM

[复制链接]
12549|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
arthur02|  楼主 | 2011-8-15 22:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位:
想输出固定占空比频率可调的PWM波

我是这么做的,设了两个变量ARR_Val和CCR4_Val分别给ARR 和CCR4
占空比为50%,我想频率实时变化,ARR_Val就实时变化,CCR4_Val设为ARR_Val的一半
在主循环中,实时初始化
TIM_BaseInitStructure.TIM_Period = ARR_Val;  
TIM_TimeBaseInit(TIM3, &TIM_BaseInitStructure);
TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
TIM_OC4Init(TIM3, &TIM_OCInitStructure);
这样是可行,但初始化函数TIM_TimeBaseInit()和TIM_OC4Init()在主循环中一直运行,总感觉不妥,各位大侠有什么好的办法吗?

TIM配置如下:
/* Time base configuration */
  TIM_BaseInitStructure.TIM_Period = ARR_Val;
  TIM_BaseInitStructure.TIM_Prescaler = 11;
  TIM_BaseInitStructure.TIM_ClockDivision = 0;
  TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM3, &TIM_BaseInitStructure);
  /* TIM3 PWM2 Mode configuration: Channel1 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OC4Init(TIM3, &TIM_OCInitStructure);
沙发
sjnh| | 2011-8-16 07:56 | 只看该作者
TIM_BaseInitStructure.TIM_Period = ARR_Val;
调这个

使用特权

评论回复
板凳
lvzxxq| | 2011-8-16 08:02 | 只看该作者
可以学下啊  

使用特权

评论回复
地板
arthur02|  楼主 | 2011-8-16 11:45 | 只看该作者
调节ARR_Val是能调节输出频率
TIM_BaseInitStructure.TIM_Period = ARR_Val;
同时也得调节CCR4_Val,才能保证占空比为50%

关键是更新了这两个变量后,是不是得执行下面语句才能生效啊?  那我频率实时变,是不是定时器也得实时初始化啊???
TIM_BaseInitStructure.TIM_Period = ARR_Val;  
TIM_TimeBaseInit(TIM3, &TIM_BaseInitStructure);
TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
TIM_OC4Init(TIM3, &TIM_OCInitStructure);

总之就是,初始化函数TIM_TimeBaseInit()和TIM_OC4Init()在主循环中一直运行,感觉不妥

使用特权

评论回复
5
arthur02|  楼主 | 2011-8-18 13:15 | 只看该作者
怎么结贴了啊,还没搞明白  
那位大侠能回到我的问题啊?????????

使用特权

评论回复
6
香水城| | 2011-8-18 13:50 | 只看该作者
怎么结贴了啊,还没搞明白  
那位大侠能回到我的问题啊?????????
arthur02 发表于 2011-8-18 13:15


对于0分帖,系统自动结帖。

你可以尝试直接修改对应寄存器。

使用特权

评论回复
7
arthur02|  楼主 | 2011-8-18 14:12 | 只看该作者
6楼的意思是  不用库函数,自己直接对寄存器操作吗?

使用特权

评论回复
8
香水城| | 2011-8-18 14:14 | 只看该作者
6楼的意思是  不用库函数,自己直接对寄存器操作吗?
arthur02 发表于 2011-8-18 14:12


是的。

使用特权

评论回复
9
万能青年| | 2013-8-14 13:39 | 只看该作者
可以设置一个值  改变他的时候,正好进入中断 ,你循环改变会一抖一抖的!

使用特权

评论回复
10
zhangdd097| | 2018-9-29 21:37 | 只看该作者
这个频率可调用循环实时改变数据,在一个频率到另一个频率的时候会出现跳变该如何解决呀?

使用特权

评论回复
11
stm32jy| | 2018-9-30 15:08 | 只看该作者
TIM_Period = ARR_Val; 改这个值就好了

使用特权

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

本版积分规则

5

主题

94

帖子

0

粉丝