asdfhkjlk

Dependencies:   mbed-rtos mbed

Fork of Muestreo_Motor_CD_Tuzo_5 by PROCESAMIENTO_DIGITAL

main.cpp

Committer:
LuisFernandoTuzo
Date:
2017-11-16
Revision:
4:1286bb4b6a8c
Parent:
3:bc70614a267f

File content as of revision 4:1286bb4b6a8c:

#include "mbed.h"
#include "rtos.h"

DigitalOut led1(LED1);
DigitalOut led2(LED2);
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;  
Thread thread5;            
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 controlador() {            //NO SE PARA QUE ESTA AQUI JAJAJAJA  
    while(1) {
        Thread::wait(1);
    }
}

/*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 interr() {              
    inter.rise(&contador);      //Hilo que detecta los pulsos del encoder "en limpio" para aumentar contador
}

void scr() {                    //Hilo que modula el ángulo de disparo de acuerdo al valor del pot
    b = pot.read();
    c = b*0.00833;
    wait(c);
    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 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
        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;                          //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;                 
    //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(pruebas);
    
    while(1){
        limpia_opto=opto.read();    //Main donde se "limpian" los pulsos del optoacoplador 1    
        senal=pulsos.read();        //Main donde se "limpian" los pulsos del encoder
    }  
}
    //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 
    if(err<0){
        led1=!led1;
        }
    if(err>1000){
        led2=!led2;
        }
    if(err>=0 && err<600){
        Control1=control/257.7;
        }
    if(err==600){
        
        }
    if(err>600 && err<1000){
        
        }  */