Clase Motor. Se usa para crear objetos del tipo motor, que pueden ser continuos o PAP. se especifica los pines a los cuales estara conectado cada Motor. Se puede controlar la velocidad con encoders, encontrar la posición inicial. Se debe especificar la cantidad de pasos y se podrá girar por ángulos.

Dependencies:   mbed

Committer:
CCastrop1012
Date:
Fri Sep 03 05:02:09 2021 +0000
Revision:
0:87460b90b143
Clase Motor. Se usa para crear objetos del tipo motor, que pueden ser continuos o PAP. se especifica los pines a los cuales estara conectado cada Motor. Se puede controlar la velocidad con encoders, encontrar la posicion inicial. ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CCastrop1012 0:87460b90b143 1 #include "mbed.h"
CCastrop1012 0:87460b90b143 2 #include "Motor.h"
CCastrop1012 0:87460b90b143 3 #include "Ticker.h"
CCastrop1012 0:87460b90b143 4
CCastrop1012 0:87460b90b143 5 #define Pi 3.14159265
CCastrop1012 0:87460b90b143 6 #define Horario 1
CCastrop1012 0:87460b90b143 7 #define AntiHorario 0
CCastrop1012 0:87460b90b143 8
CCastrop1012 0:87460b90b143 9 ///************ MOTOR CONTINUO ********************************//
CCastrop1012 0:87460b90b143 10 MotorContinuo::MotorContinuo()// speedPin(_speedPin)
CCastrop1012 0:87460b90b143 11 {
CCastrop1012 0:87460b90b143 12
CCastrop1012 0:87460b90b143 13
CCastrop1012 0:87460b90b143 14 };
CCastrop1012 0:87460b90b143 15 MotorContinuo::MotorContinuo(int q)// speedPin(_speedPin)
CCastrop1012 0:87460b90b143 16 {
CCastrop1012 0:87460b90b143 17
CCastrop1012 0:87460b90b143 18
CCastrop1012 0:87460b90b143 19 };
CCastrop1012 0:87460b90b143 20
CCastrop1012 0:87460b90b143 21 /// CONSTRUCTOR
CCastrop1012 0:87460b90b143 22
CCastrop1012 0:87460b90b143 23 /*
CCastrop1012 0:87460b90b143 24 MotorContinuo::MotorContinuo(PinName _L1, PinName _L2, PinName _speedPin, PinName _encodin, PinName _PosInicial, int _EncodPulses) :
CCastrop1012 0:87460b90b143 25 L1(_L1), L2(_L2), speedPin(_speedPin), encodin(_encodin), PosInicial(_PosInicial), EncodPulses(_EncodPulses)
CCastrop1012 0:87460b90b143 26 {
CCastrop1012 0:87460b90b143 27 speedPin.period_ms(2);
CCastrop1012 0:87460b90b143 28 speedPin.write(0);
CCastrop1012 0:87460b90b143 29
CCastrop1012 0:87460b90b143 30 };
CCastrop1012 0:87460b90b143 31
CCastrop1012 0:87460b90b143 32
CCastrop1012 0:87460b90b143 33
CCastrop1012 0:87460b90b143 34
CCastrop1012 0:87460b90b143 35
CCastrop1012 0:87460b90b143 36 void MotorContinuo::Forward() { L1=1; L2=0;}
CCastrop1012 0:87460b90b143 37 void MotorContinuo::Back() { L1=0; L2=1;}
CCastrop1012 0:87460b90b143 38 void MotorContinuo::Stop() { L1=0; L2=0;}
CCastrop1012 0:87460b90b143 39 void MotorContinuo::StopT() { L1=1; L2=1;}
CCastrop1012 0:87460b90b143 40 void MotorContinuo::SpeedDuty(int v) { speedPin.write(float(v/100.0));}
CCastrop1012 0:87460b90b143 41 void MotorContinuo::SpinLength_ms(float t) { t++;}// Duración del giro en ms
CCastrop1012 0:87460b90b143 42 void MotorContinuo::SpinLength(float t) { t++;};
CCastrop1012 0:87460b90b143 43
CCastrop1012 0:87460b90b143 44 /*
CCastrop1012 0:87460b90b143 45
CCastrop1012 0:87460b90b143 46 ///************ MOTOR DISCRETO ******************************** //
CCastrop1012 0:87460b90b143 47
CCastrop1012 0:87460b90b143 48 /// CONSTRUCTOR
CCastrop1012 0:87460b90b143 49 MotorDiscreto::MotorDiscreto(PinName _Dir, PinName _Step, int _NPasos, PinName _encodin, PinName _PosInicial, int _EncodPulses) :
CCastrop1012 0:87460b90b143 50 Dir(_Dir), Step(_Step), NPasos(_NPasos), encodin(_encodin), PosInicial(_PosInicial), EncodPulses(_EncodPulses)
CCastrop1012 0:87460b90b143 51 {
CCastrop1012 0:87460b90b143 52 };
CCastrop1012 0:87460b90b143 53
CCastrop1012 0:87460b90b143 54
CCastrop1012 0:87460b90b143 55 // ************* METODOS ***************** ///
CCastrop1012 0:87460b90b143 56
CCastrop1012 0:87460b90b143 57 void MotorDiscreto::moveMotor(void)
CCastrop1012 0:87460b90b143 58 {
CCastrop1012 0:87460b90b143 59 if (StepOnHold != 0 && _moveMotorStopped == false)
CCastrop1012 0:87460b90b143 60 {
CCastrop1012 0:87460b90b143 61 Step = !Step; // Se hace elcambio de estado en el pin Step
CCastrop1012 0:87460b90b143 62 entradas++; // se registra cada paso efectivo el cual es valido cada 2 entradas
CCastrop1012 0:87460b90b143 63 // 1ra entrada: tiempo en Bajo
CCastrop1012 0:87460b90b143 64 // 2da entrada: tiempo en Alto
CCastrop1012 0:87460b90b143 65 // Es decir cuando Step cumple un periodo.
CCastrop1012 0:87460b90b143 66 if (entradas >= 2) // cuando se registran 2 entradas se disminuye un paso
CCastrop1012 0:87460b90b143 67 {
CCastrop1012 0:87460b90b143 68 StepOnHold--; // Se elimina 1 paso de los pendientes
CCastrop1012 0:87460b90b143 69 entradas = 0;
CCastrop1012 0:87460b90b143 70 }
CCastrop1012 0:87460b90b143 71
CCastrop1012 0:87460b90b143 72 Move.attach(callback(this,&MotorDiscreto::moveMotor), (TStep/2) ); // Reiniciamos el tiempo de imterrupcion
CCastrop1012 0:87460b90b143 73
CCastrop1012 0:87460b90b143 74 }
CCastrop1012 0:87460b90b143 75 else if (StepOnHold == 0 || _moveMotorStopped == true) // si no hay mas pasos pendientes
CCastrop1012 0:87460b90b143 76 {
CCastrop1012 0:87460b90b143 77 Move.detach(); // desabilita la interrupcion
CCastrop1012 0:87460b90b143 78 entradas = 0;
CCastrop1012 0:87460b90b143 79 }
CCastrop1012 0:87460b90b143 80 }
CCastrop1012 0:87460b90b143 81
CCastrop1012 0:87460b90b143 82
CCastrop1012 0:87460b90b143 83 void MotorDiscreto::Forward() { Dir=1;}
CCastrop1012 0:87460b90b143 84 void MotorDiscreto::Back() { Dir=0;}
CCastrop1012 0:87460b90b143 85 void MotorDiscreto::Stop() { EnablePin = 0; _moveMotorStopped = true;}
CCastrop1012 0:87460b90b143 86 void MotorDiscreto::StopT() { Move.detach(); _moveMotorStopped = true;}
CCastrop1012 0:87460b90b143 87 void MotorDiscreto::StepFreq(long n) { StepsBySecond = n; TStep = (1/float(n));}
CCastrop1012 0:87460b90b143 88 void MotorDiscreto::RunStep(long n) { StepOnHold = n; Move.attach(callback(this,&MotorDiscreto::moveMotor), (TStep/2) ); _moveMotorStopped = false; }// Duración del giro en ms
CCastrop1012 0:87460b90b143 89 void MotorDiscreto::Run(float t) { StepOnHold = long(t/TStep); Move.attach(callback(this,&MotorDiscreto::moveMotor), (TStep/2) ); _moveMotorStopped = false; }
CCastrop1012 0:87460b90b143 90 void MotorDiscreto::RunRound(int n) { StepOnHold = (NPasos * n); Move.attach(callback(this,&MotorDiscreto::moveMotor), (TStep/2) ); _moveMotorStopped = false; }
CCastrop1012 0:87460b90b143 91 long MotorDiscreto::getStepOnHold(void){return StepOnHold; }
CCastrop1012 0:87460b90b143 92
CCastrop1012 0:87460b90b143 93 void Ustep(int resolucion, DigitalOut* _M0, DigitalOut* _M1, DigitalOut* _M2)
CCastrop1012 0:87460b90b143 94 {
CCastrop1012 0:87460b90b143 95
CCastrop1012 0:87460b90b143 96 switch(resolucion)
CCastrop1012 0:87460b90b143 97 {
CCastrop1012 0:87460b90b143 98 case 1: *_M0 = 0; *_M1 = 0; *_M2 = 0;
CCastrop1012 0:87460b90b143 99 break;
CCastrop1012 0:87460b90b143 100 case 2: *_M0 = 1; *_M1 = 0; *_M2 = 0;
CCastrop1012 0:87460b90b143 101 break;
CCastrop1012 0:87460b90b143 102 case 4: *_M0 = 0; *_M1 = 1; *_M2 = 0;
CCastrop1012 0:87460b90b143 103 break;
CCastrop1012 0:87460b90b143 104 case 8: *_M0 = 1; *_M1 = 1; *_M2 = 1;
CCastrop1012 0:87460b90b143 105 break;
CCastrop1012 0:87460b90b143 106 case 16: *_M0 = 0; *_M1 = 0; *_M2 = 1;
CCastrop1012 0:87460b90b143 107 break;
CCastrop1012 0:87460b90b143 108 case 32: *_M0 = 1; *_M1 = 0; *_M2 = 1;
CCastrop1012 0:87460b90b143 109 break;
CCastrop1012 0:87460b90b143 110
CCastrop1012 0:87460b90b143 111 default: *_M0 = 0; *_M1 = 0; *_M2 = 0;
CCastrop1012 0:87460b90b143 112
CCastrop1012 0:87460b90b143 113
CCastrop1012 0:87460b90b143 114 }
CCastrop1012 0:87460b90b143 115
CCastrop1012 0:87460b90b143 116
CCastrop1012 0:87460b90b143 117 }
CCastrop1012 0:87460b90b143 118
CCastrop1012 0:87460b90b143 119
CCastrop1012 0:87460b90b143 120 ///************ TRACCIONDISCRETA ******************************** //
CCastrop1012 0:87460b90b143 121
CCastrop1012 0:87460b90b143 122
CCastrop1012 0:87460b90b143 123 /// ***************** CONSTRUCTOR ********************** ///
CCastrop1012 0:87460b90b143 124 TraccionD::TraccionD(PinName _StepMI, PinName _DirMI, PinName _StepMD, PinName _DirMD, int _NPasos, float _r, float _L ):
CCastrop1012 0:87460b90b143 125 StepMI(_StepMI), DirMI(_DirMI), StepMD(_StepMD), DirMD(_DirMD), NPasos(_NPasos), r(_r), L(_L)
CCastrop1012 0:87460b90b143 126 {
CCastrop1012 0:87460b90b143 127 // 1. se halla la Relacion(Rl) de distacia entre los dos Radios(r y L)
CCastrop1012 0:87460b90b143 128 Rl = (L / r);
CCastrop1012 0:87460b90b143 129
CCastrop1012 0:87460b90b143 130 };
CCastrop1012 0:87460b90b143 131
CCastrop1012 0:87460b90b143 132 // ************* METODOS ***************** ///
CCastrop1012 0:87460b90b143 133
CCastrop1012 0:87460b90b143 134 void TraccionD::moveMotor(void)
CCastrop1012 0:87460b90b143 135 {
CCastrop1012 0:87460b90b143 136 if (StepOnHold != 0)
CCastrop1012 0:87460b90b143 137 {
CCastrop1012 0:87460b90b143 138
CCastrop1012 0:87460b90b143 139
CCastrop1012 0:87460b90b143 140 StepMI = !StepMI; // Se hace elcambio de estado en el pin Step para ambos motores
CCastrop1012 0:87460b90b143 141 StepMD = StepMD;
CCastrop1012 0:87460b90b143 142
CCastrop1012 0:87460b90b143 143 entradas++; // se registra cada paso efectivo el cual es valido cada 2 entradas
CCastrop1012 0:87460b90b143 144 // 1ra entrada: tiempo en Bajo
CCastrop1012 0:87460b90b143 145 // 2da entrada: tiempo en Alto
CCastrop1012 0:87460b90b143 146 // Es decir cuando Step cumple un periodo.
CCastrop1012 0:87460b90b143 147 if (entradas >= 2) // cuando se registran 2 entradas se disminuye un paso
CCastrop1012 0:87460b90b143 148 {
CCastrop1012 0:87460b90b143 149 StepOnHold--; // Se elimina 1 paso de los pendientes
CCastrop1012 0:87460b90b143 150 entradas = 0;
CCastrop1012 0:87460b90b143 151 }
CCastrop1012 0:87460b90b143 152
CCastrop1012 0:87460b90b143 153 Move.attach(callback(this,&TraccionD::moveMotor), (TStep/2) ); // Reiniciamos el tiempo de imterrupcion
CCastrop1012 0:87460b90b143 154
CCastrop1012 0:87460b90b143 155 }
CCastrop1012 0:87460b90b143 156 else if (StepOnHold == 0) // si no hay mas pasos para dar se deshabilita las interrupciones.
CCastrop1012 0:87460b90b143 157 {
CCastrop1012 0:87460b90b143 158 Move.detach();
CCastrop1012 0:87460b90b143 159 }
CCastrop1012 0:87460b90b143 160 }
CCastrop1012 0:87460b90b143 161
CCastrop1012 0:87460b90b143 162
CCastrop1012 0:87460b90b143 163 void TraccionD::Forward() { DirMI=1; DirMD=1;} // Configua de giro de ambos motores el el mismo sentido para avanzar hacia adelante
CCastrop1012 0:87460b90b143 164 void TraccionD::Back() { DirMI=0; DirMD=0;} // Configua el sentido giro en ambos motores contrario al de Forward(), para avanzar hacia atras
CCastrop1012 0:87460b90b143 165 void TraccionD::Left() { DirMI=0; DirMD=1;} // Configura el sentido de giro de ambos motores de manera contraria para girar hacia la izquierda
CCastrop1012 0:87460b90b143 166 void TraccionD::Right() { DirMI=1; DirMD=0;} // Configura el sentido de giro de ambos motores de manera contraria e inverso al de Left() para girar hacia la derecha
CCastrop1012 0:87460b90b143 167 void TraccionD::Stop() { EnablePinM1 = 0; EnablePinM2 = 0;}
CCastrop1012 0:87460b90b143 168 void TraccionD::StopT() { Move.detach();}
CCastrop1012 0:87460b90b143 169 void TraccionD::StepFreq(long n) { StepsBySecond = n; TStep = (1/float(n));}
CCastrop1012 0:87460b90b143 170 void TraccionD::RunStep(long n){ StepOnHold = n; Move.attach(callback(this,&TraccionD::moveMotor), (TStep/2) ); }// Duración del giro en ms
CCastrop1012 0:87460b90b143 171 void TraccionD::Run(float t) { StepOnHold = long(t/TStep); Move.attach(callback(this,&TraccionD::moveMotor), (TStep/2) ); }
CCastrop1012 0:87460b90b143 172 void TraccionD::RunRound(int n) { StepOnHold = (NPasos * n); Move.attach(callback(this,&TraccionD::moveMotor), (TStep/2) ); }
CCastrop1012 0:87460b90b143 173 long TraccionD::getStepOnHold(void){return StepOnHold; }
CCastrop1012 0:87460b90b143 174
CCastrop1012 0:87460b90b143 175 void TraccionD::Giro(long grados, bool sentido)
CCastrop1012 0:87460b90b143 176 {
CCastrop1012 0:87460b90b143 177
CCastrop1012 0:87460b90b143 178 StepOnHold = grados * int(Rl * NPasos);
CCastrop1012 0:87460b90b143 179 StepOnHold /= 360;
CCastrop1012 0:87460b90b143 180 Move.attach(callback(this,&TraccionD::moveMotor), (TStep/2) );
CCastrop1012 0:87460b90b143 181
CCastrop1012 0:87460b90b143 182 }
CCastrop1012 0:87460b90b143 183
CCastrop1012 0:87460b90b143 184 */
CCastrop1012 0:87460b90b143 185
CCastrop1012 0:87460b90b143 186
CCastrop1012 0:87460b90b143 187
CCastrop1012 0:87460b90b143 188
CCastrop1012 0:87460b90b143 189
CCastrop1012 0:87460b90b143 190
CCastrop1012 0:87460b90b143 191
CCastrop1012 0:87460b90b143 192
CCastrop1012 0:87460b90b143 193
CCastrop1012 0:87460b90b143 194