Select Mini Hotend PID Variables & Noise

A project log for Monoprice Select Mini Electro-Mechanical Upgrades

Endeavoring to build upon the existing fanbase work of this $200-ish printer.

michael-obrienMichael O'Brien 07/29/2016 at 00:163 Comments

I've had 3 sets of PID settings that I've worked out. They behave well in isolated circumstances but don't play well with others. In this evolution, here are what I've posted before:

Common, popular PID settings by Ethan Anderson:

M301 P20 I0.02 D250
The problem with these is the D is a bit on the high end. This is because of 'I' being too "high". Jump down to my 3rd set if you want to know why. Since noise is a significant factor in the thermister output, values of 'D' this high begin to amplify it so much that temps over 220 ˚C are unstably controlled. In addition, 'C' & 'L' parameters.

Speaking of 'C' & 'L', I'm relatively certain that I know what 'C' is; "Reset". I have not been able to find other PID tutorials/documentation that list many additional parameters, but given the precision in definition and steady-state testing, 'C' is behaving like "Reset". This term is sometimes used interchangeably with Integral, but they are different. However, 'C' does affect 'I' in that every so often it provides a software bump to make sure things are still working okay. The higher it is, the more frequent this bump occurs and you'll never get a fully resting output.

As for 'L', I cannot correctly judge what it is called, but it appears to directly affect the settling time of the bump provided by 'C'. At this time, I've not sure if it amplifies the bump so it lasts longer, or if it is a period counter for the bumps and thus forces complete attenuation after 'L' number of perturbations.

More or less, the higher 'C' is, the more frequently you'll observe temperature oscillations and the higher 'L' is will make them a little larger and last much longer.

These effects cannot really be observed via watching a temperature graph as there is too much noise. Even in that, the average steady-state current can stay level which temperature appears to be oscillating.

My first PID settings were as follows:

M301 P115 I0.28 D675 C0.03 L1
Don't use them. Despite being fast and settling quickly, temps over 200 ˚C are not controlled well and overage 3-5 ˚C higher than the set point getting worse the higher you go. In fact, over 225 ˚C caused my printer to jump up to 235 ˚C. I can categorically say that the 675 for 'D' is the reason for this.

Second set:

M301 P80 I0.01 D80 C0.25 L2

These were developed from the starting point that possibly a low 'P' and higher 'I' would result in reacting well to the set point, but due to the time delay from the thermal conductivity of the block of aluminium I quickly found out that 'D' had to go way too high to begin damping 'I' and would them amplify the noise beyond the point of stability. Learning from that, I dropped 'D' to 125-150 and then played with 'I' & 'P'. I also experimented with 'C' and 'L' and did some more research on if I can determine their purpose.

Overall, these settings were good, but a little aggressive. I'd consider them 80% of ideal, though they oscillate a bit much for my tastes.

Third set (Pick me! Pick me!)

M301 P36 I0.01 D72 C0.12 L2

With a bit of research specifically for temperature-based PID control tuning techniques, I started fresh. It helped making the mistakes above to learn the characteristics for the system too. You'll note that 'I' is still at 0.01 and I advise never using even 0.02 or more right now.

There is a problem with this PID implementation, which I'll say rests with firmware 18.37. The dynamic range of the output is a PWM signal that's no faster than 300 Hz on the stock setup. Even with this blazing fast frequency, the delay from the heating element to the block to the thermistor is too large and the atrocious noise floor doesn't allow for sufficiently high 'D'. Once 'D' gets above that grey area of 225-250, all bets are off for controlling the hotend when above 200 ˚C with the heater bed on. You'll get multiple sporadic periods at 100% duty cycle and multiple that are 0%. It's like it's trying to act way too fast for a system that is slow as pitch in winter. Well, 5 seconds isn't slow unless you're talking electronics...

But I digress. Ideally the perfect 'I' lies somewhere between 0.01 & 0.02. The problem is that this doesn't exist in this firmware. As such, I'm using only 0.01 and tuning 'P', 'D', 'C' & 'L'. Perhaps fixing the noise floor from the 12 V PSU will allow higher 'D's to damp the 'I', but until then the conservative approach has to be played.

When adjusting 'C' & 'L', I noted that 'L' doesn't like 0 or 1 and that anything higher than 5 started directly impacting temperature output more than a swing of +/- 1 ˚C. Under the stock MOSFETs, this C-L combo results in a perturbation once or twice in 10 minutes and the fluctuation is lower than 1 ˚C on average. On the AOD510's with the fan on full, it's dead level.

These are 90-95% on the way to ideal if too high of a 'D' is still a problem down the road. I advise a delay of 30 seconds once you hit your set point temperature if it was not already steady state. This is because the low 'I' and 'P' cause a 3-8 ˚C undershoot when the output bounces or passes through it. Once you with about 30 seconds though, the temperature will remain within a +/- 1 ˚C swing while it settles.

Some custom Gcode is required if you wish to prevent this or you'll manually have to adjust the temperature little by little after your first layer.


dryphi wrote 01/23/2019 at 23:02 point

Great work! Have you found that you use these settings even for newer firmware implementations? Think I'm up to 30 point something.

  Are you sure? yes | no

dryphi wrote 01/31/2019 at 22:54 point

Also here are my current settings on an MP Select Mini V1:

< echo:PID settings:
< echo:  M301 P20.00 I0.02 D250.00 C100.00 L20
< echo:  M304 P10.00 I0.02 D305.40


  Are you sure? yes | no

Michael O'Brien wrote 02/01/2019 at 19:36 point

I haven’t had time to dedicate to the project in quite a while so I do not have an answer for you at this time, sorry.

  Are you sure? yes | no