第二讲:模拟音频路由——模拟信号特性、模拟交叉点开关、模拟路由器的设计与实现
各位同学,欢迎来到第二讲。
上一讲我们聊了音频路由的整体框架。今天,咱们扎进模拟域,看看最“原汁原味”的音频信号是怎么被搬来搬去的。
模拟音频路由,说白了就是直接操作电压信号。没有AD/DA,没有数字延迟。你想想看,这活儿其实挺纯粹的,但也挺“脏”的——因为模拟信号太容易受干扰了。
2.1 模拟信号特性:你得先懂它的脾气
做模拟路由设计,第一件事不是画原理图,而是理解信号本身。
模拟音频信号,本质上是一个随时间变化的电压。它的频率范围,人耳能听到的大约是20Hz到20kHz。但实际工程中,我通常会把带宽留到10Hz到100kHz,为什么?因为很多设备会产生次声波或超声波噪声,你不处理它,它就会在路由过程中捣乱。
关键参数:
- 阻抗匹配:输出阻抗要低,输入阻抗要高。这是铁律。我见过太多人把600Ω的麦克风直接怼到10kΩ的输入上,结果信号衰减得一塌糊涂。
- 信噪比(SNR):模拟路由每经过一级,噪声就会叠加。所以,每一级的SNR都要做到100dB以上,否则多级串联后底噪会吓死人。
- 共模抑制比(CMRR):差分信号传输时,这个参数决定了你能抑制多少共模干扰。我建议至少做到60dB以上。
我记得有一次,一个客户说他的调音台有“嗡嗡”声。我过去一看,接地环路问题。模拟路由里,地线处理不好,什么高级芯片都白搭。
2.2 模拟交叉点开关:核心元件
模拟交叉点开关,就是路由矩阵里的“开关阵列”。它负责把任意一路输入,切换到任意一路输出。
市面上常见的芯片,比如ADI的ADG系列、Maxim的MAX系列,内部都是CMOS传输门结构。你想想看,一个传输门就是一个NMOS加一个PMOS并联,导通时电阻很小,断开时电阻很大。
选型要点:
- 导通电阻(Ron):越小越好,一般要求小于10Ω。我习惯选5Ω以下的,否则信号衰减明显。
- 通道隔离度(Crosstalk):相邻通道之间的串扰,至少要做到-80dB@1kHz。否则你听A路,B路的声音会偷偷溜进来。
- 带宽:至少要覆盖音频范围,我一般选带宽在100MHz以上的芯片,这样信号相位失真小。
举个例子,ADG1606是一款16通道的模拟多路复用器。它的导通电阻只有4.5Ω,隔离度在-85dB左右。我在一个32x32的路由矩阵里用过它,效果不错。
// 伪代码:控制ADG1606切换通道
// 假设使用SPI接口
void set_audio_route(uint8_t input_ch, uint8_t output_ch) {
// 选择对应的交叉点芯片
select_chip(output_ch / 16);
// 发送通道地址
spi_write(0x00 | (input_ch & 0x0F));
// 锁存数据
latch_data();
}
嗯,这里要注意:模拟开关的电源去耦一定要做好。我见过有人直接在芯片旁边放一个100nF电容就完事了,结果高频噪声全串进来了。我建议每个电源引脚放一个10μF钽电容加一个100nF陶瓷电容,靠近引脚放置。
2.3 模拟路由器的设计与实现
好了,元件选好了,咱们开始搭系统。
2.3.1 架构设计
一个典型的模拟路由器,由三部分组成:输入缓冲、交叉点矩阵、输出缓冲。
- 输入缓冲:高输入阻抗,低输出阻抗。我常用OPA1612或者NE5532。注意,输入缓冲要提供偏置电压,防止信号削波。
- 交叉点矩阵:由多个模拟开关芯片组成。比如一个8x8的矩阵,可以用8片8选1的模拟开关,或者用一片专用的交叉点芯片。
- 输出缓冲:重建信号驱动能力。输出阻抗要低,一般小于50Ω,这样才能驱动长距离的音频线缆。
避坑指南:
我曾经在一个项目中,把输入缓冲和交叉点矩阵直接连在一起,结果发现信号有直流偏移。查了半天,原来是输入缓冲的输出电容漏电。从那以后,我习惯在每一级之间加一个隔直电容,至少10μF以上。
2.3.2 PCB布局要点
模拟路由的PCB布局,比数字电路讲究得多。
- 地线分割:模拟地和数字地要分开,最后单点连接。我一般用0Ω电阻或者磁珠连接。
- 信号走线:模拟信号线要短,要直,不要走直角。差分信号要等长。
- 电源去耦:每个芯片的电源引脚都要去耦,而且去耦电容要靠近引脚。
- 屏蔽:敏感信号线之间要加地线隔离。我习惯在两层板之间加一个完整的接地层。
你想想看,一个32x32的模拟路由器,板上可能有上百条模拟信号线。如果不注意布局,串扰和噪声会让你崩溃。
2.3.3 控制接口
模拟路由器通常需要MCU来控制。控制接口可以是SPI、I2C或者并行总线。
我个人习惯用SPI,因为它速度快,而且引脚少。但要注意,SPI的时钟频率不能太高,否则会耦合到模拟信号上。我一般把SPI时钟限制在10MHz以下,并且用屏蔽线连接。
// 示例:初始化模拟路由器
void audio_router_init(void) {
// 配置GPIO
gpio_set_mode(SPI_CS_PIN, GPIO_OUTPUT);
gpio_set_mode(SPI_SCK_PIN, GPIO_OUTPUT);
gpio_set_mode(SPI_MOSI_PIN, GPIO_OUTPUT);
// 初始化SPI
spi_init(SPI1, 1000000); // 1MHz时钟
spi_set_mode(SPI1, SPI_MODE_0);
// 复位所有交叉点
gpio_write(SPI_CS_PIN, 0);
spi_write(SPI1, 0xFF); // 发送复位命令
gpio_write(SPI_CS_PIN, 1);
// 设置默认路由:所有输入直通到输出
for (int i = 0; i < 32; i++) {
set_audio_route(i, i);
}
}
2.4 实战案例:一个16x16模拟音频路由器
好了,理论讲完了,咱们看一个实际案例。
我曾经设计过一个16x16的模拟音频路由器,用于一个中型录音棚的监听系统。
| 模块 | 型号 | 数量 | 备注 |
|---|---|---|---|
| 输入缓冲 | OPA1612 | 16 | 双运放,每个通道一个 |
| 交叉点矩阵 | ADG1606 | 16 | 16选1,共16片 |
| 输出缓冲 | NE5532 | 16 | 双运放,每个通道一个 |
| MCU | STM32F103 | 1 | 控制核心 |
| 电源 | ±15V / 5V | 1 | 模拟±15V,数字5V |
这个设计的关键点在于:
- 输入缓冲用了OPA1612,它的噪声极低,只有1.1nV/√Hz。
- 交叉点矩阵用了16片ADG1606,每片负责一个输出通道的16选1。
- 输出缓冲用了NE5532,虽然噪声比OPA1612大一点,但驱动能力强,适合长距离传输。
实际测试下来,这个路由器的THD+N做到了0.002%以下,串扰低于-90dB。嗯,这个指标在模拟路由里算是不错的了。
总结一下:
模拟音频路由,核心就是处理好信号完整性。阻抗匹配、噪声抑制、地线处理,这三样做好了,你的路由器就成功了一大半。剩下的,就是选好芯片,画好PCB,写对控制代码。
下一讲,我们会进入数字音频路由的世界。那里有更灵活的矩阵,但也有更复杂的时序问题。咱们到时候再聊。
可可精品资料库