STM32使用PWM制作呼吸灯

文章目录

  • STM32使用PWM制作呼吸灯
  • 一、定时器理论知识
  • PWM介绍
  • 1. 定义
  • 2. 基本原理
  • 3. 优点及应用范围
  • 4. 主要参数
  • 5. PWM的产生
  • 6. PWM工作原理
  • 7. PWM输出的模式区别
  • 8. PWM的计数模式
  • 9. PWM相关配置寄存器
  • 总结
  • 二、工程建立
  • (1)创建新项目
  • (2)RCC配置
  • (3)SYS配置
  • (4)配置定时器
  • (5)配置时钟树
  • (6)配置项目设置
  • 三、代码完善
  • 四、结果展示
  • 五、心得体会
  • 六、仓库地址
  • 七、参考博客
  • 一、定时器理论知识

    PWM介绍

    1. 定义

    PWM(Pulse Width Modulation,脉宽调制)是一种通过控制脉冲的宽度来调节功率输送的技术。简单来说,PWM是通过改变信号的“开”时间(高电平时间)和“关”时间(低电平时间)来实现对输出功率的控制。常用于控制电机转速、调节亮度、音频信号合成等场景。

    2. 基本原理

    PWM通过固定的时间周期内改变信号的“高电平”与“低电平”的比例(即占空比)来控制功率的传递。通过改变占空比,可以控制电流的平均值,从而实现对电动机、LED亮度等设备的调节。PWM的频率保持不变,而占空比则在0到100%之间变化:

  • 占空比(Duty Cycle):即高电平占总周期的时间比例。例如,占空比为50%的PWM波表示高电平持续50%的时间,低电平持续50%的时间。
  • 频率(Frequency):PWM波的周期时间,也就是信号变化的频率。
  • 3. 优点及应用范围

    优点:

  • 高效能:PWM能有效控制功率传输,并且电源开关工作时几乎没有能量损耗。
  • 精确控制:可以精确地控制功率输出,通过调节占空比来实现精确调节。
  • 热量低:相比传统的线性调节方式,PWM的开关特性能够大大减少因电流流过元件而产生的热量。
  • 应用范围:

  • 电机控制:控制电机转速。
  • 亮度调节:在LED灯光调节中广泛应用。
  • 音频合成:生成模拟音频信号。
  • 电源调节:例如在电源转换中,使用PWM控制输出电压。
  • 马达驱动:如机器人、风扇等设备的调速。
  • 4. 主要参数
  • 频率(Frequency):PWM信号的周期性变化速率,单位为Hz。频率高则调节更细腻,低则响应较慢。
  • 占空比(Duty Cycle):高电平时间与总周期时间的比例,通常以百分比表示。
  • 周期(Period):一个PWM信号从开始到结束的时间总长度,等于1/频率。
  • 电压幅度(Amplitude):高电平时的电压值,一般由驱动电路提供。
  • 5. PWM的产生

    PWM信号的产生一般有两种方式:

  • 硬件PWM:由微控制器内部的定时器和计数器自动生成。STM32等微控制器通过配置定时器来输出PWM信号。硬件PWM稳定可靠,效率高,适用于大多数应用。
  • 软件PWM:通过软件控制GPIO引脚的高低电平输出,虽然实现简单,但通常需要较高的计算资源,效率较低,不适合高精度控制。
  • 6. PWM工作原理

    PWM的工作原理基于一个固定频率的时钟,通过调节高电平的持续时间(占空比)来实现对功率的调控。信号的周期由时钟产生器设定,信号的高电平和低电平通过占空比控制,常见的PWM波形是矩形波。

  • 占空比:例如占空比50%意味着PWM波在一个周期内,高电平和低电平的时间相等。若占空比为25%,则高电平持续四分之一的周期,低电平占据剩余的部分。
  • 7. PWM输出的模式区别

    PWM输出有多种工作模式,主要包括:

  • 正常模式(Up Mode):定时器计数从0计数到自动重载值(ARR),然后重载并继续。
  • 向下计数模式(Down Mode):定时器从ARR计数到0,再反向计数。
  • 中心对称模式(Center-aligned Mode):定时器计数到ARR值后会反向计数,这样PWM波形会相对于中心对称,常用于减小噪音和振动。
  • 边沿对齐模式(Edge-aligned Mode):PWM波的上升沿或下降沿与计数器的某些边缘对齐。
  • 8. PWM的计数模式

    PWM的计数模式主要有两种:

  • 向上计数(Up-counting):计数器从0开始递增到设定的ARR(Auto-Reload Register)值,当计数器达到ARR值时,它会重新从0开始。
  • 向下计数(Down-counting):计数器从ARR开始递减到0,当计数器为0时,会重新从ARR开始。
  • 向上/向下计数(Up/Down-counting):这种模式结合了上升和下降计数,计数器在ARR值和0值之间交替进行计数。此模式下,PWM波形具有更对称的特性。
  • 9. PWM相关配置寄存器

    在STM32微控制器等基于定时器的PWM生成过程中,涉及到多个寄存器的配置,以下是常见的几个配置寄存器:

    1. 捕获/比较模式寄存器(TIMx_CCMR1)

    2. 该寄存器用于配置定时器的捕获/比较模式,决定定时器输出的波形类型、PWM的占空比、计数模式等。
    3. 主要控制PWM信号的输出模式,比如PWM的极性、输出的比较输出模式等。
    4. 捕获/比较使能寄存器(TIMx_CCER)

    5. 该寄存器用于使能定时器的通道输出。通过设置该寄存器,定时器的捕获/比较输出可以发送到外部引脚。
    6. 控制PWM输出信号的开关、极性等。确保PWM信号能够正确地输出到GPIO引脚。
    7. 捕获/比较寄存器(TIMx_CCRx)

    8. 该寄存器用于存储捕获/比较的值,控制PWM信号的高电平持续时间(即占空比)。
    9. 通过写入CCR寄存器,可以设置PWM信号的占空比,从而实现对输出信号的调节。

    总结

    PWM是通过改变脉冲的宽度来控制功率的一种技术,具有高效、精确、低热量的优点,广泛应用于电机调速、LED亮度控制等领域。通过定时器配置寄存器,用户可以灵活控制PWM的输出模式、占空比和频率,从而实现对电气设备的精确调控。

    二、工程建立

    (1)创建新项目


    (2)RCC配置

    (3)SYS配置

    (4)配置定时器

    这里我们选择定时器3和定时器4来实现定时的功位置3,分频系数为71,向上计数模式,计数周期为500,使能自动重载模式。通道1选择:PWM Generation CH1(PWM输出通道1)
    设置分频系数为71,计数周期为500,其它默认。

    定时器四我们也选择PWM Generation CH1(PWM输出通道1),计数周期根据自己需要进行设置,这里我设置的跟定时器三一样

    (5)配置时钟树

    (6)配置项目设置


    设置项目名称、路径(不能有中文)、编译器及版本

    三、代码完善

    (1)设置占空比
    在main.c中,添加变量,用以存储占空比,且初始值设置为10.

    uint16_t duty_num3 = 10;
    uint16_t duty_num4 = 10;
    
    

    (2)开启PWM信道
    开始TIM3的通道3,输出PWM。
    开始TIM4的通道4,输出PWM。
    在main函数中添加:

    	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
    	HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1);
    
    


    (3)具体应用
    这里我们设置为每隔50毫秒,占空比加10,如果超过400(也就是PWM周期),又逐渐递减,占空比减10。(即灯会从亮到暗,再从暗到亮逐渐变化)

    	    while (1)
      {
        /* USER CODE END WHILE */
    		HAL_Delay(50);
    		duty_num3 = duty_num3 + 10;
    		duty_num4 = duty_num4 + 10;
    		if(duty_num3 > 400)
    		{
    			while(duty_num3!=0)
    			{ 	
    				HAL_Delay(50);
    				duty_num3 = duty_num3 - 10;
    		__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,duty_num3);			 
    			}
    			HAL_Delay(50);
    			duty_num3 = 0;
    		}
    		__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,duty_num3);
    			if(duty_num4 > 450)
    		{
    			while(duty_num4!=0)
    			{ 	
    				HAL_Delay(50);	
    			    duty_num4 = duty_num4 - 10;
    		__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_1,duty_num4);
    			}
    			HAL_Delay(50);
    			duty_num4 = 0;
    		}
    		__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_1,duty_num4);
        /* USER CODE BEGIN 3 */
      }
    

    四、硬件连接
    根据查询数据手册可发现定时器3,4的一通道分别对应引脚PA6 PB6,然后题目要求还需要直接驱动PC13(最小开发板上已焊接的LED(固定接在 PC13 GPIO端口)),故而我们将对应PWM波作为输入,连接其对应引脚即可实现所需完成功能。
    3V3 —> 3V3

    GND —> GND

    RXD —> A9

    TXD —> A10

    LED灯短脚 —> A6

    LED灯长脚 —> 3V3

    PB6 —> PC13
    硬件连接图:

    四、结果展示

    可以看到两个灯有亮到灭,再由灭到亮

    五、心得体会

    通过实现呼吸灯,我对PWM的基本原理有了更深刻的理解。PWM通过调节占空比来改变电流的平均值,从而控制LED亮度的变化。在STM32中,我们使用定时器产生PWM信号,这让我意识到硬件定时器的精确性以及它们在实时控制中的重要性。

    在STM32上实现PWM,最关键的部分是定时器的配置。通过配置定时器的计数周期和捕获/比较寄存器,我能够精确地控制LED的亮度变化。在学习过程中,我对STM32的定时器工作机制有了更深的认识,尤其是如何配置定时器的工作模式(比如向上计数、向下计数模式等),以及如何调整占空比来控制LED的亮度变化。

    呼吸灯的核心是亮度的渐变效果,这要求PWM的占空比在一定时间内平滑地变化。在这个过程中,我学习了如何利用STM32的定时器中断或者延时函数来控制渐变的速度,使得效果更加自然、流畅。

    六、仓库地址

    https://gitee.com/shxingyu/s-t-m

    七、参考博客

    http://www.mcublog.cn/stm32/2021_01/stm32cubemx-pwm-huxideng/
    https://blog.csdn.net/weixin_64559251/article/details/127581276

    作者:bibido_

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32使用PWM制作呼吸灯

    发表回复