02-25-2009 11:32 AM - edited 02-25-2009 11:36 AM
Hello,
I working on a PID control project with a dreaded heater control. The heater is fairly small ~ 10 watts, so the response time is very quick. As my setpoint increases, my PV decreases. I am controlling the heater with a DC power supply, so the nominal is a midpoint voltage and I let the PID +/- 100% swing the voltage from 0 to full scale.
The Kc is about 0.4.
With a P control, Kp = 0.2, I get a damped oscillation that hovers about 2-4% above the setpoint.
With a PI control, Kp= 0.2, Ki = 0.00001, I get a steady oscillation around the setpoint.
Attached is an example with the PI control. It does seem that my sampling rate is too slow (both the SP and PV are done with GPIB).
The sequence of events is --> Command SP -> (wait) --> Read PV --> Use PID to set new SP --> (loop)
I have tried to improve this by putting the PV measurement in a parallel loop. This seems to help some, but did not eliminate the oscillation. The old loop time was ~ 0.3 seconds, now it is 0.15 seconds. Any faster and my loop time < PV measurement time.
Any suggestions? I tried the PID Autotune vi, but it could never tune the system.
Solved! Go to Solution.
02-25-2009 12:16 PM
02-25-2009 12:47 PM
02-26-2009 01:24 PM
02-27-2009 02:07 PM
I have done a couple of things to improve the response:
1.) I am using a two stage PID. The "inner loop" PID constantly controls the heater wattage from 0 to full scale. The "outer loop" adjusts the wattage +/- to reach the setpoint. (fine tuning) Each PID loop has its own set of PID parameters.
2.) For some reason, the PID control never worked well because my setpoint was inversely proportional to wattage. I created a formula which converted my setpoint to a function that is proportional to the wattage.
03-31-2009 03:36 AM
04-01-2009 04:30 PM
Hi,
scilab_labview_user wrote:
When the error is large enough to go beyond the output range, how is the control effort calculated by the PID block?
When the error is large enough such that the control output is beyond the output range that you wire into the PID block, the output is coerced to be equal to either the upper or lower range value.
Also, how large should the Ti term be to nullify the integral action?
Do you want to take out the integral term all together? If so, you can set the integral gain to be 0 when you wire in the gain values to the PID block.
04-02-2009 01:42 AM - edited 04-02-2009 01:44 AM
When the error is large enough to go beyond the output range, how is the control effort calculated by the PID block?
When the error is large enough such that the control output is beyond the output range that you wire into the PID block, the output is coerced to be equal to either the upper or lower range value.
Can I set it to high or low, in accordance to my choice?
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Also, how large should the Ti term be to nullify the integral action?
Do you want to take out the integral term all together? If so, you can set the integral gain to be 0 when you wire in the gain values to the PID block.
Isn't it of the form:
u(t) = Kc[ e(t) + 1/Ti * integral(e(t)) + Td * derivative (e(t)]
implemented after discretizing.
04-02-2009 05:18 PM
Hi,
The output range that you give the PID block is a cluster of two numbers, the upper and lower range value. If the error is too large and the resulting output is larger than the upper limit, the output will be coerced to the upper range value. Similarly, if resulting output is lower than the lower limit, the output will be coerced to the lower range value.
Yes, that is the form of u(t) but if the PID block sees that Ti=0, it assumes that the user wants to use P or PD control and ignores that term.
08-08-2012 04:47 PM
I have a similar problem, can you share your formula?