asdfhkjlk

Dependencies:   mbed-rtos mbed

Fork of Muestreo_Motor_CD_Tuzo_5 by PROCESAMIENTO_DIGITAL

Committer:
LuisFernandoTuzo
Date:
Thu Nov 16 18:03:25 2017 +0000
Revision:
4:1286bb4b6a8c
Parent:
3:bc70614a267f
Potenciometro + encoder

Who changed what in which revision?

UserRevisionLine numberNew 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;
Sumobot 3:bc70614a267f 19 Thread thread4;
Sumobot 3:bc70614a267f 20 Thread thread5;
Sumobot 1:f7fb4980557c 21 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 22 int iteraciones=0; //iteraciones=Variable que contará el número de pulsos
Sumobot 0:1c17e8f0fcc0 23
LuisFernandoTuzo 2:6bf21247bab4 24 void controlador() { //NO SE PARA QUE ESTA AQUI JAJAJAJA
Sumobot 0:1c17e8f0fcc0 25 while(1) {
LuisFernandoTuzo 2:6bf21247bab4 26 Thread::wait(1);
Sumobot 0:1c17e8f0fcc0 27 }
Sumobot 0:1c17e8f0fcc0 28 }
Sumobot 0:1c17e8f0fcc0 29
LuisFernandoTuzo 4:1286bb4b6a8c 30 /*void pruebas() { //Hilo que "limpia" los pulsos del encoder
LuisFernandoTuzo 2:6bf21247bab4 31 while(1){
LuisFernandoTuzo 4:1286bb4b6a8c 32 //senal=pulsos.read();
LuisFernandoTuzo 2:6bf21247bab4 33 }
LuisFernandoTuzo 4:1286bb4b6a8c 34 }*/
LuisFernandoTuzo 2:6bf21247bab4 35
LuisFernandoTuzo 2:6bf21247bab4 36 void contador() { //Hilo que aumenta la variable "iteraciones" cada que el encoder detecta una vuelta
Sumobot 0:1c17e8f0fcc0 37 iteraciones=iteraciones+1;
Sumobot 0:1c17e8f0fcc0 38 }
Sumobot 0:1c17e8f0fcc0 39
LuisFernandoTuzo 2:6bf21247bab4 40 void interr() {
LuisFernandoTuzo 2:6bf21247bab4 41 inter.rise(&contador); //Hilo que detecta los pulsos del encoder "en limpio" para aumentar contador
Sumobot 0:1c17e8f0fcc0 42 }
Sumobot 0:1c17e8f0fcc0 43
LuisFernandoTuzo 2:6bf21247bab4 44 void scr() { //Hilo que modula el ángulo de disparo de acuerdo al valor del pot
LuisFernandoTuzo 4:1286bb4b6a8c 45 b = pot.read();
LuisFernandoTuzo 4:1286bb4b6a8c 46 c = b*0.00833;
LuisFernandoTuzo 4:1286bb4b6a8c 47 wait(c);
LuisFernandoTuzo 4:1286bb4b6a8c 48 senal1=1;
LuisFernandoTuzo 2:6bf21247bab4 49 wait(.0003);
LuisFernandoTuzo 2:6bf21247bab4 50 senal1=0;
LuisFernandoTuzo 4:1286bb4b6a8c 51 /*senal1=0;
LuisFernandoTuzo 2:6bf21247bab4 52 b = pot.read();
LuisFernandoTuzo 2:6bf21247bab4 53 c = b*0.00833;
LuisFernandoTuzo 2:6bf21247bab4 54 if (opto==1) {
LuisFernandoTuzo 2:6bf21247bab4 55 wait(c);
LuisFernandoTuzo 2:6bf21247bab4 56 senal1=1;
LuisFernandoTuzo 2:6bf21247bab4 57 wait(0.0003);
LuisFernandoTuzo 2:6bf21247bab4 58 senal1=0;
LuisFernandoTuzo 2:6bf21247bab4 59 wait(0.009-c);
LuisFernandoTuzo 4:1286bb4b6a8c 60 } */
Sumobot 0:1c17e8f0fcc0 61 }
Sumobot 0:1c17e8f0fcc0 62
LuisFernandoTuzo 2:6bf21247bab4 63 void Cruce_cero() {
LuisFernandoTuzo 2:6bf21247bab4 64 cruce_cero.rise(&scr);
LuisFernandoTuzo 2:6bf21247bab4 65 }
LuisFernandoTuzo 2:6bf21247bab4 66
LuisFernandoTuzo 2:6bf21247bab4 67 void vel() { //Hilo que calcula la velocidad en rpm del motor
Sumobot 0:1c17e8f0fcc0 68 while (1) { //Se ejecuta siempre
LuisFernandoTuzo 2:6bf21247bab4 69 //t.reset(); //Se inicializa el timer
Sumobot 0:1c17e8f0fcc0 70 Thread::wait(1000); //Se espera 1 segundo
LuisFernandoTuzo 2:6bf21247bab4 71 //printf("n vale: %d\n\r", iteraciones); //Se imprime el número de iteraciones para monitorear
LuisFernandoTuzo 2:6bf21247bab4 72 velo= iteraciones*60; //Se convierte de iteraciones a rpm
Sumobot 3:bc70614a267f 73 printf("La velocidad en rpm es: %f\n\r", velo); //Se imprimen las rpm
Sumobot 3:bc70614a267f 74 printf("El Pot es: %f\n\r", pot.read());
Sumobot 0:1c17e8f0fcc0 75 //printf("el tiempo es: %f\n\r", t.read()); //Se imprime el tiempo de ejecución para monitorear
Sumobot 0:1c17e8f0fcc0 76 iteraciones=0; //Se comienza la cuenta de iteraciones de 0, para el siguiente ciclo
Sumobot 0:1c17e8f0fcc0 77 }
LuisFernandoTuzo 2:6bf21247bab4 78 }
Sumobot 0:1c17e8f0fcc0 79
Sumobot 0:1c17e8f0fcc0 80 int main() {
LuisFernandoTuzo 2:6bf21247bab4 81 //vRef=600;
LuisFernandoTuzo 2:6bf21247bab4 82 //t.start(); //Se inicializa el timer
LuisFernandoTuzo 2:6bf21247bab4 83 thread.start(vel); //Se inicializa el hilo que calcula la velocidad
LuisFernandoTuzo 2:6bf21247bab4 84 thread2.start(Cruce_cero);
LuisFernandoTuzo 2:6bf21247bab4 85 thread3.start(interr); //Se inicializa el hilo que detecta señal del encoder
Sumobot 0:1c17e8f0fcc0 86 thread4.start(controlador);
LuisFernandoTuzo 4:1286bb4b6a8c 87 //thread5.start(pruebas);
Sumobot 1:f7fb4980557c 88
Sumobot 1:f7fb4980557c 89 while(1){
LuisFernandoTuzo 2:6bf21247bab4 90 limpia_opto=opto.read(); //Main donde se "limpian" los pulsos del optoacoplador 1
LuisFernandoTuzo 4:1286bb4b6a8c 91 senal=pulsos.read(); //Main donde se "limpian" los pulsos del encoder
Sumobot 1:f7fb4980557c 92 }
LuisFernandoTuzo 2:6bf21247bab4 93 }
Sumobot 0:1c17e8f0fcc0 94 //p=0.4295;
Sumobot 0:1c17e8f0fcc0 95 /*while(1) {
Sumobot 0:1c17e8f0fcc0 96 err= vRef-velo;
LuisFernandoTuzo 2:6bf21247bab4 97 control= p*err; // Rango de error es de 0 a 1500; cuando el error es 1500 el angulo debe ser
Sumobot 0:1c17e8f0fcc0 98 if(err<0){
Sumobot 0:1c17e8f0fcc0 99 led1=!led1;
Sumobot 0:1c17e8f0fcc0 100 }
Sumobot 0:1c17e8f0fcc0 101 if(err>1000){
Sumobot 0:1c17e8f0fcc0 102 led2=!led2;
Sumobot 0:1c17e8f0fcc0 103 }
Sumobot 0:1c17e8f0fcc0 104 if(err>=0 && err<600){
Sumobot 0:1c17e8f0fcc0 105 Control1=control/257.7;
Sumobot 0:1c17e8f0fcc0 106 }
Sumobot 0:1c17e8f0fcc0 107 if(err==600){
Sumobot 0:1c17e8f0fcc0 108
Sumobot 0:1c17e8f0fcc0 109 }
Sumobot 0:1c17e8f0fcc0 110 if(err>600 && err<1000){
Sumobot 0:1c17e8f0fcc0 111
Sumobot 0:1c17e8f0fcc0 112 } */
Sumobot 1:f7fb4980557c 113