Printer Model: Custom
MCU / Printerboard: Skr 1.4 + ebb42
Host / SBC: x86 mini PC
Describe your issue:
Hi,
Recently, I upgraded my printer with a thick 8 mm aluminum bed, paired with a silicone heater pad. Although the heater pad has its own integrated thermistor, I decided to install an additional one positioned much closer to the bed surface. My goal was to use it as the temperature control input to improve temperature accuracy.
Unfortunately, after completing the build I ran into several issues.
When I tried using the surface thermistor as the bed temperature control input, it caused a significant temperature overshoot on the heater pad during heat-up.
So, I reverted to using the heater pad’s integrated thermistor for temperature control. However, this results in a considerable temperature difference (5–10°) between the bed surface thermistor reading and the target temperature. Additionally, the heat-up time is noticeably longer, since the heater power remains relatively low during the heating process.
I browsed the forum and found this discussion where others were addressing similar issues. However, it seems the effort stalled. The PR was closed a long time ago, with no hope of being merged.
I can imagine a workaround for the long heat-up time by setting a higher initial temperature in the start macro, then lowering it before the print begins. But I haven’t found a good solution for the temperature inaccuracy issue.
Since this is a fairly common setup, I expected most of these issues to be solved already and the configuration to be straightforward. However, that doesn’t seem to be the case.
So, could you please share your experience using thick beds and how you manage temperature control on that? Am I missing a solution?
Your setup sounds pretty similar to the Voron 2.4/Trident printers. What I do on my 2.4 is I use the heat pad thermistor to heat up, then wait a few minutes before printing (a heat soak). You can also fill those few minutes with QGL, Bed mesh, etc.
Yes, i did. But it’s not the issue with the PID tuning. PID controller regulates temperature correctly. The issue is that it regulates temperature of the heater itself, and not the temperature of the bed, which we are actually want to regulate. In that case, temperature difference is explained by the thermal resistance of the heating pad, adhesive, and aluminum itself. And it is quite noticeable because of relatively high power density.
I’m also using the heat soak macro. It’s a grate thing, but it won’t ensure that the bed is up to temperature. It works by waiting for rate of change to be below the threshold. So, if I set the temperature to, for example 80 C, heater would be on 80 C, heat soak macro will keep a look on the rate of change on the bed thermistor, and resolves when the rate of change on that will be less than, for example, 1 C / min. But with the heater set to 80 C the bed will never reach 80 C. It will stabilize on something like 70-75 C.
And I’m measuring close to the top of aluminum bed plate. I’ll have a sheet of magnetic material, and a PEI coated plate on top, so the situation on the actual printing surface will be even worse.
What you could do is set your bed temp to five degrees higher than the intended surface temperature (so 85C), then issue a TEMPERATURE_WAIT command to wait until the surface of the bed reaches the target 80C.
The issue is that difference is not constant. It depends on bed heat loss, which depends on many different factors like temperature difference with ambient, airflow around the bed, print itself which in fact insulates the bed from the top, and even something like the sun shining onto the bed surface. I expect that parameter would be impossible to tune in practice. That’s why I’m looking for regulation, not the adjustment.
I thought it will be possible to implement the regulator in the delayed gcode loop, but that will mean placing regulator on top of the regulator, and I probably don’t have enough experience in control theory to implement it right, and not cause any continuous oscillations, or other issues.
Temperature dissipation is a slow inert physical process.
With such a thick plate, I would place a new temperature sensor on the top of the plate in a corner. Use that sensor for regulation of your bed temperature.
Of course this proposal is a try and error thing (you may have to play with the placement of the sensor), but I have a good gut feeling for a success.
That’s exactly what i did, and how i end up there. As i described, using that bet temperature sensor for regulating bed temperature results in overheating the heater pad while initial heating.
And looks like it’s impossible to change sensor form gcode/macro, to use one sensor during initial heating, and another for the print.
And i can not setup 2 heaters in klipper assigned to one pin. Of course, i can always do it on hardware side, by attaching 2 outputs to my ssr, so any of them can pull down ssr control, and open the relay. That approach will work, but it’s a bit more hacky than I want, and also, I’m a bit concerned about the safety. Such things are probably not allowed for a reason.
I have something similar in the whole of my printers, working with no problem at all, the first step is to be sure you’re using a thermistor input, or recreate one with your electronics, the second step, absolutely critical, you should choose the right kind of sensor, forget the non-existent epcos, some times, you’ll need to take a response curve of your sensor, and define it, I find it several times, with several sensor models, once done, and correctly defined, if you are heating or cooling, simply made a PID adjustment setup, an example for a printer running klipper, and controlled via an X86 mini PC, could be found in my Github, browse for Phoenix X86, the URL is:
Hi. Thank you for you response. I checked you config and it’s incredibly well organized! But i didn’t find any dual thermistor setup for bed heater. Do you have external microcontroller between sensor and printer mcu, that is reading the sensors, implements the logic, and then outputs that to the printer mcu? That’s interesting idea, and probably would work as well, however, it’s one more ting to break in a safety critical loop, and kind of a hack anyway, so i don’t think i’ll go that way now.
I browsed the forum more and found one more thread with the same issue:
And honestly, I’m a bit frustrated. Looks like we have an issue that is unsolvable without changes in the code, or going deep into the hacks.
And it’s not a new one. People proposed the solutions, opened PRs, (one more) even did such awesome simulations:
But at the end of the day, the issue was considered insignificant, fix not really useful, and configuration hard for user to setup.
I’m not blaming or saying that it’s useless, but we have features with couple pages size description, that requires configuration and calibration, and all that is just to squeeze out a couple of microns better accuracy out of endstop.
At the same time 10%+ error on bed temperature, and possible like 30% improvement on heat up time is not considered important enough. And all that is on pretty common setup.
I think most people just don’t notice it, because the second thermistor on the bed is not that common, but not having it, doesn’t mean the issue doesn’t exist.
I don’t know it all the suggestions were valid, and PRs was good to merge. I just want to bring the attention to the issue, which in my opinion, is very real, and fixing it may benefit many people.
On my T-Rex I have a 410x410 mm² 3mm aluminium plate with an additional 3 mm glass-plate on it and also a heater mat with 750W mains powered.
It runs fine, except I have to add 10°C to the bed temp due to the glass-plate.
I had pretty similar setup before update. It was 330x330x3.5 plate with around 300w AC heater constructed of carbon heating wire. It was build long time ago, when silicone heaters was not wildly available, and most printers still had DC beds.
And of course, it had glass on top. The issue was that the 330x3.5mm plate was not very stiff, and glass was not very flexible, which resulted in a thin air gap between them. And that caused a lot of thermal resistance. I managed to improve it by applying thermal paste in between. It turned out you need a lot of that for 330x330 size surface
But if you have an experience of printing on glass, you probably know what sometimes petg can do to it.
So when it happened again, i decided that i’m done with all that thermal paste mess while replacing it, and pulled the trigger for update to more modern setup.
But as you can see, that did not really fixed bed thermal issues.
I drilled a hole around 7 - 7.5mm deep (0.5 - 1mm form bed palate surface), mostly on the back edge of the heater pad (around 10mm from the edge of the bed plate) near the center (around 30 mm offset from the bed centerline).