PROCESAMIENTO_DIGITAL
/
Muestreo_Motor_CD_Tuzo_4
k
Fork of Muestreo_Motor_CD_Tuzo_3 by
Diff: main.cpp
- 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; }