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智慧。

相关推荐
伟大的前程22 分钟前
us级开定时器中断,单片机的开销大,改用轮询的方式
单片机·嵌入式硬件
ACP广源盛1392462567312 小时前
IX8024@ACP# 搭配此芯 AI 服务器 + 爱芯元智产品完整方案
大数据·运维·服务器·人工智能·分布式·嵌入式硬件
ShallWeL13 小时前
NVIDIA Jetson 早期系列演进
人工智能·嵌入式硬件·边缘计算·智能硬件
2501_9142459315 小时前
C语言与硬件交互:从GPIO到中断的嵌入式编程实践
c语言·单片机·交互
2401_8541515516 小时前
嵌入式 Bootloader 与 OTA 固件升级深度解析——从 Flash 分区到安全回滚
开发语言·stm32·单片机·嵌入式硬件·安全·php
炸膛坦客17 小时前
单片机/C/C++八股:(二十四)编译文件( .bin 和 .hex ,包括 .elf 和 .axf )
c语言·c++·单片机
Yunhoa17 小时前
51单片机(DS18B20 数字温度传感器)
单片机·嵌入式硬件·51单片机
zlinear数据采集卡18 小时前
2mV纹波的代价:硬核拆解ZLinear模拟前端放大器与正负可调电源设计
arm开发·单片机·嵌入式硬件·fpga开发·架构·开源
Wallystech-Linda19 小时前
Exploring WiFi 7 Module Designs for Next-Generation Wireless Applications
嵌入式硬件
不上岸的旱鸭子20 小时前
PCB设计
单片机·pcb工艺