采用ADS1118和两个热电偶的温度测量电路设计

2023-03-24  

设计说明

本指导手册的设计介绍采用 ADS1118 和两个热电偶的温度测量电路。该设计使用 ADS1118 内部电压基准进行热电偶电压测量,而使用板载温度传感器进行冷端补偿 (CJC) 测量。ADC 的两个通道用于两个K 型热电偶,温度测量范围为 –270°C 至 1370°C。该设计包含用于配置器件的 ADC 寄存器设置以及用于配置和读取器件的伪代码。该电路可用于适用于PLC 的模拟输入模块、实验室仪表和工厂自动化等应用。

poYBAGOEFW6AevKNAACbWDKIsOo483.jpg

设计说明

1. 为电源使用电源去耦电容器。必须使至少为 0.1μF 的电容器对 VDD 进行去耦。

2. 如果可能,使用 C0G (NPO) 陶瓷电容器进行输入滤波。这些电容器中使用的电介质可在电压、频率和温度变化时提供最稳定的电气特性。X7R 电容也是不错的选择。

3. 需要冷端补偿才能准确测量热电偶温度。

4. 选择 K 型热电偶是因为它具有较大的输入范围和热电偶电压。

5. 用于根据热电电压确定热电偶温度的转换表和多项式方程可在 NIST网站上找到。


组件选择

1. 确定热电偶的工作范围。

如果温度测量范围是−270°C 至 1370°C,那么 K 型热电偶具有大约 −6.5mV 至 +55mV 的范围。该范围用于最大化测量的分辨率(考虑 ADC 的满量程范围)。

2. 确定 ADC 的增益和输入范围。

在 ADS1118 中,可编程增益放大器 (PGA) 通过缩放电容采样实现,而不是作为真正的放大器。采用这种 PGA,输入范围可扩展到全电源电压范围,但放大率更低,输入阻抗也更低。在该器件中,最大放大率提供 ±0.256V 的满量程范围。这远远大于热电偶的 −6.5mV 至 +55mV 范围。虽然不可能超出PGA 范围,但测量可以使用满量程范围的部分。

3. 设置电阻器偏置以建立输入直流电平和烧毁检测。

同等偏置电阻器从热电偶的任一端连接到 GND 和 VDD。在正常运行中,电阻器将热电偶的直流偏置点设置为接近中间电源。如果热电偶烧毁并变成开路,则电阻器会将热电偶引线拉开到任一电源。这些电阻器设置为为 500kΩ 至 10MΩ,以便减少流经热电偶的偏置电流。与热电偶引线电阻发生反应的电阻器偏置电流会导致测量误差。但是,电阻器也必须足够低,以便提供足够的偏置电流,从而 克服来自电阻器的任何输入电流。 在该设计中,偏置电阻器选择为 1MΩ。该值会将电阻器偏置电流设置为低至 1.65μA。但是,对于烧坏的热电偶,1MΩ 可提供足够的电流将ADC输入与ADS1118 的 710kΩ 等效输入阻抗分开。

pYYBAGOEFX2AbdcHAABMYuoUvio331.jpg

对于良好的热电偶,热电偶电压的范围为 –6.5mV至55mV。VDD电源的其余3.3V在偏置电阻器之间均匀下降。使用 1MΩ 偏置电阻器时,热电偶电压的直流工作点接近中间电源(即1.65V)。对于烧坏的热电偶,开路会形成一个分压器,由两个1MΩ 电阻围绕 710kΩ 等效输入阻抗。采用烧毁热电偶时的ADC输入电压可以计算为: ADC input voltage = 3.3V • [710kΩ/(1MΩ + 710kΩ + 1MΩ)] = 0.85V 如果热电偶烧毁,ADC 输入电压为 0.86V,远远大于 ADC 的正满量程读数。ADC 的读数为 7FFFh,表示存在烧毁情况。


4. 选择 ADC 输入和基准输入的差分和共模滤波值。

如果存在输入滤波,则输入电流会对任何串联滤波器电阻做出反应,从而产生误差。对于ADS1118,输入电流建模为等效差分输入阻抗。如前所述,等效差分输入阻抗通常为710kΩ。因此,输入串联电阻保 持较低值,或增加的电压表现为增益误差。 此设计包含差分和共模输入RC滤波。差分输入滤波的带宽设置为至少是 ADC 的数据速率的 10 倍。将 共模电容器选择为差分电容器值的 1/10。由于电容器选择,共模输入滤波带宽大约是差分输入滤波带宽 的 20 倍。 在进行输入滤波的情况下,差分信号以低于共模信号的频率衰减,后者会被器件的 PGA 显著抑制。共模电容器的失配会导致非对称噪声衰减,这会表现为差分输入噪声。差分信号的带宽较低,从而可以降低 输入共模电容器失配的影响。ADC 输入和基准输入的输入滤波是针对相同的带宽进行设计的。 在该设计中,数据速率选择为 8SPS。对于 ADC 输入滤波,可以通过以下公式近似计算差分滤波和共模滤波的带宽频率: fIN_DIFF = 1/[2 • π • CDIFF • (2 • RDIFF)] fIN_CM = 1/(2 • π • CCM • RDIFF) 对于 ADC 输入滤波,RIN = 500Ω,CIN_DIFF = 1µF,CIN_CM = 0.1µF。这会将差分滤波器带宽设置为 160Hz,将共模滤波器带宽设置为3.2kHz。


