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 地獄編 完