资讯动态

GC1843实战:24bit差分ADC的音频采集电路设计与调板坑

发布时间:2026/10/9 3:42:37 来源:尧图企业网站定制
拿到GC1843这颗料第一反应是终于有国产芯片愿意把精力放在这种“看起来冷门但实际很刚需”的位置上了24bit分辨率、立体声、差分输入还做成超小封装。做嵌入式音频采集的朋友应该都懂MCU内置ADC做到12bit、16bit就已经算不错了真要拿来采集环境噪声、振动信号或者做高保真录音前端量化噪声先糊你一脸。而独立ADC芯片这类产品常见的不是通道数不够就是封装大到没法塞进紧凑的PCB。GC1843这种定位其实就是给“要精度、要体积、要省事”的音频采集方案准备的。这篇就围绕GC1843来写讲讲这类24bit立体声差分输入ADC芯片的选型思路、前端电路设计、PCB布局经验、I2S驱动配置以及实际调板中高频翻车的几个坑。无论你是做音频产品、工业监测还是仪器仪表的嵌入式工程师内容都可以直接往下套。1. GC1843定位解析24bit、差分、小封装到底解决了什么1.1 24bit不是噱头分辨率直接决定你能听到多小的信号先说24bit的意义。ADC的量化信噪比理论上限有一个经典公式SNR 6.02N 1.76dB其中N是位数。16bit理论极限大约是96dB24bit直接拉到144dB左右。当然实际芯片受热噪声、时钟抖动和参考源噪声限制做不到理论值但即便实打实做到100~120dB也比16bit内置ADC强了一个量级之多。这意味着什么假设你采集一段环境背景噪声幅度只有满量程的千分之一16bit ADC可能只剩几个LSB在跳动波形看起来就是离散的台阶换到24bit同样信号还能有十几到几十个有效码值后面做FFT或者时域分析就有意义了。GC1843这类芯片做音频采集的核心价值就在这里不是为了“听起来更响”而是为了“小信号也能被记录”。1.2 差分输入是抗干扰的底层逻辑差分输入可能是这块芯片最容易被低估的特性。单端输入的ADC信号参考的是GND地线上的任何噪声都会直接叠到信号上。而差分输入采集的是正负两端之差只要两根线受到的干扰是共模的比如空间耦合、地弹、电源纹波都会被后端的差分放大器抵消掉。用公式理解更直观差分输入等效Vo Ad·(Vin - Vin-) Ac·VcmAd是差模增益Ac是共模增益。CMRR越高意味着Ac越小Vcm这部分干扰对输出的影响就越弱。GC1843做差分输入配合良好的PCB布局在麦克风线缆较长或者板上有DCDC开关电源的时候能明显少很多莫名的底噪。1.3 超小封装的代价与收益超小封装对产品设计的价值很直接TWS耳机、笔电主板、微型麦克风阵列、便携声学设备板上空间寸土寸金能塞下一颗24bit ADC本身就是优势。但这部分收益不是白拿的小封装引脚间距小焊接和PCB走线容错率低去耦电容必须贴着电源引脚放模拟走线也别指望靠“绕线”来弥补布局失误。第三章我会专门展开这部分实操细节。2. 选型与方案设计哪些项目真正需要GC1843这种芯片2.1 核心适用场景声学测量、振动分析和高质量音频前端拿我实际经验来说外置高精度ADC最适合的场景有三类第一类是环境声学监测。采集声压级、噪声频谱要求动态范围大弱信号不能丢。24bit配合数字滤波做A计权比传统声级计里那种模拟电路方案简单不少。第二类是工业振动与超声检测。传感器输出往往是微小差分信号比如压电加速度计输出阻抗高、幅度小这种正好是差分输入ADC用武之地。直接用GC1843差分输入端接传感器前端调理电路共模抑制效果比单端方案好很多。第三类是高端录音和语音增强前端。会议麦克风阵列、录音笔、智能音箱的远场拾音需要同时采集多路信号并保留足够的余量24bit能让后处理时不怕增益拉高。2.2 与MCU内置ADC和音频Codec的差异很多人会问STM32内置ADC不是也能采音频吗能采和采得好是两回事。内置ADC通常是12bit采样率做高了精度还会掉更关键的是内部参考电压噪声、通道串扰、采样保持电容充放电误差这些因素让它不适合高质量音频路径。还要区分一下音频Codec和纯ADC。Codec比如ES8388、WM8960这类集成了ADC和DAC适合音频播放加录音的双向应用。而GC1843是纯ADC没有DAC好处是专注于采集路径结集成度上和成本上更贴合“只做采集”的产品。方案设计时先想清楚你的系统需不需要回放如果不需要纯ADC往往性价比更高也不会为用不上的DAC部分付出成本和面积。2.3 后端接口选型I2S、TDM还是PDM选外置ADC接口方式决定MCU端的复杂度。GC1843这类芯片通常提供I2S或TDM输出这两种都是音频领域最常用的数字接口。I2S可以理解成一辆双车道的小路左右声道各占一个slotTDM则是多车道大路一条线上可以挂多个通道的数据适合麦克风阵列多路采集。PDM接口常见于数字MEMS麦克风1bit调制输出由MCU端做抽取滤波。GC1843不是PDM输出它是真正的多bit转换结果所以MCU侧拿到数据之后不需要做复杂的抽取滤波直接进入后续DSP流程即可。这意味着对MCU算力要求低也更容易做到确定性采样。你要做的就是把MCU的I2S外设配成接收模式配好slot宽度和位深和GC1843对齐。3. 前端电路与PCB布局差分输入ADC最容易翻车的几个地方3.1 差分输入前端电路设计单端信号怎么转差分GC1843是差分输入端但很多传感器输出的是单端信号。这时候不能直接把信号接一路、GND接另一路因为这样GND噪声会直接进入“负端”等于把共模干扰变成差模干扰跟单端输入没区别了。正确做法是先把单端信号通过运放做一级缓冲然后分别得到正相信号和一个稳定参考电平再接到ADC的差分输入端。参考电平通常取信号源的偏置中点保证差分输入对处于手册规定的共模输入范围内。如果传感器本身就是差分输出比如某些驻极体麦克风或者压电传感器那可以直接接入但要保证两根线的直流偏置一致。缓冲区运放选型注意两点噪声密度要低比如低于10 nV/√Hz带宽要足够按信号最高频率的三到五倍选。否则运放本身就成了系统底噪的主要来源。常见做法是选OPA1612、AD8599这类低噪声音频运放如果成本敏感国产的GS8552、SGM8522也能用关键看噪声指标和驱动能力。3.2 模拟电源和基准电压处理别让DCDC纹波直接进ADCADC的电源纹波会直接影响采样结果的信噪比。GC1843这类高精度ADC虽有一定电源抑制比但别指望它能完全抵抗恶劣供电。推荐供电结构是数字电源DVDD和模拟电源AVDD分开走AVDD由低噪声LDO供电LDO前端再串磁珠和电容形成π型滤波。基准电压的退耦电容要离芯片引脚越近越好通常用1μF X7R并联0.1μF C0G高频低频都覆盖。如果芯片有VREF引脚这个电容的位置优先级高于一切。我踩过的坑是基准退耦电容放在过孔远端结果底噪硬是高了3dB把电容挪到引脚旁边立刻就好了。3.3 超小封装的PCB布局与焊接经验超小封装意味着焊盘间距很小布局上要注意几个细节第一差分信号线必须紧耦合走线。两根线尽量等长、同层、间距保持恒定不要让它们分开绕过障碍物否则两条线的寄生电容不对称共模抑制性能直接打折。第二ADC下方的模拟地要完整不要被数字走线穿越。第三晶体和MCLK相关走线尽量远离模拟输入脚时钟谐波一旦耦合进去就是固定的频谱尖峰。焊接方面小封装芯片建议用钢网加回流焊手工烙铁非常容易连锡。如果只是打样调试最好让工厂贴片后再手工检查实在要手工焊用合适的助焊剂配合拖焊结束后一定要用放大镜检查引脚间是否有锡丝残留。另外散热焊盘的处理要看手册有的封装底部焊盘要接地增强散热有的只做机械固定这个别想当然。4. 驱动配置与数据采集采样率、I2S时序与C语言滤波实战4.1 参考设计初始化流程先复位再配采样率最后使能通道拿到GC1843评估板第一步不要急着写复杂驱动先把I2C控制通路打通读取芯片ID确认通信没问题然后按“复位、配置采样率、配置通道、启动转换”的顺序初始化。具体寄存器配置因芯片版本而异但通用流程是固定的对芯片软复位寄存器写复位命令等待至少10ms。配置采样率相关寄存器。音频领域常用48kHz和96kHz如果做声学测量可能用到192kHz。采样率越高数据量越大但对时钟精度要求也在提升。配置通道使能、输入增益、数据输出格式。启动ADC转换在主控侧等待数据有效信号。采样率配置的本质是控制芯片内部抽取滤波器的分频关系。通常芯片会根据你选择的采样率自动设置数字滤波器截止频率所以不要乱动那些“看起来差不多”的滤波器配置寄存器除非你完全清楚自己在做什么。4.2 I2S时序对接MCLK、BCLK、LRCLK和数据槽位I2S接口有四根关键线MCLK主时钟、BCLK位时钟、LRCLK左右声道帧时钟、以及数据线SD。GC1843作为从机或主机取决于你的系统设计典型应用是MCU作为主机提供MCLK和BCLK。常用关系是MCLK 256 × fs 或 512 × fsBCLK 64 × fs。以48kHz采样率为例MCLK 12.288MHzBCLK 3.072MHzLRCLK 48kHz。左右声道数据分别在LRCLK高低电平内传输每个声道用了32个BCLK周期。24bit有效数据在32bit slot内通常左对齐还是右对齐要看芯片手册配置常见是MSB-first左对齐。MCU侧对接时务必确认I2S的data size、slot size和主从模式一致。STM32HAL里配置I2S外设时常常有人只改了AudioFrequency就以为完事了实际上slot大小和数据位深的组合错误会导致声音一大一小、左右错位甚至全是噪声。这里给一段STM32 HAL库配置I2S接收的概念代码用来示意正确的配置顺序// 假设MCU作为I2S主机GC1843接收BCLK和LRCLK hi2s.Init.AudioFrequency 48000; // 采样率 48kHz hi2s.Init.Standard I2S_STANDARD_PHILIPS; // I2S Philips格式 hi2s.Init.DataFormat I2S_DATAFORMAT_24B; // 24bit数据 hi2s.Init.Mode I2S_MODE_MASTER_RX; // 主机接收模式 hi2s.Init.ClockSource I2S_CLOCK_PLL; hi2s.Init.FrameFormat I2S_FRAMEFORMAT_16B; // 32bit slot两个16bit帧拼一个32bit slot if (HAL_I2S_Init(hi2s) ! HAL_OK) { Error_Handler(); }注意FrameFormat字段在不同系列单片机上含义有细微差别有的直接配置为I2S_FRAMEFORMAT_32B有的需要把DMA或者SAI的slot size单独设置。总之对着参考手册确认最终BCLK频率是不是64×fs即可。4.3 C语言ADC滤波处理移动平均与高通滤波的取舍MCU拿到24bit数据后第一步通常是处理直流偏置。GC1843采用差分输入理论输出应为零附近的交流信号但实际电路中的失调、运放偏置、PCB寄生电荷都会引入直流分量。做声学分析时直流分量会拉偏FFT结果必须先滤掉。最简单的直流滤除是一阶IIR高通滤波器C代码就几行typedef struct { float alpha; float x_last; float y_last; } highpass_state; float highpass_process(highpass_state *st, float x) { float y st-alpha * (st-y_last x - st-x_last); st-x_last x; st-y_last y; return y; }alpha取值和截止频率的关系近似为alpha 1 / (1 2π×f_c/fs)。做音频采集时f_c取10~20Hz就够太高会吃掉低频信号本身。这个滤波器计算量极小在MCU上实时跑毫无压力比移动平均滤波的相位特性也好得多。如果要做滑动平均平滑短时抖动可以用一个环形缓冲区但对24bit高精度数据来说滑动平均的主要副作用是引入零点且窗口越长信号衰减越多用于音频场景我个人不太推荐。真正需要平滑时优先考虑移动指数平均EMA权重衰减更自然。4.4 采样率和数据量估算别让存储和传输成为瓶颈24bit × 2通道 × 48kHz每秒数据量就是 48000 × 3字节 × 2 288KB/s一小时约1GB。如果你跑96kHz或192kHz数据量还要翻倍。这个数字对调试阶段的串口、SD卡写入、Wi-Fi传输都是实实在在的压力。低成本MCU存高采样率数据时建议用DMA双缓冲加乒乓切换保证数据持续写入而不丢帧如果通过串口传输要校验缓冲区是否溢出不要把usart发送阻塞放在DMA中断里。实际上我在做96kHz采集时经常先用SD卡或SPI Flash把原始数据落盘再把文件拷出来分析。这个流程比边采边传稳定得多。5. 常见问题与排查实录底噪、错位、时钟三大高频翻车现场5.1 底噪偏高先量电源再看布局最后检查配置底噪是24bit ADC调试里最常见的抱怨。排查顺序要固定不要一上来就调增益或换滤波器。第一步把模拟输入端短路到共模电平看看数据输出的噪声底线是多少。如果基线噪声已经高于预期问题几乎肯定在电源、参考电压或者PCB布局而不是信号源。第二步用示波器测AVDD和DVDD的纹波重点看开关频率附近的尖峰常见的Buck DCDC纹波会表现为频谱上固定频率的窄带噪声。第三步检查PCB上数字信号线是否和模拟输入线平行走了一段距离特别是I2S的BCLK和数据线它们翻转频率高容易通过耦合把方波谐波带进模拟通路。如果基线噪声正常接上传感器后底噪变大那要查前端运放的增益设置和偏置是否合理。增益越高运放噪声也跟着放大但这个放大比例是固定的如果底噪增长幅度明显超过信号增益多半是共模电压没设置对。5.2 左右声道数据错位或丢失I2S的左右声道错位多数是LRCLK和数据时序没对齐导致的。排查时先用示波器看LRCLK、BCLK、SD三根线的相对关系I2S Philips标准下SD数据在LRCLK跳变后的第一个BCLK上升沿开始传输左声道右声道则在LRCLK再次跳变后开始。如果芯片手册说数据是延迟一个BCLK才输出的而MCU配置成不延迟模式那左右声道就会错位。还有一种是DMA把数据拆成了两半导致buf里前一半全是左声道、后一半全是右声道。这种通常不是芯片问题而是DMA配置的buffer size和I2S slot size没匹配。建议在主控里用一个简单的“计数法”验证让GC1843输出正弦波检查左右声道数据是否严格相位差半个帧周期或者用一个已知单声道信号源左右声道数据应该完全相同。5.3 采样率不稳定MCLK抖动比BCLK抖动更致命很多MCU内部PLL生成MCLK时锁相环的抖动偏大导致ADC的抽取滤波器参考时钟不稳定最终表现是采样数据里出现“随机脉冲噪声”或者频谱底噪抬高。解决手段按优先级排第一MCLK直接由有源晶振或TCXO提供不用MCU的PLL第二如果必须由MCU生成硬件上给MCLK加一级缓冲器或RC滤波隔离开数字芯片的高频噪声第三检查MCU的PLL配置确保时钟源不是从USB、以太网等共享PLL拉的。实操中我最省心的方案是外接12.288MHz有源晶振一部到位把MCLK做干净。5.4 输出全是满码或全零先检查输入是否超出满量程24bit满码输出0x7FFFFF或负满码0x800000通常意味着ADC输入端电压超出了满量程范围。差分输入ADC满量程可能只有几伏甚至更小前置运放输出稍微偏一点就容易削顶。排查时先用万用表测量ADC VIN和VIN-对地电压确认它们处于手册规定的共模输入范围和绝对最大额定值以内。然后算一下前端增益是否设置过高比如传感器输出±0.5V你却用5倍增益放大到±2.5V而ADC满量程只有±1.25V那就必然满码削顶。这种情况调整运放增益电阻或者用ADC内部PGA降增益即可。5.5 快速问题排查速查表现象可能原因排查方向底噪整体偏高电源纹波、基准退耦不到位、布局耦合短路输入测基线噪声检查AVDD纹波特定频率出现尖峰数字信号串扰、DCDC开关频率检查I2S走线间距用频谱仪定位频率左右声道错位LRCLK对齐配置错误、DMA缓冲不匹配示波器量时序用正弦波做通道一致性测试输出削顶满码输入超满量程、增益过大量VIN / VIN-电压计算前端增益数据偶尔跳变MCLK抖动、PLL配置不当换外部有源晶振检查PLL分频比无输出数据芯片未启动、I2S主从模式不匹配读芯片状态寄存器确认BCLK/LRCLK波形6. 实际调试中值得再啰嗦几句的经验GC1843这类24bit差分ADC用顺手之后和之前用12bit内置ADC的体验完全不一样。最大的感受是高精度ADC把“干扰问题”从MCU端转移到了前端模拟设计端你的精力要花在电源、布局、时钟上而不是在MCU里靠软件算法去“救”信号质量。软件滤波只能修正系统自身的直流偏移和轻微噪声救不了一个被DCDC开关噪声污染的模拟前端。另一个体会是调试高精度音频ADC千万不要追求所有寄存器配置一步到位。先固定48kHz、24bit、默认增益用最简单的单音信号源跑通全链路再用白噪声信号和频谱分析工具验证频率响应是否平坦最后才切换到目标采样率和高增益模式。我见过不少朋友一上来就设192kHz、最大增益、各种滤波器全开最后数据乱成一团根本分不清是硬件问题还是配置问题。如果你后续准备把GC1843的方案量产建议在评估阶段就确定好MCLK的生成方式、模拟电源的LDO型号、前端运放的选型和增益电阻精度。这些选型一旦在布板后要改改动成本比软件修复高一个数量级。把前端设计做扎实GC1843这颗芯片的性能才能真正兑现成你系统里的信噪比指标。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