第二讲:模拟音频路由——模拟信号特性、模拟交叉点开关、模拟路由器的设计与实现

各位同学,欢迎来到第二讲。

上一讲我们聊了音频路由的整体框架。今天,咱们扎进模拟域,看看最“原汁原味”的音频信号是怎么被搬来搬去的。

模拟音频路由,说白了就是直接操作电压信号。没有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布局,比数字电路讲究得多。

  1. 地线分割:模拟地和数字地要分开,最后单点连接。我一般用0Ω电阻或者磁珠连接。
  2. 信号走线:模拟信号线要短,要直,不要走直角。差分信号要等长。
  3. 电源去耦:每个芯片的电源引脚都要去耦,而且去耦电容要靠近引脚。
  4. 屏蔽:敏感信号线之间要加地线隔离。我习惯在两层板之间加一个完整的接地层。

你想想看,一个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,写对控制代码。

下一讲,我们会进入数字音频路由的世界。那里有更灵活的矩阵,但也有更复杂的时序问题。咱们到时候再聊。

可可精品资料库