2020年5月23日土曜日

BluepillでMAX31855を使ってみた。

BENQのGL2450を修理するときにFETの温度を測定しようと購入していた熱電対とMAX31855を発掘したのでBluepillで使ってみた。モータドライバのFETの温度を測ってみようかなと。

MAX31855はSPI接続の熱電対アンプなんだけど、出力しかないので基本的にはマイコンから32bitのデータを読み出すだけでいいっぽい。

ライブラリも色々あるみたいだけど、結構簡単に読み出せるらしいのでArduino環境で使えるようなスケッチを作ってみた。

bluepillのSPIはPA7がMOSI、PA6がMISO、PA5がSCLになっている。MAX31855はデータアウトプットしかないのでMISOとSCLとCSの3線で通信ができる。

#include <SPI.h>

#define CS0 PA4

void setup() {
  pinMode(CS0, OUTPUT);
  SPI.begin();
  Serial.begin(115200);
}

void loop() {
  SPI.beginTransaction(SPISettings(5000000, MSBFIRST, SPI_MODE0));
  digitalWrite(CS0, LOW);
  int32_t rawData = SPI.transfer16(0x0000);
  rawData = (rawData << 16) | SPI.transfer16(0x0000);
  digitalWrite(CS0, HIGH);
  SPI.endTransaction();
  float temp = (float)(rawData >> 18) * 0.25;
  Serial.println(temp);
  delay(500);
}

IC内のジャンクション温度や熱電対が未接続、GNDやVCCにショートのエラーステータスも確認できるけど今回は特に確認せずに温度だけ取得することができた。D3とD17が常時0なのでデータ通信がちゃんとできているかの確認にも使用できそう。

次回はそういったエラーチェックも一緒に実装してみたい。

0 件のコメント:

コメントを投稿