TC7135双积分ADC原理与±2V电压表设计实战

TC7135双积分ADC原理与±2V电压表设计实战

1. 项目概述:从“古董”芯片到现代测量的桥梁

在嵌入式开发和精密测量领域,ADC(模数转换器)是连接模拟世界与数字世界的咽喉要道。如今,我们习惯了在STM32、ESP32等微控制器上轻松调用内置的12位、16位甚至更高分辨率的ADC,享受其高速、集成化的便利。但你是否想过,在单片机内置ADC性能羸弱或对精度、抗干扰能力有极致要求的场合,我们该如何选择?TC7135这颗诞生于上世纪、如今依然活跃在特定领域的4½位双积分ADC芯片,就是一个绝佳的答案。它不像SAR(逐次逼近型)ADC那样追求速度,而是以其极高的分辨率、优异的抗工频干扰能力和低廉的成本,在数字万用表、电子秤、温控仪表等需要稳定、精确测量直流或缓变信号的场合牢牢占据一席之地。

所谓4½位,是指其最大显示值为19999(即从-19999到+19999),比普通的4位(9999)多了一位最高位(只能显示0或1),因此精度可达1/20000,即0.005%。双积分(Dual-Slope)是其核心工作原理,通过两次积分过程将输入电压转换为时间宽度,再通过计数器转换为数字量。这个过程虽然慢(通常每秒几次转换),但能有效抑制周期性的噪声,尤其是50Hz/60Hz的工频干扰。对于很多从事仪器仪表、工业控制开发的工程师来说,深入理解TC7135,不仅是掌握一种经典电路设计,更是理解高精度、高稳定性测量系统设计思想的钥匙。本文将带你彻底拆解TC7135的原理,并手把手完成一个完整的±2V量程电压表电路设计。

2. TC7135核心原理与架构深度解析

要驾驭TC7135,必须从根上理解其双积分原理和独特的“4½位”动态扫描输出机制。这决定了整个外围电路的设计逻辑。

2.1 双积分ADC的工作原理:用时间测量电压

双积分ADC的核心思想可以类比为一个用水位计时的沙漏。它不直接测量电压的“高度”,而是测量电压“填充”和“放空”一个标准容器所需的时间比例。

其一个完整的转换周期分为三个阶段:

  1. 自动调零阶段(AZ):内部电路对失调电压进行采样和存储,在后续阶段进行补偿,这是实现高精度和低漂移的关键。
  2. 信号积分阶段(INT):开关接通被测输入电压VIN,对一个积分电容CINT进行固定时长TINT的充电。积分器的输出电压从起始点开始线性上升(或下降,取决于VIN极性),上升的斜率与VIN成正比。TINT通常设计为工频周期(20ms或16.67ms)的整数倍,例如100ms(5个50Hz周期)。这样,在积分阶段内,对称的工频干扰正负面积相等,理论上会被完全平均掉,这是双积分ADC抗工频干扰能力的根源。
  3. 参考电压反积分阶段(DE):开关断开VIN,接通一个极性相反的参考电压VREF。积分电容开始以固定的斜率(由VREF决定)放电,直到积分器输出回到起始电平。这个反积分的时间TDE与被测电压VIN成正比,即VIN = (VREF * TDE) / TINT

最终,通过一个高频时钟计数器在TDE阶段内计数的数值,就是转换出的数字结果。因为TINT是固定的,VREF是精确的,所以计数值直接对应VIN。

注意:这里的“精度”核心依赖于VREF的稳定性时钟的稳定性。VREF的微小漂移会直接导致测量误差,因此参考电压源的选择和设计是电路成败的重中之重。

2.2 TC7135的引脚功能与“4½位”动态扫描逻辑

TC7135采用40引脚DIP或44引脚PLCC封装,其引脚大致可分为电源、模拟输入、参考源、时钟、数字输出和控制几大类。

