asdfhkjlk

Dependencies:   mbed-rtos mbed

Fork of Muestreo_Motor_CD_Tuzo_5 by PROCESAMIENTO_DIGITAL

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 
00004 DigitalOut led1(LED1);
00005 DigitalOut led2(LED2);
00006 InterruptIn cruce_cero(p9);     //Se declara el pin de la interrupción "en limpio" para el optoacoplador 1
00007 DigitalOut limpia_opto(p10);    //Se declara el pin que saca los pulsos del optoacoplador 1 "en limpio"
00008 DigitalIn opto(p23);            //Se declara el pin donde entran los pulsos del optoacoplador 1 "en sucio"
00009 InterruptIn inter(p5);          //Se declara el pin de la interrupción "en limpio" para el encoder
00010 DigitalOut senal(p7);           //Se declara el pin que saca los pulsos del encoder "en limpio"
00011 DigitalIn pulsos(p6);           //Se declara el pin donde entran los pulsos del encoder "en sucio"
00012 DigitalOut senal1(p21);         //Se declara el pin de salida que da los pulsos al optoacoplador 2
00013 AnalogIn pot(p19);              //Se declara el pin que lee el valor del potenciometro
00014 
00015 //Timer t;                        //Función que medirá el tiempo de operación
00016 Thread thread;
00017 Thread thread2;
00018 Thread thread3;
00019 Thread thread4;  
00020 Thread thread5;            
00021 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
00022 int iteraciones=0;              //iteraciones=Variable que contará el número de pulsos
00023 
00024 void controlador() {            //NO SE PARA QUE ESTA AQUI JAJAJAJA  
00025     while(1) {
00026         Thread::wait(1);
00027     }
00028 }
00029 
00030 /*void pruebas() {                //Hilo que "limpia" los pulsos del encoder
00031     while(1){
00032         //senal=pulsos.read();
00033     }
00034 }*/
00035 
00036 void contador() {               //Hilo que aumenta la variable "iteraciones" cada que el encoder detecta una vuelta
00037     iteraciones=iteraciones+1;
00038 }
00039 
00040 void interr() {              
00041     inter.rise(&contador);      //Hilo que detecta los pulsos del encoder "en limpio" para aumentar contador
00042 }
00043 
00044 void scr() {                    //Hilo que modula el ángulo de disparo de acuerdo al valor del pot
00045     b = pot.read();
00046     c = b*0.00833;
00047     wait(c);
00048     senal1=1;
00049     wait(.0003);
00050     senal1=0;
00051     /*senal1=0;
00052     b = pot.read();
00053     c = b*0.00833;
00054     if (opto==1) {
00055         wait(c); 
00056         senal1=1;
00057         wait(0.0003);
00058         senal1=0;
00059         wait(0.009-c);    
00060     } */
00061 }
00062 
00063 void Cruce_cero() {
00064     cruce_cero.rise(&scr);   
00065 }
00066 
00067 void vel() {                                                    //Hilo que calcula la velocidad en rpm del motor 
00068     while (1) {                                                 //Se ejecuta siempre
00069         //t.reset();                                              //Se inicializa el timer
00070         Thread::wait(1000);                                     //Se espera 1 segundo
00071         //printf("n vale:  %d\n\r", iteraciones);                 //Se imprime el número de iteraciones para monitorear
00072         velo= iteraciones*60;                          //Se convierte de iteraciones a rpm        
00073         printf("La velocidad en rpm es:  %f\n\r", velo);        //Se imprimen las rpm
00074         printf("El Pot es:  %f\n\r", pot.read());
00075         //printf("el tiempo es:  %f\n\r", t.read());            //Se imprime el tiempo de ejecución para monitorear
00076         iteraciones=0;                                          //Se comienza la cuenta de iteraciones de 0, para el siguiente ciclo
00077         }
00078     }
00079     
00080 int main() {
00081     //vRef=600;                 
00082     //t.start();                    //Se inicializa el timer    
00083     thread.start(vel);              //Se inicializa el hilo que calcula la velocidad
00084     thread2.start(Cruce_cero);
00085     thread3.start(interr);          //Se inicializa el hilo que detecta señal del encoder
00086     thread4.start(controlador);
00087     //thread5.start(pruebas);
00088     
00089     while(1){
00090         limpia_opto=opto.read();    //Main donde se "limpian" los pulsos del optoacoplador 1    
00091         senal=pulsos.read();        //Main donde se "limpian" los pulsos del encoder
00092     }  
00093 }
00094     //p=0.4295;
00095     /*while(1) {
00096     err= vRef-velo;
00097     control= p*err;                 // Rango de error es de 0 a 1500; cuando el error es 1500 el angulo debe ser 
00098     if(err<0){
00099         led1=!led1;
00100         }
00101     if(err>1000){
00102         led2=!led2;
00103         }
00104     if(err>=0 && err<600){
00105         Control1=control/257.7;
00106         }
00107     if(err==600){
00108         
00109         }
00110     if(err>600 && err<1000){
00111         
00112         }  */  
00113