k

Dependencies:   mbed-rtos mbed

Fork of Muestreo_Motor_CD_Tuzo_3 by PROCESAMIENTO_DIGITAL

Files at this revision

API Documentation at this revision

Comitter:
LuisFernandoTuzo
Date:
Fri Nov 10 02:38:42 2017 +0000
Parent:
1:f7fb4980557c
Commit message:
Funciona la parte de modular el ancho de pulso con el pot. Asimismo, todos los hilos que aparecen habilitados (no comentados) funcionan sin entorpecer la salida de la mbed al optoacoplador 2

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r f7fb4980557c -r 6bf21247bab4 main.cpp
--- a/main.cpp	Fri Nov 10 00:39:50 2017 +0000
+++ b/main.cpp	Fri Nov 10 02:38:42 2017 +0000
@@ -3,89 +3,92 @@
 
 DigitalOut led1(LED1);
 DigitalOut led2(LED2);
-InterruptIn inter(p5);          //Se declara la variable de la interrupción
-DigitalOut senal(p7);           //Se declara el pin el cual insertará la señal al pin de la interrupción
-DigitalIn pulsos(p6);           //Pin en el cual se insertarán los pulsos del encoder.
-DigitalOut senal1(p21);
-DigitalIn opto(p23);
-AnalogIn pot(p19);
-DigitalOut prueba1(p10);
-InterruptIn prueba2(p9);
+InterruptIn cruce_cero(p9);     //Se declara el pin de la interrupción "en limpio" para el optoacoplador 1
+DigitalOut limpia_opto(p10);    //Se declara el pin que saca los pulsos del optoacoplador 1 "en limpio"
+DigitalIn opto(p23);            //Se declara el pin donde entran los pulsos del optoacoplador 1 "en sucio"
+InterruptIn inter(p5);          //Se declara el pin de la interrupción "en limpio" para el encoder
+DigitalOut senal(p7);           //Se declara el pin que saca los pulsos del encoder "en limpio"
+DigitalIn pulsos(p6);           //Se declara el pin donde entran los pulsos del encoder "en sucio"
+DigitalOut senal1(p21);         //Se declara el pin de salida que da los pulsos al optoacoplador 2
+AnalogIn pot(p19);              //Se declara el pin que lee el valor del potenciometro
 
-Timer t;                        //Función que medirá el tiempo de operación
-//Thread thread;
-//Thread thread2;
-//Thread thread3;
-Thread thread4;              //Función que se ejecutará en paralelo al programa principal 
-Thread thread5;
+//Timer t;                        //Función que medirá el tiempo de operación
+Thread thread;
+Thread thread2;
+Thread thread3;
+Thread thread4;              
 float velo=0, vRef=0, err=0, p=0, control=0, b, c, Control1=0;                     //Variable flotante en la cual se guardará la velocidad en rpm
 int iteraciones=0;              //iteraciones=Variable que contará el número de pulsos
 
-/*void Prueba() {
-    senal1=1;
-    wait(.0003);
-    senal1=0;
-    led2=!led2;
-    }*/
-
-void controlador() {               
-    //Thread::wait(3000);
+void controlador() {            //NO SE PARA QUE ESTA AQUI JAJAJAJA  
     while(1) {
-    //prueba2.rise(&Prueba);
+        Thread::wait(1);
     }
 }
 
-void contador() {               //Función ejecutada por la interrupción inter, la cual es un contador para la variable iteración
+void pruebas() {                //Hilo que "limpia" los pulsos del encoder
+    while(1){
+        senal=pulsos.read();
+    }
+}
+
+void contador() {               //Hilo que aumenta la variable "iteraciones" cada que el encoder detecta una vuelta
     iteraciones=iteraciones+1;
 }
 
-void pruebas() {              
-    while(1){
-        senal=pulsos.read();    //se filtra la señal del encoder, para limpar el ruido.
-        }
-        }
-
-void filtro() {              
-    while(1){
-        prueba1=opto.read();    //se filtra la señal del encoder, para limpar el ruido.
-        }
+void interr() {              
+    inter.rise(&contador);      //Hilo que detecta los pulsos del encoder "en limpio" para aumentar contador
 }
 
-void interr() {              
-    inter.rise(&contador);      //Se declara la interrupción
+void scr() {                    //Hilo que modula el ángulo de disparo de acuerdo al valor del pot
+    /*senal1=1;
+    wait(.0003);
+    senal1=0;*/
+    senal1=0;
+    b = pot.read();
+    c = b*0.00833;
+    if (opto==1) {
+        wait(c); 
+        senal1=1;
+        wait(0.0003);
+        senal1=0;
+        wait(0.009-c);    
+    } 
 }
 
-/*void vel() {                                                    //Funcion Se convierte de iteraciones a rpmn vel, ejecutada por el hilo secundario
+void Cruce_cero() {
+    cruce_cero.rise(&scr);   
+}
+
+void vel() {                                                    //Hilo que calcula la velocidad en rpm del motor 
     while (1) {                                                 //Se ejecuta siempre
-        t.reset();                                              //Se inicializa el timer
+        //t.reset();                                              //Se inicializa el timer
         Thread::wait(1000);                                     //Se espera 1 segundo
-        printf("n vale:  %d\n\r", iteraciones);                 //Se imprime el número de iteraciones para monitorear
-        velo= iteraciones*60*t.read();                          //Se convierte de iteraciones a rpm        
-        printf("La velocidad en rpm es:  %f\n\r", velo);        //Se imprimen las rpm
-        printf("El Pot es:  %f\n\r", pot.read());
+        //printf("n vale:  %d\n\r", iteraciones);                 //Se imprime el número de iteraciones para monitorear
+        velo= iteraciones*60;                          //Se convierte de iteraciones a rpm        
+        //printf("La velocidad en rpm es:  %f\n\r", velo);        //Se imprimen las rpm
+        //printf("El Pot es:  %f\n\r", pot.read());
         //printf("el tiempo es:  %f\n\r", t.read());            //Se imprime el tiempo de ejecución para monitorear
         iteraciones=0;                                          //Se comienza la cuenta de iteraciones de 0, para el siguiente ciclo
         }
-    }*/
+    }
     
 int main() {
-    //vRef=600;                    //Hilo principal
-    //t.start();                  //Se inicializa el timer    
-    //thread.start(vel);          //Se inicializa el hilo secundario
-    //thread2.start(filtro);
-    //thread3.start(interr);
+    //vRef=600;                 
+    //t.start();                    //Se inicializa el timer    
+    thread.start(vel);              //Se inicializa el hilo que calcula la velocidad
+    thread2.start(Cruce_cero);
+    thread3.start(interr);          //Se inicializa el hilo que detecta señal del encoder
     thread4.start(controlador);
-    thread5.start(filtro);
     
     while(1){
-        led1=!led1;
-            
+        limpia_opto=opto.read();    //Main donde se "limpian" los pulsos del optoacoplador 1    
     }  
-        }
+}
     //p=0.4295;
     /*while(1) {
     err= vRef-velo;
-    control= p*err;             // Rango de error es de 0 a 1500; cuando el error es 1500 el angulo debe ser 
+    control= p*err;                 // Rango de error es de 0 a 1500; cuando el error es 1500 el angulo debe ser 
     if(err<0){
         led1=!led1;
         }