Output target value of PID
PIDcontroller.cpp@0:90457f6c41ea, 2018-08-10 (annotated)
- Committer:
- Uchida0923
- Date:
- Fri Aug 10 07:22:48 2018 +0000
- Revision:
- 0:90457f6c41ea
PID????????????????????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Uchida0923 | 0:90457f6c41ea | 1 | #include "PIDcontroller.h" |
Uchida0923 | 0:90457f6c41ea | 2 | #include "mbed.h" |
Uchida0923 | 0:90457f6c41ea | 3 | |
Uchida0923 | 0:90457f6c41ea | 4 | float PIDController::output(float sensorVal,float targetVal){ |
Uchida0923 | 0:90457f6c41ea | 5 | float p,i,d; |
Uchida0923 | 0:90457f6c41ea | 6 | diff1 = diff2; |
Uchida0923 | 0:90457f6c41ea | 7 | diff2 = sensorVal - targetVal; //偏差を取得 |
Uchida0923 | 0:90457f6c41ea | 8 | integral += (diff1 + diff2) / 2.0*delta_t; |
Uchida0923 | 0:90457f6c41ea | 9 | |
Uchida0923 | 0:90457f6c41ea | 10 | p = KP * diff2; //P制御 |
Uchida0923 | 0:90457f6c41ea | 11 | i = KI * integral; //I制御 |
Uchida0923 | 0:90457f6c41ea | 12 | d = KD * (diff2- diff1) / delta_t; //D制御 |
Uchida0923 | 0:90457f6c41ea | 13 | sum= abs(p+i+d); |
Uchida0923 | 0:90457f6c41ea | 14 | // pc.printf("%3.5f\n",delta_t); |
Uchida0923 | 0:90457f6c41ea | 15 | if(sum>1.0){ |
Uchida0923 | 0:90457f6c41ea | 16 | diff2=0; |
Uchida0923 | 0:90457f6c41ea | 17 | integral=0; |
Uchida0923 | 0:90457f6c41ea | 18 | } |
Uchida0923 | 0:90457f6c41ea | 19 | return sum; |
Uchida0923 | 0:90457f6c41ea | 20 | } |
Uchida0923 | 0:90457f6c41ea | 21 | |
Uchida0923 | 0:90457f6c41ea | 22 | void PIDController::print(){ |
Uchida0923 | 0:90457f6c41ea | 23 | printf("%3.5f\n",sum); |
Uchida0923 | 0:90457f6c41ea | 24 | } |