Se crea la clase TRACCION que implementa varios objetos del tipo motor para controlar la dirección de un vehículo a base de 2 motores, tanto continuos como discretos. Puede dar la orden de ir adelante, atrás, girar en un sentido cierta cantidad de grados y ésta clase hará el control de los motores.

Committer:
CCastrop1012
Date:
Fri Sep 03 05:07:18 2021 +0000
Revision:
0:f1ea96183c35
Se crea la clase Traccion que implementa varios objetos del tipo motor para controlar la direccion de un vehiulo a base de 2 motores, tanto continuos como discretos.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CCastrop1012 0:f1ea96183c35 1 #ifndef Motor_H
CCastrop1012 0:f1ea96183c35 2 #define Motor_H
CCastrop1012 0:f1ea96183c35 3 #include "mbed.h"
CCastrop1012 0:f1ea96183c35 4 /* **************************************************************************
CCastrop1012 0:f1ea96183c35 5
CCastrop1012 0:f1ea96183c35 6 @CCastrop
CCastrop1012 0:f1ea96183c35 7 cristiank.castrop@ecci.edu.co
CCastrop1012 0:f1ea96183c35 8
CCastrop1012 0:f1ea96183c35 9 L1 Terminal A del motor
CCastrop1012 0:f1ea96183c35 10 L2 Terminal B del motor
CCastrop1012 0:f1ea96183c35 11 SpeedPin Pin de salida PWM
CCastrop1012 0:f1ea96183c35 12
CCastrop1012 0:f1ea96183c35 13 LastVersion: 21 - Abril - 2019 7:45pm
CCastrop1012 0:f1ea96183c35 14 ******************************************************************************/
CCastrop1012 0:f1ea96183c35 15
CCastrop1012 0:f1ea96183c35 16
CCastrop1012 0:f1ea96183c35 17 class MotorContinuo {
CCastrop1012 0:f1ea96183c35 18 public:
CCastrop1012 0:f1ea96183c35 19 /// Constructores para Motores Continuos
CCastrop1012 0:f1ea96183c35 20 MotorContinuo(PinName _L1, PinName _L2, PinName _speedPin, PinName _encodin, PinName _PosInicial, int _EncodPulses);
CCastrop1012 0:f1ea96183c35 21
CCastrop1012 0:f1ea96183c35 22 void Forward(); // Da un sentido de giro al motor
CCastrop1012 0:f1ea96183c35 23 void Back(); // Genera un sentido de giro contrario al de Forward
CCastrop1012 0:f1ea96183c35 24 void Stop(); // Detiene el motor dejando el movimiento libre
CCastrop1012 0:f1ea96183c35 25 void StopT(); // Detiene el motor truncando o enclavando el movimiento(Lo mantiene quieto).
CCastrop1012 0:f1ea96183c35 26 void SpeedDuty(int v); // Varia la velocidad de giro del motor de 0 a 100%
CCastrop1012 0:f1ea96183c35 27 void SpinLength_ms(float t); // Duración del giro en ms
CCastrop1012 0:f1ea96183c35 28 void SpinLength(float t); // Duración del giro
CCastrop1012 0:f1ea96183c35 29
CCastrop1012 0:f1ea96183c35 30 private:
CCastrop1012 0:f1ea96183c35 31
CCastrop1012 0:f1ea96183c35 32 DigitalOut L1;
CCastrop1012 0:f1ea96183c35 33 DigitalOut L2;
CCastrop1012 0:f1ea96183c35 34 PwmOut speedPin;
CCastrop1012 0:f1ea96183c35 35 DigitalIn encodin;
CCastrop1012 0:f1ea96183c35 36 DigitalIn PosInicial;
CCastrop1012 0:f1ea96183c35 37 int EncodPulses;
CCastrop1012 0:f1ea96183c35 38
CCastrop1012 0:f1ea96183c35 39
CCastrop1012 0:f1ea96183c35 40
CCastrop1012 0:f1ea96183c35 41
CCastrop1012 0:f1ea96183c35 42 };
CCastrop1012 0:f1ea96183c35 43
CCastrop1012 0:f1ea96183c35 44
CCastrop1012 0:f1ea96183c35 45 class MotorDiscreto {
CCastrop1012 0:f1ea96183c35 46 public:
CCastrop1012 0:f1ea96183c35 47 /// Constructores para Motores Continuos
CCastrop1012 0:f1ea96183c35 48 MotorDiscreto(PinName _Dir, PinName _Step, int _NPasos, PinName _encodin, PinName _PosInicial, int _EncodPulses);
CCastrop1012 0:f1ea96183c35 49
CCastrop1012 0:f1ea96183c35 50 MotorDiscreto(void);
CCastrop1012 0:f1ea96183c35 51
CCastrop1012 0:f1ea96183c35 52 void Forward(); // Da un sentido de giro al motor
CCastrop1012 0:f1ea96183c35 53 void Back(); // Genera un sentido de giro contrario al de Forward
CCastrop1012 0:f1ea96183c35 54 void Stop(); // Detiene el motor dejando el movimiento libre. Pin Enable = 0
CCastrop1012 0:f1ea96183c35 55 void StopT(); // Detiene el motor truncando o enclavando el movimiento(Lo mantiene quieto).
CCastrop1012 0:f1ea96183c35 56 void StepFreq(long n); // Configura la Velocidad en Número(n) de pasos por segundos. Es decir la Frecuencia de paso.
CCastrop1012 0:f1ea96183c35 57 void RunStep(long n); // Se mueve el motor la cantidad de pasos ingresada
CCastrop1012 0:f1ea96183c35 58 void Run(float t); // Gira el motor durante el tiempo ingresado, si es 0 indefinidamente hasta llamada a Stop().
CCastrop1012 0:f1ea96183c35 59 void RunRound(int n); // Girar n vueltas
CCastrop1012 0:f1ea96183c35 60 void Ustep(int resolucion, PinName M0, PinName M1, PinName M2);
CCastrop1012 0:f1ea96183c35 61 // Configura los pasos a 1/2, 1/4, 1/8, 1/16, 1/32
CCastrop1012 0:f1ea96183c35 62 long getStepOnHold(void);
CCastrop1012 0:f1ea96183c35 63
CCastrop1012 0:f1ea96183c35 64 long StepOnHold; // Pasos faltantes por ejecutar
CCastrop1012 0:f1ea96183c35 65 long StepsBySecond; // Pasos por segundo
CCastrop1012 0:f1ea96183c35 66
CCastrop1012 0:f1ea96183c35 67 private:
CCastrop1012 0:f1ea96183c35 68
CCastrop1012 0:f1ea96183c35 69 void moveMotor(void);
CCastrop1012 0:f1ea96183c35 70
CCastrop1012 0:f1ea96183c35 71 DigitalOut Dir;
CCastrop1012 0:f1ea96183c35 72 DigitalOut Step;
CCastrop1012 0:f1ea96183c35 73 int NPasos;
CCastrop1012 0:f1ea96183c35 74 DigitalIn encodin;
CCastrop1012 0:f1ea96183c35 75 DigitalIn PosInicial;
CCastrop1012 0:f1ea96183c35 76 int EncodPulses;
CCastrop1012 0:f1ea96183c35 77
CCastrop1012 0:f1ea96183c35 78 DigitalOut* EnablePin;
CCastrop1012 0:f1ea96183c35 79 DigitalOut* M0;
CCastrop1012 0:f1ea96183c35 80 DigitalOut* M1;
CCastrop1012 0:f1ea96183c35 81 DigitalOut* M2;
CCastrop1012 0:f1ea96183c35 82
CCastrop1012 0:f1ea96183c35 83 Ticker Move; /// Timer de interrupcion
CCastrop1012 0:f1ea96183c35 84 float TStep; /// periodo del paso TStep = 1/StepsBySecond;
CCastrop1012 0:f1ea96183c35 85
CCastrop1012 0:f1ea96183c35 86 int entradas; /// registra cada 2 ingresos a la interrupcion
CCastrop1012 0:f1ea96183c35 87 bool _moveMotorStopped; // en 1 cuando se da la orden al motor de detenerse
CCastrop1012 0:f1ea96183c35 88 };
CCastrop1012 0:f1ea96183c35 89
CCastrop1012 0:f1ea96183c35 90
CCastrop1012 0:f1ea96183c35 91
CCastrop1012 0:f1ea96183c35 92
CCastrop1012 0:f1ea96183c35 93 class TraccionD
CCastrop1012 0:f1ea96183c35 94 {
CCastrop1012 0:f1ea96183c35 95
CCastrop1012 0:f1ea96183c35 96 public:
CCastrop1012 0:f1ea96183c35 97
CCastrop1012 0:f1ea96183c35 98 TraccionD(PinName _StepMI, PinName _DirMI, PinName _StepMD, PinName _DirMD, int _NPasos, float _r, float _L); // para giro declarar primero la frecuencia de paso
CCastrop1012 0:f1ea96183c35 99
CCastrop1012 0:f1ea96183c35 100 void Forward(); // Da un sentido de giro al motor
CCastrop1012 0:f1ea96183c35 101 void Back(); // Genera un sentido de giro contrario al de Forward
CCastrop1012 0:f1ea96183c35 102 void Left(); // Configura el sentido de giro de ambos motores de manera contraria para girar hacia la izquierda
CCastrop1012 0:f1ea96183c35 103 void Right(); // Configura el sentido de giro de ambos motores de manera contraria e inverso al de Left() para girar hacia la derecha
CCastrop1012 0:f1ea96183c35 104 void Stop(); // Detiene el motor dejando el movimiento libre. Pin Enable = 0
CCastrop1012 0:f1ea96183c35 105 void StopT(); // Detiene el motor truncando o enclavando el movimiento(Lo mantiene quieto).
CCastrop1012 0:f1ea96183c35 106 void StepFreq(long n);//maximo~350 // Configura la Velocidad en Número(n) de pasos por segundos. Es decir la Frecuencia de paso.
CCastrop1012 0:f1ea96183c35 107 void RunStep(long n); // Se mueve el motor la cantidad de pasos ingresada
CCastrop1012 0:f1ea96183c35 108 void Run(float t); // Gira el motor durante el tiempo ingresado, si es 0 indefinidamente hasta llamada a Stop().
CCastrop1012 0:f1ea96183c35 109 void RunRound(int n); // Girar n vueltas
CCastrop1012 0:f1ea96183c35 110 void Giro(long grados, bool sentido); // IMPORTANTE: Para llamar esta funcino PRIMERO se debe definir la frecuencia de paso
CCastrop1012 0:f1ea96183c35 111 // Gira el movil la cantidad de grados indicados en sentido indicado.
CCastrop1012 0:f1ea96183c35 112 // en función del radio de las llantas y el radio del eje que une las llantas.
CCastrop1012 0:f1ea96183c35 113 // ejemplo: (90, Horario) o (120, AntiHorario)
CCastrop1012 0:f1ea96183c35 114
CCastrop1012 0:f1ea96183c35 115 long getStepOnHold(void);
CCastrop1012 0:f1ea96183c35 116
CCastrop1012 0:f1ea96183c35 117
CCastrop1012 0:f1ea96183c35 118 private:
CCastrop1012 0:f1ea96183c35 119
CCastrop1012 0:f1ea96183c35 120 void moveMotor(void); // Funcion que es ejecutada cada interupcion del Ticker Move
CCastrop1012 0:f1ea96183c35 121
CCastrop1012 0:f1ea96183c35 122 // Configuracion de los pines
CCastrop1012 0:f1ea96183c35 123 DigitalOut StepMI,DirMI;
CCastrop1012 0:f1ea96183c35 124 DigitalOut StepMD, DirMD;
CCastrop1012 0:f1ea96183c35 125 int NPasos;
CCastrop1012 0:f1ea96183c35 126 float r; // Radio de la llanta
CCastrop1012 0:f1ea96183c35 127 float L; // Longitud desde del eje medido entre las 2 llantas dividido en 2.
CCastrop1012 0:f1ea96183c35 128 float Rl; // Relacion(Rl) de distacia entre los dos Radios(r y L)
CCastrop1012 0:f1ea96183c35 129 long StepOnHold; // Pasos faltantes por ejecutar
CCastrop1012 0:f1ea96183c35 130 long StepsBySecond; // Pasos por segundo
CCastrop1012 0:f1ea96183c35 131
CCastrop1012 0:f1ea96183c35 132 DigitalOut* EnablePinM1;
CCastrop1012 0:f1ea96183c35 133 DigitalOut* EnablePinM2;
CCastrop1012 0:f1ea96183c35 134
CCastrop1012 0:f1ea96183c35 135 Ticker Move; /// Timer de interrupcion
CCastrop1012 0:f1ea96183c35 136 float TStep; /// periodo del paso TStep = 1/StepsBySecond;
CCastrop1012 0:f1ea96183c35 137
CCastrop1012 0:f1ea96183c35 138 int entradas; /// registra cada 2 ingresos a la interrupcion
CCastrop1012 0:f1ea96183c35 139
CCastrop1012 0:f1ea96183c35 140
CCastrop1012 0:f1ea96183c35 141
CCastrop1012 0:f1ea96183c35 142
CCastrop1012 0:f1ea96183c35 143
CCastrop1012 0:f1ea96183c35 144 };
CCastrop1012 0:f1ea96183c35 145 #endif
CCastrop1012 0:f1ea96183c35 146
CCastrop1012 0:f1ea96183c35 147
CCastrop1012 0:f1ea96183c35 148
CCastrop1012 0:f1ea96183c35 149
CCastrop1012 0:f1ea96183c35 150
CCastrop1012 0:f1ea96183c35 151
CCastrop1012 0:f1ea96183c35 152
CCastrop1012 0:f1ea96183c35 153
CCastrop1012 0:f1ea96183c35 154
CCastrop1012 0:f1ea96183c35 155
CCastrop1012 0:f1ea96183c35 156
CCastrop1012 0:f1ea96183c35 157
CCastrop1012 0:f1ea96183c35 158
CCastrop1012 0:f1ea96183c35 159
CCastrop1012 0:f1ea96183c35 160