4 control direction and velocity of a EMG30 DC motor, reading RPM via encoder and debugging via serial

Dependencies:   mbed

Committer:
adrianmb
Date:
Fri Apr 20 02:28:35 2012 +0000
Revision:
0:566f6ce93ddc

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adrianmb 0:566f6ce93ddc 1 #include "mbed.h"
adrianmb 0:566f6ce93ddc 2
adrianmb 0:566f6ce93ddc 3 Timer t;
adrianmb 0:566f6ce93ddc 4 Ticker tmrSend;
adrianmb 0:566f6ce93ddc 5
adrianmb 0:566f6ce93ddc 6 BusOut leds(LED1,LED2,LED3,LED4);
adrianmb 0:566f6ce93ddc 7 BusOut motor(p10,p11);
adrianmb 0:566f6ce93ddc 8 int cw=0x02;
adrianmb 0:566f6ce93ddc 9 int ccw=0x01;
adrianmb 0:566f6ce93ddc 10
adrianmb 0:566f6ce93ddc 11 PwmOut vel(p21);
adrianmb 0:566f6ce93ddc 12
adrianmb 0:566f6ce93ddc 13 InterruptIn encA(p5);
adrianmb 0:566f6ce93ddc 14 DigitalIn encB(p6);
adrianmb 0:566f6ce93ddc 15
adrianmb 0:566f6ce93ddc 16 Serial bt(p28,p27);
adrianmb 0:566f6ce93ddc 17
adrianmb 0:566f6ce93ddc 18 char in;
adrianmb 0:566f6ce93ddc 19 int rpm;
adrianmb 0:566f6ce93ddc 20
adrianmb 0:566f6ce93ddc 21 void dataIn();
adrianmb 0:566f6ce93ddc 22 void RPM();
adrianmb 0:566f6ce93ddc 23 void sendData();
adrianmb 0:566f6ce93ddc 24
adrianmb 0:566f6ce93ddc 25 int main() {
adrianmb 0:566f6ce93ddc 26 t.start();
adrianmb 0:566f6ce93ddc 27 vel=0;
adrianmb 0:566f6ce93ddc 28 motor=cw;
adrianmb 0:566f6ce93ddc 29
adrianmb 0:566f6ce93ddc 30 bt.baud(115200);
adrianmb 0:566f6ce93ddc 31 bt.attach(&dataIn);
adrianmb 0:566f6ce93ddc 32
adrianmb 0:566f6ce93ddc 33 encA.mode(PullUp);
adrianmb 0:566f6ce93ddc 34 encA.fall(&RPM);
adrianmb 0:566f6ce93ddc 35
adrianmb 0:566f6ce93ddc 36 tmrSend.attach(&sendData,1);
adrianmb 0:566f6ce93ddc 37
adrianmb 0:566f6ce93ddc 38 bt.printf("Control de velocidad y sentido de motor CC V1.0\n\n\r");
adrianmb 0:566f6ce93ddc 39
adrianmb 0:566f6ce93ddc 40 }
adrianmb 0:566f6ce93ddc 41
adrianmb 0:566f6ce93ddc 42 void dataIn() {
adrianmb 0:566f6ce93ddc 43 if (bt.readable()) {
adrianmb 0:566f6ce93ddc 44 in=bt.getc();
adrianmb 0:566f6ce93ddc 45 switch (in) {
adrianmb 0:566f6ce93ddc 46 case '1':
adrianmb 0:566f6ce93ddc 47 bt.printf("Velocidad 25/100\n\r");
adrianmb 0:566f6ce93ddc 48 leds=0x01;
adrianmb 0:566f6ce93ddc 49 vel=0.25;
adrianmb 0:566f6ce93ddc 50 break;
adrianmb 0:566f6ce93ddc 51 case '2':
adrianmb 0:566f6ce93ddc 52 bt.printf("Velocidad 50/100\n\r");
adrianmb 0:566f6ce93ddc 53 leds=0x03;
adrianmb 0:566f6ce93ddc 54 vel=0.5;
adrianmb 0:566f6ce93ddc 55 break;
adrianmb 0:566f6ce93ddc 56 case '3':
adrianmb 0:566f6ce93ddc 57 bt.printf("Velocidad 75/100\n\r");
adrianmb 0:566f6ce93ddc 58 leds=0x07;
adrianmb 0:566f6ce93ddc 59 vel=0.75;
adrianmb 0:566f6ce93ddc 60 break;
adrianmb 0:566f6ce93ddc 61 case '4':
adrianmb 0:566f6ce93ddc 62 bt.printf("Velocidad 100/100\n\r");
adrianmb 0:566f6ce93ddc 63 leds=0x0F;
adrianmb 0:566f6ce93ddc 64 vel=1;
adrianmb 0:566f6ce93ddc 65 break;
adrianmb 0:566f6ce93ddc 66 case 'a':
adrianmb 0:566f6ce93ddc 67 bt.printf("Sentido de giro: CW\n\r");
adrianmb 0:566f6ce93ddc 68 motor=cw;
adrianmb 0:566f6ce93ddc 69 break;
adrianmb 0:566f6ce93ddc 70 case 's':
adrianmb 0:566f6ce93ddc 71 bt.printf("Sentido de giro: CCW\n\r");
adrianmb 0:566f6ce93ddc 72 motor=ccw;
adrianmb 0:566f6ce93ddc 73 break;
adrianmb 0:566f6ce93ddc 74 case 'd':
adrianmb 0:566f6ce93ddc 75 bt.printf("Motor detenido\n\r");
adrianmb 0:566f6ce93ddc 76 leds=0x00;
adrianmb 0:566f6ce93ddc 77 vel=0;
adrianmb 0:566f6ce93ddc 78 rpm=0;
adrianmb 0:566f6ce93ddc 79 break;
adrianmb 0:566f6ce93ddc 80 }
adrianmb 0:566f6ce93ddc 81 }
adrianmb 0:566f6ce93ddc 82 }
adrianmb 0:566f6ce93ddc 83
adrianmb 0:566f6ce93ddc 84 void RPM() {
adrianmb 0:566f6ce93ddc 85 float time;
adrianmb 0:566f6ce93ddc 86 t.stop();
adrianmb 0:566f6ce93ddc 87 time=t.read();
adrianmb 0:566f6ce93ddc 88 rpm=(1/(time*90)*60);
adrianmb 0:566f6ce93ddc 89 t.reset();
adrianmb 0:566f6ce93ddc 90 t.start();
adrianmb 0:566f6ce93ddc 91 }
adrianmb 0:566f6ce93ddc 92
adrianmb 0:566f6ce93ddc 93 void sendData() {
adrianmb 0:566f6ce93ddc 94 if (vel==0)
adrianmb 0:566f6ce93ddc 95 rpm=0;
adrianmb 0:566f6ce93ddc 96 bt.printf("Velocidad actual %d RPM\n\r",rpm);
adrianmb 0:566f6ce93ddc 97 }
adrianmb 0:566f6ce93ddc 98