![](/media/cache/profiles/70c767c26cb3143bad5e660504fd6a76.50x50_q85.jpg)
4 control direction and velocity of a EMG30 DC motor, reading RPM via encoder and debugging via serial
main.cpp@0:566f6ce93ddc, 2012-04-20 (annotated)
- Committer:
- adrianmb
- Date:
- Fri Apr 20 02:28:35 2012 +0000
- Revision:
- 0:566f6ce93ddc
Who changed what in which revision?
User | Revision | Line number | New 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 |