цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Подключаем термопару к Raspberry Pi через MAX31855

Подключаем термопару к Raspberry Pi через MAX31855

Автор: Mike(admin) от 6-01-2017, 18:45

Для измерения температуры в тяжелых условиях окружающей среды, например, в промышленных установках или научно-исследовательских приборах, зачастую используют такие устройства, как термопары. Сегодня существуют различные типы термопар (K, J, N, T, S, R, E), различающиеся своим составом и, как следствие, своими характеристиками.


Подключаем термопару к Raspberry Pi через MAX31855

Для того, чтобы электронная система (процессор, микроконтроллер) смогла считывать сигналы с термопар, применяются специальные микросхемы преобразователей сигналов термопар. Ярким представителем таких устройств является микросхема MAX31855. В данном материале будет рассмотрено взаимодействие одноплатного компьютера Raspberry Pi с преобразователем MAX31855, подключенного к термопаре.


MAX31855 способен преобразовывать сигналы термопар всех перечисленных выше типов в цифровую форму для дальнейшего использования в цифровой системе. Помимо этого он обеспечивает компенсацию опорных спаев этих термопар. Данные могут передаваться с помощью интерфейса SPI. Они представлены в 14-разрядном формате со знаком. Этот преобразователь имеет диапазон измеряемых температур от -270 °C до +1800 °C с разрешением 0.25 °C. Точность измерения составляет ±2°C для термопар K-типа при измерении температур в диапазоне от -200 °C до + 700 °C.


Для взаимодействия Raspberry Pi с MAX31855 и считывания значений температуры используется приведенный ниже код на Java.



import java.io.IOException;
import java.nio.ByteBuffer;

import com.pi4j.io.spi.SpiChannel;
import com.pi4j.io.spi.SpiDevice;
import com.pi4j.io.spi.SpiFactory;

public class MAX31855_Thermocouple {
    public static SpiDevice spi = null;
    public static void main(String args[]) throws InterruptedException, IOException {
    	
    	System.out.println("Starting Thermocouple Application.");
        spi = SpiFactory.getInstance(SpiChannel.CS0,SpiDevice.DEFAULT_SPI_SPEED,SpiDevice.DEFAULT_SPI_MODE);
        while(true){
        	System.out.println(getConversionValue());
            Thread.sleep(2000);
        }
        
    }
    public static double getConversionValue() throws IOException {

        byte data[] = new byte[] {0,0, 0, 0};// Информационная заглушка
       
        byte[] result = spi.write(data); //Запрос данных из MAX31855 через SPI с информационной заглушкой
        
        if((result[0] & 128)==0 && (result[1] & 1)==1 ) {//Знаковый бит это 0, и D16 в высоком логическом уровне, что означает, что термопара не подключена
            System.out.println("Thermocouple is not connected");
            return 0;
        }
        String stringResult=String.format("%32s",Integer.toString(ByteBuffer.wrap(result).getInt(), 2)).replace(' ', '0');
        double valInt=0.0;
        
        if(stringResult.charAt(0)=='1' ){  //Проверка знакового бита
         	StringBuilder onesComplementBuilder = new StringBuilder();
         	
        	for(char bit : stringResult.substring(0, 12).toCharArray()) {
        	    onesComplementBuilder.append((bit == '0') ? 1 : 0);  // Если бит равен 0, добавляем 1. если бит равен 1, добавляем 0.
        	}
        	String onesComplement = onesComplementBuilder.toString();
        	valInt = -1*( Integer.valueOf(onesComplement, 2) + 1);.
        	
        }else{
        	valInt=Integer.parseInt(stringResult.substring(0, 12),2); 
        }
        
        if(stringResult.charAt(12)=='1') //Проверка D18 и D19 на дробные значения
        	valInt+=0.5;	
        if(stringResult.charAt(13)=='1')
        	valInt+=0.25;
        
        return valInt;
    }
}



Теги: Raspberry Pi, термопара, MAX31855



Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий