It's been a number of years since I took design of feedback control systems. I barely remember most of it...we used Matlab a lot...

I haven't really thought about the use of a PID for temperature control.

The basics of a PID controller, from what I recall, are in the letters P, I, and D. Each stands for a mathematical idea. The P is the first and easiest to understand--Proportional. It takes the difference between your set point and the measured point and multiplies it by some proportionality (the value you put in for P). I think about these controllers best in terms of a step motor (a motor than knows how many times it has turned). If I want the motor to hold a position that corresponds to 12 o'clock, and the motor is currently at 6 o'clock, there is a difference of "6" whatevers. If I set my controller's P value to "1", I get 1 x 6 = 6 units of output to my motor, if I set it to 2, I get 2 x 6 = 12 units of output to my motor, etc. Make sense? That output from the controller to the motor causes the motor to rotate towards 12 o'clock. The speed of rotation is based on the value of the output--greater output --> greater speed. Once the motor begins to rotate towards 12 o'clock, the output of the controller gets smaller. Consider P = 1, at 6, the output is 6, as the motor rotates to 5, the output drops to 5, and so on. If the rotation back towards 12 is slow, then when the motor gets to 12:01, the output from the controller will only be .01, which might not be enough to bring the motor all the way to 12. If the rotation was fast (and the motor has mass), the motor will overshoot 12 o'clock, and the controller will start giving a negative output, trying to bring the motor back to 12. If the P value is high enough, this can create an enormous oscillation with the motor swinging back and forth past 12 o'clock. Because of these two issues--too low P and you never reach your target, too high P and you swing back and forth past it--we include D's and I's.

I stands for integrative. The integrator takes the time-accumulated difference between the set target and the actual value and adds that to the output of the controller. If you are just using I, no P = 0 and D = 0, then the output of the controller follows an equation like, output = sum [(actual value - set point) * time] * I. So, for example, if you're at 6 o'clock, and are only using I, then at first nothing will happen. After some amount of time, the motor will slowly begin to rotate up towards 12. It will continue to rotate, speeding up as it goes, until it (maybe) passes 12 o'clock at which point it will slowly begin to slow down and eventually will try to return to 12, passing it again. Now, recall that a small P will get me close to 12, but might not ever actually get me there, because there's not enough output. If I add a little I to that P, then, the P will get me close to 12 and then, over time, that small difference between the motor's actual position and 12 o'clock will add up, because of the I and the controller will eventually bring it up to 12.

This might sound like a good solution for what your looking for. In many applications, this takes too long, so they use a big P, which causes it to overshoot, but they add some D (which adjusts the controller output based on a differentiation of the difference--essentially watching the rate of change) to control the rate at which the motor moves. This reduces the degree of overshoot and, thus, the swinging.

When you use all 3, your basically using the P to get you where you want to be quickly, the D to stop you from oscillating, and the I to bring you right on target (because the P and D have too small of an output close to the target). Does that help? Does anyone remember this stuff better than me and have corrections to make?

Now, with all the said, I don't really understand how you use a PID controller for a refrigeration system--I typically think of them as on/off. I suppose you could directly control the compressor motor with the controller. I'll have to think about how that would actually work...