Tarea para manejo de Encoder, el cual incrementa y decrementa los parámetros del PID y presionando el boton suena
Dependencies: Debounced QEI TextLCD mbed
main.cpp@0:a7b349b8861d, 2014-04-04 (annotated)
- Committer:
- diego_carvajal
- Date:
- Fri Apr 04 16:57:20 2014 +0000
- Revision:
- 0:a7b349b8861d
Tarea_Encoder
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
diego_carvajal | 0:a7b349b8861d | 1 | /* Tarea No. 4 |
diego_carvajal | 0:a7b349b8861d | 2 | Diego Fernando Carvajal Castrillón |
diego_carvajal | 0:a7b349b8861d | 3 | Santiago Lopez Restrepo |
diego_carvajal | 0:a7b349b8861d | 4 | Ingeniería de Control |
diego_carvajal | 0:a7b349b8861d | 5 | |
diego_carvajal | 0:a7b349b8861d | 6 | |
diego_carvajal | 0:a7b349b8861d | 7 | Practica realizada para aprendizaje de manejo de Encoder. El desarrollo |
diego_carvajal | 0:a7b349b8861d | 8 | de esta esta dado por el aumento y disminución de los datos del |
diego_carvajal | 0:a7b349b8861d | 9 | controlador PID, además que al presionar el boton del Encoder suene |
diego_carvajal | 0:a7b349b8861d | 10 | mediante un PWM. |
diego_carvajal | 0:a7b349b8861d | 11 | */ |
diego_carvajal | 0:a7b349b8861d | 12 | |
diego_carvajal | 0:a7b349b8861d | 13 | |
diego_carvajal | 0:a7b349b8861d | 14 | #include "mbed.h" |
diego_carvajal | 0:a7b349b8861d | 15 | #include "DebouncedIn.h" |
diego_carvajal | 0:a7b349b8861d | 16 | #include "TextLCD.h" |
diego_carvajal | 0:a7b349b8861d | 17 | #include "QEI.h" |
diego_carvajal | 0:a7b349b8861d | 18 | |
diego_carvajal | 0:a7b349b8861d | 19 | |
diego_carvajal | 0:a7b349b8861d | 20 | QEI wheel (PTA16, PTA17, NC, 48); |
diego_carvajal | 0:a7b349b8861d | 21 | TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7 |
diego_carvajal | 0:a7b349b8861d | 22 | |
diego_carvajal | 0:a7b349b8861d | 23 | |
diego_carvajal | 0:a7b349b8861d | 24 | DebouncedIn botonEncoder(PTC5); |
diego_carvajal | 0:a7b349b8861d | 25 | PwmOut Pwm(PTA5); |
diego_carvajal | 0:a7b349b8861d | 26 | |
diego_carvajal | 0:a7b349b8861d | 27 | |
diego_carvajal | 0:a7b349b8861d | 28 | float periodo=0.001; |
diego_carvajal | 0:a7b349b8861d | 29 | float dureza=0.1; |
diego_carvajal | 0:a7b349b8861d | 30 | int Spbias=0,Sp=0,Kpbias=0,Kp=0,Ki=0,Kibias=0,Kd=0,Kdbias=0,Enc; |
diego_carvajal | 0:a7b349b8861d | 31 | int C1=0x0E; // solo muestra el curzor |
diego_carvajal | 0:a7b349b8861d | 32 | int i; // indice de la variable |
diego_carvajal | 0:a7b349b8861d | 33 | |
diego_carvajal | 0:a7b349b8861d | 34 | int PWMmodule(float pp,float Dd) |
diego_carvajal | 0:a7b349b8861d | 35 | { |
diego_carvajal | 0:a7b349b8861d | 36 | Pwm.period(periodo); |
diego_carvajal | 0:a7b349b8861d | 37 | Pwm.write(dureza); |
diego_carvajal | 0:a7b349b8861d | 38 | wait(0.3); |
diego_carvajal | 0:a7b349b8861d | 39 | Pwm.write(0); |
diego_carvajal | 0:a7b349b8861d | 40 | return 0; |
diego_carvajal | 0:a7b349b8861d | 41 | } |
diego_carvajal | 0:a7b349b8861d | 42 | |
diego_carvajal | 0:a7b349b8861d | 43 | int main() |
diego_carvajal | 0:a7b349b8861d | 44 | |
diego_carvajal | 0:a7b349b8861d | 45 | { |
diego_carvajal | 0:a7b349b8861d | 46 | lcd.writeCommand(C1); |
diego_carvajal | 0:a7b349b8861d | 47 | lcd.locate(0,0); |
diego_carvajal | 0:a7b349b8861d | 48 | lcd.printf("Sp=0"); |
diego_carvajal | 0:a7b349b8861d | 49 | lcd.locate(8,0); |
diego_carvajal | 0:a7b349b8861d | 50 | lcd.printf("Kp=0"); |
diego_carvajal | 0:a7b349b8861d | 51 | lcd.locate(0,1); |
diego_carvajal | 0:a7b349b8861d | 52 | lcd.printf("Ki=0"); |
diego_carvajal | 0:a7b349b8861d | 53 | lcd.locate(8,1); |
diego_carvajal | 0:a7b349b8861d | 54 | lcd.printf("Kd=0"); |
diego_carvajal | 0:a7b349b8861d | 55 | |
diego_carvajal | 0:a7b349b8861d | 56 | while(1) |
diego_carvajal | 0:a7b349b8861d | 57 | { |
diego_carvajal | 0:a7b349b8861d | 58 | Enc=wheel.getPulses(); |
diego_carvajal | 0:a7b349b8861d | 59 | |
diego_carvajal | 0:a7b349b8861d | 60 | |
diego_carvajal | 0:a7b349b8861d | 61 | switch(i) { |
diego_carvajal | 0:a7b349b8861d | 62 | |
diego_carvajal | 0:a7b349b8861d | 63 | case 0: |
diego_carvajal | 0:a7b349b8861d | 64 | Kdbias=Kd; |
diego_carvajal | 0:a7b349b8861d | 65 | |
diego_carvajal | 0:a7b349b8861d | 66 | lcd.locate(3,0); |
diego_carvajal | 0:a7b349b8861d | 67 | lcd.printf("%d",Sp); |
diego_carvajal | 0:a7b349b8861d | 68 | |
diego_carvajal | 0:a7b349b8861d | 69 | Sp=Spbias+Enc; |
diego_carvajal | 0:a7b349b8861d | 70 | if(Sp<0) |
diego_carvajal | 0:a7b349b8861d | 71 | { |
diego_carvajal | 0:a7b349b8861d | 72 | Sp=0; |
diego_carvajal | 0:a7b349b8861d | 73 | wheel.reset(); |
diego_carvajal | 0:a7b349b8861d | 74 | Enc=0; |
diego_carvajal | 0:a7b349b8861d | 75 | } |
diego_carvajal | 0:a7b349b8861d | 76 | break; |
diego_carvajal | 0:a7b349b8861d | 77 | case 1: |
diego_carvajal | 0:a7b349b8861d | 78 | Spbias=Sp; |
diego_carvajal | 0:a7b349b8861d | 79 | lcd.locate(11,0); |
diego_carvajal | 0:a7b349b8861d | 80 | lcd.printf("%d",Kp); |
diego_carvajal | 0:a7b349b8861d | 81 | |
diego_carvajal | 0:a7b349b8861d | 82 | Kp=Kpbias+Enc; |
diego_carvajal | 0:a7b349b8861d | 83 | if(Kp<0) |
diego_carvajal | 0:a7b349b8861d | 84 | { |
diego_carvajal | 0:a7b349b8861d | 85 | Kp=0; |
diego_carvajal | 0:a7b349b8861d | 86 | wheel.reset(); |
diego_carvajal | 0:a7b349b8861d | 87 | Enc=0; |
diego_carvajal | 0:a7b349b8861d | 88 | } |
diego_carvajal | 0:a7b349b8861d | 89 | break; |
diego_carvajal | 0:a7b349b8861d | 90 | case 2: |
diego_carvajal | 0:a7b349b8861d | 91 | Kpbias=Kp; |
diego_carvajal | 0:a7b349b8861d | 92 | lcd.locate(3,1); |
diego_carvajal | 0:a7b349b8861d | 93 | lcd.printf("%d",Ki); |
diego_carvajal | 0:a7b349b8861d | 94 | |
diego_carvajal | 0:a7b349b8861d | 95 | Ki=Kibias+Enc; |
diego_carvajal | 0:a7b349b8861d | 96 | if(Ki<0) |
diego_carvajal | 0:a7b349b8861d | 97 | { |
diego_carvajal | 0:a7b349b8861d | 98 | Ki=0; |
diego_carvajal | 0:a7b349b8861d | 99 | wheel.reset(); |
diego_carvajal | 0:a7b349b8861d | 100 | Enc=0; |
diego_carvajal | 0:a7b349b8861d | 101 | } |
diego_carvajal | 0:a7b349b8861d | 102 | |
diego_carvajal | 0:a7b349b8861d | 103 | break; |
diego_carvajal | 0:a7b349b8861d | 104 | case 3: |
diego_carvajal | 0:a7b349b8861d | 105 | Kibias=Ki; |
diego_carvajal | 0:a7b349b8861d | 106 | |
diego_carvajal | 0:a7b349b8861d | 107 | lcd.locate(11,1); |
diego_carvajal | 0:a7b349b8861d | 108 | lcd.printf("%d",Kd); |
diego_carvajal | 0:a7b349b8861d | 109 | Kd=Kdbias+Enc; |
diego_carvajal | 0:a7b349b8861d | 110 | if(Kd<0) |
diego_carvajal | 0:a7b349b8861d | 111 | { |
diego_carvajal | 0:a7b349b8861d | 112 | Kd=0; |
diego_carvajal | 0:a7b349b8861d | 113 | wheel.reset(); |
diego_carvajal | 0:a7b349b8861d | 114 | Enc=0; |
diego_carvajal | 0:a7b349b8861d | 115 | } |
diego_carvajal | 0:a7b349b8861d | 116 | |
diego_carvajal | 0:a7b349b8861d | 117 | break; |
diego_carvajal | 0:a7b349b8861d | 118 | } |
diego_carvajal | 0:a7b349b8861d | 119 | |
diego_carvajal | 0:a7b349b8861d | 120 | |
diego_carvajal | 0:a7b349b8861d | 121 | |
diego_carvajal | 0:a7b349b8861d | 122 | |
diego_carvajal | 0:a7b349b8861d | 123 | if(botonEncoder.falling()) |
diego_carvajal | 0:a7b349b8861d | 124 | { |
diego_carvajal | 0:a7b349b8861d | 125 | PWMmodule(periodo,dureza); |
diego_carvajal | 0:a7b349b8861d | 126 | wait(0.2); |
diego_carvajal | 0:a7b349b8861d | 127 | wheel.reset(); |
diego_carvajal | 0:a7b349b8861d | 128 | i++; |
diego_carvajal | 0:a7b349b8861d | 129 | if(i>3) |
diego_carvajal | 0:a7b349b8861d | 130 | { |
diego_carvajal | 0:a7b349b8861d | 131 | i=0; |
diego_carvajal | 0:a7b349b8861d | 132 | } |
diego_carvajal | 0:a7b349b8861d | 133 | switch (i) |
diego_carvajal | 0:a7b349b8861d | 134 | { |
diego_carvajal | 0:a7b349b8861d | 135 | case 0: |
diego_carvajal | 0:a7b349b8861d | 136 | lcd.locate(2,0); |
diego_carvajal | 0:a7b349b8861d | 137 | lcd.printf("="); |
diego_carvajal | 0:a7b349b8861d | 138 | break; |
diego_carvajal | 0:a7b349b8861d | 139 | case 1: |
diego_carvajal | 0:a7b349b8861d | 140 | lcd.locate(10,0); |
diego_carvajal | 0:a7b349b8861d | 141 | lcd.printf("="); |
diego_carvajal | 0:a7b349b8861d | 142 | break; |
diego_carvajal | 0:a7b349b8861d | 143 | case 2: |
diego_carvajal | 0:a7b349b8861d | 144 | lcd.locate(2,1); |
diego_carvajal | 0:a7b349b8861d | 145 | lcd.printf("="); |
diego_carvajal | 0:a7b349b8861d | 146 | break; |
diego_carvajal | 0:a7b349b8861d | 147 | case 3: |
diego_carvajal | 0:a7b349b8861d | 148 | lcd.locate(10,1); |
diego_carvajal | 0:a7b349b8861d | 149 | lcd.printf("="); |
diego_carvajal | 0:a7b349b8861d | 150 | break; |
diego_carvajal | 0:a7b349b8861d | 151 | |
diego_carvajal | 0:a7b349b8861d | 152 | |
diego_carvajal | 0:a7b349b8861d | 153 | } |
diego_carvajal | 0:a7b349b8861d | 154 | } |
diego_carvajal | 0:a7b349b8861d | 155 | } |
diego_carvajal | 0:a7b349b8861d | 156 | } |