Rotork Research Team / Mbed 2 deprecated TFM_Encoder

Dependencies:   mbed QEI

Committer:
simontruelove
Date:
Wed Nov 14 15:18:12 2018 +0000
Revision:
4:3aedc9246ae4
Parent:
3:4249dbdf7ed3
Child:
5:4e5c644d5cc3
keyboard control

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simontruelove 0:634dd505dace 1 #include "mbed.h"
simontruelove 3:4249dbdf7ed3 2 #include "QEI.h"
simontruelove 3:4249dbdf7ed3 3
simontruelove 3:4249dbdf7ed3 4 void Initialisation (void); //These voids are written after the main. They must be listed here too (functional prototypes).
simontruelove 1:0191658b6ff4 5 void StepCW(void);
simontruelove 1:0191658b6ff4 6 void Ph1(void);
simontruelove 3:4249dbdf7ed3 7 void Ph12 (void);
simontruelove 1:0191658b6ff4 8 void Ph2(void);
simontruelove 3:4249dbdf7ed3 9 void Ph23 (void);
simontruelove 1:0191658b6ff4 10 void Ph3(void);
simontruelove 3:4249dbdf7ed3 11 void Ph34 (void);
simontruelove 1:0191658b6ff4 12 void Ph4(void);
simontruelove 3:4249dbdf7ed3 13 void Ph41 (void);
simontruelove 4:3aedc9246ae4 14 void GetChar (void);
simontruelove 1:0191658b6ff4 15
simontruelove 1:0191658b6ff4 16 Serial pc(USBTX, USBRX); // tx, rx - set up the Terraterm input from mbed
simontruelove 1:0191658b6ff4 17
simontruelove 3:4249dbdf7ed3 18 QEI wheel(p5, p6, p8, 800, QEI::X4_ENCODING); //code for quadrature encoder see QEI.h
simontruelove 3:4249dbdf7ed3 19
simontruelove 3:4249dbdf7ed3 20 Timer t;
simontruelove 3:4249dbdf7ed3 21
simontruelove 1:0191658b6ff4 22 DigitalOut Phase1 (p21); //Pin and LED set up
simontruelove 1:0191658b6ff4 23 DigitalOut Phase2 (p22);
simontruelove 1:0191658b6ff4 24 DigitalOut Phase3 (p23);
simontruelove 1:0191658b6ff4 25 DigitalOut Phase4 (p24);
simontruelove 1:0191658b6ff4 26
simontruelove 2:3f95c82c26bb 27 DigitalIn Button1 (p11);
simontruelove 4:3aedc9246ae4 28 DigitalIn Button2 (p12);
simontruelove 2:3f95c82c26bb 29
simontruelove 2:3f95c82c26bb 30 DigitalOut led1(LED1);
simontruelove 2:3f95c82c26bb 31 DigitalOut led2(LED2);
simontruelove 2:3f95c82c26bb 32 DigitalOut led3(LED3);
simontruelove 2:3f95c82c26bb 33 DigitalOut led4(LED4);
simontruelove 1:0191658b6ff4 34
simontruelove 3:4249dbdf7ed3 35 int StateA = 0;
simontruelove 3:4249dbdf7ed3 36 int StateB = 0;
simontruelove 3:4249dbdf7ed3 37 int TimePerClick = 0;
simontruelove 3:4249dbdf7ed3 38 int TimePerRev = 0;
simontruelove 3:4249dbdf7ed3 39 int RPS = 0;
simontruelove 3:4249dbdf7ed3 40 int RPM = 0;
simontruelove 1:0191658b6ff4 41
simontruelove 4:3aedc9246ae4 42 char c;
simontruelove 4:3aedc9246ae4 43
simontruelove 3:4249dbdf7ed3 44 float x=0.05, y=0.02, z=1; //x=time of square wave when 1 phase energised, y=time of square wave when 2 phases energised
simontruelove 1:0191658b6ff4 45
simontruelove 1:0191658b6ff4 46 int main(void)
simontruelove 3:4249dbdf7ed3 47 {
simontruelove 1:0191658b6ff4 48 pc.baud(230400); //Set fastest baud rate
simontruelove 3:4249dbdf7ed3 49 StepCW();
simontruelove 3:4249dbdf7ed3 50 Initialisation();
simontruelove 3:4249dbdf7ed3 51 wait(0.1);
simontruelove 3:4249dbdf7ed3 52 t.start();
simontruelove 4:3aedc9246ae4 53
simontruelove 3:4249dbdf7ed3 54 while(wheel.getRevolutions()==0)
simontruelove 3:4249dbdf7ed3 55 {
simontruelove 3:4249dbdf7ed3 56 switch(StateA)
simontruelove 3:4249dbdf7ed3 57 {
simontruelove 3:4249dbdf7ed3 58 case 0:Ph1();pc.printf("Ph1= %i\n\r", wheel.getPulses());break;
simontruelove 3:4249dbdf7ed3 59 case 1:Ph12();pc.printf("Ph12= %i\n\r", wheel.getPulses());break;
simontruelove 3:4249dbdf7ed3 60 case 2:Ph2();pc.printf("Ph2= %i\n\r", wheel.getPulses());break;
simontruelove 3:4249dbdf7ed3 61 case 3:Ph23();pc.printf("Ph23= %i\n\r", wheel.getPulses());break;
simontruelove 3:4249dbdf7ed3 62 case 4:Ph3();pc.printf("Ph3= %i\n\r", wheel.getPulses());break;
simontruelove 3:4249dbdf7ed3 63 case 5:Ph34();pc.printf("Ph34= %i\n\r", wheel.getPulses());break;
simontruelove 3:4249dbdf7ed3 64 case 6:Ph4();pc.printf("Ph4= %i\n\r", wheel.getPulses());break;
simontruelove 3:4249dbdf7ed3 65 case 7:Ph41();pc.printf("Ph41= %i\n\r", wheel.getPulses());break;
simontruelove 3:4249dbdf7ed3 66 default:break;
simontruelove 3:4249dbdf7ed3 67 }
simontruelove 3:4249dbdf7ed3 68
simontruelove 3:4249dbdf7ed3 69 if(wheel.getYay()==1)
simontruelove 3:4249dbdf7ed3 70 {
simontruelove 3:4249dbdf7ed3 71 StateA++;
simontruelove 3:4249dbdf7ed3 72 wheel.ResetYay();
simontruelove 3:4249dbdf7ed3 73 if (StateA>7)
simontruelove 3:4249dbdf7ed3 74 {
simontruelove 3:4249dbdf7ed3 75 StateA=0;
simontruelove 3:4249dbdf7ed3 76 }
simontruelove 3:4249dbdf7ed3 77 }
simontruelove 4:3aedc9246ae4 78 }
simontruelove 3:4249dbdf7ed3 79
simontruelove 3:4249dbdf7ed3 80 while(1)
simontruelove 4:3aedc9246ae4 81 {
simontruelove 4:3aedc9246ae4 82 while((led1 == 0) && (led2 == 0))
simontruelove 4:3aedc9246ae4 83 {
simontruelove 4:3aedc9246ae4 84 GetChar();
simontruelove 4:3aedc9246ae4 85 }
simontruelove 4:3aedc9246ae4 86 while((wheel.getRevolutions()>0) && (wheel.getPulses()>0) && (led1==1))
simontruelove 3:4249dbdf7ed3 87 {
simontruelove 4:3aedc9246ae4 88 GetChar();
simontruelove 4:3aedc9246ae4 89 StateB = (wheel.getPulses())%16;
simontruelove 4:3aedc9246ae4 90 //pc.printf("1 StateB= %i, Pulses= %i, Revs= %i\r", StateB,wheel.getPulses(),wheel.getRevolutions());
simontruelove 4:3aedc9246ae4 91
simontruelove 4:3aedc9246ae4 92 switch(StateB)
simontruelove 4:3aedc9246ae4 93 {
simontruelove 4:3aedc9246ae4 94 case 0:Ph3();break;
simontruelove 4:3aedc9246ae4 95 case 1:Ph3();break;
simontruelove 4:3aedc9246ae4 96 case 2:Ph34();break;
simontruelove 4:3aedc9246ae4 97 case 3:Ph34();break;
simontruelove 4:3aedc9246ae4 98 case 4:Ph4();break;
simontruelove 4:3aedc9246ae4 99 case 5:Ph4();break;
simontruelove 4:3aedc9246ae4 100 case 6:Ph41();break;
simontruelove 4:3aedc9246ae4 101 case 7:Ph41();break;
simontruelove 4:3aedc9246ae4 102 case 8:Ph1();break;
simontruelove 4:3aedc9246ae4 103 case 9:Ph1();break;
simontruelove 4:3aedc9246ae4 104 case 10:Ph12();break;
simontruelove 4:3aedc9246ae4 105 case 11:Ph12();break;
simontruelove 4:3aedc9246ae4 106 case 12:Ph2();break;
simontruelove 4:3aedc9246ae4 107 case 13:Ph2();break;
simontruelove 4:3aedc9246ae4 108 case 14:Ph23();break;
simontruelove 4:3aedc9246ae4 109 case 15:Ph23();break;
simontruelove 4:3aedc9246ae4 110 default:break;
simontruelove 4:3aedc9246ae4 111 }
simontruelove 4:3aedc9246ae4 112
simontruelove 4:3aedc9246ae4 113 if(wheel.getYay()==1)
simontruelove 4:3aedc9246ae4 114 {
simontruelove 4:3aedc9246ae4 115 wheel.ResetYay();
simontruelove 4:3aedc9246ae4 116 TimePerClick = (t.read_us());
simontruelove 4:3aedc9246ae4 117 t.reset();
simontruelove 4:3aedc9246ae4 118 TimePerRev = TimePerClick * 400;
simontruelove 4:3aedc9246ae4 119 TimePerRev = TimePerRev / 1000;
simontruelove 4:3aedc9246ae4 120 RPS = 10000000 / TimePerRev;
simontruelove 4:3aedc9246ae4 121 RPM = (RPS * 60)/10000;
simontruelove 4:3aedc9246ae4 122 pc.printf("RPM = %d\n\r", RPM);
simontruelove 4:3aedc9246ae4 123 }
simontruelove 4:3aedc9246ae4 124 }
simontruelove 4:3aedc9246ae4 125
simontruelove 4:3aedc9246ae4 126 while(wheel.getRevolutions()>0 && wheel.getPulses()<1 && (led1==1))
simontruelove 4:3aedc9246ae4 127 {
simontruelove 4:3aedc9246ae4 128 GetChar();
simontruelove 4:3aedc9246ae4 129 StateB = (800+wheel.getPulses())%16;
simontruelove 4:3aedc9246ae4 130 //pc.printf("2 StateB= %i, Pulses= %i, Revs= %i\r", StateB,wheel.getPulses(),wheel.getRevolutions());
simontruelove 3:4249dbdf7ed3 131
simontruelove 3:4249dbdf7ed3 132 switch(StateB)
simontruelove 3:4249dbdf7ed3 133 {
simontruelove 3:4249dbdf7ed3 134 case 0:Ph3();break;
simontruelove 3:4249dbdf7ed3 135 case 1:Ph3();break;
simontruelove 3:4249dbdf7ed3 136 case 2:Ph34();break;
simontruelove 3:4249dbdf7ed3 137 case 3:Ph34();break;
simontruelove 3:4249dbdf7ed3 138 case 4:Ph4();break;
simontruelove 3:4249dbdf7ed3 139 case 5:Ph4();break;
simontruelove 3:4249dbdf7ed3 140 case 6:Ph41();break;
simontruelove 3:4249dbdf7ed3 141 case 7:Ph41();break;
simontruelove 3:4249dbdf7ed3 142 case 8:Ph1();break;
simontruelove 3:4249dbdf7ed3 143 case 9:Ph1();break;
simontruelove 3:4249dbdf7ed3 144 case 10:Ph12();break;
simontruelove 3:4249dbdf7ed3 145 case 11:Ph12();break;
simontruelove 3:4249dbdf7ed3 146 case 12:Ph2();break;
simontruelove 3:4249dbdf7ed3 147 case 13:Ph2();break;
simontruelove 3:4249dbdf7ed3 148 case 14:Ph23();break;
simontruelove 3:4249dbdf7ed3 149 case 15:Ph23();break;
simontruelove 3:4249dbdf7ed3 150 default:break;
simontruelove 3:4249dbdf7ed3 151 }
simontruelove 3:4249dbdf7ed3 152
simontruelove 3:4249dbdf7ed3 153 if(wheel.getYay()==1)
simontruelove 4:3aedc9246ae4 154 {
simontruelove 3:4249dbdf7ed3 155 wheel.ResetYay();
simontruelove 3:4249dbdf7ed3 156 TimePerClick = (t.read_us());
simontruelove 3:4249dbdf7ed3 157 t.reset();
simontruelove 3:4249dbdf7ed3 158 TimePerRev = TimePerClick * 400;
simontruelove 3:4249dbdf7ed3 159 TimePerRev = TimePerRev / 1000;
simontruelove 3:4249dbdf7ed3 160 RPS = 10000000 / TimePerRev;
simontruelove 3:4249dbdf7ed3 161 RPM = (RPS * 60)/10000;
simontruelove 4:3aedc9246ae4 162 pc.printf("RPM = %d\n\r", RPM);
simontruelove 4:3aedc9246ae4 163 }
simontruelove 3:4249dbdf7ed3 164 }
simontruelove 3:4249dbdf7ed3 165
simontruelove 1:0191658b6ff4 166 }
simontruelove 1:0191658b6ff4 167 }
simontruelove 1:0191658b6ff4 168
simontruelove 1:0191658b6ff4 169 void StepCW(void) //Square wave switching
simontruelove 1:0191658b6ff4 170 {
simontruelove 1:0191658b6ff4 171 Ph1();
simontruelove 3:4249dbdf7ed3 172 wait(x);
simontruelove 3:4249dbdf7ed3 173 Ph12();
simontruelove 1:0191658b6ff4 174 wait(y);
simontruelove 1:0191658b6ff4 175 Ph2();
simontruelove 3:4249dbdf7ed3 176 wait(x);
simontruelove 3:4249dbdf7ed3 177 Ph23();
simontruelove 1:0191658b6ff4 178 wait(y);
simontruelove 1:0191658b6ff4 179 Ph3();
simontruelove 3:4249dbdf7ed3 180 wait(x);
simontruelove 3:4249dbdf7ed3 181 Ph34();
simontruelove 1:0191658b6ff4 182 wait(y);
simontruelove 1:0191658b6ff4 183 Ph4();
simontruelove 3:4249dbdf7ed3 184 wait(x);
simontruelove 3:4249dbdf7ed3 185 Ph41();
simontruelove 3:4249dbdf7ed3 186 wait(y);
simontruelove 1:0191658b6ff4 187 }
simontruelove 1:0191658b6ff4 188
simontruelove 1:0191658b6ff4 189 void Ph1(void)
simontruelove 1:0191658b6ff4 190 {
simontruelove 3:4249dbdf7ed3 191 Phase1 = 1;
simontruelove 3:4249dbdf7ed3 192 Phase2 = Phase3 = Phase4 = 0;
simontruelove 3:4249dbdf7ed3 193 //wait(x);
simontruelove 3:4249dbdf7ed3 194 //pc.printf("Phase 1 = %i\n\r", wheel.getPulses());
simontruelove 3:4249dbdf7ed3 195 }
simontruelove 3:4249dbdf7ed3 196
simontruelove 3:4249dbdf7ed3 197 void Ph12 (void)
simontruelove 3:4249dbdf7ed3 198 {
simontruelove 3:4249dbdf7ed3 199 Phase1 = Phase2 = 1;
simontruelove 3:4249dbdf7ed3 200 Phase3 = Phase4 = 0;
simontruelove 3:4249dbdf7ed3 201 //wait(y);
simontruelove 1:0191658b6ff4 202 }
simontruelove 1:0191658b6ff4 203
simontruelove 1:0191658b6ff4 204 void Ph2(void)
simontruelove 1:0191658b6ff4 205 {
simontruelove 1:0191658b6ff4 206 Phase2 = 1;
simontruelove 1:0191658b6ff4 207 Phase1 = Phase3 = Phase4 = 0;
simontruelove 3:4249dbdf7ed3 208 //wait(x);
simontruelove 3:4249dbdf7ed3 209 //pc.printf("Phase 2 = %i\n\r", wheel.getPulses());
simontruelove 3:4249dbdf7ed3 210 }
simontruelove 3:4249dbdf7ed3 211
simontruelove 3:4249dbdf7ed3 212 void Ph23 (void)
simontruelove 3:4249dbdf7ed3 213 {
simontruelove 3:4249dbdf7ed3 214 Phase2 = Phase3 = 1;
simontruelove 3:4249dbdf7ed3 215 Phase4 = Phase1 = 0;
simontruelove 3:4249dbdf7ed3 216 //wait(y);
simontruelove 1:0191658b6ff4 217 }
simontruelove 0:634dd505dace 218
simontruelove 1:0191658b6ff4 219 void Ph3(void)
simontruelove 1:0191658b6ff4 220 {
simontruelove 1:0191658b6ff4 221 Phase3 = 1;
simontruelove 1:0191658b6ff4 222 Phase1 = Phase2 = Phase4 = 0;
simontruelove 3:4249dbdf7ed3 223 //wait(x);
simontruelove 3:4249dbdf7ed3 224 //pc.printf("Phase 3 = %i\n\r", wheel.getPulses());
simontruelove 3:4249dbdf7ed3 225 }
simontruelove 3:4249dbdf7ed3 226 void Ph34 (void)
simontruelove 3:4249dbdf7ed3 227 {
simontruelove 3:4249dbdf7ed3 228 Phase3 = Phase4 = 1;
simontruelove 3:4249dbdf7ed3 229 Phase1 = Phase2 = 0;
simontruelove 3:4249dbdf7ed3 230 //wait(y);
simontruelove 1:0191658b6ff4 231 }
simontruelove 1:0191658b6ff4 232
simontruelove 1:0191658b6ff4 233 void Ph4(void)
simontruelove 1:0191658b6ff4 234 {
simontruelove 1:0191658b6ff4 235 Phase4 = 1;
simontruelove 1:0191658b6ff4 236 Phase1 = Phase2 = Phase3 = 0;
simontruelove 3:4249dbdf7ed3 237 //wait(x);
simontruelove 3:4249dbdf7ed3 238 //pc.printf("Phase 4 = %i\n\r", wheel.getPulses());
simontruelove 3:4249dbdf7ed3 239 }
simontruelove 3:4249dbdf7ed3 240
simontruelove 3:4249dbdf7ed3 241 void Ph41 (void)
simontruelove 3:4249dbdf7ed3 242 {
simontruelove 3:4249dbdf7ed3 243 Phase4 = Phase1 = 1;
simontruelove 3:4249dbdf7ed3 244 Phase2 = Phase3 = 0;
simontruelove 3:4249dbdf7ed3 245 //wait(y);
simontruelove 3:4249dbdf7ed3 246 }
simontruelove 3:4249dbdf7ed3 247
simontruelove 3:4249dbdf7ed3 248 void Initialisation (void)
simontruelove 3:4249dbdf7ed3 249 {
simontruelove 3:4249dbdf7ed3 250 Phase1 = 0;
simontruelove 3:4249dbdf7ed3 251 Phase2 = 0;
simontruelove 3:4249dbdf7ed3 252 Phase3 = 0;
simontruelove 3:4249dbdf7ed3 253 Phase4 = 0;
simontruelove 3:4249dbdf7ed3 254 led1 = 0;
simontruelove 3:4249dbdf7ed3 255 led2 = 0;
simontruelove 3:4249dbdf7ed3 256 led3 = 0;
simontruelove 3:4249dbdf7ed3 257 led4 = 0;
simontruelove 3:4249dbdf7ed3 258 wheel.ResetYay();
simontruelove 4:3aedc9246ae4 259 }
simontruelove 4:3aedc9246ae4 260
simontruelove 4:3aedc9246ae4 261 void GetChar (void)
simontruelove 4:3aedc9246ae4 262 { if (pc.readable())
simontruelove 4:3aedc9246ae4 263 {
simontruelove 4:3aedc9246ae4 264 c = pc.getc();
simontruelove 4:3aedc9246ae4 265 if(c == 'z')
simontruelove 4:3aedc9246ae4 266 {
simontruelove 4:3aedc9246ae4 267 led1 = !led1;
simontruelove 4:3aedc9246ae4 268 led2 = 0;
simontruelove 4:3aedc9246ae4 269 }
simontruelove 4:3aedc9246ae4 270 if(c == 'x')
simontruelove 4:3aedc9246ae4 271 {
simontruelove 4:3aedc9246ae4 272 led1 = 0;
simontruelove 4:3aedc9246ae4 273 led2 = !led2 ;
simontruelove 4:3aedc9246ae4 274 }
simontruelove 4:3aedc9246ae4 275 }
simontruelove 3:4249dbdf7ed3 276 }