PWM呼吸灯之三角波、锯齿波、正弦函数波

脉冲宽度调制(PWM),是英文“Pulse Width Modulation” 的缩写,简称脉宽调制,是利用
微处理器(MCU)的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽
度的控制。

STM32的定时器分为高级控制定时器(TIM1和TIM8)、通用定时器(TIM2-TIM5)、基本定时器(TIM6和TIM7)。STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样, STM32 最多可以同时产生 30 路 PWM 输出!
话不多说,来看程序流程。
首先,对定时器进行初始化,这些参考库函数版本。初始化过程中有几个问题需要注意:1.有的输出引脚需要用到定时器重映射或者完全映射,这个对应自己用的引脚,查表配置即可;2.设置输出PWM脉冲波形引脚为复用推挽输出;3.初始化定时器的时候,注意到ARR是自动重载值,PSC为时钟预分频系数;4.初始化PWM模式的时候,先确定是PWM1模式还是PWM2模式,因为这里有个关键配置(这个很容易疏忽),即TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性比较。这里设置为Low,在PWM2模式下,意味着当计数器的值<自己设置的占空比的值时,引脚输出高电平,反之亦然。
然后,我们看一个关键公式:PWM的频率=72MHz/(psc+1)(arr+1)。其中72MHz为二倍时钟周期,psc和arr前面提到了。这样得到了PWM脉冲波形的频率之后,就可以进一步算出周期。CNT为定时器的值,CCRX是由自己设置的占空比的值,ARR为占空比的最大值。
最后,我们看一下如何让PWM输出脉冲波形以三角波,锯齿波,正弦函数形式变化。
在这里插入图片描述
这是我用示波器截取的PWM脉冲波形的变化图,我的arr值为899,psc值为0(不分频),所以一个周期为12.5μs。STM32库函数历程上给的是以三角波形式变化:即由亮变暗再由暗变亮。而根据三角波的配置可以很轻松地改成锯齿波的形式:即由亮变暗再接着由亮变暗。
下面重点说一下正弦函数形式。需要引进一个函数:result = 450.0sin(param3.14/180);其中result为占空比的值,占空比不断变化导致灯泡亮度按照占空比的变化规律而变化,param为弧度值,我们让它从0到90变化,450.0为CCRX的值,即占空比的最大值为450.0。这样PWM脉冲波形就可以以正弦函数形式变化。

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值