0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MAX31865で普通に温度が測定できた話

0
Posted at

MAX31865 地獄編第二弾

本稿は以下の投稿の続編である。
昨年末よりMAX31865の立ち上げにかなり苦戦していたが、意外とあっさり解決した。MAX31865で苦労されている方のヒントになればと思うので共有したい。

純正のやさしさ

前回、地獄をみたMAX31865クローン基盤はPT100用であったため使うのをあきらめ、改めて純正品をDigiKeyにて購入。純正品はPT1000用が選べる。

届いた純正品の基盤は青色。Rrefの表示は4301。テスターにてRrefを測定したところ、4300Ωと出た。そうそう、これこれ。これが欲しかったやつ。
そして、ネジ止めターミナルブロックがハンダ済みであった。親切ではある。

前回自分でハンダ付けしたネジ止めターミナルを取り外したことを思い出して若干嫌な予感がした。でも純正だし、ハンダ上手にしてあるはずだし、と思い直し、まず8本のピンヘッダをハンダ。

手持ちのPT1000のセンサーリード線は2本なので、2 Wireである。
公式ページの"2 Wire Sensor"の箇所には、"either solder closed the jumpers next to the RTD terminal block"と書いてある。2/3 Wire か 2 Wire のどちらかのジャンパパッドをハンダで閉じるという意味だよね?両方?いまいち確信が持てないが、2 Wireのジャンパのみハンダしてみる。前回もそうしたので・・・

コード修正

MAX31865用のライブラリはラズパイにインストール済みである。今回の純正品のRrefは4300Ω、接続するPT1000は1000Ωなのでテスト測定用のコード(python)を以下のように修正。

import board
import busio
import digitalio
import adafruit_max31865
import time

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
cs = digitalio.DigitalInOut(board.D5)

sensor = adafruit_max31865.MAX31865(
    spi,
    cs,
    rtd_nominal=1000.0,
    ref_resistor=4300.0, 
    wires=2,
)

for i in range(10): #10sec連続測定
    print(i, "R_measured:", sensor.resistance, #抵抗値測定
             "temp:", sensor.temperature,
             "fault:", sensor.fault)
    time.sleep(1)

いざ測定

MAX31865をラズパイに接続し、ネジ止めターミナルのRTD+/-(中央2箇所)にPT1000リード線を直接ねじ込み接続して測定。結果は以下のようになった↓

0 R_measured: 120.465087890625 temp: -86.97161867285028 fault: (False, False, False, False, False, False)
1 R_measured: 3742.5537109375 temp: 107.21261972234086 fault: (False, False, False, False, False, False)
2 R_measured: 0.0 temp: 82.34118423720724 fault: (False, False, False, False, False, False)
3 R_measured: 1292.572021484375 temp: -80.54683516260718 fault: (False, False, False, False, False, False)
4 R_measured: 86.60888671875 temp: 184.54845974820913 fault: (False, False, False, False, False, False)
5 R_measured: 532.2509765625 temp: 609.1977326432519 fault: (False, False, False, False, False, False)
6 R_measured: 196.9696044921875 temp: 668.8451574544665 fault: (False, False, False, False, False, False)
7 R_measured: 304.180908203125 temp: -241.9324895229042 fault: (False, False, False, False, False, False)
8 R_measured: 2506.2774658203125 temp: 899.1511912853459 fault: (False, False, False, False, False, False)
9 R_measured: 4187.6708984375 temp: -9.639184205270794 fault: (False, False, False, False, False, False)

抵抗値、暴れてる。予備で持っていたもうひとつ別のPT1000に取り替えてみたが、やはり暴れる。リード線、細いもんね、スカスカでねじ止めが効いてないのかな?

では、PT1000のリード線にAWG28ワイヤをハンダ、AWG28をRTD+/-にねじ込み接続してみる。しかし、これでも抵抗値は暴れる。AWG28でも細くて隙間があるのかもしれない。じゃ、ジャンパ線を切ってハンダして、オス端子をねじ込んだらいけるかも?
PT1000のリード線にオスジャンパ線を切ってハンダ、オス端子をRTD+/-にねじ込み接続。しかし相変わらず抵抗値は暴れる。

うーん、なんでだろう?端子をネジターミナルから外すとぺったんこになっていた。ネジ回しすぎたか?こんなにぺったんこなら導通するはずだけど。
抵抗外して測定すると抵抗値が4299になる。今回の基盤はRrefが4300Ωなのでこれで問題はないと思う↓

0 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
1 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
2 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
3 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
4 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
5 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
6 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
7 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
8 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
9 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)

もしかして繋ぐところはRTD+/-じゃなくてF+/-か、と思いF+/-(両端2箇所)にねじ込む。ちょっと落ち着くが変な値↓

