项目场景:
很多MCU内部没有DAC,但是芯片应用在需要DAC的场景,此时需要用PWM波模拟DAC输出。
有一路PWM和多路PWM波实现方式,取决于项目要求以及MCU性能
单路PWM波:MCU主频相对较高,项目对DAC精度要求低。
多路PWM波,MCU主频相对较低,项目对DAC精度要求高。
问题描述
使用单路PWM输出时,有噪音输出。输出结构如下:
PWM波 -> RC滤波电路 -> 功放芯片/8002 -> 喇叭
PWM波:一路PWM,由一个8位定时器产生,频率在64K
RC滤波电路:使用三阶RC滤波,其中R1C1=R2C2=R3C3=RC,所以截止频率
功放芯片:使用8002
喇叭:8欧1W
原因分析:
噪声来源一:定时器输出频率波动
噪声来源二:功放输出不稳定
噪声来源三:滤波电路对PWM波处理有杂波
如果直接输出一段音频,有噪音的出现,此时无法很好的定位问题来源是哪一点。
这里采用一些方法来排除一些噪声源。
(1)输出正弦波,通过示波器观察RC滤波后的波形,分析滤波电路对PWM波处理有杂波
PWM数据;
示波器显示:
RC滤波后:
可以看出RC滤波后正弦波是正常的,稍微有点变形,但是并无异形和封底顶。
(2)输出基准电平(50%的占空比方波),分析定时器输出频率波动和功放输出问题
2.1查看语音wav转的bin文件,索引信息后数据都是0x80.
2.2烧录文件和程序后,测量PWM输出,波形如下图,是正常的。此时喇叭周期性的有噪音输出。功放使能和PWM波同时输出。
2.3 保持功放使能,循环播放语音。此时喇叭周期性的有噪音输出。
检查发现采用FIFO方式在定时器里面读出并更新PWM,由于FIFO读出时间不稳定导致更新PWM波的频率有波动,从而产生噪音。
解决方法:把FIFO读出数据放到外面,提前准备好,修改后喇叭周期性的噪音没有了。
进一步测试发现上电时有一点噪音输出。
2.4分析上电瞬间有噪音输出
原因分析可能是PWM刚开始输出的跳变或者功放刚上电不稳定输出导致。
进一步测试:
1.上电后先输出PWM波5s后打开功放使能,此时功放使能瞬间有一个噪声
2.上电后先打开功放使能5s后输出PWM波,此时有两个噪声,刚上电时以及5s后输出PWM时。
通过波形和结果可以分析出:上电噪声有两个原因
A.功放使能时功放内部输出的噪声。
B.PWM波刚输出时产生一个跳变信号,从而产生的噪声。
功放的上电噪音可以在输出端加入滤波电容进行消除,因为这个和具体的功放有关系,可能有些功放没有上电噪音,没有进一步测试。
解决方案:
1.同过正弦波调整RC滤波,使得波形尽量如同正弦波
2.使用时先输出PWM波后在开功能使能,这样只有一个功放使能时内部噪声。