Roger Weng
/
MotorControl
Motor control on mbed
main.cpp@0:f76be6916639, 2016-07-23 (annotated)
- Committer:
- roger5641
- Date:
- Sat Jul 23 13:47:47 2016 +0000
- Revision:
- 0:f76be6916639
- Child:
- 1:f47edcd44466
motorControl
Who changed what in which revision?
User | Revision | Line number | New 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 | } |