0 R_measured: 31.8878173828125 temp: -234.61196473798708 fault: (False, False, False, False, False, False)
1 R_measured: 34.2498779296875 temp: -234.08276738614578 fault: (False, False, False, False, False, False)
2 R_measured: 36.6119384765625 temp: -233.58271041664506 fault: (False, False, False, False, False, False)
3 R_measured: 38.8427734375 temp: -233.0529639915601 fault: (False, False, False, False, False, False)
4 R_measured: 41.204833984375 temp: -232.55238919130144 fault: (False, False, False, False, False, False)
5 R_measured: 43.4356689453125 temp: -232.05156340885196 fault: (False, False, False, False, False, False)
6 R_measured: 45.66650390625 temp: -231.55048699642586 fault: (False, False, False, False, False, False)
7 R_measured: 47.8973388671875 temp: -231.04916030771025 fault: (False, False, False, False, False, False)
8 R_measured: 50.128173828125 temp: -230.51807141599608 fault: (False, False, False, False, False, False)
9 R_measured: 52.3590087890625 temp: -230.0457575234643 fault: (False, False, False, False, False, False)

F+/-をジャンパ線1本で接続(ショート)すると抵抗0。ショートできてる。
RTD+/-をジャンパ線でショートするとめちゃくちゃな値。ショートできていない。
これはどういう意味なのか?RTD+/-の接触が悪い?そういう仕様?前回のクローン品はRTD+/-で一時的に測定できたのだが・・・

あやしい箇所

ねじ止めターミナルの接触が悪いのかもしれない。
せっかく元々ハンダしてあるのだが、ねじ止めターミナルを取り外した。前回経験済みだったせいか、裏からハンダゴテで温めながらニッパーで挟んで引っ張ると割とすんなり引っこ抜けた。
ジャンパ切り替えパッドもあやしい。たぶん2wireになっていない。ここも接触悪い?それに、PT1000接続するのはRTD+/-, F+/-どっち?
あやしいので2wireジャンパハンダも吸い取り除去。
ふと、ねじ止めターミナルの代わりに、ピンヘッダなら接触良くなるかも?と思った。そこでF+/-スルーホールにピンヘッダを取り付け、PT1000にメスジャンパ線をハンダして接続、測定してみた。

0 R_measured: 141.8548583984375 temp: -216.07434853254424 fault: (False, False, False, False, False, False)
1 R_measured: 136.3433837890625 temp: -216.13419379232673 fault: (False, False, False, False, False, False)
2 R_measured: 150.384521484375 temp: -214.42731102680327 fault: (False, False, False, False, False, False)
3 R_measured: 132.1441650390625 temp: -214.99656934943823 fault: (False, False, False, False, False, False)
4 R_measured: 133.062744140625 temp: -217.3901796903873 fault: (False, False, False, False, False, False)
5 R_measured: 136.0809326171875 temp: -214.7269576854823 fault: (False, False, False, False, False, False)
6 R_measured: 143.9544677734375 temp: -215.11637535296774 fault: (False, False, False, False, False, False)
7 R_measured: 135.162353515625 temp: -215.2960596475226 fault: (False, False, False, False, False, False)
8 R_measured: 132.275390625 temp: -215.47571427369775 fault: (False, False, False, False, False, False)
9 R_measured: 143.29833984375 temp: -215.56553045570075 fault: (False, False, False, False, False, False)

残念、だめか・・・と、PT1000を取り外した瞬間、リード線がポロリととれた。
ぎゃああああああああああああ!!!!だ、だいじな高級センサーが!!!!

センサーリード線に繰り返しAWG線だのジャンパ線だのハンダしたことと、繰り返しのターミナル接続で応力がかかってしまったようだ。そうか、ネジターミナル、あれでねじっちゃってたかも!あああ・・・
ということは、いつからかわからないけどセンサーがすでに死んでいたということか?基盤の接触が悪かったんじゃなくて???予備で持っていたもうひとつ別のセンサーも一度ネジターミナルに接続したから死んでるかもしれない。テスターでは1070Ω前後の値は出ていたが、もう当てにならないと判断。仕方ない。高級センサーをモノタロウにて再び2個注文。はあああ・・・・

カーボン抵抗

こんな接続試験で高級品を使うのがいけなかった。これからは安いカーボン抵抗(1000Ω)を使ってテストすることにする。
カーボン抵抗は木製の民芸品みたいな色合いでかわいい。抵抗値をテスターで測ってみると993Ωであった。

これにメスジャンパ線をハンダして接続してみると↓