关键引脚详解:

  • V+, V-:通常采用±5V双电源供电,这是保证其能够处理正负输入电压的基础。
  • IN HI, IN LO:差分模拟输入端。IN LO通常接模拟地(COM),IN HI接信号。这种差分输入方式有助于抑制共模噪声。
  • REF HI, REF LO:参考电压输入端。REF LO通常也接模拟地(COM)。参考电压VREF的典型值为1V,满量程输入电压为2V(因为设计上满量程输入对应2倍VREF)。
  • CINT, BUFF, AZ:分别接积分电容、积分电阻(缓冲放大器输出端)和自动调零电容。这三个外围元件的取值需要精确计算。
  • CLK IN:时钟输入端。TC7135需要一个外部时钟,典型频率为120kHz。时钟频率fCLK与积分时间TINT的关系为:TINT = 40000 / fCLK。要得到100ms的积分时间,则fCLK = 40000 / 0.1 = 400kHz。实际常用120kHz(对应TINT=333ms)或更高,再通过后续处理实现过采样降噪。
  • D1-D5(位驱动):这是TC7135最具特色的部分。它采用动态扫描方式输出5位BCD码(万、千、百、十、个位)和极性、超量程等信息。D1-D5是5个位选通信号,依次循环变为低电平,每个位持续200个时钟周期。当D5(个位)有效时,数据线上是个位BCD码;当D4(十位)有效时,数据线是十位BCD码,以此类推。
  • B1, B2, B4, B8(段驱动):这4条线输出当前位选通信号所对应位的BCD码(8421码)。它们需要外接上拉电阻。
  • POL, OVER, UNDER:极性、超量程、欠量程标志输出。
  • STROBE:数据输出选通脉冲。在每个位驱动信号的中间时刻,会产生一个负脉冲,可用于锁存当前稳定的BCD数据到外部锁存器(如74HC574),这是与单片机接口的关键信号。
  • R/H:运行/保持控制。高电平时连续转换;低电平时完成当前转换后进入保持状态,输出数据保持不变。

这种动态扫描输出省去了5个BCD码所需的20根并行数据线,极大地简化了与显示驱动器或微控制器的接口,但要求接收端必须同步地锁存数据。

3. 关键外围电路设计与参数计算实战

理解了原理,下一步就是动手计算和选择每一个外围元件。这是将芯片手册上的理论变为稳定可靠电路的核心环节。

3.1 模拟部分设计:积分网络与参考源

模拟电路的稳定性直接决定了测量的精度和噪声水平。

1. 积分电阻(RINT)和积分电容(CINT)的计算:积分器的输出摆幅必须在芯片的线性范围内(通常电源轨的1-2V以内)。TC7135在±5V供电时,推荐积分器输出摆幅为±3.5V至±4V。 计算公式:RINT = (满量程电压VFS) / (积分器输入电流IIB)其中,IIB推荐值为20μA。对于VFS=2V,则RINT = 2V / 20μA = 100kΩ。这是一个标准值。 积分电容的计算取决于积分时间TINT和积分器输出摆幅VSWING:CINT = (TINT * IIB) / VSWING假设我们设定TINT=100ms(抗50Hz干扰),VSWING取4V,则CINT = (0.1s * 20μA) / 4V = 0.5μF。应选择低介质吸收、高稳定性的聚丙烯(CBB)或聚酯薄膜电容,温度系数要小。

2. 自动调零电容(CAZ)和缓冲器输出电容(CBUF):CAZ和CBUF的取值会影响噪声和失调。通常CAZ取CINT的1到2倍,即1μF。CBUF可取CAZ的一半或相等,即0.47μF到1μF。同样需要选择优质电容。

