3、硬件原理图设计实战:WM8960外围电路设计
好了,到了真正动手画原理图的环节了。很多同学拿到WM8960的数据手册,一看一百多页,头就大了。其实核心的外围电路就四大块:电源、时钟、模拟输入/输出、数字接口。把这四块理清楚,剩下的就是连线活。
我个人习惯,画任何Codec的原理图之前,先画一张系统级电源树。为什么?因为WM8960是个混合信号芯片,数字和模拟供电一旦串扰,底噪直接起飞。我早期一个项目就吃过这个亏,数字地和模拟地没处理好,录音全是“滋滋”声,后来重新改板才解决。
3.1 电源设计:模拟与数字的“楚河汉界”
WM8960有三组电源引脚:AVDD(模拟供电)、DVDD(数字供电)、SPKVDD(扬声器供电)。这三者绝对不能混为一谈。
| 电源域 | 典型电压 | 主要负载 | 纹波要求 |
|---|---|---|---|
| AVDD | 3.3V | ADC、DAC、模拟混音器 | < 50mVpp |
| DVDD | 1.8V 或 3.3V | 数字核心、I2S接口 | < 100mVpp |
| SPKVDD | 5V | 扬声器功放(D类) | < 200mVpp(但电流大) |
具体到原理图,我建议这样做:
- AVDD:选用低噪声LDO(如TPS7A20xx系列),输出端串联一个磁珠(600Ω@100MHz)再进芯片,磁珠后面放10uF钽电容+0.1uF陶瓷电容。
- DVDD:如果SoC那边有现成的1.8V或3.3V,可以直接拉过来用,但要加个LC滤波隔离一下。
- SPKVDD:这个电流大(驱动8Ω喇叭时峰值可达1A以上),建议直接从系统电源轨取电,走线宽度至少40mil。
- 地平面:模拟地和数字地在芯片下方单点连接,用0Ω电阻或磁珠跨接。别搞成大面积分割,否则回流路径会绕远路。
3.2 时钟设计:MCLK是音频的“心跳”
WM8960需要外部提供MCLK(主时钟)。这个时钟的质量直接决定了音频的THD+N(总谐波失真+噪声)。你想想看,如果MCLK抖动大,ADC采样时刻就不准,还原出来的声音能不“糊”吗?
MCLK的频率通常是采样率的整数倍:
- 采样率 48kHz → MCLK = 12.288MHz(256×fs)
- 采样率 44.1kHz → MCLK = 11.2896MHz(256×fs)
- 采样率 96kHz → MCLK = 24.576MHz(256×fs)
时钟走线的注意事项:
- MCLK走线要短而直,远离开关电源、DC-DC电感。
- 串接一个22Ω~33Ω的电阻靠近WM8960的MCLK引脚,用于抑制过冲和反射。
- 如果MCLK走线超过2英寸,建议做包地处理,两侧打地过孔。
3.3 模拟输入/输出:差分还是单端?
WM8960的模拟输入支持差分和单端两种模式。差分输入的共模抑制比(CMRR)更好,抗干扰能力强。但很多实际产品(比如对讲机、录音笔)用的是单端麦克风,这时候就得注意偏置电压了。
3.3.1 麦克风输入(单端)
单端麦克风输入,WM8960内部有可编程的MICBIAS(麦克风偏置电压),默认输出2.2V。外部电路很简单:
MICBIAS --> 2.2kΩ电阻 --> MIC+(电容耦合)
MIC-(通过0.1uF电容接地)
这里有个细节:MICBIAS的输出电流有限(最大3mA),如果接的是驻极体麦克风,2.2kΩ偏置电阻就够了。如果是数字硅麦,别用这个,得外部单独供电。
3.3.2 线路输入(差分)
差分输入我一般用于LINE_IN,比如从外部音源(手机、电脑)输入音频。电路如下:
LINE_IN_L+ --> 1uF耦合电容 --> WM8960 IN1L
LINE_IN_L- --> 1uF耦合电容 --> WM8960 IN1R(配置为反相输入)
差分输入的好处是,如果LINE_IN线缆比较长,共模噪声会被抵消掉。我在做车载音频项目时,差分输入帮了大忙——车内的电磁环境太恶劣了,单端根本扛不住。
3.3.3 耳机输出
WM8960的耳机输出是电容耦合的,需要外接220uF~470uF的电解电容。这个电容不能省,否则直流偏置会烧耳机。
3.4 数字接口:I2S + I2C,两条“高速公路”
WM8960的数字接口分两条路:
- I2S:传输音频数据(PCM码流)
- I2C:传输控制命令(音量、EQ、路由配置)
3.4.1 I2S接口连接
I2S有四根线:
| 信号 | 方向 | 说明 |
|---|---|---|
| MCLK | SoC → WM8960 | 主时钟,256×fs或384×fs |
| BCLK | SoC → WM8960 | 位时钟,64×fs |
| LRCK | SoC → WM8960 | 帧时钟,等于采样率fs |
| DIN | SoC → WM8960 | 音频数据输入(播放) |
| DOUT | WM8960 → SoC | 音频数据输出(录音) |
连接时,SoC作为I2S Master,WM8960作为Slave。SoC提供BCLK和LRCK,WM8960根据这两个时钟同步收发数据。
3.4.2 I2C接口连接
I2C就两根线:SCL(时钟)和SDA(数据)。WM8960的I2C地址是0x1A(7位地址),如果ADDR引脚拉高,地址变成0x1B。
硬件上注意:
- SCL和SDA必须接上拉电阻,典型值4.7kΩ。
- 走线长度尽量一致,避免信号歪斜。
- 如果I2C总线上挂了多个设备,总负载电容不要超过400pF,否则通信会出错。
3.5 与主控SoC的连接要点
最后说说WM8960和SoC怎么连。以我常用的全志V3s为例:
SoC (V3s) WM8960
----------------- -----------------
I2S0_MCLK (PB2) ---> MCLK
I2S0_BCLK (PB3) ---> BCLK
I2S0_LRCK (PB4) ---> LRCK
I2S0_DIN (PB5) ---> DIN
I2S0_DOUT (PB6) ---> DOUT
I2C0_SCL (PA12) ---> SCL
I2C0_SDA (PA11) ---> SDA
GPIO (任意) ---> nRST (复位引脚,低电平复位)
这里有几个要点:
- 复位引脚:WM8960的nRST必须由SoC的GPIO控制,不能直接接VCC。否则上电时序不对,I2C可能无法初始化。
- 电平匹配:如果SoC是3.3V,WM8960也是3.3V,直接连没问题。如果SoC是1.8V,需要加电平转换芯片(如TXS0102)。
- 电源上电顺序:先给DVDD上电,再给AVDD上电。如果反过来,芯片内部可能会锁死。我习惯在DVDD和AVDD的LDO使能引脚上加RC延时,确保DVDD先起来。
好了,原理图设计这部分就讲到这里。核心就是记住:电源隔离、时钟干净、模拟差分、数字匹配。把这四点做到位,WM8960的硬件设计基本不会出大问题。