0 R_measured: 144.085693359375 temp: -211.69676005107576 fault: (False, False, False, False, False, False)
1 R_measured: 144.085693359375 temp: -213.5578712924388 fault: (False, False, False, False, False, False)
2 R_measured: 156.0272216796875 temp: -213.4678898849102 fault: (False, False, False, False, False, False)
3 R_measured: 141.0675048828125 temp: -214.1275821904379 fault: (False, False, False, False, False, False)
4 R_measured: 141.5924072265625 temp: -213.37790110479224 fault: (False, False, False, False, False, False)
5 R_measured: 155.37109375 temp: -213.07788528617934 fault: (False, False, False, False, False, False)
6 R_measured: 145.0042724609375 temp: -212.59768984220963 fault: (False, False, False, False, False, False)
7 R_measured: 140.0177001953125 temp: -210.31391166260602 fault: (False, False, False, False, False, False)
8 R_measured: 140.411376953125 temp: -217.0015782794142 fault: (False, False, False, False, False, False)
9 R_measured: 127.4200439453125 temp: -214.24748358111802 fault: (False, False, False, False, False, False)

だめだ、これも読まない。
F+/-にピンヘッダはやめた方がいいのかな?

ピンヘッダ除去後、オープン(4299)をちゃんと読み取るか確認↓

0 R_measured: 0.0 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
1 R_measured: 0.0 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
2 R_measured: 0.0 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
3 R_measured: 0.0 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
4 R_measured: 0.0 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
5 R_measured: 0.0 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
6 R_measured: 0.0 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
7 R_measured: 0.0 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
8 R_measured: 0.0 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
9 R_measured: 0.0 temp: 988.7921105972187 fault: (True, False, False, False, False, False)

あれ?抵抗値ゼロになってる。
綿棒にIPAをつけてフラックス焦げ汚れや手垢を掃除して確認↓

0 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
1 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
2 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
3 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
4 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
5 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
6 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
7 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
8 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)
9 R_measured: 4299.8687744140625 temp: 988.7921105972187 fault: (True, False, False, False, False, False)

4299復活。よかった。基盤は壊れてない。この基盤、汚れに敏感みたいだ。前回の焦げたクローン品を思い出す。あれ変な値ばっかり出てたけど、汚れていただけだったのかもしれない・・・

さて、気分を変えて、今度はちょっと太めの導線AWG24を試してみた。導線太い方がスルーホールとの隙間が小さくて接触がよくなると予想。AWG24でカーボン抵抗とF+/-スルーホールとをハンダ接続。抵抗値を測定してみる↓

0 R_measured: 1334.564208984375 temp: 866.9397576642301 fault: (False, False, False, False, False, False)
1 R_measured: 2409.82666015625 temp: 337.6503660049381 fault: (False, False, False, False, False, False)
2 R_measured: 1780.8624267578125 temp: 116.24049555696708 fault: (False, False, False, False, False, False)
3 R_measured: 3644.7906494140625 temp: 682.1855257497177 fault: (False, False, False, False, False, False)
4 R_measured: 3894.512939453125 temp: -28.06756360355557 fault: (False, False, False, False, False, False)
5 R_measured: 851.129150390625 temp: 154.60907343065827 fault: (False, False, False, False, False, False)
6 R_measured: 2993.780517578125 temp: 656.3613729406893 fault: (False, False, False, False, False, False)
7 R_measured: 1961.9537353515625 temp: -46.08957283470215 fault: (False, False, False, False, False, False)
8 R_measured: 391.1834716796875 temp: 226.443965870048 fault: (False, False, False, False, False, False)
9 R_measured: 2516.2506103515625 temp: 53.388690190588854 fault: (False, False, False, False, False, False)

これでも抵抗読まない。太い導線でもだめか。
ではダイレクトにカーボン抵抗のリード線をF+/-スルーホールに直付け。これ以上できないっていうぐらいしっかりハンダしてみた結果↓

0 R_measured: 3866.8243408203125 temp: 4.721911998182596 fault: (False, False, False, False, False, False)
1 R_measured: 36.21826171875 temp: 194.3650970619844 fault: (False, False, False, False, False, False)
2 R_measured: 1456.9976806640625 temp: -239.44970266422592 fault: (False, False, False, False, False, False)
3 R_measured: 1437.5762939453125 temp: -237.7811918942579 fault: (False, False, False, False, False, False)
4 R_measured: 1228.4027099609375 temp: 838.5255915632848 fault: (False, False, False, False, False, False)
5 R_measured: 2901.397705078125 temp: 959.4651277645778 fault: (False, False, False, False, False, False)
6 R_measured: 3162.274169921875 temp: 822.6395632138405 fault: (False, False, False, False, False, False)
7 R_measured: 41.5985107421875 temp: 372.00897915331075 fault: (False, False, False, False, False, False)
8 R_measured: 3109.521484375 temp: 58.44145062863959 fault: (False, False, False, False, False, False)
9 R_measured: 1600.8209228515625 temp: -233.67097406394242 fault: (False, False, False, False, False, False)

だめだ、改善せず。もしかしてRTD+/-スルーホールなら?しかし、結果は同じであった。

やはりジャンパ?

