(2019.7.16 作成)
このページでは右写真リンクにあるMAXIM integrated社の熱電対を用いた温度センサMAX31855について紹介したいと思います。このリンクにもあるように200円以下で購入することができるので、とてもお安く導入できるかと思います。
同社のMAX6675という同様の製品があるのですが、こちらで比較していますようにMAX31855の方が優れていると思います。
簡単に両者の違いを説明するとMAX31855の方が温度分解能が同じであるにもかかわらず測定温度範囲が広く、また基準温度接点の温度も出力してくれる点が異なります。
とても有名なICなのでGoogle先生に質問すれば多くのサイト様を教えていただけます。実際このサイトでもMAX6675を使用した例ではArduinoを用いて使用する例を紹介しています。
MAX31855も同様にArduinoで簡単に使用することもできますが、このICの使用法はとても簡単でSPIで4バイト読み込んで熱電対の測温接点の温度と基準温度接点の温度を取り出すだけです。
そこでこのページではSTM32F103C8T6基板を使用して動かした際のプログラムを公開するとともに、簡単な測定例を示してみようと思います。
#include "DKS_Common_F103xB.h" #include "DKS_F103C8T6.h" #include "DKS_SPI_F103xB.h" #include "DKS_GPIO_F103xB.h" #include "DKS_Thermocouple.h" DKS::STM32F103C8T6 board(DKS::BlackPill); DKS::SPI::SPI_ReceiveOnlyMaster spi; DKS::DigitalOut scl, sda; DKS::DigitalOut cs; DKS::Thermocouple::MAX31855 max; float temp, reftemp; // temperature int main(void) { DKS::InitSystem(); board.Init(); int16_t temp16, ref16; spi.Init(SPI2, 0, 0); //PB13:SCK, PB14:MISO cs.Init(GPIOA, LL_GPIO_PIN_10, DKS::Push_Pull, DKS::Pull_Up); max.Init(&spi, &cs); for (;;) { max.Get(temp16, ref16); if (max.Error != DKS::Thermocouple::No_Error) board.IndicateError(); temp = max.Convert2Temperature(temp16); reftemp = max.Convert2RefTemperature(ref16); DKS::Delay(500); }; }
上記プログラムでは温度測定結果(temp, reftemp)をグローバル変数として定義しているのでSTM studioで測定結果をグラフ化することができます。
実際に測定してみた結果が右図です。測温側接点温度が灰色、基準側温度が水色で表示されています。
最初熱電対の測温部を手で触ったので37度まで温度が上昇していますが、基準側接点温度は変わっていません。
しかし後半では測温側接点に触れずにICの上面側だけを触ってみました。その結果、基準接点側だけでなく測温側の温度も上昇したとして計測されています。
このことから計測するICの温度はなるべく一定に保つことが測温側の測定精度を保つために必要であることがわかります。
いかがでしょうか?非常に簡単に使え、しかも安価なので温度を測りたいときにはとても良いデバイスではないでしょうか?
まだコメントはありません。