STM32配置PWM完成呼吸灯

坚持就是胜利

  • 一、PWM介绍
    • 01 简介
    • 02 呼吸灯工作原理
    • 03 PWM模式
    • 04 PWM基本结构
    • 05 参数计算
    • 06 STM32F103C8T6的PWM引脚
  • 二、HAL库呼吸灯小练习
    • 01 题目要求
    • 02 配置CubeMX
    • 03 配置Keil
    • 04 结果展示
  • 三、简单配置库函数实现呼吸灯
    • 01 主要代码展示
    • 02 接线图
    • 03 效果展示
  • 四、总结
  • 源代码
  • 参考资料

一、PWM介绍

01 简介

  • 脉冲宽度调制(英语:Pulse-width modulation,缩写:PWM),简称脉宽调制,是将模拟信号转换为脉波的一种技术,一般转换后脉波的周期固定,但脉波的工作周期会依模拟信号的大小而改变。
  • 在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效的获得所需要的的模拟参量,常应用于电机控速等领域
  • 参数:频率、分辨率=占空比变化步距、占空比=Ton / TsSTM32配置PWM完成呼吸灯_第1张图片

02 呼吸灯工作原理

呼吸灯:顾名思义,灯光的亮度在控制下不断的在亮和灭之间逐渐变化,感觉好像是人在呼吸。控制LED的亮度总体有两种方法,一种是给LED灯上施加模拟信号(可以串接可调电阻或DAC输出模拟信号),通过改变流经LED上的电流控制LED灯的亮度;另一种是使用PWM,给LED灯上施加数字信号,通过调整数字信号的占空比(调整占空比 = 调整有效值)来控制LED灯的亮度。这里我们的呼吸灯就是采用第二种PWM的方法实现。

PWM脉冲宽度调制,是利用数字输出对模拟电路进行控制的一种非常有效的技术。通过改变PWM的占空比从而改变输出电平的有效值,在LED的亮度上反应出来,如果占空比能够由小变大再变小,在LED上反应出的效果就是呼吸灯的效果。
STM32配置PWM完成呼吸灯_第2张图片
如上图所示,脉冲信号的周期为T,高电平脉冲宽度为t,占空比为t/T。为了实现PWM脉宽调制,我们需要保持周期T不变,调整高电平脉宽t的时间,从而改变占空比。

  • 当t = 0时,占空比为0%,因为我们的LED硬件为低电平点亮,所以为最亮的状态。
  • 当t = T时,占空比为100%,LED灯为最暗(熄灭)的状态。

03 PWM模式

脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。 在TIMx_CCMRx寄存器中的OCxM位写入’110’(PWM模式1)或’111’(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM。必须设置TIMx_CCMRx寄存器OCxPE位以使能相应的预装载寄存器,最后还要设置TIMx_CR1寄存器的ARPE位,(在向上计数或中心对称模式中)使能自动重装载的预装载寄存器。 仅当发生一个更新事件的时候,预装载寄存器才能被传送到影子寄存器,因此在计数器开始计数之前,必须通过设置TIMx_EGR寄存器中的UG位来初始化所有的寄存器。 OCx的极性可以通过软件在TIMx_CCER寄存器中的CCxP位设置,它可以设置为高电平有效或低电平有效。TIMx_CCER寄存器中的CCxE位控制OCx输出使能。详见TIMx_CCERx寄存器的描述。 在PWM模式(模式1或模式2)下,TIMx_CNT和TIMx_CCRx始终在进行比较,(依据计数器的计数方向)以确定是否符合TIMx_CCRx≤TIMx_CNT或者TIMx_CNT≤TIMx_CCRx

模式 描述
冻结 CNT=CCR时,REF保持为原状态
匹配时置有效电平 CNT=CCR时,REF置有效电平
匹配时置无效电平 CNT=CCR时,REF置无效电平
匹配时电平翻转 CNT=CCR时,REF电平翻转
强制为无效电平 CNT与CCR无效,REF强制为无效电平
强制为有效电平 CNT与CCR无效,REF强制为有效电平
PWM模式1 向上计数:CNT
向下计数:CNT>CCR时,REF置无效电平,CNT≤CCR时,REF置有效电平
PWM模式2 向上计数:CNT
向上计数:CNT

04 PWM基本结构

STM32配置PWM完成呼吸灯_第3张图片

05 参数计算

STM32配置PWM完成呼吸灯_第4张图片

06 STM32F103C8T6的PWM引脚

并不是每个引脚都可以输出PWM的波形,每个引脚都有不同的复用功能,下图可以清晰看出每个引脚的功能服用,容量越大的STM32芯片,引脚越多,可以用来配置的TIM定时器越多,可以输出的PWM引脚也就更多一点。
STM32配置PWM完成呼吸灯_第5张图片

二、HAL库呼吸灯小练习

01 题目要求

使用TIM3和TIM4,分别输出一个PWM波形,驱动一个外接的LED灯以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果

02 配置CubeMX

  1. 创建项目

你可能感兴趣的:(stm32,单片机,arm)