PID-Regelung für Heizelemente mit Selbstkalibrierung October 21, 2010 11:39AM |
Registered: 13 years ago Posts: 833 |
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung October 21, 2010 11:55AM |
Registered: 14 years ago Posts: 7,505 |
Aller Anfang war schwer - Wolfstrap | Reprap-fab.org |
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung October 21, 2010 12:17PM |
Registered: 13 years ago Posts: 833 |
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung October 21, 2010 12:28PM |
Registered: 14 years ago Posts: 7,505 |
Aller Anfang war schwer - Wolfstrap | Reprap-fab.org |
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung October 21, 2010 12:34PM |
Registered: 13 years ago Posts: 833 |
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung October 21, 2010 01:52PM |
Registered: 13 years ago Posts: 28 |
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung October 21, 2010 02:35PM |
Registered: 13 years ago Posts: 833 |
config.h(.dist) 292 // PID gains. E_ = extruder, B_ = bed. The Es are about right for a brass extruder about 8 mm 293 // in diameter and 30 mm long heated by a 6 ohm coil with a 12v supply. The B_ values are OK 294 // for the bed described here: [reprap.org] 295 // Extruding increase biases the input to the extruder heater when the extruder 296 // is running as it requires more power. 297 // +/- BAND is the proportional band. Setting this to 0 gives bang-bang control; setting 298 // it very large gives full PID all the way. 299 300 #define E_TEMP_PID_PGAIN 2.0 301 #define E_TEMP_PID_IGAIN 0.15 302 #define E_TEMP_PID_DGAIN 0.5 303 #define EXTRUDING_INCREASE 7 304 #define E_TEMP_PID_BAND 0.0 305 306 #define B_TEMP_PID_PGAIN 2.0 307 #define B_TEMP_PID_IGAIN 0.07 308 #define B_TEMP_PID_DGAIN 1.0 309 #define B_TEMP_PID_BAND 1000.0
pid.pde 136 float error = (float)(targetTemperature - currentTemperature); 137 int output; 138 if(error < -band) 139 { 140 output = 0; 141 setTarget(targetTemperature); 142 } else if (error > band) 143 { 144 output = 255; 145 setTarget(targetTemperature); 146 } else 147 { 148 // PID 149 time = millis(); 150 float dt = 0.001*(float)(time - previousTime); 151 previousTime = time; 152 if (dt <= 0) // Don't do it when millis() has rolled over 153 return; 154 155 156 integral += error*dt; 157 float derivative = (error - previousError)/dt; 158 previousError = error; 159 output = (int)(error*pGain + integral*iGain + derivative*dGain); 160 if(!doingBed && cdda[tail]->extruding()) 161 output += EXTRUDING_INCREASE; 162 output = constrain(output, 0, 255); 163 } 164 165 analogWrite(heat_pin, output);
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung October 21, 2010 03:09PM |
Registered: 14 years ago Posts: 7,505 |
Aller Anfang war schwer - Wolfstrap | Reprap-fab.org |
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung October 21, 2010 03:09PM |
Admin Registered: 16 years ago Posts: 13,874 |
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung October 21, 2010 03:11PM |
Registered: 13 years ago Posts: 28 |
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung October 21, 2010 05:01PM |
Registered: 13 years ago Posts: 833 |
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung October 21, 2010 05:10PM |
Registered: 13 years ago Posts: 833 |
also:Quote
Viktor im engl. Thread
For faster finding the correct values you can use this procedere:
- set I=0
- set P really big (i tested wit 20000), until the temp starts to oszillate around the SetTemp.
- reduce P until the oszillation stops ... then reduce the value by 10%
- then start to increase the I-value, until you get a fast enough setting on the target temperature ...
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung October 21, 2010 05:36PM |
Registered: 13 years ago Posts: 28 |
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung October 21, 2010 06:11PM |
Admin Registered: 16 years ago Posts: 13,874 |