PWM(Pulse Width Modulation,脉宽调制)是一种通过调节脉冲宽度来控制信号的数字调制技术。其特点包括:
固定频率的方波信号
通过改变占空比(高电平时间占整个周期的比例)传递信息
典型应用包括电机调速、LED调光等
模拟量信号是指连续变化的电压或电流信号,特点包括:
信号幅度随时间连续变化
可以表示无限多个数值状态
典型应用包括传感器输出、音频信号等
将PWM转换为模拟量的思想是通过低通滤波器提取PWM信号的平均电压值。具体原理:
PWM信号的平均电压与占空比成正比
低通滤波器滤除高频PWM载波,保留低频分量
输出信号即为与PWM占空比成正比的模拟电压
数学表达式:Vout = D × Vcc
其中D为占空比(0≤D≤1),Vcc为PWM高电平电压
简单的实现方案:
PWM信号 → 电阻R → 电容C → 输出模拟量 │ GND
参数选择原则:
截止频率 fc = 1/(2πRC) 应远小于PWM频率
通常选择 fc ≤ PWM频率/10
例如:PWM=1kHz,可选R=10kΩ,C=10μF(fc≈1.6Hz)
使用运放提高性能:
PWM信号 → 电阻R1 → 运放(-)输入端 │ 电阻R2 → 输出 │ 电容C → GND
优点:
输出阻抗低,驱动能力强
可调节增益
滤波特性更陡峭
如LTC2645、MCP4725等,特点:
集成度高,使用简单
分辨率高(12-16位)
输出稳定,纹波小
支持I2C/SPI配置
对于微控制器系统,可通过软件滤波实现:
#define ALPHA 0.01 // 滤波系数(0<ALPHA<1) float analog_out = 0; void update_PWM_to_Analog(float pwm_duty) { analog_out = ALPHA * pwm_duty + (1-ALPHA) * analog_out; }
特点:
无需额外硬件
可灵活调整滤波参数
占用CPU资源
增加滤波器阶数(如二阶滤波)
提高PWM频率
增大滤波电容
截止频率不宜过低
权衡响应速度与纹波
动态调整滤波参数
提高PWM分辨率(16位优于8位)
使用精密参考电压
降低系统噪声
Arduino PWM引脚 → 1kΩ电阻 → 10μF电容 → 输出 │ GND
PWM → 10kΩ → LM358(-) │ │ 4.7μF 10kΩ → 输出 │ │ GND GND
用示波器观察:
PWM输入信号(确认频率和占空比)
滤波器输出(检查纹波和稳定性)
测量指标:
稳态误差
阶跃响应时间
输出纹波电压
常见问题解决:
输出波动大 → 增大电容或降低截止频率
响应慢 → 减小电容或提高截止频率
输出不准 → 检查参考电压和电阻精度
对于高精度需求,可采用Σ-Δ调制:
将PWM信号通过Σ-Δ调制器
配合高阶数字滤波器
可实现16位以上分辨率
典型芯片:ADuC7026、MAX1402等
PWM转模拟量是嵌入式系统中常见的信号转换需求,工程师可根据应用场景选择:
简单应用:RC滤波电路
中等要求:有源滤波器
高精度需求:专用PWM-DAC芯片
纯软件方案:数字滤波算法
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。