Alonso Angulo
/
controlador_stepper
Controlador de motos stepper con giro, modo y velocidad
main.cpp@0:125d31ad5798, 2014-10-10 (annotated)
- 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?
User | Revision | Line number | New 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 |