Well, it's been interesting. I've been struggling for quite some time with both piss poor hardware and firmware.
First, the hardware:
My "research" printer is a grossly modified Anycubic Predator delta. About the only thing that is still stock on this machine is the motherboard, display, and power supply. The motherboard hosts an STM32F103ZE chip, but the implementation leaves a lot to be desired.
1) This chip has 3 internal 12 bit analog to digital converters. Only one is used for temperature measurements, with the bed and extruder multiplexed, alternately. This causes a lot of cross talk between the sensors as the ADC sample and hold capacitors try to settle between readings. This isn't too bad when the sensors are very similar, but all hell breaks loose when switching between a high impedance thermistor (bed sensor), and a low impedance platinum RTD (hot end).
2) The temperature sensor inputs are pulled up to Vref (3.3 volts) via 4.7k resistors, which is standard. There is also a 4.7k resistor in series with the sensor divider to "protect" the ADC input pins. This is about 10% of the pin's "native" input impedance, so creates a variable offset in the ADC result.
3) To really compound the issue, there is a "filter" capacitor, value unknown (the board is proprietary to its manufacturer, Chitu), on the ADC signal BEFORE the above mentioned current limiting resistor.
A 4.7k pull-up on a PT1000 platinum RTD yields an extremely constrained ADC input (0.658 volts over 0C to 500C), wasting most of the ADC range and leading to very poor resolution. A 1k pull-up is slightly better, at 0.784 volts, but still un-acceptable. The optimum pull-up, yielding the greatest swing, is about 1.7k (0.834 volts), and is not much better. 75% of the ADC potential is wasted.
The power supply on this printer is a 1KW, 24 volt, 40 amp switcher. It seems to be a nicely built and reliable unit, but like all switchers, it's noisy. Hanging 1000uF of low ESR tantalum on it helped. Alot. As in 1.5V P-P noise reduced to about about 50mV. I'm sure some of this leaked through the motherboard regulators, as the addition of the brute force tantalums went a long way towards stabilizing the ADC readings.
Software:
I use Marlin.
1) Until very recently, all Marlin ADC readings were done at 10 bits, and the thermistor tables are STILL 10 bit. These are legacies from earlier versions of Marlin, when it was not 32 bit capable and all micropressors had 10 bit A/D converters. The readings (but not the tables) have been corrected in the latest releases to 12 bit (thanks to me), with oversampling, but even this can't help with a limited ADC input range.
2) For platinum RTD's, Marlin offers a few choices of pull-up (4.7k and 1k), and a few amplifier choices, none of which are particularly appealing for various reasons.
The fixes:
1) I built an amplifier, based on information from Texas Instruments, that uses a PT1000 sensor and outputs precisely 0-3.3 volts over 0-500C. It also uses a small amount of positive feedback to linearize the output to within 0.031%.
2) I removed the 4.7k pull-up on the motherbaord, as it is no longer needed.
3) I removed the ADC input "filter" caps from the motherboard as they made the cross-talk issue much worse.
4) I run the amplifier from the same 3.3 volt motherboard bus that runs the ADC converters, AND provides the Vref for the ADC's. This makes the ADC ratiometric.
5) I created a custom thermistor table for the amplified signal, called thermistor_388 after the OPA388 amplifier I use. This thermistor table has only two entries because the amplifier output is extremely linear. ADC count 0 at 0C, and ADC count 1023 at 500C. Marlin interpolates and does its thing between those two points. Note that the use of Marlin's platinum sensor tables will never work correctly, as they invoke a maths subroutine during the compilation process that yields un-useable results (up to +/-20C temperature "jitter").
6) The board manufacturer tinned all of the stranded wires that were terminated in screw terminals. This is bad practice, and I fixed them.
The result:
1) I mounted my "standard" 24 volt, 40 watt heater and a PT1000 RTD in my pure silver heat block, and ran PID tuning at 300C.
2) The block heats from room temp (20C) to 225C in about 20 seconds. Interestingly, there is only one overshoot of about 5 degrees, and the temperature settles to within 1 degree within 45 seconds. Within 2 minutes, the temperature wanders only a few hundredths of a degree. This is completely unlike the standard aluminum heat block (which is identical in shape and size to the pure silver unit), which would "hunt" around the set-point, usually +/- 12 degrees, before finally settling within +/-0.5 degree after several (about 5) minutes.
It's been an interesting exercise, and I'm confident enough with the results to get back to mounting it all on the VDE extruder (Schnekenstruder) and doing some printing. And yes, a large HEPA filter, with an activated charcoal "post filter", seems to have tamed the severe allergy I had developed to PLA last year.