k

Dependencies:   mbed-rtos mbed

Fork of Muestreo_Motor_CD_Tuzo_3 by PROCESAMIENTO_DIGITAL

Revision:
2:6bf21247bab4
Parent:
1:f7fb4980557c
--- 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;
         }