![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
k
Fork of Muestreo_Motor_CD_Tuzo_3 by
main.cpp@2:6bf21247bab4, 2017-11-10 (annotated)
- Committer:
- LuisFernandoTuzo
- Date:
- Fri Nov 10 02:38:42 2017 +0000
- Revision:
- 2:6bf21247bab4
- Parent:
- 1:f7fb4980557c
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
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Sumobot | 0:1c17e8f0fcc0 | 1 | #include "mbed.h" |
Sumobot | 0:1c17e8f0fcc0 | 2 | #include "rtos.h" |
Sumobot | 0:1c17e8f0fcc0 | 3 | |
Sumobot | 0:1c17e8f0fcc0 | 4 | DigitalOut led1(LED1); |
Sumobot | 0:1c17e8f0fcc0 | 5 | DigitalOut led2(LED2); |
LuisFernandoTuzo | 2:6bf21247bab4 | 6 | InterruptIn cruce_cero(p9); //Se declara el pin de la interrupción "en limpio" para el optoacoplador 1 |
LuisFernandoTuzo | 2:6bf21247bab4 | 7 | DigitalOut limpia_opto(p10); //Se declara el pin que saca los pulsos del optoacoplador 1 "en limpio" |
LuisFernandoTuzo | 2:6bf21247bab4 | 8 | DigitalIn opto(p23); //Se declara el pin donde entran los pulsos del optoacoplador 1 "en sucio" |
LuisFernandoTuzo | 2:6bf21247bab4 | 9 | InterruptIn inter(p5); //Se declara el pin de la interrupción "en limpio" para el encoder |
LuisFernandoTuzo | 2:6bf21247bab4 | 10 | DigitalOut senal(p7); //Se declara el pin que saca los pulsos del encoder "en limpio" |
LuisFernandoTuzo | 2:6bf21247bab4 | 11 | DigitalIn pulsos(p6); //Se declara el pin donde entran los pulsos del encoder "en sucio" |
LuisFernandoTuzo | 2:6bf21247bab4 | 12 | DigitalOut senal1(p21); //Se declara el pin de salida que da los pulsos al optoacoplador 2 |
LuisFernandoTuzo | 2:6bf21247bab4 | 13 | AnalogIn pot(p19); //Se declara el pin que lee el valor del potenciometro |
Sumobot | 0:1c17e8f0fcc0 | 14 | |
LuisFernandoTuzo | 2:6bf21247bab4 | 15 | //Timer t; //Función que medirá el tiempo de operación |
LuisFernandoTuzo | 2:6bf21247bab4 | 16 | Thread thread; |
LuisFernandoTuzo | 2:6bf21247bab4 | 17 | Thread thread2; |
LuisFernandoTuzo | 2:6bf21247bab4 | 18 | Thread thread3; |
LuisFernandoTuzo | 2:6bf21247bab4 | 19 | Thread thread4; |
Sumobot | 1:f7fb4980557c | 20 | 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 |
Sumobot | 0:1c17e8f0fcc0 | 21 | int iteraciones=0; //iteraciones=Variable que contará el número de pulsos |
Sumobot | 0:1c17e8f0fcc0 | 22 | |
LuisFernandoTuzo | 2:6bf21247bab4 | 23 | void controlador() { //NO SE PARA QUE ESTA AQUI JAJAJAJA |
Sumobot | 0:1c17e8f0fcc0 | 24 | while(1) { |
LuisFernandoTuzo | 2:6bf21247bab4 | 25 | Thread::wait(1); |
Sumobot | 0:1c17e8f0fcc0 | 26 | } |
Sumobot | 0:1c17e8f0fcc0 | 27 | } |
Sumobot | 0:1c17e8f0fcc0 | 28 | |
LuisFernandoTuzo | 2:6bf21247bab4 | 29 | void pruebas() { //Hilo que "limpia" los pulsos del encoder |
LuisFernandoTuzo | 2:6bf21247bab4 | 30 | while(1){ |
LuisFernandoTuzo | 2:6bf21247bab4 | 31 | senal=pulsos.read(); |
LuisFernandoTuzo | 2:6bf21247bab4 | 32 | } |
LuisFernandoTuzo | 2:6bf21247bab4 | 33 | } |
LuisFernandoTuzo | 2:6bf21247bab4 | 34 | |
LuisFernandoTuzo | 2:6bf21247bab4 | 35 | void contador() { //Hilo que aumenta la variable "iteraciones" cada que el encoder detecta una vuelta |
Sumobot | 0:1c17e8f0fcc0 | 36 | iteraciones=iteraciones+1; |
Sumobot | 0:1c17e8f0fcc0 | 37 | } |
Sumobot | 0:1c17e8f0fcc0 | 38 | |
LuisFernandoTuzo | 2:6bf21247bab4 | 39 | void interr() { |
LuisFernandoTuzo | 2:6bf21247bab4 | 40 | inter.rise(&contador); //Hilo que detecta los pulsos del encoder "en limpio" para aumentar contador |
Sumobot | 0:1c17e8f0fcc0 | 41 | } |
Sumobot | 0:1c17e8f0fcc0 | 42 | |
LuisFernandoTuzo | 2:6bf21247bab4 | 43 | void scr() { //Hilo que modula el ángulo de disparo de acuerdo al valor del pot |
LuisFernandoTuzo | 2:6bf21247bab4 | 44 | /*senal1=1; |
LuisFernandoTuzo | 2:6bf21247bab4 | 45 | wait(.0003); |
LuisFernandoTuzo | 2:6bf21247bab4 | 46 | senal1=0;*/ |
LuisFernandoTuzo | 2:6bf21247bab4 | 47 | senal1=0; |
LuisFernandoTuzo | 2:6bf21247bab4 | 48 | b = pot.read(); |
LuisFernandoTuzo | 2:6bf21247bab4 | 49 | c = b*0.00833; |
LuisFernandoTuzo | 2:6bf21247bab4 | 50 | if (opto==1) { |
LuisFernandoTuzo | 2:6bf21247bab4 | 51 | wait(c); |
LuisFernandoTuzo | 2:6bf21247bab4 | 52 | senal1=1; |
LuisFernandoTuzo | 2:6bf21247bab4 | 53 | wait(0.0003); |
LuisFernandoTuzo | 2:6bf21247bab4 | 54 | senal1=0; |
LuisFernandoTuzo | 2:6bf21247bab4 | 55 | wait(0.009-c); |
LuisFernandoTuzo | 2:6bf21247bab4 | 56 | } |
Sumobot | 0:1c17e8f0fcc0 | 57 | } |
Sumobot | 0:1c17e8f0fcc0 | 58 | |
LuisFernandoTuzo | 2:6bf21247bab4 | 59 | void Cruce_cero() { |
LuisFernandoTuzo | 2:6bf21247bab4 | 60 | cruce_cero.rise(&scr); |
LuisFernandoTuzo | 2:6bf21247bab4 | 61 | } |
LuisFernandoTuzo | 2:6bf21247bab4 | 62 | |
LuisFernandoTuzo | 2:6bf21247bab4 | 63 | void vel() { //Hilo que calcula la velocidad en rpm del motor |
Sumobot | 0:1c17e8f0fcc0 | 64 | while (1) { //Se ejecuta siempre |
LuisFernandoTuzo | 2:6bf21247bab4 | 65 | //t.reset(); //Se inicializa el timer |
Sumobot | 0:1c17e8f0fcc0 | 66 | Thread::wait(1000); //Se espera 1 segundo |
LuisFernandoTuzo | 2:6bf21247bab4 | 67 | //printf("n vale: %d\n\r", iteraciones); //Se imprime el número de iteraciones para monitorear |
LuisFernandoTuzo | 2:6bf21247bab4 | 68 | velo= iteraciones*60; //Se convierte de iteraciones a rpm |
LuisFernandoTuzo | 2:6bf21247bab4 | 69 | //printf("La velocidad en rpm es: %f\n\r", velo); //Se imprimen las rpm |
LuisFernandoTuzo | 2:6bf21247bab4 | 70 | //printf("El Pot es: %f\n\r", pot.read()); |
Sumobot | 0:1c17e8f0fcc0 | 71 | //printf("el tiempo es: %f\n\r", t.read()); //Se imprime el tiempo de ejecución para monitorear |
Sumobot | 0:1c17e8f0fcc0 | 72 | iteraciones=0; //Se comienza la cuenta de iteraciones de 0, para el siguiente ciclo |
Sumobot | 0:1c17e8f0fcc0 | 73 | } |
LuisFernandoTuzo | 2:6bf21247bab4 | 74 | } |
Sumobot | 0:1c17e8f0fcc0 | 75 | |
Sumobot | 0:1c17e8f0fcc0 | 76 | int main() { |
LuisFernandoTuzo | 2:6bf21247bab4 | 77 | //vRef=600; |
LuisFernandoTuzo | 2:6bf21247bab4 | 78 | //t.start(); //Se inicializa el timer |
LuisFernandoTuzo | 2:6bf21247bab4 | 79 | thread.start(vel); //Se inicializa el hilo que calcula la velocidad |
LuisFernandoTuzo | 2:6bf21247bab4 | 80 | thread2.start(Cruce_cero); |
LuisFernandoTuzo | 2:6bf21247bab4 | 81 | thread3.start(interr); //Se inicializa el hilo que detecta señal del encoder |
Sumobot | 0:1c17e8f0fcc0 | 82 | thread4.start(controlador); |
Sumobot | 1:f7fb4980557c | 83 | |
Sumobot | 1:f7fb4980557c | 84 | while(1){ |
LuisFernandoTuzo | 2:6bf21247bab4 | 85 | limpia_opto=opto.read(); //Main donde se "limpian" los pulsos del optoacoplador 1 |
Sumobot | 1:f7fb4980557c | 86 | } |
LuisFernandoTuzo | 2:6bf21247bab4 | 87 | } |
Sumobot | 0:1c17e8f0fcc0 | 88 | //p=0.4295; |
Sumobot | 0:1c17e8f0fcc0 | 89 | /*while(1) { |
Sumobot | 0:1c17e8f0fcc0 | 90 | err= vRef-velo; |
LuisFernandoTuzo | 2:6bf21247bab4 | 91 | control= p*err; // Rango de error es de 0 a 1500; cuando el error es 1500 el angulo debe ser |
Sumobot | 0:1c17e8f0fcc0 | 92 | if(err<0){ |
Sumobot | 0:1c17e8f0fcc0 | 93 | led1=!led1; |
Sumobot | 0:1c17e8f0fcc0 | 94 | } |
Sumobot | 0:1c17e8f0fcc0 | 95 | if(err>1000){ |
Sumobot | 0:1c17e8f0fcc0 | 96 | led2=!led2; |
Sumobot | 0:1c17e8f0fcc0 | 97 | } |
Sumobot | 0:1c17e8f0fcc0 | 98 | if(err>=0 && err<600){ |
Sumobot | 0:1c17e8f0fcc0 | 99 | Control1=control/257.7; |
Sumobot | 0:1c17e8f0fcc0 | 100 | } |
Sumobot | 0:1c17e8f0fcc0 | 101 | if(err==600){ |
Sumobot | 0:1c17e8f0fcc0 | 102 | |
Sumobot | 0:1c17e8f0fcc0 | 103 | } |
Sumobot | 0:1c17e8f0fcc0 | 104 | if(err>600 && err<1000){ |
Sumobot | 0:1c17e8f0fcc0 | 105 | |
Sumobot | 0:1c17e8f0fcc0 | 106 | } */ |
Sumobot | 1:f7fb4980557c | 107 |