Controlador de motos stepper con giro, modo y velocidad

Dependencies:   mbed

Committer:
alonsoangulo
Date:
Fri Oct 10 19:18:36 2014 +0000
Revision:
0:125d31ad5798
Es un controlador para un motos stepper, con giro, modo y velocidad

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alonsoangulo 0:125d31ad5798 1 #include "mbed.h"
alonsoangulo 0:125d31ad5798 2
alonsoangulo 0:125d31ad5798 3 DigitalOut myled(LED1);
alonsoangulo 0:125d31ad5798 4 DigitalIn giro(D2);
alonsoangulo 0:125d31ad5798 5 DigitalIn modo(D3);
alonsoangulo 0:125d31ad5798 6 AnalogIn pot(A0);
alonsoangulo 0:125d31ad5798 7 BusOut stepper(D5, D6, D7, D8);
alonsoangulo 0:125d31ad5798 8 Timer t1;
alonsoangulo 0:125d31ad5798 9 Timer t2;
alonsoangulo 0:125d31ad5798 10 int valbot1;
alonsoangulo 0:125d31ad5798 11 int valbot2;
alonsoangulo 0:125d31ad5798 12 int caso;
alonsoangulo 0:125d31ad5798 13 float pwm;
alonsoangulo 0:125d31ad5798 14 Serial pc (USBTX,USBRX);
alonsoangulo 0:125d31ad5798 15
alonsoangulo 0:125d31ad5798 16 int main() {
alonsoangulo 0:125d31ad5798 17 valbot1 = 0;
alonsoangulo 0:125d31ad5798 18 valbot2 = 0;
alonsoangulo 0:125d31ad5798 19 myled = 0;
alonsoangulo 0:125d31ad5798 20 wait(0.4);
alonsoangulo 0:125d31ad5798 21 myled = 1;
alonsoangulo 0:125d31ad5798 22 wait(0.4);
alonsoangulo 0:125d31ad5798 23 float x;
alonsoangulo 0:125d31ad5798 24
alonsoangulo 0:125d31ad5798 25
alonsoangulo 0:125d31ad5798 26 stepper = 8;
alonsoangulo 0:125d31ad5798 27 wait(0.5);
alonsoangulo 0:125d31ad5798 28 t1.start();
alonsoangulo 0:125d31ad5798 29 t2.start();
alonsoangulo 0:125d31ad5798 30 while(1) {
alonsoangulo 0:125d31ad5798 31
alonsoangulo 0:125d31ad5798 32 x= pot;
alonsoangulo 0:125d31ad5798 33 pwm = ((x/0.004348)+20);
alonsoangulo 0:125d31ad5798 34
alonsoangulo 0:125d31ad5798 35 if (t1.read() == 0) {
alonsoangulo 0:125d31ad5798 36 t1.start();
alonsoangulo 0:125d31ad5798 37 }
alonsoangulo 0:125d31ad5798 38 if (t2.read() == 0) {
alonsoangulo 0:125d31ad5798 39 t2.start();
alonsoangulo 0:125d31ad5798 40 }
alonsoangulo 0:125d31ad5798 41
alonsoangulo 0:125d31ad5798 42 switch (caso){
alonsoangulo 0:125d31ad5798 43
alonsoangulo 0:125d31ad5798 44 case 1:
alonsoangulo 0:125d31ad5798 45 if (stepper == 0) { //como el corrimiento de bits se fue a 0, ya no me sirve y los reinicio a 8 (osea 1000)
alonsoangulo 0:125d31ad5798 46 stepper = 8;
alonsoangulo 0:125d31ad5798 47 }
alonsoangulo 0:125d31ad5798 48 break;
alonsoangulo 0:125d31ad5798 49
alonsoangulo 0:125d31ad5798 50 case 2:
alonsoangulo 0:125d31ad5798 51 if (stepper == 0) { // al igual que en el caso 1 pero ahora se inicializa en 1 (0001)
alonsoangulo 0:125d31ad5798 52 stepper = 1;
alonsoangulo 0:125d31ad5798 53 }
alonsoangulo 0:125d31ad5798 54 break;
alonsoangulo 0:125d31ad5798 55
alonsoangulo 0:125d31ad5798 56 case 3:
alonsoangulo 0:125d31ad5798 57 if (stepper == 1) { //en este caso ya no llega a desaparecer el bit con (0000) pero cuando en vez de 2 bits se visualiza 1 solo (0001) ya es error y se coniverte en el requerido (1001)
alonsoangulo 0:125d31ad5798 58 stepper = 9;
alonsoangulo 0:125d31ad5798 59 }
alonsoangulo 0:125d31ad5798 60 if (stepper == 4) { //aquí cuando hay un (0100 porque el corrimiento asi se llevo 1 bit este se convierte en (0110))
alonsoangulo 0:125d31ad5798 61 stepper = 12;
alonsoangulo 0:125d31ad5798 62 }
alonsoangulo 0:125d31ad5798 63 break;
alonsoangulo 0:125d31ad5798 64
alonsoangulo 0:125d31ad5798 65 case 4:
alonsoangulo 0:125d31ad5798 66 if (stepper == 8) {
alonsoangulo 0:125d31ad5798 67 stepper = 9;
alonsoangulo 0:125d31ad5798 68 }
alonsoangulo 0:125d31ad5798 69 if (stepper == 2) {
alonsoangulo 0:125d31ad5798 70 stepper = 3;
alonsoangulo 0:125d31ad5798 71 }
alonsoangulo 0:125d31ad5798 72 break;
alonsoangulo 0:125d31ad5798 73 }
alonsoangulo 0:125d31ad5798 74
alonsoangulo 0:125d31ad5798 75 pc.printf("%d \n",t1.read_ms()); // para checar la lectura si esta llegando al valor deseado y reiniciandose antes de entrar al if
alonsoangulo 0:125d31ad5798 76 if (t1.read_ms() >= pwm ){
alonsoangulo 0:125d31ad5798 77 switch (caso){ //abro un switch case dependiendo de las 4 combinaciones posibles de los 2 botones
alonsoangulo 0:125d31ad5798 78
alonsoangulo 0:125d31ad5798 79 case 1:
alonsoangulo 0:125d31ad5798 80 stepper = stepper >> 1; //hago un corrimiento hacia la derecha
alonsoangulo 0:125d31ad5798 81 t1.reset();
alonsoangulo 0:125d31ad5798 82 break;
alonsoangulo 0:125d31ad5798 83
alonsoangulo 0:125d31ad5798 84 case 2:
alonsoangulo 0:125d31ad5798 85 stepper = stepper << 1; //se hace un corrimiento hacia la izquierda
alonsoangulo 0:125d31ad5798 86 t1.reset();
alonsoangulo 0:125d31ad5798 87 break;
alonsoangulo 0:125d31ad5798 88
alonsoangulo 0:125d31ad5798 89 case 3:
alonsoangulo 0:125d31ad5798 90 stepper = stepper >> 1; //corrimiento hacia la derecha
alonsoangulo 0:125d31ad5798 91 t1.reset();
alonsoangulo 0:125d31ad5798 92 break;
alonsoangulo 0:125d31ad5798 93
alonsoangulo 0:125d31ad5798 94 case 4:
alonsoangulo 0:125d31ad5798 95 stepper = stepper << 1; //corrimiento hacia la izquierda
alonsoangulo 0:125d31ad5798 96 t1.reset(); // se pone el reset dentro de los case ya que sino se vera interrumpido por el break;
alonsoangulo 0:125d31ad5798 97 break;
alonsoangulo 0:125d31ad5798 98 }
alonsoangulo 0:125d31ad5798 99
alonsoangulo 0:125d31ad5798 100
alonsoangulo 0:125d31ad5798 101 }
alonsoangulo 0:125d31ad5798 102
alonsoangulo 0:125d31ad5798 103 if (giro == 0){ // es cero porque es pullup
alonsoangulo 0:125d31ad5798 104 valbot1 = !valbot1; //cambio de estado entre valbot1 y 2
alonsoangulo 0:125d31ad5798 105 }
alonsoangulo 0:125d31ad5798 106 if (modo == 0){
alonsoangulo 0:125d31ad5798 107 valbot2 = !valbot2;
alonsoangulo 0:125d31ad5798 108 }
alonsoangulo 0:125d31ad5798 109
alonsoangulo 0:125d31ad5798 110 if (valbot1 ==0 && valbot2 == 0){
alonsoangulo 0:125d31ad5798 111
alonsoangulo 0:125d31ad5798 112 caso = 1;
alonsoangulo 0:125d31ad5798 113 } else if (valbot1 == 1 && valbot2 == 0){
alonsoangulo 0:125d31ad5798 114 caso = 2;
alonsoangulo 0:125d31ad5798 115 } else if (valbot1 == 0 && valbot2 == 1){
alonsoangulo 0:125d31ad5798 116 caso = 3;
alonsoangulo 0:125d31ad5798 117 } else if (valbot1 == 1 && valbot2 == 1){
alonsoangulo 0:125d31ad5798 118 caso = 4;
alonsoangulo 0:125d31ad5798 119 }
alonsoangulo 0:125d31ad5798 120
alonsoangulo 0:125d31ad5798 121
alonsoangulo 0:125d31ad5798 122 }
alonsoangulo 0:125d31ad5798 123 }
alonsoangulo 0:125d31ad5798 124