Termopara typu K wraz z modułem przetwornika A/D MAX6675 pozwala łatwo mierzyć wysokie temperatury z zakresu 0°C do 800°C przy rozdzielczości 12 bitów. Prezentowany tu zestaw pracuje na napięciu od 3 V do 5,5 V i do komunikacji wykorzystuje prosty protokół SPI, który równie dobrze można zrealizować na dowolnych trzech GPIO wybranego mikrokontrolera.
Zacznijmy chyba od najważniejszego, czyli od ceny - na moment pisania tego tematu całość można kupić z przesyłką za kilkadziesiąt złotych u nas w kraju, a sprowadzając z Chin możemy zamknąć się i w kwocie 10 zł.
Ważne by tylko zamówić cały zestaw, a nie przypadkiem sam moduł z MAX6675... a przy okazji zajrzyjmy do jego noty katalogowej:
Podłączenie do MCU wydaje się być bardzo proste, potrzebne są tylko trzy linie
MISO, SCK, SSB, ale nie zapominajmy też o wspólnej masie i o zasilaniu.
Protokół SPI - to brzmi groźnie, ale w praktyce tutaj SPI jest użyte w najprostszy możliwy sposób. Nota katalogowa opisuje jak odbywa się komunikacja:
Wizualnie przedstawiona komunikacja:
Czyli w zasadzie ustawiamy CS na stan niski, potem manipulujemy zegarem i odczytujemy kolejne bity z SO. Całość trzeba wykonać jednocześnie respektując timingi, ale wszystko jest na diagramie. Znaczenie odczytanych 16 bitów określa również diagram - nas interesuje przede wszystkim 12 bitów pomiaru, czyli bity od 3 do 14 włącznie.
Teraz pytanie jak to wykorzystać z MCU - no cóż, najlepiej użyć gotowej biblioteki, jest tego mnóstwo pod Arduino:
https://www.arduino.cc/reference/en/libraries/max6675/
Można ją dodać poprzez Library Manager.
Tu kolejna biblioteka:
https://github.com/adafruit/MAX6675-library
Dla większości osób można by tu zakończyć, ale i tak teraz zajrzymy jak ta komunikacja jest wewnątrz zaimplementowana.
Nie używamy tutaj sprzętowego SPI - wystarczą dowolne cyfrowe GPIO:
Kod: C / C++
Do odczytu mamy 16 bitów, czyli dwa bajty. Potrzebna będzie funkcja odczytująca bajt:
Kod: C / C++
W pętli ustawiamy zegar na stan niski, odczekujemy moment a potem odczytujemy dane z MISO. Potem ustawiamy zegar na stan wysoki i czekamy, po czym pętla się powtarza.
Brakuje jeszcze manipulacji pinem CS, ale to mamy na zewnątrz tej funkcji:
Kod: C / C++
Tutaj też odczytamy oba bajty i składamy je w jedno słowo 16-bitowe (chociaż równie dobrze można by w spiRead czytać od razu całe 16 bitów).
Potem trzeba zinterpretować odczytane dane. Mamy tu nieco więcej niż sam pomiar...
Kod: C / C++
Jeden z bitów pozwala sprawdzić nam czy w ogóle pomiar się udał. Może to być przydatne w trakcie poszukiwania błędów. Po sprawdzeniu błędu po prostu przesuwamy całość o 3 bity (by "uciąć" trzy najmłodsze) a potem mnożymy przez 0.25 by uzyskać wynik w stopniach.
I to tyle - już mamy pomiar. Jak zapewne widać, jest to bardzo łatwe do zrealizowania na praktycznie dowolnym MCU a te dumne SPI z ofert wcale nie jest takie straszne w tym przypadku.
Do czego to można wykorzystać?
W moim przypadku zestaw z MAX6675 przydaje się do testów hot air:
Jest to dla mnie niezwykle przydatne, ponieważ jak się z czasem przekonałem, temperatura rzeczywiście "widziana" przez PCB może znacznie się różnić od temperatury na wyświetlaczu stacji hot air w zależności od tego jaką stację mamy i jaki nadmuch nastawimy. Swoje pomiary dokumentuję i umieszczam na interaktywnych wykresach (wersja 350°C,wersja 450°C).
Podsumowując, zestaw z MAX6675 jest bardzo tani i jednocześnie łatwy do uruchomienia, początkujący nie powinni mieć z nim żadnego problemu, jak również powinien ruszyć na nieco mniej znanych MCU, sam go nawet uruchomiłem na BK7231, chociaż w zasadzie ten sam kod ruszy na wszystkich platformach wspieranych przez OBK.
Zapraszam do dyskusji. Czy ktoś z Was też korzystał z MAX6675 w projektach? Jakie macie doświadczenia z tym układem, a może wolicie jakąś alternatywę?
Fajne? Ranking DIY Pomogłem? Kup mi kawę.
