打印
[STM32F4]

stm32f407之高级定时器 死区互补PWM(操作寄存器)

[复制链接]
3957|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
energy1|  楼主 | 2015-3-30 20:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
十四、高级定时器
死区互补PWM


         高级定时器的功能有很多,这里只介绍死区互补PWM输出功能。其实死区互补PWM跟通用定时器的PWM配置差异不大,只是需要设置多CCER寄存器中的几个位以及刹车与死区寄存器BDTR。对寄存器的具体描述请参考数据手册。
        
         配置步骤:
1.     使能相关时钟。
2.     配置相关的引脚模式、速度、以及复用功能。
3.     使能TIM时钟
4.     设置分频。
5.     设置周期。(ARR的值)周期=(PSC+1)* ARR / TIMx时钟
6.     产生一次更新事件,更新影子寄存器的值。
7.     在CCMR中设置PWM模式。
8.     设置各通道占空比。占空比= CCRx / ARR。
9.     使能比较输出。
10.  启动预装载。
11.  死区时间设定,使能输出。
12.  打开定时器。

沙发
energy1|  楼主 | 2015-3-30 20:48 | 只看该作者
程序
[plain] view plaincopy


  • /************************************  
  •     标题:死区互补PWM  
  •     软件平台:IAR for ARM6.21  
  •     硬件平台:stm32f4-discovery  
  •     主频:168M  
  •   
  •     描述:三对死区互补PWM、一路普通PWM  
  •           PE8 ----- TIM1_CH1N  
  •           PE9 ----- TIM1_CH1  
  •           PE10 ----- TIM1_CH2N  
  •           PE11 ----- TIM1_CH2  
  •           PE12 ----- TIM1_CH3N  
  •           PE13 ----- TIM1_CH3  
  •           PE14 ----- TIM1_CH4  
  •       
  •     author:小船  
  •     data:2012-02-09  
  • *************************************/  
  •   
  • #include <stm32f4xx.h>   
  •   
  • void main ()  
  • {     
  •   
  •   SCB->AIRCR = 0x05FA0000 | 0x400;  //中断优先级分组 抢占:响应=3:1  
  •    
  •   RCC->AHB1ENR |= (1<<4); //打开GPIOE时钟  
  •   GPIOE->MODER |= 0X2AAA0000;//PE8、9、10、11、12、13、14第二功能  
  •         //推挽输出  
  •   GPIOE->OSPEEDR |= 0x3fff0000;//速度100m  
  •   GPIOE->PUPDR |= 0x15550000;//上拉   
  •    
  •   //PE8、9、10、11、12、13、14第二功能AF1  
  •   GPIOE->AFR[1] |= 0x01111111;  
  •    
  •   RCC->APB2ENR |= (1<<0); //打开TIM1时钟  
  •   TIM1->PSC = 167; //对时钟168M进行168分频,使得计数频率为1M  
  •   TIM1->ARR = 10000;  //周期10ms  
  •   TIM1->EGR |= 1; //产生一次更新事件  
  •    
  •   TIM1->CCMR1 |= 0x6060;//PWM模式1  
  •   TIM1->CCMR2 |= 0x6060;//PWM模式1  
  •    
  •   TIM1->CCR1 = 8000;//设置占空比  
  •   TIM1->CCR2 = 6000;  
  •   TIM1->CCR3 = 4000;  
  •   TIM1->CCR4 = 2000;  
  •    
  •   TIM1->CCER |= 0x1ddd;//使能比较输出  
  •    
  •   TIM1->CCMR1 |= 0x0808;//启动预装载  
  •   TIM1->CCMR2 |= 0x0808;  
  •    
  •   TIM1->BDTR|=1<<15;    // 刹车使能位置1,开启所有输出通道  
  •   TIM1->BDTR|=0xCD;     // 死区时间设定  
  •   TIM1->CR1 |= 1; //开始计时  
  •   
  •   while(1)  
  •   {  
  •   };  
  • }  


使用特权

评论回复
板凳
powerful1| | 2015-3-30 21:00 | 只看该作者
死区互补PWM跟通用定时器的PWM配置差异不大,只是需要设置多CCER寄存器中的几个位以及刹车与死区寄存器BDTR

使用特权

评论回复
地板
搞IT的| | 2015-3-30 21:20 | 只看该作者
寄存器还需要怎么配置啊,怎么感觉是直接拿来用就可以了。

使用特权

评论回复
5
powerful1| | 2015-3-30 21:57 | 只看该作者
(ARR的值)周期=(PSC+1)* ARR / TIMx时钟

使用特权

评论回复
6
vigous1| | 2015-3-30 22:06 | 只看该作者
寄存器还需要怎么配置啊,怎么感觉是直接拿来用就可以了。

使用特权

评论回复
7
quray1985| | 2015-3-30 22:17 | 只看该作者
energy1 发表于 2015-3-30 20:48
程序: view plaincopy

能看懂一些,还需要楼主讲得再详细一些
不过还是得谢谢

使用特权

评论回复
8
小浣熊| | 2015-3-30 22:19 | 只看该作者
配置步奏居然这么复杂啊

使用特权

评论回复
9
Alisa_song| | 2015-5-27 11:19 | 只看该作者
在stm32的互补对称的PWM里面:
Re-directing OCxREF to OCx or OCxN
In output mode (forced, output compare or PWM), OCxREF can be re-directed to the OCx
output or to OCxN output by configuring the CCxE and CCxNE bits in the TIMx_CCER
register.
This allows you to send a specific waveform (such as PWM or static active level) on one
output while the complementary remains at its inactive level. Other alternative possibilities
are to have both outputs at inactive level or both outputs active and complementary with
dead-time.
在输出模式下(强置、输出比较或PWM),通过配置TIMx_CCER寄存器的CCxE和CCxNE位,OCxREF可以被重定向到OCx或者OCxN的输出。 这个功能可以在互补输出处于无效电平时,在某个输出上送出一个特殊的波形(例如PWM或者静态有效电平)。另一个作用是,让两个输出同时处于无效电平,或处于有效电平和带死区的互补输出。

但是不理解什么意思,是不是互补的两个通道OCx和OCxN通过寄存器的配置可以产生一个输出PWm波,一个没有输出呢?谢谢

使用特权

评论回复
10
jcx0324| | 2015-5-28 17:01 | 只看该作者
MARK下先,下次看

使用特权

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

本版积分规则

94

主题

422

帖子

10

粉丝