I recently (finally!) enclosed my SK-Tank and am now adding chamber heating. I thought I’d share all the steps I went through to enable this.
Physical Installation
Rather than worry about whether my control board has enough power on one of its heater controls (really meant for a hot end) for a 200W PTC heater, I just bought an AC 200W PTC heater and used a SCR to control it, hooked up in parallel with the bed heater SCR. This also means that if I decide I need more power, I can just add another PTC heater behind that same new SCR. Here’s a simplified schematic:
To the left of this schematic and not shown, connected to ports 1 and 2 of the two SCRs, are connections to two heater MOSFETs on the controller board. In my case, that’s a BTT GTR.
(Not shown in that simplified schematic is that the bed heater has a thermal fuse on the load side, the heat sink on the chamber SCR has a thermal fuse, and the PTC chamber heater I think has an internal thermal fuse, and becomes less powerful as it heats up, so it is self-limiting. I left that out because I believe the chamber SCR doesn’t actually need the thermal fuse; it’s a leftover from the previous use of that SCR.)
From their github repository for the GTR board, here’s one corner of the board:
So the “BED OUT” (which they seem to have forgotten to label is controlled by pin PA2
) goes to to the SCR connected to the AC bed heater, and I’m using “HEAT2” (which is labeled with pin PB0
) to control the SCR connected to the PTC heater.
Next, I grabbed a bare thermistor that was intended for a hot end, and attached it in the chamber so it isn’t touching the walls.
Then I connected it to an open thermistor port “T1” which this part of the diagram shows is pin PC2
.
Klipper Configuration
Now I added some Klipper printer.cfg
entries.
[heater_generic chamber]
heater_pin: PB0
max_power: 1.0
sensor_type: NTC 100K beta 3950
sensor_pin: PC2
control: watermark
max_delta: 1.0
min_temp: -100
max_temp: 70
gcode_id: C
[verify_heater chamber]
max_error: 300
check_gain_time: 480
hysteresis: 5
heating_gain: 1
[gcode_macro M141]
gcode:
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={params.S}
[gcode_macro M191]
gcode:
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={params.S}
TEMPERATURE_WAIT SENSOR="heater_generic heater_chamber" MINIMUM={params.S}
The watermark
control is “bang-bang” off/on control, instead of the PID controls that get used for most things. The gcode_id: C
means that the response to the M105
status command encodes the chamber temperature with the letter C
like this:
M105
ok B:30.2 /0.0 C:39.8 /50.0 T0:30.8 /0.0
That reads:
- B (bed) temperature currently 30.2, set to 0
- C (chamber) temperature currently 39.8, set to 50
- T0 (tool 0, my hotend) temperature currently 30.8, set to 0
The gcode_macro
s map the normal chamber M-commands to Klipper’s extended command syntax for this heater.
Octoprint Configuration
Now Octoprint needs to know that there is a chamber heater. If you try to send the M141
command without configuring a chamber heater, it helpfully tells you that you need to edit the printer profile to turn that on. To do that, use the wrench icon at the top to get into Octoprint settings, Printer Profiles, pencil icon to edit the profile for the printer in question, Print bed & print volume, and select Heated Chamber
After that, you’ll have the chamber temperature as an option on the Temperature tab. However, Octoprint doesn’t seem to have the ability to include chamber heating in its presets, and I see a feature request from 2019 for this so I’m guessing it’s not a priority.
Results
It looks like I was wise to choose a solution that would be easy to extend to a second heater. I find that if I turn the chamber heater on alone, the chamber goes fairly quickly to almost 40°C, but doesn’t get much higher. Adding 400W of bed heater helps it climb, but it still struggles to get close to 50°C as you can see in this graph:
Even after about 15 minutes of both the bed and chamber heaters going, the chamber temperature doesn’t quite reach 50°C. In my printer, there are holes near the bottom and the top of the enclosure for belts to go through; only the extruder stepper is inside the enclosure. (It’s rated for 180°C so hopefully that is OK.)
With the bed heater going, if I set the desired chamber temperature to 45°, you can see the hysteresis in chamber temperature:
While I have a bit more sealing I can do at the bottom of the front door of the chamber, I think I’ll buy a 400 W PTC heater and either replace the 200W with the 400W or use them in parallel. In retrospect, if I’d noticed that there was a 400W version in the first place, I would have just ordered it.
I have another heater control and thermistor input empty still on the board. I suppose I could buy yet another SCR and change the macro to use them both to get to temperature, but make the setpoint for the 400W heater be a little lower than the 200W heater, or even just mount its thermistor in a different location with a different temperature. I might do that; if I do I’ll share that configuration as well.