PROCESAMIENTO_DIGITAL
/
Muestreo_Motor_CD_Tuzo_4
k
Fork of Muestreo_Motor_CD_Tuzo_3 by
Revision 2:6bf21247bab4, committed 2017-11-10
- 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; }