d

Dependencies:   Debounced QEI mbed

Files at this revision

API Documentation at this revision

Comitter:
salvarear
Date:
Tue Dec 03 19:58:45 2013 +0000
Child:
1:e214227f5d00
Commit message:
d

Changed in this revision

Debounced.lib Show annotated file Show diff for this revision Revisions of this file
QEI.lib Show annotated file Show diff for this revision Revisions of this file
TextLCD.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Debounced.lib	Tue Dec 03 19:58:45 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/WarwickRacing/code/Debounced/#8992c13bbb9b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QEI.lib	Tue Dec 03 19:58:45 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/aberk/code/QEI/#5c2ad81551aa
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TextLCD.lib	Tue Dec 03 19:58:45 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/salvarear/code/encoder/#261399fccd38
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Dec 03 19:58:45 2013 +0000
@@ -0,0 +1,202 @@
+#include "mbed.h"
+#include "DebouncedIn.h"
+#include "TextLCD.h"
+#include "QEI.h"
+ 
+AnalogIn Vin(PTB0);     //entrada de la planta
+AnalogOut Vout(PTE30);      //salida hacia la planta
+ 
+QEI wheel (PTA16, PTA17, NC, 24);   //pines correspondientes al encoder.
+TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
+ 
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+DebouncedIn button1(PTC12);     // Aumento
+DebouncedIn button2(PTC13);     // Disminución
+DebouncedIn button3(PTC16);     // Cambio de variable
+DebouncedIn button4(PTC17);     // Reset  
+
+int C1=0x0E; // solo muestra el curzor
+int C2=0x18; // desplaza izquierda
+int C3=0x1A; // desplaza derecha
+int C4=0x0C; // quito cursor bajo
+int i; // indice de la variable
+
+int j,kp,ki,kd,sp,cont,medida,cont1,cont2,cont3;                                                      
+float pid, err, ap, ai, ad, err_v, spf,kif,kpf,kdf,med;
+
+
+int main() {
+    
+    lcd.writeCommand(C1);
+    lcd.printf("Sp=0    Kp=0");
+    lcd.locate(0,1);
+    lcd.printf("Ki=0    Kd=0");
+    lcd.locate(2,0);
+    lcd.printf("=");
+ 
+    while(1) {
+      
+     cont1=wheel.getPulses();           //ciclo delpara el encoder
+     if(cont1<0){
+     wheel.reset();
+        cont1=0; 
+     }
+            if(cont1!=cont2) {  
+                                                
+            switch(i) {
+            
+                case 0:
+               
+                    lcd.locate(2,0);
+                    lcd.printf("=     ");
+                    lcd.locate(3,0);
+                    lcd.printf("%d",cont1);
+                    sp=cont1;
+                    
+                    break;
+                case 1:
+               
+                    lcd.locate(10,0);
+                    lcd.printf("=     ");
+                    lcd.locate(11,0);
+                    lcd.printf("%d",med);
+                    kp=medida;
+                    break;
+                case 2:
+                    lcd.locate(2,1);
+                    lcd.printf("=     ");
+                    lcd.locate(3,1);
+                    lcd.printf("%d",med);
+                    ki=med;
+                    break;
+                case 3:
+                    lcd.locate(10,1);
+                    lcd.printf("=     ");
+                    lcd.locate(11,1);
+                    lcd.printf("%d",med);
+                    kd=med;
+                    break;
+            }
+            cont2=cont1;
+            
+        }
+                  
+        
+        if(button3.falling()) {         //al presionar el encoder
+        wheel.reset();
+            i++;
+            if(i>3) {
+                i=0;
+            }
+            switch (i) {
+                case 0:
+                    lcd.locate(2,0);
+                    lcd.printf("=");
+                    break;
+                case 1:
+                    lcd.locate(10,0);
+                    lcd.printf("=");
+                    break;
+                case 2:
+                    lcd.locate(2,1);
+                    lcd.printf("=");
+                    break;
+                case 3:
+                    lcd.locate(10,1);
+                    lcd.printf("=");
+                    break;
+            }
+        }       
+    
+              
+           if (button4.falling()){
+                    lcd.locate(0,1);
+                    lcd.printf("Ha salido del programa ");
+           break;     //sale del bucle si pisan suiche4
+               }
+                        
+                                        }
+        
+    lcd.writeCommand(C4);
+           led3=1;
+           led3= !led3;
+           lcd.cls();
+           lcd.printf(" DATOS GUARDADOS!");   
+           wait(0.8);
+           lcd.cls();
+           lcd.printf("INICIANDO EL PID");
+           wait(0.2);           
+           lcd.cls();
+           lcd.printf("Er%d",err);
+           lcd.locate(8,0);
+           lcd.printf("Med%d",med);
+           lcd.locate(0,1);
+           lcd.printf("Sp%d",sp);
+           lcd.locate(8,1);
+           lcd.printf("pid%d",pid);
+           wait(0.5);
+           
+           // CICLO PRINCIPAL CONTROLADOR PID
+              while(1) {
+                              //leer puerto analogo y asignar a med
+           med=Vin.read();
+           medida=med*100;
+           kpf=kp*0.001;
+           kif=ki*0.001;
+           kdf=kd*0.0001;
+           err = (sp-medida);
+           
+           ap = kpf*err;         
+           ai =(kif*err)+ai;    //calculo de la integral del error
+            ad = kdf*(err-err_v); //calculo de la accion derivativa
+           err_v=err;          //guarda el error
+           pid = (ap+ai+ad);
+           
+                        // se verifica que pid sea menor o igual la valor maximo *****************
+            if (pid > 99){
+           pid=100;
+           } 
+           
+                     // se verifica que pid sea positivo **************************************
+           if (pid <0){
+           pid=0;
+           } 
+           
+            //wait(.5);
+            
+           
+           
+                    // se verifica que la accion integral no sea muy grande
+           if (ai > 999){
+           ai=1000;
+           } 
+          
+           
+           Vout=pid;
+           
+                   
+           lcd.locate(2,0);
+           lcd.printf("      "); 
+           lcd.locate(0,0);
+           lcd.printf("Er%2.2f",err);
+           lcd.locate(10,0);
+           lcd.printf("      ");
+           lcd.locate(8,0);
+           lcd.printf("Me%d",medida);
+           lcd.locate(2,1);
+           lcd.printf("      ");
+           lcd.locate(0,1);
+           lcd.printf("Sp%d",sp);
+           lcd.locate(10,1);
+           lcd.printf("      ");
+           lcd.locate(8,1);
+           lcd.printf("Pid%4.2f",pid);
+           cont=0;
+           }
+   }
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Dec 03 19:58:45 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/a9913a65894f
\ No newline at end of file