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.
main.cpp@0:cf1a10a72034, 2019-09-03 (annotated)
- Committer:
- icmembed
- Date:
- Tue Sep 03 22:57:05 2019 +0000
- Revision:
- 0:cf1a10a72034
hola
Who changed what in which revision?
User | Revision | Line number | New 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 | } |