here in OZ most houses are wired up with two 16 or 20amp power circuits and one 8 or 10 amp light, the standard GPO ( powerpoint) is only rated at 10 amps so that limits most electric brewers to 2400w elements unless you want to spend a fair bit of money getting a dedicated power circuit run. There are a few guys down here that run a 22l brewery off 10 amps, it take a little bit of fiddling and a bit more time. Its all about time sharing, when the mash is ramping all of the power goes to the mash, once the mash has hit temp the power is switched to the HLT and only switched back to maintain the temp of the mash. When the mash is finished hopefully you have a HLT full of hot water at sparge temp so all the power can go to the kettle as soon as there is enough wort in the kettle to start the boil. This sort of setup takes more time but that can be reduced with insulated vessels and lids, if you can bring in 2 10 circuits even better.
I have been playing around with my controller a bit over the weekend and have found that I don't like how the PID worked, it over shot the temp too much and oscillated by 1 deg which I also didn't like this was the setup that I used
its a camping mat insulated keg with a 2400w kettle element and a little 15w 12v dc pump used to recirc the water to mix it.
so after a little bit of thought I decided to hold the element on and leave the pid off until the temp is within 5 deg of the set temp then the PID takes over. What I don't like about the library is the I term is limited to the output max, which means it can ramp up to the output max and the only thing that will bring it down is an over temp. The d term isn't doing much because of the long ramp times, one could extend the sample time but that also increase the Ki and decreases the Kd if you extend it over a second. so this is what I did
Code: Select all
void PID_HEAT (void){
if((Setpoint - Input)>5){
digitalWrite(Heat,HIGH);
}
else{
myPID.Compute();
unsigned long now = millis();
if(now - windowStartTime>WindowSize)
{ //time to shift the Relay Window
windowStartTime += WindowSize;
}
if((Output*(WindowSize/100)) > now - windowStartTime) digitalWrite(Heat,HIGH);
else digitalWrite(Heat,LOW);
}
}
I also increased the sampletime to 5 sec and limited the output to 100, the setting I ran today was Kp = 50, Ki = 0.01, Kd = 10 and window size = 500. what I found was the temp ramped up at a good rate and settled right on the set temp without any overshoot, the only issues was a messy changeover from ON to the PID and a slow response to temperature change under 2 deg ( this could be reduced by increasing Kp a bit), I have a few ideas on smoothing out the change over.
cheers steve