MAX31865 PT100 Guide
Parts
- PT100 Sensor
- MAX31865 Board
- Depending on your config, Dupont Jumper Cables
PT100 Sensor Options
Many 3D printer part manufacturers (like E3D or Trianglelab) sell 2-wire PT100 sensors in the v6 thermistor form factor. You can use these options on most of the hotends we recommend including the v6, Dragon, Dragonfly, Mosquito/Spider, and more.
3-wire PT100 sensors are also an option. The advantage with this option is theoretically more accurate readings and reduced fluctuation caused by electrical noise on the readings. These are harder to source, but they can still be found in v6 form factor on Aliexpress. These will require a different configuration of the jumpers on your MAX31865 boards.
MAX31865 Board Options
The easiest to use option is Ray’s PT100 stick. It slots into a stepstick slot on your SKR board, and the PT100 is connected via the stepper motor connector. This also eliminates the need for jumper cables, so the setup is cleaner, and more reliable (SPI bus doesn’t like traveling on wires) This option is slightly more expensive then Adafruit/Clone/CJMCU option and it is harder to source, but it can be found on Aliexpress, or can be ordered from a PCB manufacturer by providing them the gerbers.
Another option is using an Adafruit/Clone/CJMCU MAX31865 module. These can be found on Adafruit’s website, Aliexpress and many other online stores. The primary difference between the Adafruit/Clone and CJMCU modules is the size (CJMCU is smaller) and the order of the pins.
Step 1: Jumping Pads
This step requires soldering. You need to bridge some pads to configure your MAX31865 board to work with your PT100 sensor. The pads to jump are marked with red rectangles and traces to cut are marked with a red “x”.
2-Wire PT100 Sensors
PT100 Stick | Adafruit/Clone | CJMCU |
---|---|---|
The PT100 stick now comes pre-configured to work with 2-wire PT100 sensors. You can skip this step. |
3-Wire PT100 Sensors
PT100 Stick | Adafruit/Clone | CJMCU |
---|---|---|
4-Wire PT100 Sensors
PT100 Stick | Adafruit/Clone | CJMCU |
---|---|---|
This module comes pre-configured to work with 4-wire PT100 sensors. You can skip this step. | This module comes pre-configured to work with 4-wire PT100 sensors. You can skip this step. |
Step 2: Soldering Headers/Terminals
This step is self explanatory. Solder the headers and the screw terminals (only on Adafruit/Clone/CJMCU) on your board.
Step 3: Jumpers on SKR
Remove the jumpers marked with green and add jumpers marked with blue.
SKR v1.3
SKR v1.4
Step 4: Wiring
PT100 Stick
Insert your PT100 stick to the E1 stepper driver slot. Pay attention to the orientation. The “EN” pin is marked on the PT100 stick, and it should match the “EN” pin on your board.
Adafruit/Clone
Connect the SPI pins to the E1 Stepstick Slot:
Connect VIN (not 3V3) and GND to free 3V3 and GND pins available on your SKR board. Here is a recommendation:
CJMCU
Connect the SPI pins to the E1 Stepstick Slot:
Connect VIN (not 3V3) and GND to free 3V3 and GND pins available on your SKR board. Here is a recommendation:
Step 5: Wiring PT100
- For PT100 Stick: Connect to the E1 stepper connector.
- For Adafruit/Clone/CJMCU: Connect to the screw terminals.
For 3-Wire sensors, the side you wire 2 wires is the side with the jumped pads marked with 3-wire
Step 6: Klipper Configuration
- SSH into your rPi and edit your printer.cfg file using nano.
- Remove any old thermistor configuration under [extruder]. (sensor_type, sensor_pin, etc.)
- Under [extruder] add these lines:
SKR v1.3 | SKR v1.4 |
---|---|
sensor_type: MAX31865 sensor_pin: P1.1 spi_speed: 4000000 spi_software_sclk_pin: P0.4 spi_software_mosi_pin: P4.28 spi_software_miso_pin: P0.5 rtd_nominal_r: 100 rtd_reference_r: 430 | sensor_type: MAX31865 sensor_pin: P1.1 spi_speed: 4000000 spi_software_sclk_pin: P0.4 spi_software_mosi_pin: P1.17 spi_software_miso_pin: P0.5 rtd_nominal_r: 100 rtd_reference_r: 430 |
-
Add this line & edit it for the pt100 sensor you used:
rtd_num_of_wires: 2
-
If you are in EU or any 50 Hz country add this line:
rtd_use_50Hz_filter: True
-
Save your changes by typing CTRL+X, Y, [ENTER]. Send FIRMWARE_RESTART from the console in Octoprint and test! It should work.
-
Run PID tuning. PT100 readings will be different from your previous thermistor. For the best thermal accuracy, follow this to PID tune:
1. Heat your bed to 100C. 2. Move your hothend to the center and 5-10 mm above bed 3. Set fans to 25%: "M106 S64" 4. Run: "PID_CALIBRATE HEATER=extruder TARGET=245" 5. This will run for a few minutes. When finished, save with: "SAVE_CONFIG"
Troubleshooting
- ADC_OUT_OF_RANGE
- If you never get a reading; check your wiring.
- If you get this error after some time; first try adding a capacitor (explained below), if it doesn’t help, try shielded wires or a 3-wire sensor.
- Under & Over Voltage
- Possibly a wiring issue, check wiring, replace with thicker wires if possible.
- Possibly a software SPI issue, try using a Pi MCU (explained below) for troubleshooting.
- Possibly electrical noise issue, try adding a capacitor (explained below).
- If nothing helps, try shielded wires or a 3-wire sensor.
- RTD_INPUT_DISCONNECTED
- Wiring issue, check your wires.
Adding a capacitor
All modules in this guide have a 100 nF capacitor on the RTD input, per MAX31865 spec sheet. This is usually enough, but if there is too much electrical noise, adding another capacitor can help filter the noise and prevent reading errors.
Add a 100-500 nF capacitor between the - and + RTD wires. Here is an example on the Adafruit board:
Pi MCU
This is not recommended as a permanent solution, but it can be used for troubleshooting.
-
Wire according to this diagram:
-
Add at the top of printer.cfg:
[mcu pi] serial: /tmp/klipper_host_mcu
-
Replace the MAX31865 lines with these: (change the 50hz filter and wire count according to your setup)
sensor_type: MAX31865 sensor_pin: pi:gpio22 rtd_nominal_r: 100 rtd_reference_r: 430 rtd_num_of_wires: 2 rtd_use_50Hz_filter: True
-
Do a FIRMWARE_RESTART and test.