设计说明
本指导手册的设计介绍采用 ADS1118 和两个热电偶的温度测量电路。该设计使用 ADS1118 内部电压基准进行热电偶电压测量,而使用板载温度传感器进行冷端补偿 (CJC) 测量。ADC 的两个通道用于两个K 型热电偶,温度测量范围为 –270°C 至 1370°C。该设计包含用于配置器件的 ADC 寄存器设置以及用于配置和读取器件的伪代码。该电路可用于适用于PLC 的模拟输入模块、实验室仪表和工厂自动化等应用。
设计说明
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Ω 等效输入阻抗分开。
对于良好的热电偶,热电偶电压的范围为 –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 测量值确定热电偶实际温度的转换方法。
用于根据热电电压确定热电偶温度的转换表和多项式方程可在 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 位。
寄存器设置
伪代码示例
下面显示了伪代码序列以及设置器件和微控制器所需的步骤,该微控制器与 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
}