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.
PID.h@0:7afdddad09e6, 2015-08-19 (annotated)
- Committer:
- Ximidar
- Date:
- Wed Aug 19 06:18:07 2015 +0000
- Revision:
- 0:7afdddad09e6
- Child:
- 1:0a55ccb22a4e
Initial commit. Program is not testable yet.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Ximidar | 0:7afdddad09e6 | 1 | #ifndef PID_H |
| Ximidar | 0:7afdddad09e6 | 2 | #define PID_H |
| Ximidar | 0:7afdddad09e6 | 3 | |
| Ximidar | 0:7afdddad09e6 | 4 | //This is an attempt at a custom PID for thrusters on an submarine. |
| Ximidar | 0:7afdddad09e6 | 5 | |
| Ximidar | 0:7afdddad09e6 | 6 | //This program was made with this reference - https://en.wikipedia.org/wiki/PID_controller |
| Ximidar | 0:7afdddad09e6 | 7 | //And this reference https://github.com/br3ttb/Arduino-PID-Library |
| Ximidar | 0:7afdddad09e6 | 8 | //And this reference http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/ |
| Ximidar | 0:7afdddad09e6 | 9 | |
| Ximidar | 0:7afdddad09e6 | 10 | //I didn't want to just use the pre-build library because I want to understand what a PID is and how to use it. |
| Ximidar | 0:7afdddad09e6 | 11 | //Plus I've had problems with code I didn't write myself before. |
| Ximidar | 0:7afdddad09e6 | 12 | |
| Ximidar | 0:7afdddad09e6 | 13 | //Things to implement- |
| Ximidar | 0:7afdddad09e6 | 14 | // automatic kp, ki, kd adjustment |
| Ximidar | 0:7afdddad09e6 | 15 | // IMU reference input from MPU-6050 |
| Ximidar | 0:7afdddad09e6 | 16 | // Thruster adjustments (figure out how to implement PID values to the thruster) |
| Ximidar | 0:7afdddad09e6 | 17 | |
| Ximidar | 0:7afdddad09e6 | 18 | class pid{ |
| Ximidar | 0:7afdddad09e6 | 19 | |
| Ximidar | 0:7afdddad09e6 | 20 | public: |
| Ximidar | 0:7afdddad09e6 | 21 | pid(); |
| Ximidar | 0:7afdddad09e6 | 22 | pid(double p, double i, double d, double desired, int minval, int maxval); |
| Ximidar | 0:7afdddad09e6 | 23 | double PIDoutput(); |
| Ximidar | 0:7afdddad09e6 | 24 | void getReference(double ref); |
| Ximidar | 0:7afdddad09e6 | 25 | void updateDesired(double desired); |
| Ximidar | 0:7afdddad09e6 | 26 | double getref_IMU(); |
| Ximidar | 0:7afdddad09e6 | 27 | |
| Ximidar | 0:7afdddad09e6 | 28 | double ref_IMU; |
| Ximidar | 0:7afdddad09e6 | 29 | float ref_IMUf; |
| Ximidar | 0:7afdddad09e6 | 30 | |
| Ximidar | 0:7afdddad09e6 | 31 | private: |
| Ximidar | 0:7afdddad09e6 | 32 | void setLimit(int minval, int maxval); |
| Ximidar | 0:7afdddad09e6 | 33 | void sampleTime(unsigned long sample); |
| Ximidar | 0:7afdddad09e6 | 34 | void setPIDTune(double kp, double ki, double kd); |
| Ximidar | 0:7afdddad09e6 | 35 | |
| Ximidar | 0:7afdddad09e6 | 36 | |
| Ximidar | 0:7afdddad09e6 | 37 | double kp; |
| Ximidar | 0:7afdddad09e6 | 38 | double ki; |
| Ximidar | 0:7afdddad09e6 | 39 | double kd; |
| Ximidar | 0:7afdddad09e6 | 40 | double kiTemp; |
| Ximidar | 0:7afdddad09e6 | 41 | double lastInput; |
| Ximidar | 0:7afdddad09e6 | 42 | |
| Ximidar | 0:7afdddad09e6 | 43 | |
| Ximidar | 0:7afdddad09e6 | 44 | int minv; |
| Ximidar | 0:7afdddad09e6 | 45 | int maxv; |
| Ximidar | 0:7afdddad09e6 | 46 | |
| Ximidar | 0:7afdddad09e6 | 47 | double setPoint; |
| Ximidar | 0:7afdddad09e6 | 48 | //tbd |
| Ximidar | 0:7afdddad09e6 | 49 | |
| Ximidar | 0:7afdddad09e6 | 50 | }; |
| Ximidar | 0:7afdddad09e6 | 51 | #endif |