1. 项目概述与核心价值
在精密测量和工业控制领域,我们常常需要处理微伏级别的微弱直流信号,比如压力传感器的桥式输出、热电偶的温差电势,或者生物电信号。这些信号本身就小得可怜,更让人头疼的是,负责将它们转换成数字量的模数转换器(ADC)自身也并非完美。它内部运放的失调电压、随着温度和时间飘忽不定的漂移,还有那恼人的1/f噪声(也叫闪烁噪声,在低频段特别明显),就像一层挥之不去的“雾霾”,严重干扰了我们对真实信号的捕捉。尤其是在追求长期稳定性和超高分辨率的场合,比如高精度电子秤、医疗监护设备或者高端数据采集系统,这些误差源往往是系统精度的“天花板”。
为了解决这个痛点,斩波稳定技术和精密的片上校准功能应运而生,成为了高精度ADC设计的“杀手锏”。简单来说,斩波技术就像是一个巧妙的信号“调包计”。它通过周期性地交换ADC输入端的正负极性,把原本固定在直流附近的失调电压和低频噪声,“调制”到一个较高的频率上。然后,再用一个数字低通滤波器(就像筛子一样)把这个高频的“误差包”滤掉,只留下我们想要的纯净直流信号。这样,ADC的直流精度和长期稳定性就得到了质的飞跃。
德州仪器(TI)的ADS1260和ADS1261系列,正是将这两项技术深度融合的典范。它们不仅是高分辨率(最高可达32位)的Δ-Σ ADC,更内置了灵活的全局斩波模式(Chop Mode)和一套完整的自校准、系统校准命令集。这意味着,工程师无需复杂的外部电路,就能在芯片内部直接对抗失调和增益误差,轻松实现ppm(百万分之一)级别的测量精度。无论是用于电阻应变片的称重传感器,还是需要监测微小电压变化的科学仪器,掌握ADS126x的斩波与校准技术,就等于握住了打开高精度测量大门的钥匙。接下来,我将结合数据手册和实际调试经验,为你深入拆解其工作原理、配置要点和那些手册上不会写的实操陷阱。
2. 斩波模式深度解析:原理、实现与性能权衡
斩波技术听起来很“黑科技”,但其核心思想却非常直观。我们可以把它想象成测量一个本身有零位误差的天平。如果你只称一次,读出的重量包含了物体真实重量和天平的零位误差。但如果你先正向称一次,然后把物体和砝码左右托盘对调再称一次,两次读数的平均值就能完美抵消掉天平的零位误差。ADS126x的斩波模式正是基于这个“对称测量取平均”的思想,在芯片内部以极高的速度自动完成这一过程。
2.1 斩波模式的工作原理与信号流
根据数据手册中的图34和描述,ADS126x的斩波开关位于输入多路复用器之后、可编程增益放大器(PGA)和调制器之前。其工作序列可以分解为以下几个关键步骤:
- 相位反转:在第一次转换(C1)时,信号以正常极性(VAINP - VAINN)送入后续链路,同时叠加了内部失调电压(VOFS)。此时,转换结果可以表示为:
C1 = (VAINP - VAINN) + VOFS。 - 交替测量:在紧接着的第二次转换(C2)中,内部的斩波开关动作,将输入信号的极性反转。此时,信号变为(VAINN - VAINP),但内部失调电压VOFS的方向和大小(假设在短时间内不变)保持不变。因此,
C2 = (VAINN - VAINP) + VOFS = -(VAINP - VAINN) + VOFS。 - 数字减法与平均:ADC的核心处理单元不会直接输出C1或C2,而是执行
(C1 - C2) / 2的运算。- 将C1和C2的表达式代入:
[ (VAINP-VAINN+VOFS) - (-(VAINP-VAINN)+VOFS) ] / 2 - 化简后得到:
[ (VAINP-VAINN+VOFS) + (VAINP-VAINN) - VOFS ] / 2 = (2*(VAINP-VAINN)) / 2 = VAINP - VAINN
- 将C1和C2的表达式代入:
看,VOFS被完美地消去了!这个结果就是第一个有效输出(Output 1)。后续的转换(C3, C4...)会重复这个“正-反-正-反”的序列,每一次输出都是相邻两个相反相位转换值的差分平均。
关键提示:数据手册特别指出,在斩波模式启动后的第一次转换结果会被保留而不输出。这是因为第一次转换(C1)是建立相位基准的,需要与紧随其后的C2配对才能计算出第一个有效值。在编程时,启动斩波模式后读取的第一个数据应该丢弃。
2.2 性能提升与固有代价
斩波模式带来的好处是显而易见的:
- 显著降低失调电压与漂移:这是最主要的目标。不仅静态失调被消除,由温度变化、时间老化引起的失调漂移也因为被调制到高频而得以抑制。
- 抑制1/f噪声:半导体器件的1/f噪声在低频段(如0.1Hz到10Hz)功率谱密度很高,是精密直流测量的主要噪声源。斩波将其调制到斩波频率(通常是数据速率的一半)附近,从而被后续数字滤波器轻松滤除。
然而,天下没有免费的午餐,斩波模式需要付出明确的代价:
- 数据速率减半:这是最直接的影响。因为每个有效输出都需要两次物理转换(C1和C2)来计算,所以有效的输出数据率(ODR)是原始转换速率的一半。例如,若ADC配置为10 SPS(每秒采样10次),启用斩波后,你只能得到5个有效的输出数据每秒。
- 建立时间翻倍:由于需要两个转换周期才能产生一个数据点,从启动转换或输入信号变化到获得稳定、准确的读数,所需的时间也相应加倍。这对于需要快速响应的动态测量是一个需要考虑的因素。
- 新的噪声频率点:数字滤波器的陷波(Null)频率特性在斩波模式下会发生变化。除了原有的工频抑制点(如50Hz/60Hz),在
f_DATA / 2(即有效输出数据率)的倍数频率上会出现新的陷波点。这在设计系统抗混叠滤波器时需要留意。
2.3 配置要点与寄存器操作
启用斩波模式非常简单,只需配置一个寄存器。具体位置在MODE1寄存器(地址03h)的位6和位5,即CHOP[1:0]位。
00: 正常模式(Normal mode),禁用斩波。01: 斩波模式(Chop mode),即我们上面讨论的全局斩波。10: 两线交流激励模式(2-wire AC excitation mode),用于电阻桥传感器。11: 四线交流激励模式(4-wire AC excitation mode),同样用于桥式传感器。
对于纯粹的电压测量,我们关注01这个设置。在代码中,配置流程通常如下:
// 假设通过SPI向ADS126x写寄存器函数为 ADS126x_WriteRegister void ADS126x_EnableChopMode(void) { uint8_t mode1_reg; // 1. 先读取MODE1寄存器的当前值,避免修改其他位 ADS126x_ReadRegister(0x03, &mode1_reg, 1); // 2. 清除CHOP位(位6和位5),然后设置为01 mode1_reg &= ~(0x03 << 5); // 清除bit6:5 mode1_reg |= (0x01 << 5); // 设置为01(斩波模式) // 3. 写回寄存器 ADS126x_WriteRegister(0x03, &mode1_reg, 1); }配置完成后,ADC会自动按照斩波序列工作。你需要做的就是理解数据速率减半这一变化,并在软件中相应调整你的数据读取和处理逻辑。
3. 校准技术全攻略:从原理到实践
即使采用了斩波技术,ADC和整个信号链(包括前端运放、传感器等)仍可能存在残余的偏移和增益误差。ADS126x提供了强大的片上校准功能来修正这些误差,分为“命令校准”和“用户校准”两种方式。命令校准是半自动的,ADC内部完成计算;用户校准则更灵活,允许你基于外部标准进行更高精度的修正。
3.1 校准模型与数学基础
校准的数学模型在数据手册的图35和公式6中给出,这是理解所有校准操作的基石:最终输出数据 = (滤波器输出 - OFCAL[2:0]) * FSCAL[2:0] / 0x400000
- 滤波器输出:数字滤波器输出的原始24位二进制补码数据。
- OFCAL[2:0]:24位偏移校准寄存器值(二进制补码格式)。
0x000000表示无偏移校正。 - FSCAL[2:0]:24位满量程校准寄存器值(直接二进制格式)。
0x400000被定义为增益因子1.0。 - 除以0x400000:这是一个归一化操作,因为24位满量程寄存器值
0x400000对应增益1。
这个公式的执行顺序是先减偏移,再乘增益。这意味着偏移校正是独立于增益的,这也是为什么必须先做偏移校准,再做增益校准。
3.2 三种命令校准详解与实操
命令校准通过发送特定指令(SYOCAL, GANCAL, SFOCAL)来触发。ADC会自动进行多次转换、计算平均值,并更新对应的OFCAL或FSCAL寄存器。
3.2.1 偏移自校准(SFOCAL)
- 目的:仅校准ADC内部的偏移误差(主要是PGA和调制器)。它不包含外部信号链(如多路复用器、外部驱动电路)的误差。
- ADC内部操作:发送SFOCAL命令(0x19)后,ADC内部会自动将输入断开,并将PGA的输入端短接在一起(内部短路到共模电压)。然后它进行16次转换并取平均,将这个平均值(即内部失调对应的码值)取负,写入OFCAL寄存器。这样,后续转换时,这个内部失调就会被减掉。
- 何时使用:在PCB上电稳定、环境温度相对稳定后,可以进行一次自校准,以消除芯片本身的初始失调。注意:如果外部信号源(如传感器)存在固有的直流偏置,这个偏置不会被此命令消除。
- 实操代码示例:
void ADS126x_SelfOffsetCal(void) { // 确保ADC处于连续转换模式或单次转换模式并已启动 // 发送SFOCAL命令 (0x19) uint8_t cmd = 0x19; SPI_Transmit(&cmd, 1); // 假设CS已拉低 // 等待校准完成。最可靠的方式是等待DRDY引脚变低,或查询STATUS寄存器的DRDY位。 // 根据数据速率和滤波器模式,校准时间可从几毫秒到数秒不等(参见手册表14)。 WaitFor_DRDY_Low(); // 用户需实现的等待函数 // 校准完成后,OFCAL寄存器已更新,后续读数已应用新偏移值。 }
3.2.2 系统偏移校准(SYOCAL)
- 目的:校准整个信号通路的偏移误差,包括ADC内部、外部多路复用器、驱动放大器、甚至传感器本身的偏置。
- 用户准备工作:必须在发送SYOCAL命令前,手动将系统的输入短路到已知的“零”点。对于桥式传感器,可能是将激励电压断开或将输入端短接;对于电压测量,可能是将输入正负端短接到地或共模电压。
- ADC内部操作:发送SYOCAL命令(0x16)后,ADC对当前短路的输入端进行16次转换取平均,计算出的偏移值写入OFCAL寄存器。
- 何时使用:在系统组装完成后,进行最终校准。这是获得最高系统精度的关键一步。务必确保短路条件稳定且无噪声。
- 实操心得:
进行SYOCAL时,短路的物理连接质量至关重要。我遇到过因为使用跳线帽接触电阻不稳定,导致每次系统偏移校准结果波动达几十个LSB的情况。对于高精度应用,建议使用继电器或高质量的模拟开关来创建校准短路点,确保可重复性。
3.2.3 增益校准(GANCAL)
- 目的:校准系统的增益误差。增益误差可能来源于ADC内部的PGA增益误差、外部分压电阻的精度、或参考电压的偏差。
- 用户准备工作:
- 向ADC输入端施加一个精确的、已知的正满量程(或接近满量程)电压。这个电压的精度直接决定了增益校准的最终精度。
- 等待信号完全稳定(考虑建立时间)。
- ADC内部操作:发送GANCAL命令(0x17)后,ADC进行16次转换取平均,得到实际测量码值(Actual Code)。然后,它计算出一个FSCAL值,使得:
(期望码值 / 实际码值) * 0x400000。这里的“期望码值”对于正满量程输入,理论上是0x7FFFFF(24位正满幅)。计算出的FSCAL值会写入FSCAL寄存器。 - 何时使用:在完成偏移校准(SFOCAL或SYOCAL)之后进行。通常使用一个高精度的电压基准源来产生校准电压。
- 重要警告:数据手册强调,施加的校准电压必须确保校准后的信号不超过原始量程的±106%,否则会导致ADC超范围。对于增益误差较大的系统,建议先手动进行一个粗略的增益校准。
3.3 用户校准:更高自由度的精度微调
命令校准虽然方便,但依赖于ADC内部的16次平均算法。对于追求极限精度或拥有更高等级外部标准的场景,“用户校准”模式提供了完全的控制权。
用户校准流程如下:
- 初始化校准寄存器:将OFCAL设为
0x000000,FSCAL设为0x400000(默认值)。 - 偏移校准(手动):
- 短路系统输入端至零位。
- 连续采集N个(例如100或1000个)转换数据。
- 计算这N个数据的平均值。这个平均值就是系统总偏移对应的码值(Offset_Code)。
- 将这个平均值(注意是二进制补码格式)直接写入OFCAL[2:0]寄存器。写入后,ADC会立即应用此偏移修正。
- 增益校准(手动):
- 关键预防步骤:为了避免在施加满量程校准时因增益误差过大导致输出码值饱和(超出
0x7FFFFF),先临时将FSCAL寄存器设置为一个较小的值,例如0x3CCCCC(对应增益约0.95)。 - 施加精确的满量程校准电压(V_cal)。
- 采集N个转换数据并计算平均值,得到实际码值(Actual_Code)。
- 计算期望的码值(Expected_Code)。对于一个理想的24位ADC,输入V_cal对应的码值为:
Code_Ideal = (V_cal * Gain * 2^23) / V_ref。但更简单的方法是,在临时增益0.95下,对于满量程电压V_fs,期望码值约为0.95 * 0x7FFFFF ≈ 0x4CCCCC(需要根据你的具体V_cal与V_fs比例计算)。 - 根据公式7计算最终的FSCAL值:
FSCAL = (Expected_Code / Actual_Code) * 0x400000。 - 将计算出的FSCAL值(直接二进制格式)写入FSCAL[2:0]寄存器。
- 恢复步骤:将之前临时设置的FSCAL值改回新计算出的值。
- 关键预防步骤:为了避免在施加满量程校准时因增益误差过大导致输出码值饱和(超出
用户校准的优势:
- 可平均更多点数:你可以平均成百上千个点,比内部16次平均更能抑制随机噪声,得到更稳定的校准值。
- 可使用外部算法:可以引入更复杂的滤波算法(如剔除野值后再平均)。
- 灵活性:可以针对不同的输入量程、不同的传感器进行多点校准(如两点法:零点+满点),实现线性度校正(虽然ADS126x本身只提供偏移和增益的一阶校正)。
4. 斩波与校准的联合应用策略与实战配置
理解了各自的工作原理后,如何在实际项目中协同使用斩波和校准,以达到最佳性能,是工程实践中的关键。
4.1 应用场景与模式选择决策流
面对一个具体的测量任务,可以遵循以下决策流程:
评估信号特性:
- 信号类型:是纯直流、慢变直流,还是含有交流分量?斩波主要优化直流和低频性能。
- 信号幅度:是否非常微弱(接近ADC的噪声底)?如果是,斩波抑制1/f噪声的优势将非常明显。
- 精度要求:对长期稳定性(温漂、时漂)的要求有多高?高要求场景必须使用斩波。
- 速度要求:所需的数据输出率(ODR)是多少?启用斩波会使ODR减半,需确认系统能否接受。
选择工作模式:
- 如果信号是超低频或直流,且对噪声和漂移极其敏感(例如电子天平、应力检测),优先启用斩波模式(CHOP[1:0]=01)。
- 如果信号带宽较宽(>10Hz)或对数据速率要求高,可以暂时禁用斩波,优先保证带宽和速度。但需评估由此引入的直流误差是否在允许范围内。
- 对于电阻桥式传感器(如压力、称重传感器),应优先考虑使用AC激励模式(CHOP[1:0]=10或11)。该模式不仅具备斩波抵消失调的优点,还能通过反转桥路激励电压的方向,消除引线电阻、热电势等带来的误差,是桥式测量的最佳方案。
制定校准策略:
- 上电初始化校准:每次设备冷启动后,执行一次SFOCAL(自校准),消除芯片初始失调。如果环境温度变化大,可考虑定期执行。
- 系统级标定:在产品出厂前或用户现场安装后,执行完整的SYOCAL(系统偏移校准)和GANCAL(增益校准)。这需要提供精密的零点和满度参考源。
- 运行时补偿:对于无法提供外部短路进行SYOCAL的场景(如某些在线监测系统),可以设计一个由MCU控制的校准通道,定期将输入切换到内部短路或已知参考电压,进行自动校准。
4.2 寄存器配置与驱动代码实战
下面以一个典型的精密直流电压测量场景为例,展示完整的配置流程。假设我们需要测量一个0-5V的单端信号(接在AIN0和AINCOM之间),使用内部2.5V参考,PGA增益=1,数据速率10 SPS,并启用斩波和CRC校验。
// ADS126x 初始化与配置函数 void ADS126x_InitForPrecisionDC(void) { uint8_t data[3]; // 1. 复位ADC (可选,确保已知状态) ADS126x_SendCommand(0x06); // RESET命令 Delay_ms(10); // 等待复位完成 // 2. 配置寄存器 // MODE0 (Addr 02h): [7]CHOP_EN? 我们在MODE1配置, [6:4]DELAY=000, [3:0]FILTER=1010 (SINC4, 10SPS) data[0] = 0x0A; ADS126x_WriteRegister(0x02, data, 1); // MODE1 (Addr 03h): [7]SBADC=0, [6:5]CHOP=01 (斩波模式), [4]ACX=0, [3]PGA_BYPASS=0, [2:0]GAIN=000 (增益1) data[0] = (0x01 << 5); // 启用斩波模式 ADS126x_WriteRegister(0x03, data, 1); // MODE2 (Addr 04h): [7]BYPS=0, [6]VREF=0 (内部参考), [5:4]DR=00, [3]DRDY_FMT=0, [2]HI_PASS=0, [1:0]SENSOR_VAL=00 data[0] = 0x00; ADS126x_WriteRegister(0x04, data, 1); // MODE3 (Addr 05h): [7]PWDN=0, [6]CRCENB=1 (启用CRC), [5]STATENB=1 (包含状态字节), [4]CHECK=0, [3]TIMEOUT=0, [2]SPITIM=0, [1:0]RESERVED data[0] = (1<<6) | (1<<5); // 启用CRC和状态字节 ADS126x_WriteRegister(0x05, data, 1); // INPUTMUX (Addr 00h): [7:4]MUXP=0000 (AIN0), [3:0]MUXN=1110 (AINCOM) data[0] = (0x00 << 4) | 0x0E; ADS126x_WriteRegister(0x00, data, 1); // 3. 执行上电自校准 (SFOCAL) ADS126x_SendCommand(0x19); // SFOCAL WaitFor_DRDY_Low(); // 等待校准完成 // 4. 启动连续转换 ADS126x_SendCommand(0x08); // START命令 } // 读取带CRC校验的转换数据函数 int32_t ADS126x_ReadDataWithCRC(void) { uint8_t txBuf[5] = {0x12, 0x00, 0x00, 0x00, 0x00}; // RDATA命令 + 4字节CRC模式格式 uint8_t rxBuf[9] = {0}; // 响应: 状态, 数据MSB, 数据MID, 数据LSB, CRC int32_t rawData = 0; // 拉低CS,发送命令帧 CS_Low(); SPI_TransmitReceive(txBuf, rxBuf, 5); CS_High(); // 检查CRC(此处简化,实际应计算并比较CRC) // rxBuf[0]: 回显字节1 (0xFF) // rxBuf[1]: 回显字节2 (0x00) // rxBuf[2]: 输出CRC-2 (应等于对命令字节计算的CRC) // rxBuf[3]: 状态字节 // rxBuf[4]: 数据MSB // rxBuf[5]: 数据MID // rxBuf[6]: 数据LSB // rxBuf[7]: 输出CRC-4 (对状态+数据3字节的CRC) // 组合24位数据 (二进制补码) rawData = (rxBuf[4] << 16) | (rxBuf[5] << 8) | rxBuf[6]; // 将24位有符号数扩展为32位有符号数 if (rawData & 0x800000) { rawData |= 0xFF000000; } return rawData; }4.3 性能验证与噪声评估
启用斩波后,如何验证其效果?一个有效的方法是进行噪声谱密度分析或长期稳定性测试。
- 时域观察:在输入端短路的情况下,以较高的数据速率(如1200 SPS)采集大量数据,绘制时域波形。对比启用和禁用斩波模式下的波形,启用斩波后,信号的基线漂移和低频波动(1/f噪声)应明显减小。
- 噪声计算:数据手册表1提供了不同配置下的噪声值。启用斩波模式后,理论噪声值应降低为原来的
1/√2(约0.707倍)。例如,在10SPS、SINC4滤波器、增益1的条件下,手册噪声典型值可能是2μV RMS。启用斩波后,预期噪声可降至约1.4μV RMS。你可以通过计算实际采集数据的标准差来验证。 - ** Allan方差分析**:这是评估长期稳定性和噪声类型的强大工具。对于高精度直流测量,绘制Allan方差曲线可以清晰地区分白噪声、闪烁噪声和随机游走噪声。斩波技术应能显著降低曲线在较长平均时间(对应低频段)的方差值,证明其抑制1/f噪声和漂移的有效性。
5. 常见问题、调试技巧与避坑指南
在实际使用ADS126x的斩波和校准功能时,会遇到一些典型问题。以下是我从项目中总结出的经验与解决方案。
5.1 斩波模式下的数据同步与读取时机
问题:启用斩波后,读取数据时发现数值偶尔跳变或出现无效值,特别是在高数据速率下。
根因分析:斩波模式使有效数据率减半,且内部计算需要时间。如果MCU读取数据的时机与ADC内部斩波序列不同步,可能会读到“半个结果”或正在更新的数据。
解决方案:
- 严格依赖DRDY引脚:这是最可靠的方法。将DRDY引脚连接到MCU的外部中断引脚,配置为下降沿触发。在中断服务程序(ISR)中读取数据。这样可以确保每次读取的都是一个完整的、新的斩波周期结果。
- 理解DRDY在斩波模式下的行为:在连续转换模式下,DRDY会在每个有效输出数据准备好时变低。由于斩波模式两个物理转换产生一个输出,所以DRDY的周期是物理转换周期的两倍。务必参考数据手册图36的时序。
- 软件轮询策略:如果必须用软件轮询,轮询间隔必须小于有效数据输出周期,并且最好在检测到DRDY变低后,延迟几个微秒再发起读取操作,避开数据建立的不稳定窗口。
5.2 校准命令执行失败或结果不稳定的排查
问题:发送校准命令(如SFOCAL)后,DRDY长时间不置位,或校准后精度反而变差。
排查清单:
- 寄存器锁定状态:执行任何校准命令前,必须确保寄存器处于解锁状态。检查MODE3寄存器的位7(PWDN)和位4(CHECK),并发送UNLOCK命令(0xF5)。
ADS126x_SendCommand(0xF5); // 发送解锁命令 - 参考电压稳定:校准前,必须给ADC的参考电压足够的时间稳定。如果使用内部参考,上电后至少等待几十毫秒。如果使用外部参考,确保其已上电并稳定。
- 信号建立时间:对于SYOCAL和GANCAL,在施加校准电压(零或满度)后,必须等待足够长的时间,让信号通过外部RC滤波器和ADC的输入网络完全建立,然后再发送命令。这个时间可能远大于一个数据转换周期。
- 电源与地噪声:校准过程对噪声敏感。确保模拟电源(AVDD)干净、稳定,数字地(DGND)和模拟地(AGND)单点连接良好。在校准期间,尽量减少数字部分(如MCU、通信总线)的开关活动。
- 命令发送时序:数据手册强调,发送校准命令时,必须保持CS为低,且在命令执行期间(直到DRDY变低)不能发送其他任何命令。确保你的SPI驱动在发送
0x16、0x17或0x19后,持续等待DRDY,期间不操作CS。
5.3 校准寄存器写入与读回验证
问题:通过WREG命令写入OFCAL/FSCAL值后,读取回来的值不正确,或者校准效果未生效。
调试步骤:
- 验证SPI通信:首先使用NOP命令(0x00)测试SPI回环。在无CRC模式下,发送
0x00, 0xAA,应收到0xFF, 0x00的回显。这能确认基本的命令帧通信正常。 - 分步读写:不要一次性写入24位(3字节)。先尝试写入并读回一个简单的寄存器,如ID寄存器(地址01h),验证读写操作本身无误。
- 注意字节顺序:OFCAL和FSCAL寄存器是三个独立的8位寄存器(OFCAL0-LSB, OFCAL1, OFCAL2-MSB)。写入时需按顺序先写地址,再写数据。例如,写入OFCAL值
0x123456:uint8_t cal_vals[3] = {0x56, 0x34, 0x12}; // LSB first ADS126x_WriteRegister(0x07, cal_vals, 3); // 从OFCAL0开始写3个字节 - 读回校验:写入后,立即用RREG命令读回这三个寄存器,确认写入值正确。
- 检查计算:如果进行用户校准,双精度浮点数计算FSCAL值时,注意处理舍入误差。最好使用64位整数运算来避免精度损失。公式
FSCAL = (Expected_Code * 0x400000LL) / Actual_Code。
5.4 AC激励模式下的特殊考量
当CHOP[1:0]设置为10或11时,ADC进入AC激励模式,GPIO引脚(AIN2-AIN5)会输出同步的方波信号来驱动外部开关,反转桥式传感器的激励电压极性。
关键注意事项:
- GPIO驱动能力:这些GPIO引脚由5V模拟电源供电。驱动外部MOSFET或模拟开关时,需确认其栅极电荷需求是否在GPIO驱动能力之内。必要时增加栅极驱动电路。
- 开关时序:数据手册图7显示了ACX1和ACX2信号的时序,它们是非重叠的,以防止桥路在切换瞬间短路。外部开关电路必须匹配此时序,选择开关速度足够快的器件(如低电荷注入的CMOS模拟开关)。
- 滤波器模式影响:与斩波模式类似,AC激励模式也会改变有效数据速率和滤波器响应。需根据表8和描述,重新计算实际的数据输出率和噪声性能。
- 布局与耦合:AC激励信号是快速变化的数字信号,必须远离敏感的模拟输入走线(AIN0, AIN1等),防止通过寄生电容耦合引入噪声。
通过深入理解斩波与校准的原理,仔细配置寄存器,严格遵守操作时序,并规避上述常见陷阱,你就能充分发挥ADS126x系列ADC的极限性能,构建出稳定可靠的高精度测量系统。记住,精密模拟电路的成功,一半在于芯片本身的性能,另一半则在于工程师对细节的把握和严谨的实施。