3. 参考电压源(VREF)电路设计:这是精度的心脏。绝不能简单用电阻分压。标准做法是使用一颗精密基准电压源芯片,如ADR421(2.5V)、REF5025(2.5V)或LM385-2.5V。然后通过精密电阻分压得到所需的1.000V。 例如,使用REF5025(2.5V,初始精度0.05%,温漂3ppm/°C)。设计一个分压网络:2.5V -> (R1=15kΩ) -> VREF -> (R2=10kΩ) -> GND。则VREF = 2.5V * (R2/(R1+R2)) = 2.5V * (10k/25k) = 1.000V。R1和R2应选用5ppm/°C的精密金属膜电阻。分压点后需要接一个运算放大器作为缓冲器(如OPA2188),以提供低阻抗输出并驱动TC7135的REF HI引脚。参考地的连接点(REF LO)必须与模拟地(COM)单点连接,避免地线噪声。

4. 输入滤波电路:在IN HI前端,必须加入一个RC低通滤波器,以滤除高频噪声。例如,一个1kΩ电阻串联和一个0.1μF电容对地,其截止频率约为1.6kHz。这能有效抑制射频干扰。

3.2 数字接口设计:与单片机通信的两种方案

TC7135的输出需要被读取和处理,通常有两种方案:专用驱动芯片方案和单片机直读方案。

方案一:专用驱动芯片方案(适用于纯硬件显示)这是最传统、最稳定的方案。使用ICL7211或类似的4½位LCD/LED驱动芯片。TC7135的位驱动信号(D1-D5)直接连接到7211的对应位驱动,BCD输出(B1-B8)连接到7211的数据输入。7211会自动将动态扫描信号转换为静态的段码输出,直接驱动显示屏。这种方式完全无需软件干预,稳定可靠,但灵活性差,无法进行数据处理。

方案二:单片机直读方案(适用于智能仪表)这是目前更主流的方案,利用单片机的IO口和中断资源来读取数据。

  • 硬件连接:将TC7135的STROBE引脚连接到单片机的一个外部中断引脚(如INT0)。将D5(个位驱动)连接到另一个IO口或中断引脚,作为帧同步信号。将B1、B2、B4、B8四根数据线连接到单片机的任意4个IO口(如P1.0-P1.3)。
  • 软件流程
    1. 初始化IO口,开启外部中断。
    2. 单片机检测到D5的下降沿(表示一个转换周期结束,新数据帧开始),启动读取流程。
    3. 在STROBE的下降沿中断服务程序中,根据当前是D1-D5中的哪一个(需要通过轮询或硬件连接判断),将B1-B8上的数据读取并存储到对应的万、千、百、十、个位缓冲区中。
    4. 一帧数据(5位BCD码+极性)收集完毕后,进行数据处理(如求平均、校准、送显示等)。

实操心得:单片机读取的关键是时序同步。STROBE脉冲很窄(约0.5个时钟周期),必须用中断来捕获。建议使用D5作为帧起始标志,因为它的顺序是固定的。在软件中,可以做一个状态机,根据检测到的位驱动顺序来存储数据,这样更稳健。对于STM32等单片机,还可以利用定时器捕获模式来精确测量反积分时间(即TDE),从而实现更高精度的计算,但这需要更复杂的编程。

4. 完整±2V量程数字电压表电路设计实例

下面我们整合所有模块,设计一个完整的、由±5V供电、测量±2.000V直流电压的电路,并采用STM32F103C8T6作为主控。

4.1 电源模块设计

  • 输入:9V DC适配器。
  • +5V生成:使用LM7805线性稳压器,输入接9V,输出+5V,为数字部分和基准源供电。
  • -5V生成:使用ICL7660电荷泵芯片,将+5V转换为-5V,为TC7135的V-供电。
  • 模拟/数字地分离:在电源入口处用磁珠或0Ω电阻将模拟地(AGND)和数字地(DGND)单点连接。

