Motor control on mbed

Dependencies:   mbed

Committer:
roger5641
Date:
Sat Jul 23 13:47:47 2016 +0000
Revision:
0:f76be6916639
Child:
1:f47edcd44466
motorControl

Who changed what in which revision?

UserRevisionLine numberNew contents of line
roger5641 0:f76be6916639 1 #include "mbed.h"
roger5641 0:f76be6916639 2
roger5641 0:f76be6916639 3 //Motor sensor
roger5641 0:f76be6916639 4 InterruptIn HallA(D3);
roger5641 0:f76be6916639 5 InterruptIn HallB(D4);
roger5641 0:f76be6916639 6 InterruptIn HallC(D5);
roger5641 0:f76be6916639 7
roger5641 0:f76be6916639 8 void init_CN(void);
roger5641 0:f76be6916639 9 void CN_interrupt(void);
roger5641 0:f76be6916639 10
roger5641 0:f76be6916639 11 int8_t stateA=0, stateB=0, stateC=0, stateB_2=0;
roger5641 0:f76be6916639 12 int8_t state_1 = 0, state_1_old = 0;
roger5641 0:f76be6916639 13
roger5641 0:f76be6916639 14 int main() {
roger5641 0:f76be6916639 15
roger5641 0:f76be6916639 16 while(1)
roger5641 0:f76be6916639 17 {
roger5641 0:f76be6916639 18 ;
roger5641 0:f76be6916639 19 }
roger5641 0:f76be6916639 20 }
roger5641 0:f76be6916639 21
roger5641 0:f76be6916639 22
roger5641 0:f76be6916639 23 void init_CN(void)
roger5641 0:f76be6916639 24 {
roger5641 0:f76be6916639 25 HallA.rise(&CN_interrupt);
roger5641 0:f76be6916639 26 HallA.fall(&CN_interrupt);
roger5641 0:f76be6916639 27 HallB.rise(&CN_interrupt);
roger5641 0:f76be6916639 28 HallB.fall(&CN_interrupt);
roger5641 0:f76be6916639 29 HallC.rise(&CN_interrupt);
roger5641 0:f76be6916639 30 HallC.fall(&CN_interrupt);
roger5641 0:f76be6916639 31
roger5641 0:f76be6916639 32 stateA = HallA.read();
roger5641 0:f76be6916639 33 stateB = HallB.read();
roger5641 0:f76be6916639 34 stateC = HallC.read();
roger5641 0:f76be6916639 35 }
roger5641 0:f76be6916639 36
roger5641 0:f76be6916639 37 void CN_interrupt(void)
roger5641 0:f76be6916639 38 {
roger5641 0:f76be6916639 39 //Motor 1
roger5641 0:f76be6916639 40 stateA = HallA.read();
roger5641 0:f76be6916639 41 stateB = HallB.read();
roger5641 0:f76be6916639 42 stateC = HallC.read();
roger5641 0:f76be6916639 43
roger5641 0:f76be6916639 44 ///code for state determination///
roger5641 0:f76be6916639 45 if (stateA == 0)
roger5641 0:f76be6916639 46 {
roger5641 0:f76be6916639 47 if (stateB == 0)
roger5641 0:f76be6916639 48 state_1 = 0;
roger5641 0:f76be6916639 49 else
roger5641 0:f76be6916639 50 state_1 = 1;
roger5641 0:f76be6916639 51 }
roger5641 0:f76be6916639 52 else
roger5641 0:f76be6916639 53 {
roger5641 0:f76be6916639 54 if (stateB_1 == 1)
roger5641 0:f76be6916639 55 state_1 = 2;
roger5641 0:f76be6916639 56 else
roger5641 0:f76be6916639 57 state_1 = 3;
roger5641 0:f76be6916639 58 }
roger5641 0:f76be6916639 59
roger5641 0:f76be6916639 60 //Forward: v1Count +1
roger5641 0:f76be6916639 61 //Inverse: v1Count -1
roger5641 0:f76be6916639 62 if ( (state_1 == (state_1_old + 1)) || (state_1 == 0 && state_1_old == 3) )
roger5641 0:f76be6916639 63 v1Count++;
roger5641 0:f76be6916639 64 else if ( (state_1 == (state_1_old - 1)) || (state_1 == 3 && state_1_old == 0))
roger5641 0:f76be6916639 65 v1Count--;
roger5641 0:f76be6916639 66
roger5641 0:f76be6916639 67 state_1_old = state_1;
roger5641 0:f76be6916639 68 }