这个项目描述了一个热电偶温度计,可以测量温度高达+1350°C,只使用一个ATtiny85和OLED显示器
它使用ATtiny85的模数转换器(带有x20增益选项)测量热电偶电压,内部温度传感器测量环境温度(显示在屏幕底部),读数精度超过5℃。一些可能的应用包括烹饪温度计,焊接铁温度监视器,或木材燃烧炉温度显示器。
介绍
我最近想建立一个能够测量250°C左右温度的电路,所以我在之前的项目中使用的温度传感器,比如DS12B20,并不合适,因为它们的最高温度限制通常是150°C。这里选择的传感器是热电偶,它利用了两个不同金属之间的结产生与温度成比例的小电压这一事实。最常见的热电偶类型称为K型,它使用铬镍合金(一种镍铬合金)和铝镍合金(一种镍/铝/锰/硅合金)。
人们可以使用自定义热电偶放大器将小电压转换成数字信号,然后从微控制器中读取;一个流行的选择是MAX31855K,它提供了一个SPI输出。
然而,我突然想到,你可以直接使用ATtiny85上的模拟输入读取热电偶。ATtiny85方便地提供了一个10位差分模拟输入与x20增益选项。k热电偶产生约41µv /°C,所以使用1.1 v电压参考我们可以计算该决议和最大范围如下:
分辨率= 1.1/(1024 x 20 x 41 x 10-6) = 1.31℃
最大值= 1024 x 1.31 = 1341°C。
通过采样,得到分辨率低于1°C,这对于许多应用来说绝对足够精确。
ATtiny85是少数AVR微控制器之一,包括ADC输入上的增益选项;我知道的其他型号只有ATtiny861、ATtiny167和ATmega1284P。
虽然k型热电偶可以测量零下200℃的温度,但是为了简单起见,在这个项目中我只支持室温以上的温度。如果有兴趣的话,我可能会在以后的项目中扩展它。
得到了温度
如何通过测量热电压来获得温度呢?
最简单的方法是假定电压和温度之间的关系是线性的,41µv /°C。对于较小的温度范围,这是一个很好的近似;然而,在较大的范围内,与线性行为有显著的偏离。
为了获得最大的精度,您可以使用美国国家标准与技术协会(NIST)提供的系数来求解九阶多项式。然而,这种方法对于我想要达到的精度并不是必需的。
我使用的方法是分段线性模型,用一系列直线段逼近标准响应曲线。我使用在线热电偶温度计算器查找一系列固定点的温度,对应的ADC读数是128的倍数:
然后将它们编码为以下的不动点数组,以十分之一度为单位,用于温度的线性插值:
int Temperature[9] = { 0, 1684, 3370, 4995, 6613, 8269, 9993, 11805, 13751 };传感器测温
热电偶产生的电压并不能给出绝对温度,但可以给出探头的温度和热电偶与电路连接的温度之间的差值。这传统上被称为“冷结”(即使你在测量零度以下的温度,它实际上会比探测器还要热)。因此,所有热电偶放大器都包含一个传感器来测量其内部温度。
幸运的是,ATtiny85包含一个内部温度传感器,因此热电偶温度计使用它来计算冷结温度。
电路
电路如下图所示
对于显示器,我选择了I2C 128x32 OLED显示器,可从Adafruit或英国的Pimoroni获得。33 kΩ电阻器和0.1µf电容器确保显示正确重置权力是第一次申请时,虽然你可能不需要他们。或者,您可以使用AliExpress的等效显示器,或者I2C 64x32 OLED显示器。
我使用了网上购买的k型热电偶,但是不同的供应商可以提供多种探头。
程序
对于内部温度测量和差分电压测量,我都在睡眠模式下进行模拟到数字的转换,这是数据表所建议的,目的是将处理器和外围设备的噪声降到最低。
显示
显示代码类似于我在早期项目中使用的代码,这些项目使用相同的128x32 I2C OLED显示,例如微型机器码监视器。在这个项目中,我只需要数字0到9的字符集定义,以及一些额外的字符,如“-”、“C”和学位符号。
该程序允许您绘制两倍大小的字符;有关如何工作的详细信息,请参阅“大文本”中的“小显示”。
测量内部温度
设置内部温度测量ADC的程序为:
void SetupInternal () { ADMUX = 0<<REFS2 | 2<<REFS0 | 15<<MUX0; // Temperature and 1.1V reference ADCSRA = 1<<ADEN | 1<<ADIE | 4<<ADPS0; // Enable ADC, interrupt, 62.5kHz clock ADCSRB = 0<<ADTS0; // Free running set_sleep_mode(SLEEP_MODE_ADC); }由于程序太多这里就不一一举例了,需要的可以私信我,发你完整版源程序。
测试
注意,在关键应用中使用热电偶温度计之前,应该根据已知温度对其进行测试。我用商用热电偶温度计对温度计进行了测试,沸水温度为100℃,橄榄油温度为220℃,每种温度计的读数都在5℃以内。
要测量固体物体的温度,可以使用聚酰亚胺胶带将热电偶连接到物体上。
编译程序
我使用Spence Konde的ATTiny Core编译了这个程序。选择ATTinyCore菜单上ATTinyCore标题下的ATtiny25/45/85选项。然后检查了是否设置如下(忽略其他选项):
芯片:“ATtiny85”
时钟:“1mhz(内部)”
定时器:“Timer1”
这些是新ATtiny85的默认保险丝设置,但是如果您以前使用过不同设置的ATtiny85,请选择Burn Bootloader来适当地设置保险丝。