Finally got around to taking some measurements. The wire going from ramps to heated bed are 14awg stranded and read 0.2 ohm. The bed reads 1.3 ohms so that’s roughly 110W with my 12v supply. But like I said I’m really only getting about 10 V to the bed so it’s really more like 90 W.
@Andre_Frazatto I wouldn’t use PID for my bed heater either, given a choice.
When everything is working well, PID with PWM is a fine choice, but as soon as there is some problem, it does make fault-diagnosis harder.
I have a Printrbot, and my Printrboard uses PWM for the bed heater by default. The lowest frequency configurable for the PWM is 15 Hz - guaranteed to make a mess of crude DC meter readings.
Bang-bang control is so simple to implement and diagnose compared to PID, plus bed temperature doesn’t need the accuracy, or at least the theoretical accuracy, of PID, plus PID has many pitfalls for the beginner.
For those who can enable bang-bang control, and have no need for extremely accurate bed temperature control (just about everyone) your recommendation is a good one.
Thanks @Travis_Cage , I think we solve part of the mystery. We have low power heat plates.
But what still bothers me is that 10º drop when the cooling fan turns on.
Where did you bought your RAMPS board?
Just for closure, I’m now able to print with the bed at stable 110º
PID auto calibration sucks on Marlin
But I was able to get to the flowing working values:
Uncomment #define PIDTEMPBED
MAX_BED_POWER 255
DEFAULT_bedKp 800
DEFAULT_bedKi 125.24
DEFAULT_bedKd 1675.16
I have found no clear information about the effects of each field, but as far as I understood and tested:
- Kp is the actual power going to the bed
- Ki is the heating curve, the higher the value the fastest the temperature reaches the desired value.
- Kd I really have NO IDEA WHAT SO EVER but only after going over 1000 I was able to pass 85º
@Andre_Frazatto
That’s great!
Badly chosen PID parameters can make control impossible in any circumstances. It looks like your initial PID parameters were way off, and prevented any sensible control of the bed temperature. You are not the only one to suffer from this.
For the record:
Kp = the Proportional constant
Ki = the Integral constant
Kd = the Derivative constant
PID = Proportional + Integral + Derivative
Anyone not familiar with solving 2nd-order linear differential equations (and who is?) will need some guidance in setting PID control parameters in specific control cases.
Most people (even some professional engineers!) tune PID controllers using the same method you have just used - the WAG method. Sometimes it works too.
WAG = Wild-Arsed Guess
Who cares how you did it anyway - well done for getting it working!
Well @Paul_Gross , there it lies the problem.
Everyone just list the filds like it was very obvious their function and purpose. It is not
I even understand their meaning, thanks to the electronic classes I was taking.
But what does they do on the peinter?! Really…it would be very simple and not very dangerous to manually manipulate the values if anyone knew how they affect behavior individually.
We could even make a guide
“Raise this by 100 increments until that happens”
@Andre_Frazatto There are many documented methods for tuning PID controllers. Some of them I would recommend to you.
But there is one very curious aspect of your result that makes no sense at all to me: you say that you needed a Derivative constant (Kd) for the controller to lift from 85 to 110 degrees. That makes no sense.
In the theory of PID controllers, the Kd value cannot determine the steady-state settling value. But tuning the Integral (Ki) will generally achieve the effect you described from tuning your Kd value.
I cannot explain why you needed to set a Kd value to raise the steady-state bed temperature. If I was forced to guess, I would say that there may be a coding error, and your documented Kd parameter is actually implemented as the Ki parameter in the code. That would make more sense to me.
If the PID implementation is wrongly coded then no tuning method will work except for WAG.
A fairly simplistic tuning theory applied to the Kd parameter uses it to dampen oscillations about the steady-state temperature, and quite often Kd values of 0 are just fine.
The Wikipedia article on PID is good, maybe a bit academic for most people, so skip the theory at the top and starting reading at Loop tuning:
@Paul_Gross I increased the parameters on at a time, only than moving to the next. So yea, it changed behavior like I described.
A bug would also explain why the auto calibration is worthless. Should I point it out for the developers?
@Andre_Frazatto
I am not a Marlin developer, neither have I ever delved into that code, and I do not plan to do so in the near future.
Because of all that, I am not really willing to make a direct criticism of Marlin, I just said that there may be a coding error in Marlin, based purely on what you described here, but I will not go further than that.
Bed temperature control is not a critical control function - so long as the bed vaguely approximates the set temperature, no-one really cares. The difference between 105 and 115 degrees on the bed probably doesn’t equal a failed print, so if there were coding errors it would not be of much consequence anyway, other than what you discovered - the auto-tune is useless and the PID can only be configured using wild-arsed guesses.
In the end, because the bed temperature is non-critical, I would still favour simple bang-bang control. That’s dead simple to program and to diagnose problems, and the result is good enough for that task.
PID is overkill unless there is some deep need to have very precise control of the bed temperature. It just looks like more trouble with very little benefit.