5. 使用冷端补偿根据冷端温度计算实际热电偶电压。

要从热电偶获得精确测量结果,必须执行冷端补偿以获得准确的温度测量值。必须精确测量热电偶引线所在的冷端。不能简单地将冷端的温度与从热电偶电压计算的温度相加。要准确确定热电偶温度,正确的方法是:

1. 将冷端温度 (TCJ) 转换为电压 (VCJ)

2. 将冷端电压与测量到的热电偶电压相加 (VCJ + VTC)

3. 将冷端电压与热电偶电压之和转换为热电偶温度 (TTC)

以下流程图显示了根据 ADC 测量值确定热电偶实际温度的转换方法。

pYYBAGOEFYyAFsKCAABZW5QzuJ8594.jpg

用于根据热电电压确定热电偶温度的转换表和多项式方程可在 NIST网站。

由于 ADS1118 具有精确的内部温度传感器,因此可用于测量。内部温度传感器在 0°C 至 70°C 温度范围内的典型精度为 0.2°C。这种精度非常适合冷端测量。但是,该器件需要与热电偶冷端的连接点之间有良好的热接触。冷端测量中的任何误差都会导致温度测量结果误差。


测量转换

根据 ADC 的满量程范围设置,热电偶电压的转换相对简单。

该设计使用最小的满量程范围 (±0.256V)。

测量值 1(热电偶 1): = [215 • (VAIN0 – VAIN1)/(0.256V)]

Thermocouple 1 Voltage = VAIN0 – VAIN1 = [(Output Code 1) • 0.256V/215]

测量值 2(热电偶 2):= [215 • (VAIN2 – VAIN3)/(0.256V)]

Thermocouple 2 Voltage = VAIN2 – VAIN3 = [(Output Code 2) • 0.256V/215]

内部温度传感器的转换需要进行一些数据操作。来自 ADC 的温度数据表示为 14 位结果,在16位转换结果中进行左对齐。数据从最高有效字节 (MSB) 开始输出。当读取这两个数据字节,前14位用来指定温度测量结果。一个 14 位LSB 等于 0.03125°C,负数用二进制补码格式表示。

测量值 3(内部温度传感器):= [(Temperature)/(0.03125°C)]

Temperature = [(Output Code 3) • (0.03125°C)]

输出代码 3 是 ADC 的两个字节输出数据的前 14 位。

寄存器设置

pYYBAGOEFZ-AeRhSAACTqkZf7F0767.jpg
poYBAGOEFbCAIgYiAACayxKWS10510.jpg
poYBAGOEFb-ABck_AACkZkhlkz4064.jpg

伪代码示例

下面显示了伪代码序列以及设置器件和微控制器所需的步骤,该微控制器与 ADC 相连,以便在单冲转换模 式下从 ADS1118 获取后续读数。 数据回读和器件配置随 Config 寄存器回读一起以 32 位传输周期完成。ADS1118 配置为测量热电偶电压, 满量程范围为 ±256mV,数据速率为 8SPS。器件循环读取热电偶 1 的电压、热电偶 2 的电压以及 ADS1118 内部温度传感器。在获取所有三个读数后,需要使用冷端补偿将热电偶电压转换为热电偶温度。

Configure microcontroller for SPI mode 1 (CPOL = 0, CPHA = 1)

Set CS low; // Start conversions

Send 8D0B8D0B; //Start conversion for thermocouple 1

// Use 32-bit data transmission cycle with Config register readback

// The first iteration of the loop has no data readback

Set CS high;

Loop

{

  Wait 69ms // Wait for typical data period +10% for internal oscillator variation

  Set CS low;

  Send BD0BBD0B; // Read data for thermocouple 1, start conversion for thermocouple 2,

  Set CS high;

  Wait 69ms;

  Set CS low;

  Send 8D1B8D1B; // Read data for thermocouple 2, start conversion for temperature sensor,

  Set CS high;

  Wait 69ms;

  Set CS low;

  Send 8D0B8D0B // Read data temperature sensor, Start conversion for thermocouple 1

  Set CS high;

  // Cold-junction compensation to determine thermocouple temperature

  Convert thermocouple 1 ADC data to voltage;

  Convert thermocouple 2 ADC data to voltage;

  Convert temperature sensor data to temperature;

  Convert temperature sensor data to thermoelectric voltage; // By lookup table or calculation

  Add thermocouple 1 voltage to temperature thermoelectric voltage;

  Convert resulting voltage for thermocouple 1 to temperature; // By lookup table or calculation

  Add thermocouple 2 voltage to temperature thermoelectric voltage;

  Convert resulting voltage for thermocouple 2 to temperature; // By lookup table or calculation

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。