isra ceron / Mbed 2 deprecated control_PID_m01

Dependencies:   mbed

Committer:
icmembed
Date:
Tue Sep 03 22:57:05 2019 +0000
Revision:
0:cf1a10a72034
hola

Who changed what in which revision?

UserRevisionLine numberNew contents of line
icmembed 0:cf1a10a72034 1 #include "mbed.h"
icmembed 0:cf1a10a72034 2 #include "math.h"
icmembed 0:cf1a10a72034 3
icmembed 0:cf1a10a72034 4
icmembed 0:cf1a10a72034 5 PwmOut mypwm(D5);
icmembed 0:cf1a10a72034 6 PwmOut PWM(D3);
icmembed 0:cf1a10a72034 7 PwmOut PWM1(D4);
icmembed 0:cf1a10a72034 8 Serial pc(SERIAL_TX, SERIAL_RX);
icmembed 0:cf1a10a72034 9
icmembed 0:cf1a10a72034 10
icmembed 0:cf1a10a72034 11 AnalogIn analog_value(A0);
icmembed 0:cf1a10a72034 12 AnalogIn retro(A5);
icmembed 0:cf1a10a72034 13 DigitalOut led(LED1);
icmembed 0:cf1a10a72034 14
icmembed 0:cf1a10a72034 15 double KP=0.4027;
icmembed 0:cf1a10a72034 16 double KI =0.01;
icmembed 0:cf1a10a72034 17 double KD1 =0.2276;
icmembed 0:cf1a10a72034 18 double KD2 =0.02283;
icmembed 0:cf1a10a72034 19 double REF = 0.6;
icmembed 0:cf1a10a72034 20
icmembed 0:cf1a10a72034 21 float Apid=0;
icmembed 0:cf1a10a72034 22
icmembed 0:cf1a10a72034 23
icmembed 0:cf1a10a72034 24
icmembed 0:cf1a10a72034 25 float T = 0.3;
icmembed 0:cf1a10a72034 26 // PID
icmembed 0:cf1a10a72034 27 double IT_1=0;
icmembed 0:cf1a10a72034 28 double DT_1=0;
icmembed 0:cf1a10a72034 29 double UT_1=0;
icmembed 0:cf1a10a72034 30 double YT_1=0;
icmembed 0:cf1a10a72034 31 double YT;
icmembed 0:cf1a10a72034 32 double UT;
icmembed 0:cf1a10a72034 33 double KP1 =0.2;
icmembed 0:cf1a10a72034 34 double PT;
icmembed 0:cf1a10a72034 35 double IT = 0;
icmembed 0:cf1a10a72034 36 double Ti =0.9; //0.017;
icmembed 0:cf1a10a72034 37 double Td =0.9; //0.017;
icmembed 0:cf1a10a72034 38 double N =30;
icmembed 0:cf1a10a72034 39 double DT =0;
icmembed 0:cf1a10a72034 40 double PID =0;
icmembed 0:cf1a10a72034 41 int k=0;
icmembed 0:cf1a10a72034 42 int analogPin = 0;
icmembed 0:cf1a10a72034 43 volatile float valor=0;
icmembed 0:cf1a10a72034 44 int ledPin = 10;
icmembed 0:cf1a10a72034 45 int voo=0;
icmembed 0:cf1a10a72034 46 //float error =0;
icmembed 0:cf1a10a72034 47 double KPin;
icmembed 0:cf1a10a72034 48 double KIin;
icmembed 0:cf1a10a72034 49 double KDin;
icmembed 0:cf1a10a72034 50 double ERROR1;
icmembed 0:cf1a10a72034 51 double PT2;
icmembed 0:cf1a10a72034 52 double E;
icmembed 0:cf1a10a72034 53 double ET;
icmembed 0:cf1a10a72034 54 double ET1;
icmembed 0:cf1a10a72034 55 double ET2;
icmembed 0:cf1a10a72034 56 double ET3;
icmembed 0:cf1a10a72034 57 double VT;
icmembed 0:cf1a10a72034 58 double VT1;
icmembed 0:cf1a10a72034 59
icmembed 0:cf1a10a72034 60
icmembed 0:cf1a10a72034 61
icmembed 0:cf1a10a72034 62 float precio = 12.34;
icmembed 0:cf1a10a72034 63 int pesos;
icmembed 0:cf1a10a72034 64 float centavos;
icmembed 0:cf1a10a72034 65
icmembed 0:cf1a10a72034 66 int Ient;
icmembed 0:cf1a10a72034 67
icmembed 0:cf1a10a72034 68
icmembed 0:cf1a10a72034 69 int main() {
icmembed 0:cf1a10a72034 70 PWM.period_ms(17);
icmembed 0:cf1a10a72034 71 PWM1.period_ms(17);
icmembed 0:cf1a10a72034 72
icmembed 0:cf1a10a72034 73 pc.printf("This program tiene la referencia %f .\n", REF);
icmembed 0:cf1a10a72034 74 pc.printf("\r");
icmembed 0:cf1a10a72034 75
icmembed 0:cf1a10a72034 76
icmembed 0:cf1a10a72034 77
icmembed 0:cf1a10a72034 78 // printf("\nAnalogIn example\n");
icmembed 0:cf1a10a72034 79
icmembed 0:cf1a10a72034 80 while(1) {
icmembed 0:cf1a10a72034 81
icmembed 0:cf1a10a72034 82 YT = retro.read();
icmembed 0:cf1a10a72034 83 UT = REF;
icmembed 0:cf1a10a72034 84 E = (UT-YT);
icmembed 0:cf1a10a72034 85 ET = E;
icmembed 0:cf1a10a72034 86 VT = KP*(ET-ET1)+((KD1/T)*(ET-2*ET1+ET2))+((KD2/(T*T))*(ET-3*ET1+3*ET2-ET3))+KI*T*ET+VT1;
icmembed 0:cf1a10a72034 87 VT1=VT;
icmembed 0:cf1a10a72034 88 ET3= ET2;
icmembed 0:cf1a10a72034 89 ET2=ET1;
icmembed 0:cf1a10a72034 90 ET1 = ET;
icmembed 0:cf1a10a72034 91
icmembed 0:cf1a10a72034 92 //PT= KP*(UT-YT);
icmembed 0:cf1a10a72034 93 // IT = KI*T*(UT_1-YT_1)+IT_1;
icmembed 0:cf1a10a72034 94 //DT= (KD/T)*(UT-YT+YT_1-UT_1);
icmembed 0:cf1a10a72034 95 //PID= PT+IT+DT;
icmembed 0:cf1a10a72034 96 //YT_1=YT;
icmembed 0:cf1a10a72034 97 //UT_1=UT;
icmembed 0:cf1a10a72034 98 //IT_1=IT;
icmembed 0:cf1a10a72034 99
icmembed 0:cf1a10a72034 100 Apid = abs(VT);
icmembed 0:cf1a10a72034 101 Ient =(int) Apid;
icmembed 0:cf1a10a72034 102
icmembed 0:cf1a10a72034 103
icmembed 0:cf1a10a72034 104 pc.printf("\n\n");
icmembed 0:cf1a10a72034 105 pc.printf("retro %lf.\t", YT);
icmembed 0:cf1a10a72034 106 pc.printf("Error %lf. \t", E);
icmembed 0:cf1a10a72034 107 pc.printf("referencia %f.\t", REF);
icmembed 0:cf1a10a72034 108 pc.printf("PID %f.\t", VT);
icmembed 0:cf1a10a72034 109 pc.printf("Absoluto %f.\t", Apid);
icmembed 0:cf1a10a72034 110 pc.printf("\r");
icmembed 0:cf1a10a72034 111
icmembed 0:cf1a10a72034 112 if( E > 0.02 && Apid < 1 ) {
icmembed 0:cf1a10a72034 113
icmembed 0:cf1a10a72034 114 PWM.write(Apid);
icmembed 0:cf1a10a72034 115 PWM1.write(0.0f);
icmembed 0:cf1a10a72034 116
icmembed 0:cf1a10a72034 117 }
icmembed 0:cf1a10a72034 118 else if ( E < -0.02 && Apid < 1 ) {
icmembed 0:cf1a10a72034 119
icmembed 0:cf1a10a72034 120
icmembed 0:cf1a10a72034 121 PWM.write(0.0f);
icmembed 0:cf1a10a72034 122 PWM1.write(Apid);
icmembed 0:cf1a10a72034 123
icmembed 0:cf1a10a72034 124 }
icmembed 0:cf1a10a72034 125
icmembed 0:cf1a10a72034 126 else if ( E > 0.0 && E < 0.02 ){
icmembed 0:cf1a10a72034 127
icmembed 0:cf1a10a72034 128 VT1 = VT;
icmembed 0:cf1a10a72034 129 KP=0;
icmembed 0:cf1a10a72034 130 KI=0;
icmembed 0:cf1a10a72034 131 KD1=0;
icmembed 0:cf1a10a72034 132 KD1=0;
icmembed 0:cf1a10a72034 133 PWM.write(Apid);
icmembed 0:cf1a10a72034 134 //PWM.write(0.21);
icmembed 0:cf1a10a72034 135 PWM1.write(0.0f);
icmembed 0:cf1a10a72034 136 }
icmembed 0:cf1a10a72034 137
icmembed 0:cf1a10a72034 138 wait_ms(10); // 200 ms
icmembed 0:cf1a10a72034 139 }
icmembed 0:cf1a10a72034 140 }