PWM模拟电压:数字信号“平均”一下,就能变成模拟量

短文标题:PWM模拟电压:数字信号"平均"一下,就能变成模拟量

你有没有想过一个问题:GPIO只能输出0V或3.3V,怎样才能让它输出1.65V?答案是:PWM(脉冲宽度调制)。在足够短的时间内,让引脚50%时间输出3.3V、50%时间输出0V。外接的RC低通滤波器会把高频分量滤掉,负载(比如LED、电机)感受到的是平均电压------1.65V。占空比 = 高电平时间 / 周期。50%占空比 → 平均电压 = 50% × 3.3V = 1.65V。

**那个"平均"的物理原理,**PWM不是真的产生了1.65V,而是利用物理系统的惯性:

  • 人眼的视觉暂留:LED快速闪烁,眼睛看到的平均亮度
  • 电机的机械惯性:PWM驱动电机,转速由平均电压决定
  • RC滤波器的积分作用:电阻电容将PWM波形平滑成直流电压

这就是"用时间换电压"------调整高低电平的时间比例,产生任意中间电压。

**那个"占空比"与"分辨率",**PWM的分辨率取决于定时器的位数。

  • 8位定时器:256级占空比(ARR=255)
  • 16位定时器:65536级占空比(ARR=65535)

公式:平均电压 = VCC × (CCR / ARR),ARR越大,电压调节越细腻。

**那个"频率"的选择,**PWM频率不能太低:LED会闪烁(人眼>100Hz),电机会抖动(机械响应延迟),音频会产生啸叫(人耳20Hz~20kHz)。频率也不能太高:MOS管开关损耗会增加(每开一次/关一次都要消耗能量),且负载可能呈感性,阻抗随频率变化。常用经验值:

  • LED调光:200Hz~1kHz
  • 电机调速:10kHz~20kHz(避开人耳最敏感的2kHz~5kHz)
  • 数字电源:50kHz~100kHz以上

**那个"RC滤波"的平滑,**如果想得到真正的直流电压(如DAC输出),需要在PWM输出后加低通滤波器(电阻+电容)。截止频率f_c = 1/(2πRC),应远低于PWM频率。例如PWM=10kHz,RC截止频率取1kHz:R=1kΩ,C=1/(2π×1000×1000)≈0.16μF,取0.1μF即可。注意输出端加运放缓冲驱动,否则负载会改变RC滤波特性。

**那个"硬件PWM"的优势,**用定时器中断模拟PWM,CPU负载极高(每周期进中断)。

STM32的通用定时器自带硬件PWM:只需设置ARR和CCR,启动定时器,硬件自动翻转引脚,CPU占用率≈0。

这个故事的启示, 为什么PWM能模拟模拟电压?因为物理系统有"惯性"------人眼、电机、RC电路,都会对输入做"平均"。这就是数字世界通往模拟世界的桥梁。**没有昂贵的DAC,一个定时器就能输出模拟电压。写在最后,**下表快速总结PWM的应用:

(本文灵感源于于振南《新概念ARM32单片机》教程第6.6节"通用定时器 PWM 原理与数字模拟信号转换",感谢作者将PWM模拟电压的精髓讲得如此通透。)

如果您觉得这个故事对您有启发,欢迎点赞、转发,让更多工程师看到这个藏在"平均电压"背后的PWM智慧。

相关推荐
blevoice1 小时前
杰理AC6966B-QFN32蓝牙音频进阶:获取手机歌曲信息——让音箱“报歌名”其实不难
嵌入式硬件·智能手机·音视频·jl杰理蓝牙音频芯片·杰理ac696n开发板·ac6966b蓝牙音响芯片
LCG元2 小时前
STM32实战:基于STM32F103的CANopen协议通信实战
stm32·单片机·嵌入式硬件
Hello_Embed2 小时前
libmodbus 源码分析
笔记·stm32·单片机·嵌入式·ai编程
12.=0.2 小时前
【stm32_8】IIC内部集成电路——IIC的时序、利用IO口模拟IIC的时序、IIC通信器件的读写使用、半导体存储器的基本概述
c语言·stm32·单片机·嵌入式硬件
namas88482 小时前
APLC IDE 用户手册
ide·单片机·嵌入式硬件
草莓熊Lotso4 小时前
【Linux网络】UDP Socket 编程全解析:从回显服务到通用字典服务,从零实现工业级代码
linux·运维·服务器·数据库·c++·单片机·udp
fengfuyao98515 小时前
利用 STM32 和 ADS1256 进行高精度数据采集
stm32·单片机·嵌入式硬件
黑白园16 小时前
ADC读取XY二轴操纵杆数据通过I2C_GPIO模拟 控制0.96寸OLED显示
stm32·单片机·嵌入式硬件
一个平凡而乐于分享的小比特17 小时前
还在手动挡写单片机?MicroPython 一脚油门踩进 Python 硬件世界
单片机·嵌入式硬件·micropython