当前位置:   article > 正文

【STM32】PWM输出原理_stm32产生pwm波原理

stm32产生pwm波原理

目录

PWM模式的工作框架:

PWM模式的工作原理:

PWM库函数配置:

1.初始化定时器输出通道:TIM_OC2Init

2.设置比较值函数:TIM_SetComparex

3.使能预装载寄存器:void TIM_OC2PreloadConfig


PWM模式的工作框架:

PWM模式的工作原理:

由之前的定时器中断实验知道,定时器内部有一个记录定时器当前值的寄存器CNT和一个记录定时器自动重装载值的寄存器ARR,而在PWM工作模式下,我们依然利用这两个定时器来记录时间,不同的是多引入一个寄存器CCRx,这个寄存器用于控制PWM输出波的有效电平长度、引入CCMRx寄存器来控制PWM模式、引入寄存器CCERx:CC1P位控制输出电平极性。

PWM模式可以控制当计数器的值小于CCRx寄存器设定的值时输出的是有效电平还是无效电平,

  • 在PWM模式1下,我们控制凡是小于CCRx寄存器数值的电平都是有效电平,无论是向上计数还是向下计数;
  • PWM模式2下,我们控制凡是小于CCRx寄存器数值的电平都是无效电平,无论是向上计数还是向下计数;

下面以PWM模式1为例:当计数器小于CCRx数值时,输出的为有效的电平,例如上图中,我们通过控制寄存器CCERx:CC1P位让有效电平为低电平,所以当计数器小于寄存器CCRx设定的数值时,输出的为有效的低电平。当计数器大于CCRx设定的值时,输出无效的高电平。

PWM库函数配置:

PWM实验的配置步骤如下:

  • 初始化定时器时钟和输出GPIO的时钟;
  • GPIO的初始化;
  • 定时器初始化;
  • 定时器输出通道参数初始化;
  • 定时器使能;
  • 预装载寄存器使能;

1.初始化定时器输出通道:TIM_OC2Init

TIM_OC2Init(TIM3, &TIM_OCInitStructure);

这个函数用于初始化PWM模式下定时器输出的模式和相应参数的选择。它有两个参数,第一个是要初始化的定时器,第二个是选择定时器的输出模式的结构体指针:

  1. uint16_t TIM_OCMode;
  2. uint16_t TIM_OutputState;
  3. uint16_t TIM_OutputNState;
  4. uint16_t TIM_Pulse;
  5. uint16_t TIM_OCPolarity;
  6. uint16_t TIM_OCNPolarity;
  7. uint16_t TIM_OCIdleState;
  8. uint16_t TIM_OCNIdleState;

它有8个成员,而在我们PWM输出的实验中,我们只需要去配置它的4个成员:

  1. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  2. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  3. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  4. TIM_OCInitStructure.TIM_Pulse

第一个是TIM_OCInitStructure.TIM_OCMode,它是选择PWM模式,即控制CCMRx寄存器的结构体成员;

第二个是TIM_OCInitStructure.TIM_OutputState,它是选择是否使能通道的成员;

第三个是TIM_OCInitStructure.TIM_OCPolarity,它是配置CCERx寄存器,即控制有效电平的极性的成员;

第四个是TIM_OCInitStructure.TIM_Pulse,它是配置CCRx寄存器的数值,这个我们可以不使用,因为后面有函数可以配置它。

2.设置比较值函数:TIM_SetComparex

void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2)

这个函数有两个参数,第一个参数是要设置的定时器,第二个参数是新的比较值,即CCRx寄存器的配置函数;

3.使能预装载寄存器:void TIM_OC2PreloadConfig

void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)

这个函数用于使能预装载寄存器,即使能CCRx预装载寄存器的函数,即驱动CCRx寄存器工作的函数。它也有两个参数,第一个是定时器序号,第二个是定时器的预装载寄存器的使能。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/791299
推荐阅读
相关标签
  

闽ICP备14008679号