-
아두이노 SPI 통신 | 열전대 써모커플 증폭 모듈 MAX31856Technology/Arduino 2024. 11. 21. 20:06
1. SPI 통신
SPI(Serial Peripheral Interface) 통신은 I2C 통신과 마찬가지로, 한 컨트롤러(master)에 여러 개의 주변 장치(slave)를 연결하여 신호를 주고 받는다. SPI 통신은 데이터를 구분하는 동기 클럭 라인(Synchronous Clock, SCLK)과, 컨트롤러에서 주변 장치로 데이터를 보내는 라인(Master Out Slave In MOSI), 주변 장치에서 컨트롤러로 데이터를 보내는 라인(Master In Slave Out, MISO), 주변 장치를 선택하는 라인(Chip Select, CS)으로 구성되어 있으며, CS 신호선을 제외하고는 컨트롤러와 모든 주변 장치가 세 가닥의 신호선을 공유한다. I2C와는 다르게 주변 장치들은 고유 주소를 가지고 있지 않으며, CS 신호선을 통해 신호를 보내어 통신을 시작할 주변 장치를 활성화한 뒤 통신을 수행한다.
아두이노 플랫폼에서도 SPI 통신을 지원하므로, 아두이노 하드웨어에 SPI 통신을 위한 SCLK핀, MISO핀, MOSI핀, CS핀이 디지털 입출력 핀과 연동되어 있다. 아두이노 우노의 경우, 디지털 입출력 13번 핀을 SCLK핀으로, 12번 핀을 MISO핀으로, 11번 핀을 MOSI핀으로, 10번 핀을 CS핀으로 사용할 수 있다.
2. 열전대
서로 다른 종류의 금속 양 끝단을 연결한 채로 한쪽 끝을 가열하면 폐회로를 따라 전류가 흐르는데, 이를 열전 효과(thermoelectric effect), 또는 제백 효과(Seebeck effect)라 한다. 이 효과를 이용해 가열하지 않는 한쪽 끝에서 전압을 측정함으로써 물체의 온도를 알아내는 것이 열전대(thermocouple)이다. 열전대는 어떤 종류의 금속 조합을 사용하느냐에 따라 J타입, K타입, E타입, T타입으로 구분할 수 있으며, 타입에 따라 온도 측정 범위와 성능을 정리하면 아래 표와 같다. 이번 예제에서 사용하고자 하는 열전대는 산업 현장에서도 가장 많이 사용되는 K타입으로, 아래 링크로 접속하면 구매할 수 있다. K타입 열전대의 경우에는 노란색 전선과 빨간색 전선이 노출되어 있는데, 각각 양극과 음극에 해당한다.
열전대 종류 측정 온도 범위 J 0 ~ 750 °C K -200 ~ 1250 °C E -200 ~ 900 °C T -250 ~ 350 °C 3. 열전대 증폭 모듈 MAX31856
열전 효과로 생겨나는 전류와 이에 따른 전압은 매우 작기 때문에, 다른 논리 회로와 연결하여 사용하기 위해서는 신호를 일정 이상으로 증폭할 필요가 있다. 또한 열전대의 종류에 따라 성능이 제각각이기 때문에 종류에 따른 보정값을 추가해야 한다. 열전대 증폭 모듈 MAX31856은 열전대로부터의 전압을 증폭하여 출력하는 회로로, 모든 종류의 열전대를 사용할 수 있으며, 프로그램에서 설정값을 입력하는 것으로 보정값을 간단한게 설정할 수 있다. 해당 모듈은 SPI 통신으로 데이터를 주고 받기 때문에 전원 단자와 접지 단자 외에 동기 클럭 단자(Synchronous Clock, SCK), 시리얼 데이터 출력 단자(Serial Data Output, SDO), 시리얼 데이터 입력 단자(Serial Data Input, SDI), 주변 장치 선택 단자(Chip Select, CS)를 추가로 가지고 있다. 통신 시 논리 전압은 전원의 전압으로 결정되는데, 전원 단자에 DC 3.3V 전원을 연결할 경우에는 3.3V로, DC 5V 전원을 연결할 경우에는 5V로 통신이 이루어진다. 아두이노 우노의 경우 논리 전압이 5V이므로, 전원 단자에 DC 5V를 공급하면 되겠다. 아래 링크로 접속하면 해당 모듈을 구매할 수 있다.
4. 아두이노 라이브러리 추가
해당 모듈 제조사 Adafruit는 사용자들이 아두이노 플랫폼에서 해당 모듈을 자유롭게 사용할 수 있도록 SPI 통신을 비롯한 모든 알고리즘을 라이브러리로 구현하여 공개하였다. 그러나 아두이노 플랫폼에서 기본적으로 제공하지는 않기 때문에 라이브러리를 IDE에 추가하는 과정이 필요하다. 아두이노 IDE 상단 툴바에서 '툴'을 선택한 뒤 '라이브러리 관리' 항목을 선택하자. 그러면 곧이어 '라이브러리 매니저' 창이 나타나는데, 해당 창 오른쪽 상단에 라이브러리 이름을 입력하면 아두이노 플랫폼에서 지원하는 라이브러리를 검색할 수 있다. 해당 칸에 'Adafruit_MAX31856'를 입력하자. 라이브러리를 검색하면 입력한 검색어와 관련된 라이브러리 목록이 나타난다. 'Adafruit_MAX31856' 최신 버전을 선택하여 설치하도록 하자. 아래 링크로 접속하면 해당 라이브러리에 대한 정보를 확인할 수 있다.
5. 예제
5.1. 회로 구성
5.2. 프로그램 작성
#include <Adafruit_MAX31856.h> // MAX31856 모듈 라이브러리 추가 // maxThermo라는 이름의 MAX31856 객체 생성 // CS, MOSI, MISO, SCLK 순서로 디지털 핀 정의 Adafruit_MAX31856 maxThermo = Adafruit_MAX31856(10, 11, 12, 13); float CJ_Temp; // 실수형 변수 선언 float TC_Temp; void setup(void) { Serial.begin(9600); // 시리얼 통신 시작 (통신 속도: 9600 bps) // MAX31856 모듈 SPI 통신 시작 while (!Serial) delay(10); maxThermo.begin(); maxThermo.setThermocoupleType(MAX31856_TCTYPE_K); // 열전대 종류 설정: K타입 Serial.print("Thermocouple type: "); switch (maxThermo.getThermocoupleType()) { case MAX31856_TCTYPE_B: Serial.println("B Type"); break; case MAX31856_TCTYPE_E: Serial.println("E Type"); break; case MAX31856_TCTYPE_J: Serial.println("J Type"); break; case MAX31856_TCTYPE_K: Serial.println("K Type"); break; case MAX31856_TCTYPE_N: Serial.println("N Type"); break; case MAX31856_TCTYPE_R: Serial.println("R Type"); break; case MAX31856_TCTYPE_S: Serial.println("S Type"); break; case MAX31856_TCTYPE_T: Serial.println("T Type"); break; case MAX31856_VMODE_G8: Serial.println("Voltage x8 Gain mode"); break; case MAX31856_VMODE_G32: Serial.println("Voltage x8 Gain mode"); break; default: Serial.println("Unknown"); break; } delay(1000); } void loop(void) { CJ_Temp = maxThermo.readCJTemperature(); // 상온 온도값을 변수에 저장 Serial.print("Cold Junction Temp: "); // 시리얼 모니터에 문자열 출력 Serial.println(CJ_Temp); // 시리얼 모니터에 변수에 저장된 값을 출력한 뒤 줄 바꿈 TC_Temp = maxThermo.readThermocoupleTemperature(); // 열전대 온도값을 변수에 저장 Serial.print("Thermocouple Temp: "); Serial.println(TC_Temp); // 온도값 오류 확인 uint8_t fault = maxThermo.readFault(); if (fault) { if (fault & MAX31856_FAULT_CJRANGE) Serial.println("Cold Junction Range Fault"); if (fault & MAX31856_FAULT_TCRANGE) Serial.println("Thermocouple Range Fault"); if (fault & MAX31856_FAULT_CJHIGH) Serial.println("Cold Junction High Fault"); if (fault & MAX31856_FAULT_CJLOW) Serial.println("Cold Junction Low Fault"); if (fault & MAX31856_FAULT_TCHIGH) Serial.println("Thermocouple High Fault"); if (fault & MAX31856_FAULT_TCLOW) Serial.println("Thermocouple Low Fault"); if (fault & MAX31856_FAULT_OVUV) Serial.println("Over/Under Voltage Fault"); if (fault & MAX31856_FAULT_OPEN) Serial.println("Thermocouple Open Fault"); } delay(500); // 500 ms 대기 }
[함께 읽으면 좋은 페이지]
참고문헌
- Arduino. (2024). Arduino UNO Rev3 with Long Pins. https://docs.arduino.cc/retired/boards/arduino-uno-rev3-with-long-pins/. 2024.11.22.
- Omega Engineering. (n.d.). 열전대 | 써모커플 | Thermocouple. https://kr.omega.com/prodinfo/thermocouples.html. 2024.11.23.
- Omega Engineering. (n.d.). Wire Color Codes and Limits of Error. https://kr.omega.com/techref/colorcodes.html. 2024.11.23.
- Rohde Schwarz. (2023). Understanding SPI. YouTube. https://www.youtube.com/watch?v=0nVNwozXsIc. 2024.11.22.
- Wikipedia contributors. (2024). Thermoelectric effect. Wikipedia. https://en.wikipedia.org/wiki/Thermoelectric_effect. 2024.11.23.
- Wikipedia contributors. (2024). Thermocouple. Wikipedia. https://en.wikipedia.org/wiki/Thermocouple. 2024.11.23.
반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 프로젝트 | 휴대용 냉각기 (0) 2024.11.23 아두이노 | 펠티어 열전소자 (0) 2024.11.22 아두이노 라이브러리 | 다중 스텝모터 동시 제어 (1) 2024.11.20 아두이노 | 유도형 근접 스위치 DC 5V 모듈 (0) 2024.11.19 아두이노 프로젝트 | 컨베이어 벨트 (0) 2024.11.17