4.2 模拟前端与TC7135核心电路

  • 输入保护与滤波:IN HI前端串联一个1kΩ/0.25W的电阻和自恢复保险丝,并联双向TVS管(如SMBJ5.0A)到地,防止过压。之后接RC滤波器(R=1kΩ, C=0.1μF)。
  • TC7135外围
    • CINT: 0.47μF CBB电容(计算值附近选取标称值)。
    • RINT: 100kΩ 0.1%精密金属膜电阻。
    • CAZ: 1μF CBB电容。
    • CBUF: 0.47μF CBB电容。
    • COM: 通过一个10μF钽电容和0.1μF陶瓷电容并联去耦到地,作为模拟地参考点。
  • 基准电压源
    • U1: REF5025ID(2.5V基准)。
    • R1: 15kΩ, 5ppm/°C。
    • R2: 10kΩ, 5ppm/°C。
    • U2: OPA2188(精密运放,接成电压跟随器),输出VREF=1.000V至TC7135的REF HI。
  • 时钟电路:使用74HC04门电路搭建一个120kHz的晶体振荡器,为CLK IN提供稳定时钟。也可以使用单片机定时器输出PWM作为时钟源,便于调节。

4.3 单片机接口电路

  • 数据线:TC7135的B1, B2, B4, B8分别接STM32的PA0, PA1, PA2, PA3(配置为上拉输入模式)。
  • 控制线
    • STROBE 接 STM32的PB0(EXTI0, 下降沿中断)。
    • D5(个位驱动)接 STM32的PB1(普通输入,用于帧同步判断)。
    • R/H 接 STM32的PB2,置高电平(连续运行模式)。
  • 显示:使用一个0.56英寸的4½位共阴LED数码管,通过STM32的IO口扩展(如74HC595串转并)驱动,或者直接使用SPI接口的LED驱动芯片(如TM1639)。

4.4 软件流程图与关键代码片段

// 变量定义 volatile uint8_t digit_index = 0; uint8_t bcd_data[5] = {0}; // 万,千,百,十,个 uint8_t polarity = 0; // STROBE中断服务程序 void EXTI0_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line0) != RESET) { // 读取当前BCD码 uint8_t raw = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) | (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) << 1) | (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2) << 2) | (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3) << 3); // 判断当前是哪一位(简化版:通过轮询D5状态和计数) // 更稳健的做法是将D1-D5也接入IO,通过状态判断 static uint8_t phase = 0; // ... 此处应有判断位驱动的逻辑 ... // 假设通过某种方式确定了当前是第 digit_index 位 if(digit_index < 5) { bcd_data[digit_index] = raw; digit_index++; } else if(digit_index == 5) { // 读取极性位(POL引脚) polarity = GPIO_ReadInputDataBit(GPIO_POL_PORT, GPIO_POL_PIN); digit_index = 0; // 一帧数据就绪,可以设置标志位供主循环处理 data_ready_flag = 1; } EXTI_ClearITPendingBit(EXTI_Line0); } } // 主循环中处理就绪的数据 if(data_ready_flag) { data_ready_flag = 0; int32_t value = 0; // 将BCD数组转换为整数值 value = bcd_data[4] + bcd_data[3]*10 + bcd_data[2]*100 + bcd_data[1]*1000 + bcd_data[0]*10000; if(polarity == 0) { // POL低电平为负 value = -value; } // 根据校准系数计算实际电压:Voltage = (value / 10000) * 2.000V float voltage = (value / 10000.0) * 2.000; // 送显示或上传... }

5. 调试要点、常见问题与性能提升技巧

电路搭建完成后,调试是验证设计和发现问题的关键步骤。

5.1 上电调试步骤

  1. 先测电源:确保±5V电压准确稳定,纹波小于10mV。
  2. 再测基准:测量REF HI引脚对COM的电压,应为精确的1.000V±0.1mV。这是所有测量的基石。
  3. 观察积分波形:用示波器探头(×10档,高阻抗)观察积分器输出引脚(CINT)。你应该看到一个周期性的三角波:一段固定斜率的上升(或下降),紧接着一段固定斜率的下降(或上升),最后一段平坦的自动调零阶段。波形应干净,无剧烈振荡或过冲。
    • 无波形:检查时钟是否正常,电源连接,芯片是否损坏。
    • 波形饱和(顶到电源轨):积分电容CINT可能太小,或输入超量程。减小输入电压或增大CINT。
    • 波形斜率不对:检查积分电阻RINT和输入电压是否准确。
  4. 检查数字输出:用逻辑分析仪或示波器同时抓取D5、STROBE和B1波形。应看到D5为低电平时,STROBE脉冲期间B1-B8上有稳定的BCD码。