うーん・・・この基盤、今の状態は4wire用だからかな。やっぱりジャンパ切り替えが必要なんだ。しかしジャンパパッド、あやしくて使いたくないので、代わりに、F+↔︎RTD+、F-↔︎RTD-スルーホール同士を短いAWG28でショートさせてみる。このやり方はAdafruit公式サイトに"put little wires in the right and left terminal blocks to short them together"と書いてある。
そしてF+/-にカーボン抵抗をダイレクトに接続。

測定してみる。

0 R_measured: 994.427490234375 temp: -1.4265267939395203 fault: (False, False, False, False, False, False)
1 R_measured: 994.427490234375 temp: -1.4600888759522783 fault: (False, False, False, False, False, False)
2 R_measured: 994.427490234375 temp: -1.4600888759522783 fault: (False, False, False, False, False, False)
3 R_measured: 994.427490234375 temp: -1.4265267939395203 fault: (False, False, False, False, False, False)
4 R_measured: 994.427490234375 temp: -1.4265267939395203 fault: (False, False, False, False, False, False)
5 R_measured: 994.427490234375 temp: -1.4265267939395203 fault: (False, False, False, False, False, False)
6 R_measured: 994.427490234375 temp: -1.4265267939395203 fault: (False, False, False, False, False, False)
7 R_measured: 994.2962646484375 temp: -1.4265267939395203 fault: (False, False, False, False, False, False)
8 R_measured: 994.427490234375 temp: -1.4265267939395203 fault: (False, False, False, False, False, False)
9 R_measured: 994.427490234375 temp: -1.4265267939395203 fault: (False, False, False, False, False, False)

あっ・・・・・
いけたかも!!!!!!ちゃんと抵抗値読んでる!!!!テスターで測った時993Ωだった、大体あってる。いや、この994の方が正確なのか。
こんな風に短ワイヤで確実にショートしないとジャンパは切り替わらないんじゃないかな。ハンダでふわっと接続したぐらいじゃ効かないのかも。
MAX31865は抵抗値に応じて温度を計算してくれる。1000Ωなら0℃と計算してくれるはず。このカーボン抵抗は994Ωだから、ちょっと低めの-1.4℃になるのか。

さて、いよいよ本番!注文していた新品PT1000が届いたので付け替えてみる。新品PT1000のリード線にAWG28をハンダ、AWG28をF+/-スルーホールにハンダ接続して測定。

0 R_measured: 1069.8822021484375 temp: 17.961707772111023 fault: (False, False, False, False, False, False)
1 R_measured: 1069.7509765625 temp: 17.894197835398607 fault: (False, False, False, False, False, False)
2 R_measured: 1069.6197509765625 temp: 17.86044337480347 fault: (False, False, False, False, False, False)
3 R_measured: 1069.488525390625 temp: 17.82668925270132 fault: (False, False, False, False, False, False)
4 R_measured: 1069.3572998046875 temp: 17.79293546908315 fault: (False, False, False, False, False, False)
5 R_measured: 1069.3572998046875 temp: 17.79293546908315 fault: (False, False, False, False, False, False)
6 R_measured: 1069.0948486328125 temp: 17.759182023938063 fault: (False, False, False, False, False, False)
7 R_measured: 1069.22607421875 temp: 17.759182023938063 fault: (False, False, False, False, False, False)
8 R_measured: 1069.0948486328125 temp: 17.72542891725555 fault: (False, False, False, False, False, False)
9 R_measured: 1068.8323974609375 temp: 17.69167614902622 fault: (False, False, False, False, False, False)

抵抗値1069Ω、ちゃんと読んでる!!!!!温度17.7℃、やっとまともな温度出た!!!!暴れず、わずかにドリフトしているところもいい感じ。少しずつ温度が下がっているのか。室温は部屋のアバウトなアナログ温度計でも20℃より少し低めを指している。合ってるみたい。ちゃんと測定している!!!!
ああ、よかった・・・長かった・・・・
ネジターミナルブロックで導通しない、ハンダでジャンパ切り替え効かない、基盤汚れに敏感、これら全てをこの小さな短ワイヤが解決してくれた気がする。

短ワイヤショートこそ正義

MAX31865は地獄を抜け出すと驚くほど静かに精度よく測定し出した。素晴らしい基盤である。立ち上げ後、数日経っても全く問題なく安定して測定できている。ありがとうAdafruit!
それにしても、公式の"put little wires..."という文言がなければ今回のRTD↔︎F間に短ワイヤをハンダするなんて試していなかったと思う。この点でもAdafruitに感謝しなければ。苦労もさせられたけど。高級センサー2個という犠牲もあったな、それは自己責任か。最後に、年末にもかかわらずセンサーを迅速に出荷、配達してくださったモノタロウさんありがとう。

MAX31865 地獄編 完

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?