基于STM32利用PWM完成呼吸灯的实现

目录

  • 一、pwm的介绍
  • 1.高级控制定时器功能实现框图
  • 2.pwm的定义
  • 3.pwm的控制方式
  • 4.主要参数
  • 5.实现原理
  • 6.端口的选择
  • 7.PWM口对应配置
  • 8.PWM 输入模式
  • 9.PWM 输出模式
  • 二、用cubemx创建工程
  • 1.创建新工程
  • 2.芯片的选择
  • 3.配置环境
  • 4.时钟的配置
  • 5.生成项目
  • 三、代码的编译
  • 四、电路的连接
  • 五、代码实现
  • 六、总结
  • 参考文献
  • 一、pwm的介绍

    1.高级控制定时器功能实现框图


    其中分为6个板块:①时钟源②控制器 ③时基单元 ④输入捕获 ⑤输出比较 ⑥断路功能

    2.pwm的定义

    pwm是​​​​​​​一种模拟控制方式,根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定。脉冲宽度调制(PWM )是一种对模拟信号电平进行数字编码的方法。
    通过高分辨率计数器的使用,利用方波的占空比调制来对一个具体模拟信号的电平进行编码。pwm​​​​​​​信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。

    3.pwm的控制方式

    1.线电压控制PWM
    2.电流控制 PWM
    3.空间电压矢量控制PWM
    4.矢量控制PWM​​​​​​​
    5.直接转矩控制PWM
    6.非线性控制PWM
    7.谐振软开关PWM

    4.主要参数

    PWM:脉宽调制
    脉宽调试是数字信号输出对模拟信号输出的一种方式。
    占空比:一个周期内,高电平时间与整个周期的比值。

    5.实现原理

    PWM实现的原理是通过锯齿波/三角波(载波)所需要合成的波形(调制波)进行比较,然后确定PWM所需要输出的极性,通常是ON或者是OFF,作用于开关元器件。如下图

    6.端口的选择

    IO模拟PWM输出时速度不是很快。端口选择时,普通IO可以输出PWM,但还是尽量选择PWM口进行PWM输出。

    7.PWM口对应配置

    8.PWM 输入模式

    该模式是输入捕获的特例,只能使用通道 1 和通道 2,通道 3 和通道 4 使用不了。与上面那种只使用一个捕获寄存器测量脉宽和频率的方法相比,PWM 输入模式需要占用两个捕获寄存器。

    9.PWM 输出模式

    PWM输出就是对外输出脉宽(即占空比)可调的方波信号,信号频率由自动重装寄存器 ARR 的值决定,占空比由比较寄存器 CCR 的值决定。
    PWM 模式分为两种,PWM1 和 PWM2,总得来说是差不多,具体的区别。

    PWM1 与 PWM2 模式的区别:
    模式|计数器 CNT 计算方式|说明
    PWM1 递增 CNT<CCR,通道 CH 为有效,否则为无效
    PWM2 递减 CNT>CCR,通道 CH 为无效,否则为有效 PWM2 递增 CNT<CCR,通道 CH 为无效,否则为有效
    PWM2 递减 CNT>CCR,通道 CH 为有效,否则为无效

    (1) PWM 边沿对齐模式
    在递增计数模式下,计数器从 0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新从 0 开始计数并生成计数器上溢事件。
    (2)PWM 中心对齐模式
    在中心对齐模式下,计数器 CNT 是工作做递增/递减模式下。开始的时候,计数器CNT 从 0 开始计数到自动重载值减1(ARR-1),生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从 0 开始重新计数。

    二、用cubemx创建工程

    1.创建新工程

    2.芯片的选择

    3.配置环境

    System Core–RCC–Crystal/Ceramic ResonatorSystem Core–SYS–Serial Wire
    TM3–Internal Clock(内部时钟–PWM Generation CH1(选择通道1)–Prtscaler (定时器分频系数) : 71–Counter Mode (Up向上计数模式)–Counter Period(自动重装载值 500)–CKD(不分频 No Division)

    TM4–Internal Clock(内部时钟–PWM Generation CH1(选择通道1)–Prtscaler (定时器分频系数) : 71–Counter Mode (Up向上计数模式)–Counter Period(自动重装载值 500)–CKD(不分频 No Division)

    4.时钟的配置

    5.生成项目

    三、代码的编译

    main.c文件中添加变量

    uint16_t pwm=0;   //占空比
    

    添加后如下图所示:

    在main.c中添加PWM的通道

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

    添加后如下图所示:

    在while循环中添加如下所示代码

    while (pwm< 500)
    	  {
    		  pwm++;
    		  __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);  
        __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);  			
    		  HAL_Delay(1);
    	  }
    	  while (pwm)
    	  {
    		  pwm--;
    		  __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);    
           __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);  
    			
    		  HAL_Delay(1);
    	  }
    	  HAL_Delay(200);
    
    


    编译未出现错误,连接完电路后准备烧录

    四、电路的连接

    3V3 —> 3V3
    GND —> GND
    RXD —> A9
    TXD —> A10
    LED灯短脚 —> A6
    LED灯长脚 —> 3V3
    PB6 —> PC13

    五、代码实现

    利用PWM完成呼吸灯

    六、总结

    通过本次练习,以PWM输出端实现led呼吸灯。在本次练习的过程中,出现了许多小问题例如代码未添加变量导致无法编译;程序编译成功,由于led引脚接错无法实现呼吸灯;程序编译成功,线路连接也没问题时,烧录软件出错导致无法实现等问题。再出现这些问题时不要急于放弃,沉下心来慢慢摸索,总会成功。希望本篇博客可以帮助到你,欢迎指正!!

    参考文献

    一文搞懂什么是PWM
    pwm超详细解读,大佬细说pwm的控制方式
    STM32CUBEMX_基于PWM的呼吸灯
    stm32f103呼吸灯(PWM脉冲宽度调制)
    使用STM32输出PWM波形

    物联沃分享整理
    物联沃-IOTWORD物联网 » 基于STM32利用PWM完成呼吸灯的实现

    发表评论