用定时器生成PWM信号

PWM 简介

PWM(脉冲宽度调制)是一种将信号表示为占空比可变的矩形波的方法。本质上,它利用数字信号的"开"和"关",通过调节脉冲的高电平持续时间(占空比),来控制负载获得的平均电压或功率。

  • 脉冲越宽(占空比越大),平均输入电压越高
  • 脉冲越窄(占空比越小),平均输入电压越低

下图展示了一个理想电感器在 PWM 电压驱动下的工作示例:

图片来源:网络

尽管输入电压是矩形波脉冲,但随着开关频率的提高,电感中的电流波形会逐渐变得平滑,最终接近正弦波。

应用示例:降低反射式光电开关的功耗

在本示例中,我们使用一个反射式光电开关,并通过 PWM 信号来控制其打开和关闭的时间,从而显著降低其平均功耗。

本示例基于STM32G0系列微控制器,使用STM32CubeMX进行配置,并生成初始化代码。

设计目标

  • 每 10 ms 为一个周期
  • 光电开关只在其中 100 μs 时间内打开
  • 剩余 9.9 ms 处于关闭状态

这样,光电开关的占空比为:

复制代码
100 μs / 10 ms = 1%

硬件与定时器配置

1. 引脚配置
  • C_POS_TX_EN2:用于控制反射式光电开关
  • 将该引脚配置为 TIM1 的通道 2(CH2)
2. 定时器模式配置
  • 定时器: TIM1
  • Clock Source: Internal Clock
  • Channel 2: PWM Generation CH2
3. 定时器参数配置
  • Prescaler(预分频器): 3 (实际分频值为 4)
  • Counter Mode: Up (向上计数)
  • Counter Period(自动重装载值): 39999 (对应 10 ms 周期)
  • Pulse: 399 (对应 100 μs 高电平时间)
4. 参数计算说明

定时器时钟 TIMPCLK 来源于 PCLK(APB 总线时钟)。 在本配置中,APB 分频系数设置为 1,因此定时器时钟 TIMPCLK 的频率与 PCLK 相同,均为 16 MHz。

  • 定时器计数频率计算

    • 定时器的时钟频率:16MHz

    • 预分频器值:4 (设置值为3,实际分频值为4) 分频后的定时器计数频率为:

      计数频率 = 时钟频率 / 预分频器值 = 16MHz / 4 = 4MHz

    也就是说,定时器在 1 秒内计数 4,000,000 次。

    采用分频的主要原因是: 定时器自动重装载寄存器(ARR)为 16 bit,最大值为 65535。 如果不进行分频,计数器在有限的计数范围内,无法满足 10 ms 周期 的要求。

  • PWM周期计算

    目标 PWM 周期为 10 ms。

    在 4 MHz 的计数频率下,10 ms 内的计数值为:

    复制代码
    4,000,000 × 10 ms / 1000 ms = 40,000

    因此,计数器从 0 计数到 39999,共计 40,000 个计数周期:

    复制代码
    ARR = 39999
  • 高电平时间(Pulse)计算

    目标高电平时间为 100 μs。

    在 4 MHz 的计数频率下,100 μs 内的计数值为:

    复制代码
    4,000,000 × 100 μs / 1,000,000 μs = 400

    因此:

    计数器从 0 计数到 399 时输出高电平

    共计 400 个计数周期:

    复制代码
    Pulse = 399

启动定时器与 PWM 输出

代码生成后,main() 函数中会包含 TIM1 的初始化代码。 仍需手动启动定时器和 PWM 输出:

复制代码
  HAL_TIM_Base_Start(&htim1);
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);

输出结果

我们通过检测反射式开关发光管的电压波形,观察 PWM 信号的输出效果:

从示波器截图可以看到,光电开关的发光管在每个 10 ms 周期内仅点亮 100 μs,达到了预期的低功耗效果。

相关推荐
polarislove02149 小时前
10.1 [ADC] 逐次逼近型ADC-嵌入式铁头山羊STM32笔记
笔记·stm32·嵌入式硬件
qq_672592759 小时前
STM32超声测距离的测量精度评估
stm32·硬件架构·硬件工程
谈思汽车9 小时前
TEE or HSM/SE?车载安全技术选型指南
嵌入式硬件·安全·智能汽车·可信执行环境·汽车信息安全
单片机系统设计9 小时前
基于STM32的智能垃圾桶/语音分类/自动开盖/矩阵按键
stm32·矩阵·毕业设计·语音识别·智能垃圾桶
-曾牛10 小时前
【汇编语言入门】从第一个加法程序吃透汇编核心基础
汇编·单片机·嵌入式硬件·汇编语言·病毒分析·lcx·逆向开发
IT方大同10 小时前
ADC&DAC概述
嵌入式硬件
三品吉他手会点灯11 小时前
STM32F103 学习笔记-21-串口通信(第3节)-STM32串口初始化结构体和固件库讲解
笔记·stm32·单片机·嵌入式硬件·学习
Lester_110111 小时前
单片机EEPROM写入数据之前为什么要先擦除?
单片机·嵌入式软件
点灯小铭11 小时前
基于单片机的多功能LCD万年历时钟设计与温度显示系统
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
点灯小铭11 小时前
基于单片机的玉米播种机漏播检测装置设计与实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业