|
有一个项目需要输出一个0到3.3V的模拟电压,精度要求不太高,1%以内就可以。手头没有DAC,就用PWM加RC滤波做了一个简易的DAC。 PWM频率选的是10kHz,RC滤波的截止频率选在1kHz左右,算下来电阻10K,电容0.1uF。理论上纹波应该很小,实际测出来却有二三十毫伏的纹波。 用示波器看PWM输出引脚,波形很标准,方波上升沿下降沿都很陡。但是经过RC滤波之后的波形纹波确实大了。一开始怀疑是电容的ESR太大,换了一个钽电容,纹波小了一点但还是有。 后来发现,纹波的频率等于PWM频率,但是幅度跟PWM的占空比有关系。占空比在50%附近的时候纹波最大,0%和100%的时候纹波最小。这是因为RC滤波对脉宽调制信号的响应是有限的,占空比变化时电容充放电的时间常数固定,纹波幅度跟脉宽有关。 解决方法是提高PWM频率。把PWM频率从10kHz提高到了100kHz,RC滤波截止频率不变,纹波幅度大概降低了10倍。但是PWM频率太高了也不行,MCU的定时器会消耗更多资源,而且如果后面的负载是模拟输入,频率太高了可能会耦合到其他地方。 另一个改进是加了二级RC滤波。两个RC串联,截止频率更低,纹波进一步减小。代价是响应速度变慢了,输出稳定需要的时间变长了。 还有一个细节,PWM输出引脚的驱动能力有限,直接接RC滤波会影响输出电平的准确性。在PWM引脚和RC滤波之间加了一个缓冲器,隔离了负载对PWM输出电平的影响。 用PWM做DAC成本低实现简单,适合精度要求不高的场合。如果要求高还是得用专用的DAC芯片,示波器看波形的时候就知道了。
|