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.
Dependents: Nucleo_spi 2015_denziben_i2c_S2 Nucleo_Motor Nucleo_Motor
Fork of PID by
Diff: PID.h
- Revision:
- 1:aac6180820a4
- Parent:
- 0:6e12a3e5af19
- Child:
- 2:14176355508a
--- a/PID.h Thu Sep 02 16:48:10 2010 +0000
+++ b/PID.h Fri Jun 19 06:36:10 2015 +0000
@@ -1,213 +1,30 @@
-/**
- * @author Aaron Berk
- *
- * @section LICENSE
- *
- * Copyright (c) 2010 ARM Limited
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * @section DESCRIPTION
- *
- * A PID controller is a widely used feedback controller commonly found in
- * industry.
- *
- * This library is a port of Brett Beauregard's Arduino PID library:
- *
- * http://www.arduino.cc/playground/Code/PIDLibrary
- *
- * The wikipedia article on PID controllers is a good place to start on
- * understanding how they work:
- *
- * http://en.wikipedia.org/wiki/PID_controller
- *
- * For a clear and elegant explanation of how to implement and tune a
- * controller, the controlguru website by Douglas J. Cooper (who also happened
- * to be Brett's controls professor) is an excellent reference:
- *
- * http://www.controlguru.com/
- */
#ifndef PID_H
#define PID_H
-/**
- * Includes
- */
#include "mbed.h"
-
-/**
- * Defines
- */
-#define MANUAL_MODE 0
-#define AUTO_MODE 1
-
-/**
- * Proportional-integral-derivative controller.
- */
-class PID {
-
-public:
-
- /**
- * Constructor.
- *
- * Sets default limits [0-3.3V], calculates tuning parameters, and sets
- * manual mode with no bias.
- *
- * @param Kc - Tuning parameter
- * @param tauI - Tuning parameter
- * @param tauD - Tuning parameter
- * @param interval PID calculation performed every interval seconds.
- */
- PID(float Kc, float tauI, float tauD, float interval);
-
- /**
- * Scale from inputs to 0-100%.
- *
- * @param InMin The real world value corresponding to 0%.
- * @param InMax The real world value corresponding to 100%.
- */
- void setInputLimits(float inMin , float inMax);
-
- /**
- * Scale from outputs to 0-100%.
- *
- * @param outMin The real world value corresponding to 0%.
- * @param outMax The real world value corresponding to 100%.
- */
- void setOutputLimits(float outMin, float outMax);
-
- /**
- * Calculate PID constants.
- *
- * Allows parameters to be changed on the fly without ruining calculations.
- *
- * @param Kc - Tuning parameter
- * @param tauI - Tuning parameter
- * @param tauD - Tuning parameter
- */
- void setTunings(float Kc, float tauI, float tauD);
-
- /**
- * Reinitializes controller internals. Automatically
- * called on a manual to auto transition.
- */
- void reset(void);
-
- /**
- * Set PID to manual or auto mode.
- *
- * @param mode 0 -> Manual
- * Non-zero -> Auto
- */
- void setMode(int mode);
-
- /**
- * Set how fast the PID loop is run.
- *
- * @param interval PID calculation peformed every interval seconds.
- */
- void setInterval(float interval);
+class PID
+{
+ public:
+
+ PID(float tauKc, float tauKi, float tauKd);
- /**
- * Set the set point.
- *
- * @param sp The set point as a real world value.
- */
- void setSetPoint(float sp);
-
- /**
- * Set the process value.
- *
- * @param pv The process value as a real world value.
- */
- void setProcessValue(float pv);
-
- /**
- * Set the bias.
- *
- * @param bias The bias for the controller output.
- */
- void setBias(float bias);
-
- /**
- * PID calculation.
- *
- * @return The controller output as a float between outMin and outMax.
- */
- float compute(void);
-
- //Getters.
- float getInMin();
- float getInMax();
- float getOutMin();
- float getOutMax();
- float getInterval();
- float getPParam();
- float getIParam();
- float getDParam();
-
-private:
-
- bool usingFeedForward;
- bool inAuto;
-
- //Actual tuning parameters used in PID calculation.
- float Kc_;
- float tauR_;
- float tauD_;
-
- //Raw tuning parameters.
- float pParam_;
- float iParam_;
- float dParam_;
-
- //The point we want to reach.
- float setPoint_;
- //The thing we measure.
- float processVariable_;
- float prevProcessVariable_;
- //The output that affects the process variable.
- float controllerOutput_;
- float prevControllerOutput_;
-
- //We work in % for calculations so these will scale from
- //real world values to 0-100% and back again.
- float inMin_;
- float inMax_;
- float inSpan_;
- float outMin_;
- float outMax_;
- float outSpan_;
-
- //The accumulated error, i.e. integral.
- float accError_;
- //The controller output bias.
- float bias_;
-
- //The interval between samples.
- float tSample_;
-
- //Controller output as a real world value.
- volatile float realOutput_;
-
+ void PIDctrl(void);
+ void start();
+ void setInterval(double inter);
+ //Getters.
+ void stop();
+ double dTarget; double dPoint;
+ // PI制御ゲイン
+ double GAIN_P ;//1.5 // 比例ゲイン
+ double GAIN_I ;//2.8 // 積分ゲイン
+ double GAIN_D ;//0.2
+ double data;
+ private:
+ Timer timer;
+ Ticker T;
+ float interval;
+
};
-#endif /* PID_H */
+#endif
\ No newline at end of file
