Senior design censored code to run freescale motor with X-NUCLEO-IM07M1. REFACTORED

Dependencies:   mbed

Fork of Blue_Board_Test_2 by Brad VanderWilp

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?

UserRevisionLine numberNew 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 }