Open GadgetAngel opened 3 years ago
Note that #6 is incorrect as Marlin actually does support 3 wire Rtd. I have a working example of a 3 wire pt100 with the max31865 and Marlin 2.0.8.1, on ramps 1.4 with mega2560. This was also using the default pin outs (only changed “2wire” to “3wire” in temperature.cpp and configured the soljumpers accordingly).
Otoh, with a Gtr 1.0 I am having trouble getting the max31865 to work at all using info in this guide. I have been testing with a bare Gtr board (no 12V power or max wired up), and the terminal freezes requiring reset shortly after the UBL messages appear after boot. This happens with 2.0.8.x. My scope is also showing clean 5V and 3v3 busses when this occurs (so it is not poor usb power).
I submitted and issue for 2.0.9 because that won’t even compile when -5 is set as a sensor.
(edit. I ordered another max board to test. I think this may well be the cause.)
So I did manage to get this all working with my GTR. Looks like something happened that broke it all after Marlin b2bd547a275109b01e826b351f1e6066b2e23ebb (between 2072 and 208). I tried several others and found that 2072 works, but gives lots of uneeded errors in serial. 208 and up do not seem to work at all (always max temp errors at boot up). I submitted an issue report at marlin in hopes that it gets fixed for 209. Otherwise, using that particular version of marlin, this guide was a big help in getting it all working as expected. My config changes were a little simpler. TEMP_SENSOR_0 does have to be declared (I also used PI9 for cs there). I also am using 3wire in temperature.cpp.
I used hardware SPI with onboard SDcard. So I just declared the max6755 cs pin (as temp0), and used a full size card adapter that has dupont spaced pins for easy soldering. It also allows soldering the wires without interfering with use of the onboard sdcard, unlike the micro adapter method shown in the OP. I did have issues initially using the MAX sensor with sdcard. I found out it was just the sdcard at fault. The 128MB micro sd that came with my GTR will cause a reset every time it is accessed when a max is connected to the bus. I replaced with a spare 64gb samsung high reliability micro sd card (formatted just 4gb fat), and it all works great now. Not sure what was up with the sdcard, but found another issue report on marlin that mentioned a bad sd card adapter was at play. In my case it was actually the sdcard itself. So if anyone has issues getting this to work, make sure to pull out the sd card and adapter for testing. If it works without sdcard, you probably just need to try a different sdcard and/or adapter.
I have some 10pin idc connectors arriving and plan to test this using the LCD sdcard on my tft35. I don't expect any problems since marlin handles the spi change well without a max. If I do run in to any issues I will mention them here.
GUIDE:
If you have only one hotend then you can have the following:
If you have two hotends then you can have the following:
If you have two hot-ends then you CAN NOT have the following:
*** If you only have ONE PT100 (or PT1000 or Thermocouple) on your printer and you have two hotends then in Marlin you must use TEMP_SENSOR_0 as the PT100 (or PT1000 or Thermocouple) even if you have the PT100 (or PT1000 or Thermocouple) hooked up to the second extruder. Just override your PIN definitions to have TEMP_0_PIN point to where the PT100 (or PT1000 or Thermocouple) is located.
REPRAP_DISCOUNT_SMART_CONTROLLER
in the pins-file for thesoftware SPI pins names
: The EXP1 and EXP2 ports are used for display screens. EXP2 contains a HARDWARE SPI bus while EXP1 contains a Software SPI bus. The EXP2 hardware SPI bus signal names are obvious in the pins-file but the EXP1 software SPI bus signal names are NOT obvious. Here is the EXP1 software SPI bus signal names used in pins-file with their corresponding SPI software functions:On the GTR V1.0 board, here is a list of PINS that you will need to prevent negative current injection. We prevent negative current from flowing into the MCU by using a Schottky diode between the output signal of the amplifier board and ground. I do this as preventive measure. It protects the MCU from getting fried.
The below wiring diagram for PT100 using Analog ADC input using 5V DC for the E3D's PT100 amplifier board but the MCU board (GTR V1.0) uses 3.3 VDC ADC reference voltage, therefore the Thermistor table to use for this is Table 21:
The below wiring diagram is for PT100 using Analog ADC input using 5V DC for the E3D's PT100 amplifier board but the MCU board (SKR MINI E3 V2.0) uses 3.3 VDC ADC reference voltage, therefore the Thermistor table to use for this is Table 21:![PT100 Analog hook up with 5 VDC power for SKR MINI E3 V2 0](https://user-images.githubusercontent.com/33468777/103695410-83b90300-4f6a-11eb-8eaf-08251000dca3.jpg)
The below wiring diagram for PT100 using Analog ADC input using 3.3 VDC for the E3D's PT100 amplifier board but the MCU board (GTR V1.0 board) uses 3.3 VDC ADC reference voltage, therefore the Thermistor table to use for this is Table 20 (see the process data sheet and you will find that PF10 need protection against negative current injection,https://www.st.com/resource/en/datasheet/stm32f407ig.pdf#page=114):
The below wiring diagram is for PT100 using Analog ADC input using 3.3V DC for the E3D's PT100 amplifier board but the MCU board (SKR MINI E3 V2.0) uses 3.3 VDC ADC reference voltage, therefore the Thermistor table to use for this is Table 20:![PT100 Analog hook up with 3 3VDC power for SKR MINI E3 V2 0](https://user-images.githubusercontent.com/33468777/103695475-a1866800-4f6a-11eb-8936-588cb5173b56.jpg)
The information contained in [1, 4-14] are for the Adafruit MAX31865 board (PT100/PT100 sensors)
4A. For Marlin 2.0.7.1 or earlier versions of Marlin: If you want to use the Adafruit MAX31865 board with a PT100, you MUST correct the calibration resistor value that Marlin uses in temperature.cpp as follows: If you search in temperature.cpp for the string "max31865.temperature(", there are ONLY two places in temperature.cpp that will be found: Original is:
max31865.temperature(100, 400) // 100 ohms = PT100 resistance. 400 ohms = calibration resistor
CHANGE TO:max31865.temperature(100, 430) // 100 ohms = PT100 resistance. 400 ohms = calibration resistor
4B. For Marlin 2.0.7.2: If you want to use the Adafruit MAX31865 boards with a PT100, you MUST use the Marlin variables in the configuration.h file to adjust the sensor resistance ohm value and calibration resistance ohm value as shown below. If they are not present in configuration.h file then you will need to add the two statements below to configuration.h file. Use the Marlin variables instead of making the change in the Marlin software in temperature.cpp as stated in 4A.
In configuration.h file:
4C. For Marlin bugfix-2.0.x branch or later versions of Marlin: If you want to use the Adafruit MAX31865 boards with a PT100, you MUST use the Marlin variables in the configuration.h file to adjust the sensor resistance ohm value and calibration resistance ohm value as shown below. Use the Marlin variables instead of making the changes in the Marlin software in temperature.cpp as stated in 4A. If you only have one (1) Adafruit MAX31865 board than use the Marlin variable MAX31865_SENSOR_OHMS_0 and Marlin variable MAX31865_CALIBRATION_OHMS_0 only (disable MAX31865_SENSOR_OHMS_1 and disable MAX31865_CALIBRATION_OHMS_1). If you have two (2) Adafruit MAX31865 boards then enable all four Marlin variables: MAX31865_SENSOR_OHMS_0, MAX31865_CALIBRATION_OHMS_0, MAX31865_SENSOR_OHMS_1, and MAX31865_CALIBRATION_OHMS_1.
In configuration.h file:
5A. For Marlin 2.0.7.1 or earlier versions of Marlin: If you want to use the Adafruit MAX31865 board with a PT1000, you MUST correct the resistor values that Marlin uses in temperature.cpp as follows: If you search in temperature.cpp for the string "max31865.temperature(", there are ONLY two places in temperature.cpp that will be found: Original is:
max31865.temperature(100, 400) // 100 ohms = PT100 resistance. 400 ohms = calibration resistor
CHANGE TO:max31865.temperature(1000, 4300) // 100 ohms = PT100 resistance. 400 ohms = calibration resistor
5B. For Marlin 2.0.7.2: If you want to use the Adafruit MAX31865 boards with a PT1000, you MUST use the Marlin variables in the configuration.h file to adjust the sensor resistance ohm value and calibration resistance ohm value as shown below. If they are not present in configuration.h file then you will need to add the two statements below to configuration.h file. Use the Marlin variables instead of making the change in the Marlin software in temperature.cpp as stated in 5A.
In configuration.h file:
5C. For Marlin bugfix-2.0.x branch or later versions of Marlin: If you want to use the Adafruit MAX31865 boards with a PT1000, you MUST use the Marlin variables in the configuration.h file to adjust the sensor resistance ohm value and calibration resistance ohm value as shown below. Use the Marlin variables instead of making the changes in the Marlin software in temperature.cpp as stated in 5A. If you only have one (1) Adafruit MAX31865 board than use the Marlin variable MAX31865_SENSOR_OHMS_0 and Marlin variable MAX31865_CALIBRATION_OHMS_0 only (disable MAX31865_SENSOR_OHMS_1 and disable MAX31865_CALIBRATION_OHMS_1). If you have two (2) Adafruit MAX31865 boards then enable all four Marlin variables: MAX31865_SENSOR_OHMS_0, MAX31865_CALIBRATION_OHMS_0, MAX31865_SENSOR_OHMS_1, and MAX31865_CALIBRATION_OHMS_1.
In configuration.h file:
Do the following to prepare the Adafruit MAX31865 board correctly:
You need to solder two bridges on the MAX31865 board. Marlin will only read an RTD which have 2-Wire configuration. (https://voron.dozuki.com/Guide/How+to+Use+a+Pt100+Thermistor+w-+Skr+Boards/73?lang=en). Ensure your PT100 is hooked to the middle two terminals.
lib_deps =
and feature dependencies[features]
:MAX6675_IS_MAX31865 = Adafruit MAX31865 library@~1.1.0
If you want to use PT100 temperature sensor with the Adafruit MAX31865 over SPI you have two options: A. Software SPI (where the MCU performs the handshake in software) B. Hardware SPI (where the MCU performs the handshake with hardware interrupts).
If you want to use the Hardware SPI for Adafruit MAX31865, then you have to know which SPI bus on the MCU board is the default hardware SPI bus (SPI Bus 1 or SPI Bus 2) due to the fact that the Adafruit MAX31865 Library will default to this bus (Adafruit MAX31865 library does not expose the bus number, so it just defaults).
11A. How to determine the default hardware SPI bus for a the SKR boards: To determine the default hardware SPI bus for BTT SKR boards, look at the following Marlin variable:
In the pins-file (Marlin\src\pins) for the board, look for the following Marlin variables:
and in configuration.h file:
and in configuratio_adv.h file:
Below is a table indicates the default hardware SPI bus for the BTT SKR series of boards:
Some board's also have an additional file to check. In Marlin/buildroot/share/PlatformIO/variants/[board name]/variant.h file look for the following Marlin variables:
If the board has both a variant.h file and a pins-file than Marlin first reads the variant.h file and then reads the pins-file. Therefore, the pins-file can override the default hardware SPI bus that the variant.h file defines. For example the SKR PRO V1.1 board, has two files to look through (variant.h and pins_BTT_SKR_PRO_common.h). The GTR V1.0 board has both files to look through. Let us look at an example. The GTR V1.0 board has the variant.h file which contains the following:
For the GTR V1.0 board the pins_BTT_GTR_V1_0.h contains the following:
Notice that for the GTR V1.0 board and SDSUPPORT enabled in configuration.h file, when Marlin executes, it will first set the default hardware SPI bus number to SPI2 due to the fact that the variables in variant.h get read in first. Then the file pins_BTT_GTR_V1_0.h gets read and it changes the default hardware SPI bus to SPI1. This is due to the Marlin variable "CUSTOM_SPI_PINS" and SDSUPPORT being enabled in configuration.h file, which is used to override the variant.h file SPI Marlin variables.
Additional Equipment that maybe necessary to obtain HARDWARE SPI for Adafruit MAX31865
11B. As stated in the above table for default hardware SPI bus you might need additional equipment to tap into the default hardware SPI lines. This section provides you links to find the extra equipment.
If you need to tap into the EXP2 flat ribbon cable use: https://www.digikey.com/product-detail/en/te-connectivity-amp-connectors/1658622-1/AKC10B-ND/825411 Orient the clamp on connector so that it is in the same orientation as the one already installed on the end of the flat ribbon cable that gets plugged into the EXP2 socket of the MCU board. This way you will be able to keep straight which PINs are which. I oriented mine to be upside down just like the connector that is already on the end that plugs into the EXP2 socket of the MCU board.
If you need to tap into the SD card reader ONBOARD the MCU board then use: JSER Micro SD TF Memory Card Kit Male to Female Extension Adapter (https://www.amazon.com/gp/product/B071DKCK47/) You will have to solder on three wires to the locations shown below and it only costs $4.00 on Amazon.com:
I have also used BIGTREETECH's Module BTT TF Cloud V1.0 SD Cloud Wireless Transmission Module (https://www.biqu.equipment/products/bigtreetech-module-btt-tf-cloud-v1-0-sd-cloud-wireless-transmission-module) and tapped into the SPI lines of the onboard ESP-12S chip. But, while the chip boots up and is plugged into the MCU board the MCU board will indicate a "ERROR: MAX TEMP on E1" and halt the printer. If you hit the MCU board's reset button the next time the MCU boots the TF cloud device might boot first or may not boot first. If the MCU boot first than you will get the MAX TEMP error again.
I decided that this was not worth the hassle so I went with the JSER's "Micro SD TF Memory Card Kit Male to Female Extension Adapter" instead. BTW, the JSER item only costs $4.00 US dollars on amzon.com. So get a couple, in case you can not get the wires attached on the first try.
HARDWARE SPI for Adafruit MAX31865
++++++++++++++++++++++++++++++++EXAMPLE 1+++++++++++++++++++++++++++++++++++
To setup Marlin on GTR V1.0 board for Adafruit MAX31865 and Hardware SPI, do the following in pins_BTT_GTR_V1_0.h :
In configuration.h:
AND {
For Marlin 2.0.7.1 or earlier version of Marlin: you have to change the code in temperature.cpp module as stated in 4A above.
OR
For Marlin 2.0.7.2 versions: ENABLE the following in configuration.h file or ADD the following lines to configuration.h file:
OR
For Marlin bugfix-2.0.x version or later versions of Marlin: ENABLE the following in configuration.h file:
}
Here is the wiring diagram for the Adafruit MAX31865 with PT100 via Hardware SPI on GTR V1.0 board. To access the Hardware SPI lines for the GTR V1.0 board use a Micro SD Card Extension Adapter and hack the pins off the Adapter (https://www.amazon.com/gp/product/B071DKCK47/) and the Adapter only cost $4.00 US dollars. Now all you need is one free I/O pin to specify the Chip Select for the MAX31865. Again, the GTR V10 board uses the SD Card readers SPI lines as the default hardware SPI when
SDSUPPORT
is enabled in configuration.h file AND whileSDCARD_CONNECTION ONBOARD
is defined in pins_BTT_GTR_V1_0.h file. Otherwise, tap into the EXP2 SPI lines.++++++++++++++++++++++++++++++++EXAMPLE 2+++++++++++++++++++++++++++++++++++
For SKR PRO V1.1/V1.2 MCU board you would have to tap into the hardware SPI lines via the EXP2 connector.
To setup Marlin for Adafruit MAX31865 and Hardware SPI, on SKR PRO V1.1/V1.2 board do the following in pins_BTT_SKR_PRO_common.h:
In configuration.h:
AND {
For Marlin 2.0.7.1 or earlier version of Marlin: you have to change the code in temperature.cpp module as stated in 4A above.
OR
For Marlin 2.0.7.2: ENABLE the following in configuration.h file or ADD the following lines to configuration.h file:
OR
For Marlin bugfix-2.0.x version or later versions of Marlin: ENABLE the following in configuration.h file:
}
Here is the wiring diagram for the Adafruit MAX31865 with PT100 via Hardware SPI on the SKR PRO V1.1/V1.2 board:
If you have 2 (two) Adafruit MAX31865 (for PT100/PT1000) boards you want to wire up to your 3D Printer, this is now been fixed in Marlin bugfix-2.0.x branch. So the release branch of Marlin 2.0.7.2 DOES NOT allow two Adafruit MAX31865 boards to work properly BUT the bugfix-2.0.x branch has fixed the issue. I am sure Marlin 2.0.7.3 will also fix the issue.
Below is a sample of how to get TWO PT100s in Hardware SPI to work on SKR PRO V1.1/v1.2 board by using TWO Adafruit MAX31865 boards , make the following changes in pins_BTT_SKR_PRO_common.h:
In configuration.h:
AND {
For Marlin 2.0.7.1 or earlier version of Marlin: you have to change the code in temperature.cpp module as stated in 4A above.
OR
For Marlin 2.0.7.2: ENABLE the following in configuration.h file or ADD the following lines to configuration.h file:
OR
For Marlin bugfix-2.0.x version or later versions of Marlin: ENABLE the following in configuration.h file:
}
Here is the wiring diagram for the above example [number 13] (for 2 PT100s with 2 MAX31865 in Hardware SPI mode):
Software SPI for Adafruit MAX31865 board
++++++++++++++++++++++++++++++EXAMPLE1+++++++++++++++++++++++++++++
Below is a example of how to get Software SPI to work on SKR PRO V1.1/V1.2 for Adafruit MAX31865 (PT100 sensor), make the following changes in pins_BTT_SKR_PRO_common.h:
In configuration.h:
set TEMP_SENSOR_0 to -5
. If you have a second MAX31865 board then addset TEMP_SENSOR_1 to -5
AND {
For Marlin 2.0.7.1 or earlier version of Marlin: you have to change the code in temperature.cpp module as stated in 4A above.
OR
For Marlin 2.0.7.2: ENABLE the following in configuration.h file or ADD the following lines to configuration.h file:
OR
For Marlin bugfix-2.0.x version or later versions of Marlin: ENABLE the following in configuration.h file:
}
Here is a wiring diagram for a PT100 sensor with an Adafruit MAX31865 using Software SPI: 14.++++++++++++++++++++++++++++++EXAMPLE 1+++++++++++++++++++++++++++++
14.++++++++++++++++++++++++++++++EXAMPLE 2+++++++++++++++++++++++++++++
Here are two wiring diagrams for a PT100 sensor with an Adafruit MAX31865 using Software SPI or Hardware SPI for SKR MINI E3 V2.0 board. The PINS in the YELLLOW boxes are what I call "available and free" I/O PINS that you, as a Marlin User, can controller (you can use these pins for MOSI, MISO, SCK, or CS when performing Software SPI; or you can use these pins for CS when performing Hardware SPI) :
Here is the sharable link to the above two diagrams for the SKR MINI E3 V2.0 (from my google drive with Highest resolution): https://drive.google.com/file/d/1bxzppVMYMMVOKphN8VXloUyU29sKJNim/view?usp=sharing
14.++++++++++++++++++++++++++++++EXAMPLE 3+++++++++++++++++++++++++++++
Here are two wiring diagrams for a PT100 sensor with an Adafruit MAX31865 using Software SPI or Hardware SPI for SKR E3 TURBO board. The PINS in the YELLLOW boxes are what I call "available and free" I/O PINS that you, as a Marlin User, can controller (you can use these pins for MOSI, MISO, SCK, or CS when performing Software SPI; or you can use these pins for CS when performing Hardware SPI) :
Here is the sharable link to the above two diagrams for the SKR E3 TURBO (from my google drive with Highest resolution): https://drive.google.com/file/d/14lYGDR4BFCD9Fpatdr7AAuQ9NlWYb1SU/view?usp=sharing
14.++++++++++++++++++++++++++++++EXAMPLE 4+++++++++++++++++++++++++++++
Here are two wiring diagrams for a PT100 sensor with an Adafruit MAX31865 using Software SPI or Hardware SPI for SKR MINI E3 V1.2 board. The PINS in the YELLLOW boxes are what I call "available and free" Digital I/O PINS that you, as a Marlin User, can control (you can use these pins for MOSI, MISO, SCK, or CS when performing Software SPI; or you can use these pins for CS when performing Hardware SPI) :
Here is the sharable link to the above two diagrams for the SKR MINI E3 V1.2 (from my google drive with Highest resolution): https://drive.google.com/file/d/1N-hZbQFYBljPhR0FeSUBp3NPB6rK9hTL/view?usp=sharing
The information in [1, 11, 15-20] are for the MAX31855 board (thermocouples)
Hardware SPI for MAX31855 board (Thermocouple)
To access the hardware SPI lines for the GTR V1.0 board use Bigtreetech's TF cloud device and hack the pins off the ESP12-S chip (https://www.amazon.com/BIGTREETECH-Direct-Wireless-Transmission-Motherboard/dp/B088WB5L8R). Now all you need is one free I/O pin to specify the Chip Select for the MAX31855.
+++++++++++++++++++++++++++++++++++++EXAMPLE++++++++++++++++++++++++++++++++++++
Below is a example of how to get Hardware SPI to work on SKR PRO V1.1/V1.2 for MAX31855 (thermocouple sensor), make the following changes in pins_BTT_SKR_PRO_common.h:
In configuration.h:
In this example let us use the SKR PRO V1.1/V1.2 board as the MCU board. We want two MAX31855 boards to use hardware SPI for the two thermocouples. Here is how you would setup Marlin:
In configuration.h:
Here is a wiring diagram [number 18] for two MAX31855 boards in hardware SPI for the SKR PRO V1.1/V1.2 board:
To Prevent a noisy Thermocouple temperature sensor:
URL1: https://learn.adafruit.com/thermocouple/f-a-q#faq-2958381 URL2: https://3dprinting.stackexchange.com/questions/204/how-to-get-consistent-and-accurate-readings-from-thermocouples/355#355
Software SPI for MAX31855 board (Thermocouples)
Below is a sample of how to get Software SPI to work on SKR PRO V1.1/V1.2 for MAX31855 (thermocouple sensor), make the following changes in pins_BTT_SKR_PRO_common.h:
In configuration.h:
set TEMP_SENSOR_0 to -3
For example, here is how you would setup using two thermocouples with the GTR V1.0 board:
In configuration.h:
set TEMP_SENSOR_0 to -3
andset TEMP_SENSOR_1 to -3
NOTE: the first thermocouple is wired to the ONBOARD K_Type Thermocouple (KTEM) connector. That KTEM connector by default uses PH9 as its Chip select pin. The first thermocouple is not shown in the wiring diagram.
Here is a wire diagram for this situation:
END OF GUIDE