![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
k
Fork of Muestreo_Motor_CD_Tuzo_3 by
main.cpp
- Committer:
- LuisFernandoTuzo
- Date:
- 2017-11-10
- Revision:
- 2:6bf21247bab4
- Parent:
- 1:f7fb4980557c
File content as of revision 2:6bf21247bab4:
#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; 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 /*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); while(1){ 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 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){ } */