Senior design censored code to run freescale motor with X-NUCLEO-IM07M1. REFACTORED
Fork of Blue_Board_Test_2 by
main.cpp@7:b8ef1960498e, 2016-04-07 (annotated)
- Committer:
- vicyap
- Date:
- Thu Apr 07 23:29:27 2016 +0000
- Revision:
- 7:b8ef1960498e
- Parent:
- 6:f9aca07dbdb4
Deleted comments
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
BVanderWilp | 0:d445abf9a8e9 | 1 | #include "mbed.h" |
BVanderWilp | 0:d445abf9a8e9 | 2 | |
vicyap | 6:f9aca07dbdb4 | 3 | #include "SixStep_Lib.h" |
vicyap | 6:f9aca07dbdb4 | 4 | #include "AnalogInBuffered.h" |
vicyap | 6:f9aca07dbdb4 | 5 | |
vicyap | 6:f9aca07dbdb4 | 6 | /* start Parameters */ |
vicyap | 6:f9aca07dbdb4 | 7 | |
vicyap | 6:f9aca07dbdb4 | 8 | #define OUT1 PA_8 |
vicyap | 6:f9aca07dbdb4 | 9 | #define OUT2 PA_9 |
vicyap | 6:f9aca07dbdb4 | 10 | #define OUT3 PA_10 |
vicyap | 6:f9aca07dbdb4 | 11 | #define OUT1EN PC_10 |
vicyap | 6:f9aca07dbdb4 | 12 | #define OUT2EN PC_11 |
vicyap | 6:f9aca07dbdb4 | 13 | #define OUT3EN PC_12 |
vicyap | 6:f9aca07dbdb4 | 14 | |
vicyap | 6:f9aca07dbdb4 | 15 | #define HALL1 PA_15 |
vicyap | 6:f9aca07dbdb4 | 16 | #define HALL2 PB_3 |
vicyap | 6:f9aca07dbdb4 | 17 | #define HALL3 PB_10 |
vicyap | 6:f9aca07dbdb4 | 18 | |
vicyap | 6:f9aca07dbdb4 | 19 | #define POTENTIOMETER PB_1 |
vicyap | 6:f9aca07dbdb4 | 20 | #define POTENTIOMETER_BUFFER_SIZE 20 |
BVanderWilp | 0:d445abf9a8e9 | 21 | |
vicyap | 6:f9aca07dbdb4 | 22 | #define X_NUCLEO_IHM07001_LED PB_2 |
vicyap | 6:f9aca07dbdb4 | 23 | |
vicyap | 6:f9aca07dbdb4 | 24 | #define PWM_MAX 0.9f |
vicyap | 6:f9aca07dbdb4 | 25 | |
vicyap | 6:f9aca07dbdb4 | 26 | /* end Parameters */ |
vicyap | 6:f9aca07dbdb4 | 27 | |
vicyap | 6:f9aca07dbdb4 | 28 | /* start globals */ |
vicyap | 6:f9aca07dbdb4 | 29 | |
vicyap | 6:f9aca07dbdb4 | 30 | PwmOut phaseA(OUT1); //Out1, Green |
vicyap | 6:f9aca07dbdb4 | 31 | DigitalOut phaseAEN(OUT1EN); |
vicyap | 6:f9aca07dbdb4 | 32 | PwmOut phaseB(OUT2); //Out2, Blue |
vicyap | 6:f9aca07dbdb4 | 33 | DigitalOut phaseBEN(OUT2EN); |
vicyap | 6:f9aca07dbdb4 | 34 | PwmOut phaseC(OUT3); //Out3, White |
vicyap | 6:f9aca07dbdb4 | 35 | DigitalOut phaseCEN(OUT3EN); |
vicyap | 6:f9aca07dbdb4 | 36 | |
vicyap | 6:f9aca07dbdb4 | 37 | InterruptIn hallA(HALL1); //H1, Green |
vicyap | 6:f9aca07dbdb4 | 38 | InterruptIn hallB(HALL2); //H2, Blue |
vicyap | 6:f9aca07dbdb4 | 39 | InterruptIn hallC(HALL3); //H3, White |
vicyap | 6:f9aca07dbdb4 | 40 | |
vicyap | 6:f9aca07dbdb4 | 41 | AnalogInBuffered pot(POTENTIOMETER, POTENTIOMETER_BUFFER_SIZE); |
BVanderWilp | 5:6110655353ad | 42 | |
BVanderWilp | 0:d445abf9a8e9 | 43 | InterruptIn button(USER_BUTTON); |
BVanderWilp | 0:d445abf9a8e9 | 44 | |
vicyap | 6:f9aca07dbdb4 | 45 | DigitalOut redLed(X_NUCLEO_IHM07001_LED); |
BVanderWilp | 0:d445abf9a8e9 | 46 | DigitalOut led(LED1); |
BVanderWilp | 0:d445abf9a8e9 | 47 | |
BVanderWilp | 1:69c06d3676fd | 48 | Ticker interrupt; |
BVanderWilp | 0:d445abf9a8e9 | 49 | |
vicyap | 6:f9aca07dbdb4 | 50 | /* end globals */ |
vicyap | 6:f9aca07dbdb4 | 51 | |
vicyap | 6:f9aca07dbdb4 | 52 | float pwmMax = PWM_MAX; |
BVanderWilp | 5:6110655353ad | 53 | float pwmDuty; |
BVanderWilp | 0:d445abf9a8e9 | 54 | int stall = 0; |
BVanderWilp | 0:d445abf9a8e9 | 55 | void activate() |
BVanderWilp | 0:d445abf9a8e9 | 56 | { |
BVanderWilp | 0:d445abf9a8e9 | 57 | stall = 1; |
BVanderWilp | 0:d445abf9a8e9 | 58 | } |
BVanderWilp | 0:d445abf9a8e9 | 59 | |
BVanderWilp | 1:69c06d3676fd | 60 | void Crise() //state1, A0 B- C+ |
BVanderWilp | 0:d445abf9a8e9 | 61 | { |
vicyap | 6:f9aca07dbdb4 | 62 | phaseA.write(0); |
vicyap | 6:f9aca07dbdb4 | 63 | phaseB.write(0); |
BVanderWilp | 3:2bcc36fe4de5 | 64 | phaseC.write(pwmDuty); |
vicyap | 6:f9aca07dbdb4 | 65 | |
vicyap | 6:f9aca07dbdb4 | 66 | SixStep::Enable_CH1_CH2_Disable_CH3(phaseBEN, phaseCEN, phaseAEN); |
BVanderWilp | 1:69c06d3676fd | 67 | } |
BVanderWilp | 1:69c06d3676fd | 68 | |
BVanderWilp | 1:69c06d3676fd | 69 | void Bfall() //state2, A+ B- C0 |
BVanderWilp | 1:69c06d3676fd | 70 | { |
BVanderWilp | 1:69c06d3676fd | 71 | phaseA.write(pwmDuty); |
vicyap | 6:f9aca07dbdb4 | 72 | phaseB.write(0); |
vicyap | 6:f9aca07dbdb4 | 73 | phaseC.write(0); |
vicyap | 7:b8ef1960498e | 74 | |
vicyap | 6:f9aca07dbdb4 | 75 | SixStep::Enable_CH1_CH2_Disable_CH3(phaseAEN, phaseBEN, phaseCEN); |
BVanderWilp | 1:69c06d3676fd | 76 | } |
BVanderWilp | 1:69c06d3676fd | 77 | |
BVanderWilp | 1:69c06d3676fd | 78 | void Arise() //state3, A+ B0 C- |
vicyap | 7:b8ef1960498e | 79 | { |
BVanderWilp | 3:2bcc36fe4de5 | 80 | phaseA.write(pwmDuty); |
vicyap | 6:f9aca07dbdb4 | 81 | phaseB.write(0); |
vicyap | 6:f9aca07dbdb4 | 82 | phaseC.write(0); |
vicyap | 7:b8ef1960498e | 83 | |
vicyap | 6:f9aca07dbdb4 | 84 | SixStep::Enable_CH1_CH2_Disable_CH3(phaseAEN, phaseCEN, phaseBEN); |
BVanderWilp | 1:69c06d3676fd | 85 | } |
BVanderWilp | 1:69c06d3676fd | 86 | |
BVanderWilp | 1:69c06d3676fd | 87 | void Cfall() //state4, A0 B+ C- |
BVanderWilp | 1:69c06d3676fd | 88 | { |
BVanderWilp | 0:d445abf9a8e9 | 89 | phaseA.write(0); |
BVanderWilp | 0:d445abf9a8e9 | 90 | phaseB.write(pwmDuty); |
vicyap | 6:f9aca07dbdb4 | 91 | phaseC.write(0); |
vicyap | 7:b8ef1960498e | 92 | |
vicyap | 6:f9aca07dbdb4 | 93 | SixStep::Enable_CH1_CH2_Disable_CH3(phaseBEN, phaseCEN, phaseAEN); |
BVanderWilp | 0:d445abf9a8e9 | 94 | } |
BVanderWilp | 0:d445abf9a8e9 | 95 | |
BVanderWilp | 1:69c06d3676fd | 96 | void Brise() //state5, A- B+ C0 |
BVanderWilp | 0:d445abf9a8e9 | 97 | { |
vicyap | 6:f9aca07dbdb4 | 98 | phaseA.write(0); |
BVanderWilp | 3:2bcc36fe4de5 | 99 | phaseB.write(pwmDuty); |
vicyap | 6:f9aca07dbdb4 | 100 | phaseC.write(0); |
vicyap | 7:b8ef1960498e | 101 | |
vicyap | 6:f9aca07dbdb4 | 102 | SixStep::Enable_CH1_CH2_Disable_CH3(phaseAEN, phaseBEN, phaseCEN); |
BVanderWilp | 0:d445abf9a8e9 | 103 | } |
BVanderWilp | 0:d445abf9a8e9 | 104 | |
BVanderWilp | 1:69c06d3676fd | 105 | void Afall() //state5, A- B0 C+ |
BVanderWilp | 0:d445abf9a8e9 | 106 | { |
vicyap | 6:f9aca07dbdb4 | 107 | phaseA.write(0); |
BVanderWilp | 0:d445abf9a8e9 | 108 | phaseB.write(0); |
BVanderWilp | 0:d445abf9a8e9 | 109 | phaseC.write(pwmDuty); |
vicyap | 7:b8ef1960498e | 110 | |
vicyap | 6:f9aca07dbdb4 | 111 | SixStep::Enable_CH1_CH2_Disable_CH3(phaseAEN, phaseCEN, phaseBEN); |
BVanderWilp | 0:d445abf9a8e9 | 112 | } |
BVanderWilp | 0:d445abf9a8e9 | 113 | |
vicyap | 6:f9aca07dbdb4 | 114 | void Init() |
vicyap | 6:f9aca07dbdb4 | 115 | { |
BVanderWilp | 0:d445abf9a8e9 | 116 | phaseA.period_us(10); |
BVanderWilp | 0:d445abf9a8e9 | 117 | phaseB.period_us(10); |
BVanderWilp | 0:d445abf9a8e9 | 118 | phaseC.period_us(10); |
BVanderWilp | 0:d445abf9a8e9 | 119 | |
BVanderWilp | 0:d445abf9a8e9 | 120 | phaseA.write(0); |
BVanderWilp | 3:2bcc36fe4de5 | 121 | phaseB.write(0); |
vicyap | 6:f9aca07dbdb4 | 122 | phaseC.write(0); |
BVanderWilp | 0:d445abf9a8e9 | 123 | |
BVanderWilp | 0:d445abf9a8e9 | 124 | phaseAEN = 0; |
BVanderWilp | 3:2bcc36fe4de5 | 125 | phaseBEN = 0; |
BVanderWilp | 3:2bcc36fe4de5 | 126 | phaseCEN = 0; |
vicyap | 6:f9aca07dbdb4 | 127 | |
vicyap | 6:f9aca07dbdb4 | 128 | pwmDuty = pot.read() * PWM_MAX; |
vicyap | 6:f9aca07dbdb4 | 129 | |
vicyap | 6:f9aca07dbdb4 | 130 | // sensored mode |
vicyap | 6:f9aca07dbdb4 | 131 | // attach appropriate ISRs to hall sensor interrupt pins |
BVanderWilp | 1:69c06d3676fd | 132 | hallA.fall(&Afall); |
BVanderWilp | 1:69c06d3676fd | 133 | hallA.rise(&Arise); |
BVanderWilp | 1:69c06d3676fd | 134 | hallB.fall(&Bfall); |
BVanderWilp | 1:69c06d3676fd | 135 | hallB.rise(&Brise); |
BVanderWilp | 1:69c06d3676fd | 136 | hallC.fall(&Cfall); |
vicyap | 6:f9aca07dbdb4 | 137 | hallC.rise(&Crise); |
vicyap | 6:f9aca07dbdb4 | 138 | } |
vicyap | 6:f9aca07dbdb4 | 139 | |
vicyap | 6:f9aca07dbdb4 | 140 | void StartUp() |
vicyap | 6:f9aca07dbdb4 | 141 | { |
BVanderWilp | 3:2bcc36fe4de5 | 142 | int h1 = hallA.read(); |
BVanderWilp | 3:2bcc36fe4de5 | 143 | int h2 = hallB.read(); |
BVanderWilp | 3:2bcc36fe4de5 | 144 | int h3 = hallC.read(); |
BVanderWilp | 3:2bcc36fe4de5 | 145 | //check where we start |
BVanderWilp | 3:2bcc36fe4de5 | 146 | if(h1 == 0 && h2 == 1 && h3 == 1) //state1 |
BVanderWilp | 3:2bcc36fe4de5 | 147 | { |
BVanderWilp | 3:2bcc36fe4de5 | 148 | Crise(); |
BVanderWilp | 3:2bcc36fe4de5 | 149 | Bfall(); |
BVanderWilp | 3:2bcc36fe4de5 | 150 | } |
BVanderWilp | 3:2bcc36fe4de5 | 151 | else if(h1 == 0 && h2 == 0 && h3 == 1) //state2 |
BVanderWilp | 3:2bcc36fe4de5 | 152 | { |
BVanderWilp | 3:2bcc36fe4de5 | 153 | Bfall(); |
BVanderWilp | 3:2bcc36fe4de5 | 154 | Arise(); |
BVanderWilp | 3:2bcc36fe4de5 | 155 | } |
BVanderWilp | 3:2bcc36fe4de5 | 156 | else if(h1 == 1 && h2 == 0 && h3 == 1) //state3 |
BVanderWilp | 3:2bcc36fe4de5 | 157 | { |
BVanderWilp | 3:2bcc36fe4de5 | 158 | Arise(); |
BVanderWilp | 3:2bcc36fe4de5 | 159 | Cfall(); |
BVanderWilp | 3:2bcc36fe4de5 | 160 | } |
BVanderWilp | 3:2bcc36fe4de5 | 161 | else if(h1 == 1 && h2 == 0 && h3 == 0) //state4 |
BVanderWilp | 3:2bcc36fe4de5 | 162 | { |
BVanderWilp | 3:2bcc36fe4de5 | 163 | Cfall(); |
BVanderWilp | 3:2bcc36fe4de5 | 164 | Brise(); |
BVanderWilp | 3:2bcc36fe4de5 | 165 | } |
BVanderWilp | 3:2bcc36fe4de5 | 166 | else if(h1 == 1 && h2 == 1 && h3 == 0) //state5 |
BVanderWilp | 3:2bcc36fe4de5 | 167 | { |
BVanderWilp | 3:2bcc36fe4de5 | 168 | Brise(); |
BVanderWilp | 4:ab4d51b5b1c8 | 169 | Afall(); |
BVanderWilp | 3:2bcc36fe4de5 | 170 | } |
BVanderWilp | 3:2bcc36fe4de5 | 171 | else //state6 |
BVanderWilp | 3:2bcc36fe4de5 | 172 | { |
BVanderWilp | 3:2bcc36fe4de5 | 173 | Afall(); |
BVanderWilp | 4:ab4d51b5b1c8 | 174 | Crise(); |
vicyap | 6:f9aca07dbdb4 | 175 | } |
vicyap | 6:f9aca07dbdb4 | 176 | } |
vicyap | 6:f9aca07dbdb4 | 177 | |
vicyap | 6:f9aca07dbdb4 | 178 | int main() { |
vicyap | 6:f9aca07dbdb4 | 179 | //wait until button push to start |
vicyap | 6:f9aca07dbdb4 | 180 | button.rise(&activate); |
vicyap | 6:f9aca07dbdb4 | 181 | while(stall == 0) { |
vicyap | 6:f9aca07dbdb4 | 182 | led = !led; |
vicyap | 6:f9aca07dbdb4 | 183 | wait(1); |
vicyap | 6:f9aca07dbdb4 | 184 | } |
vicyap | 7:b8ef1960498e | 185 | |
vicyap | 6:f9aca07dbdb4 | 186 | Init(); |
vicyap | 6:f9aca07dbdb4 | 187 | StartUp(); |
vicyap | 6:f9aca07dbdb4 | 188 | |
BVanderWilp | 0:d445abf9a8e9 | 189 | while(1) { |
BVanderWilp | 0:d445abf9a8e9 | 190 | led = !led; |
vicyap | 6:f9aca07dbdb4 | 191 | pwmDuty = pot.buffered_read() * PWM_MAX; |
BVanderWilp | 5:6110655353ad | 192 | wait(0.05); |
BVanderWilp | 0:d445abf9a8e9 | 193 | } |
BVanderWilp | 0:d445abf9a8e9 | 194 | } |