MAX31855 - A better thermocouple module

preview_player
Показать описание
In this video I show you how the MAX31855 thermocouple module works. I talk about the connections, the wiring and of course the coding. I also show some tricks and tips about the bit shifting and bitwise operations which can become handy when you need to work with large amount of bits or you want to read a specific part from your binary number. This module is really nice because it supports negative temperatures and its measurement range is also really broad.

If the module gives weird readings, put a 10 nF capacitor between the input pins of the thermocouple!

If you want to support my work, please consider buying the parts using my affiliate links:
Рекомендации по теме
Комментарии
Автор

Great video, your discussion of the coding was excellent!
I have a question - Can you confirm whether an ungrounded thermocouple is essential for use with the max31855 breakout board? Alternately, can a grounded thermocouple be used with the max31855 breakout board?

xkeecrp
Автор

hi how to measure negative temperature on these microcircuits?

dargindarginec
Автор

Great project. Since a while I was needing for a quad thermometer and I was searching some off the shelf cheap solution, maybe I will be considering build something between these lines

isidoromaich
Автор

Good job! Juste one point: what if the internal temp gets negative? You take care of this for the outside temp, not for the internal one.

jean-yvesorssaud
Автор

Can you please make 4 channel pt100 data logger?

hardikshah
Автор

I am using the STM32C011F6U6 controller, MAX31855 chip and I am facing issues with the clock and data signals not being received correctly. Upon examining Adafruit's schematics, I noticed they have pull-up resistors on the SO (Slave Out) and clock pins. Should I include pull-up resistors to ensure proper reception of data and clock signals?

My SPI Configuration

PA5 SPI1_SCK
PA6 SPI1_MISO
PB7 SPI1_Chip_Select

/**SPI1 GPIO Configuration
GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF0_SPI1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

/*Configure GPIO pin : CHIP_SELECT_Pin */
GPIO_InitStruct.Pin = CHIP_SELECT_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(CHIP_SELECT_GPIO_Port, &GPIO_InitStruct);

/* SPI1 parameter configuration*/
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES_RXONLY;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 7;
hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;

// Main Logic
while (1)
{
// Read temperature data from the slave MAX31855KASA Thermocouple Chip

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
ret = HAL_SPI_Receive(&hspi1, buf, 4, 1000);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
HAL_Delay(1000);
}

I am consistently receiving a buffer value of 1, except in cases of error status(short circuit, open circuit and so on...) where it is always 0."

johnfrancis