Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: PID.cpp
- Revision:
- 1:36155a9a4422
- Parent:
- 0:2b302a1ce68a
- Child:
- 2:fe18ec619746
--- a/PID.cpp Tue Dec 15 07:52:00 2020 +0000 +++ b/PID.cpp Sun Dec 27 11:18:36 2020 +0000 @@ -1,50 +1,41 @@ #include "mbed.h" #include "millis.h" -//#include "SoftwarePWM.h" -//#include "USBDevice.h" -#define threshold 0.009 // 1/330 + +#define threshold 0.009 unsigned long lastTime; double Input, Output; -double Setpoint=0.10606060606; //35/330; +double Setpoint=0.10303030303 ; //34/330; double errSum, lastErr; double kp, ki, kd; int SampleTime = 1000; //1 sec - AnalogIn temperature(p20); PwmOut fanControl(p21); -//static BufferedSerial pc(USBTX, USBRX); Ticker temperatureTicker; - int readTemperatureFlag=0; void tickerFlagOn() { - //led2 = !led2; + readTemperatureFlag=1; } void Compute() { - printf("PID is functioning\n\r"); + unsigned long now = millis(); int timeChange = (now - lastTime); - //if(timeChange>=SampleTime) - //{ - /*Compute all the working error variables*/ + if (Setpoint<Input) { double error = Setpoint - Input; errSum += error; double dErr = (error - lastErr); - - /*Compute PID Output*/ Output = kp * error + ki * errSum + kd * dErr; - - /*Remember some variables for next time*/ lastErr = error; lastTime = now; - //} - //printf("PID loop has ended\n\r"); + } + else { Output=0; errSum=0; lastErr=0;} + } void SetTunings(double Kp, double Ki, double Kd) @@ -71,26 +62,22 @@ float oldTemperature = temperature.read(); float newTemperature= oldTemperature; - temperatureTicker.attach(&tickerFlagOn, 0.2); // the address of the function to be attached (tickerFlagOn) and the interval (0.2 seconds) + temperatureTicker.attach(&tickerFlagOn, 0.2); while (1) { newTemperature = temperature.read(); - // if ((newTemperature < (oldTemperature-threshold)) || (newTemperature > (oldTemperature+threshold))) - // { - oldTemperature = newTemperature; // These are for the threshold - printf("Temperature= %.1f degrees\n\r", 3.3*oldTemperature*100); - // } - //Setpoint=0.0757575757575758; - //Setpoint=25/330; - Input=oldTemperature; - SetTunings(4, 2, 1); - Compute(); - fanControl.period(0.00004f); - if (Setpoint<Input)fanControl.write(-Output); else fanControl.write(0); - //fanControl.write(0.50f); - printf("inp %f set %f out %f \n \r", Input, Setpoint, Output); - wait(3); + oldTemperature = newTemperature; + printf("Temperature: %.1f\n\r", 3.3*oldTemperature*100); + + Input=oldTemperature; + SetTunings(4, 10, 2); + Compute(); + fanControl.period(0.00004f); + if (-Output>1) Output=-1; + fanControl.write(-Output); + printf("Fan speed: %f\n\n\r", -Output); + wait(3); } } \ No newline at end of file