5.2 常见故障排查表

现象可能原因排查方法
显示值全零或乱跳时钟信号异常用示波器检查CLK IN引脚是否有稳定方波,频率是否正确。
测量值固定不变STROBE/D5连接错误,单片机未正确读取检查硬件连接;用逻辑分析仪确认时序;检查单片机中断配置。
测量值有固定偏差参考电压VREF不准用6位半万用表测量VREF实际值,调整分压电阻或更换基准源。
测量值跳动大(噪声大)电源纹波大;模拟地噪声;输入滤波不足检查电源去耦电容(每个电源引脚就近接104和10uF电容);优化布局,模拟部分远离数字部分;加强输入RC滤波。
测量负电压显示为正极性标志POL读取错误或逻辑反检查POL引脚连接和单片机读取逻辑(TC7135的POL:低电平=负输入)。
积分波形有台阶或毛刺自动调零电容CAZ或缓冲电容CBUF不良更换为高品质CBB电容;检查焊接是否良好。

5.3 精度校准与性能提升技巧

  • 软件校准:设计两点校准法。输入端接精确的+1.900V标准源,读取转换值AD1;接-1.900V标准源,读取AD2。则实际电压计算公式可修正为:V = Gain * AD + Offset,其中Gain和Offset通过两点标定计算得出。将这两个系数存储在单片机的Flash中。
  • 过采样与滤波:TC7135转换速度慢,但噪声低。可以连续读取N次(如16次)转换结果,然后求平均值。这能有效将分辨率提高log2(N)/2位。例如,16次平均可将理论分辨率从1/20000提升约2位。
  • 降低热电动势影响:在输入回路中,避免使用不同金属的连接(如铜和焊锡),尽量保持连接点温度一致。使用低热电势的继电器或开关进行量程切换。
  • 屏蔽与布局:将TC7135、积分电容、基准源、输入滤波器等模拟部分用金属屏蔽罩覆盖,并单点接地。信号线尽量短,远离时钟和数字走线。

6. TC7135在现代电子设计中的定位与选型思考

尽管面对Σ-Δ ADC(如ADS1256)等高性能集成方案的竞争,TC7135及其双积分原理并未过时。它的核心优势在于极高的性价比、优异的抗工频干扰能力和无需复杂编程即可实现的高分辨率

适用场景:

  • 低速高精度直流测量:实验室基准电压测量、高精度温度传感器(如Pt100)读数、电子秤。
  • 强工频干扰环境:工业现场靠近电机、变频器的仪表盘。
  • 教学与原理验证:作为理解ADC原理、模拟与数字接口的绝佳教学平台。
  • 电池供电的便携设备:双积分ADC在积分阶段可以关闭部分电路,功耗相对较低。

不适用场景:

  • 高速动态信号测量:如音频信号、振动信号分析。
  • 多路快速巡检:转换速率太低。
  • 追求极简电路:外围元件较多,布局布线要求高。

选型替代建议:

  • 如果追求更高集成度和数字接口:可以考虑TI的ADS1232(24位Σ-Δ),它集成了PGA和参考源,通过SPI输出,抗干扰能力同样优秀。
  • 如果只需要3½位或4位精度:ICL7106/7107是更简单廉价的选择。
  • 如果系统已有高性能单片机:可以评估单片机内置ADC通过过采样和软件滤波能否达到要求,这往往是最经济的方案。

掌握TC7135,更像是掌握了一种设计哲学——用速度换取精度和抗干扰性。在纷繁复杂的电子世界里,这种看似“笨拙”却极其稳健的方法,依然是解决许多实际测量难题的利器。当你需要测量一个缓慢变化、但要求绝对稳定的电压时,不妨回头看看这个经典的设计,它可能会给你带来意想不到的可靠与精准。