I just reworked the whole profile handling and added documentation, you can find it in my pid_profiles branch.
rn there also is a PID_PROFILE GET_VALUES=test HEATER= command(it does not matter what you put in GET_VALUES= as it just needs any value which then gets ignored) for debugging to check whether the pid values currently loaded are the ones that are supposed to be loaded
Would be awesome if you could check it out and hit me up if you encounter any errors or bugs and also leave some feedback on the doc, as writing doc is really not my strong suit
Great ! (was about to post a FR on your Git) ; Currently printing with the same hotend profile over and over, and I get “PID Profile [V6_04] already loaded” everytime, with a nice temps graph. Sounds good.
Will give it a try ASAP but will quit for 10 days (without the printer) : will be silent.
I don’t receive Github notifications anymore ; but had a look to your Git from time to time. Maybe was considered as spam by my ISP ? Nothing, even in the spam inbox…
Using your fork, the hotend is rock steady, within ±0.2°C most of the time, ±0.3°C at worst. Overshhot less than +2°C at heatup. 240°C, V6 full metal. In house remixed Voron Stealthburner on an old bed slinger, with zero part cooling (and currently not heating the chamber), and staying below 10-12 mm3/s at most (V6…). No idea what the vanila PID can do, because I barely used it, and really started serious printing with yours. It’s one order of magintude better than what I was used to (relative to Marlin)…
Well the Pid algorithm was not written by me so it would be wrong to take credit for that, I only did the profiles.
If you try to load the profile that’s already loaded, it will not reload it but rather tell you it’s already loaded, that’s expected behaviour.
For the Pid algorithm you need to thank @DanS since he wrote it.
I will make a PR, as soon as the branch with the improved Pid algorithms I based it on is merged
Before that it wouldn’t make any sense since it needs the improved Pid algorithms to work(otherwise I would have to rewrite a bunch of code)
I’m curious:
I’m using the improved PID for quite a while now and I print anything from PLA to PA / PP up to 290°C.
Tuned my PID at 260°C and never had any reason to wish for different PID profiles. Neither from speed, nor overshoot, nor target compliance.
that’s quite interesting to be honest
for me the temps can fluctuate by about 1.5° while printing when I go too far away from the tuned temperature.
Imo the good thing about the profiles(and the way I implemented them) is: if you don’t need them, you can keep going as if nothing happened, so it’s fully backwards compatible.
Just for people like me who are using hotends with really low thermal mass(like a phaetus rapido or a revo) which are way more prone to temperature fluctuations, it will be quite helpful imo.
This is an awesome feature and so far it is working as expected. One question I have is if you can specify specific PID values? I am looking to set specific PID values for a style of hotends that I have and have a PID that works on all of them already.
It would be nice to be able to have sections similar to the following.
[pid_profile extruder AST285]
control = pid
pid_kp = 17.25
pid_ki = 1.25
pid_kd = 65.50
I did find one issues however, if you use capital letters in HEATER=extruder, or if you misspell the heater, it will error out and shup down klipper. I think having it check if the HEATER that is called out is an option in the printer.cfg would be a good idea.
I am thinking more on knobprobe for my machine. I have a BLTouch on the X carriage as well as a limit switch at the top of the machine so I can home the printer regardless of what is on the bed. I wonder if it is possible to use this in my case or if it will not like having two z limit switches (min and max).
Thx for letting me know and giving me a way to reproduce the bug.
The problem was, that method to lookup heaters didn’t behave as I thought it would and I didn’t bother to check, that was totally on my own laziness.
I changed the code to look up the heater a bit differently and just raise a gcodes error If the heater is not found(which will just give an error in the console and abort the command but not trigger a shutdown).
Case insentivity wont work(or I don’t know how to implement it proplerly rn, I’ll get to that later when I have more time)
Please let me know when you find anything else which doesn’t work as expected or if you have any feature requests, I’ll try to get to them as soon as I can