Rotork Research Team / Mbed 2 deprecated TFM_Encoder

Dependencies:   mbed QEI

Committer:
simontruelove
Date:
Fri Oct 26 12:58:15 2018 +0000
Revision:
2:3f95c82c26bb
Parent:
1:0191658b6ff4
Child:
3:4249dbdf7ed3
Version 3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simontruelove 0:634dd505dace 1 #include "mbed.h"
simontruelove 1:0191658b6ff4 2 void ReportA(void); //These voids are written after the main. They must be listed here too (functional prototypes).
simontruelove 1:0191658b6ff4 3 void ReportB(void);
simontruelove 1:0191658b6ff4 4 void ReportX(void);
simontruelove 1:0191658b6ff4 5 void Startup(void);
simontruelove 1:0191658b6ff4 6 void StepCW(void);
simontruelove 1:0191658b6ff4 7 void Ph1(void);
simontruelove 1:0191658b6ff4 8 void Ph2(void);
simontruelove 1:0191658b6ff4 9 void Ph3(void);
simontruelove 1:0191658b6ff4 10 void Ph4(void);
simontruelove 1:0191658b6ff4 11
simontruelove 1:0191658b6ff4 12 Serial pc(USBTX, USBRX); // tx, rx - set up the Terraterm input from mbed
simontruelove 1:0191658b6ff4 13
simontruelove 1:0191658b6ff4 14 DigitalOut Phase1 (p21); //Pin and LED set up
simontruelove 1:0191658b6ff4 15 DigitalOut Phase2 (p22);
simontruelove 1:0191658b6ff4 16 DigitalOut Phase3 (p23);
simontruelove 1:0191658b6ff4 17 DigitalOut Phase4 (p24);
simontruelove 1:0191658b6ff4 18
simontruelove 2:3f95c82c26bb 19 InterruptIn ChannelA (p5);
simontruelove 2:3f95c82c26bb 20 InterruptIn ChannelB (p6);
simontruelove 2:3f95c82c26bb 21 InterruptIn Index (p8);
simontruelove 1:0191658b6ff4 22
simontruelove 2:3f95c82c26bb 23 DigitalIn Button1 (p11);
simontruelove 2:3f95c82c26bb 24
simontruelove 2:3f95c82c26bb 25 DigitalOut led1(LED1);
simontruelove 2:3f95c82c26bb 26 DigitalOut led2(LED2);
simontruelove 2:3f95c82c26bb 27 DigitalOut led3(LED3);
simontruelove 2:3f95c82c26bb 28 DigitalOut led4(LED4);
simontruelove 1:0191658b6ff4 29
simontruelove 1:0191658b6ff4 30 int CountA=0; //On start up the integer will be zero
simontruelove 1:0191658b6ff4 31 int CountB=0;
simontruelove 1:0191658b6ff4 32 int CountX=0;
simontruelove 1:0191658b6ff4 33
simontruelove 1:0191658b6ff4 34 float x=0.04, y=0.01; //x=time of square wave when 1 phase energised, y=time of square wave when 2 phases energised
simontruelove 1:0191658b6ff4 35
simontruelove 1:0191658b6ff4 36 int main(void)
simontruelove 1:0191658b6ff4 37 {
simontruelove 1:0191658b6ff4 38 ChannelA.rise(&ReportA); // Interrupt - When channel A goes from 0 to 1 it is reported
simontruelove 1:0191658b6ff4 39 ChannelB.rise(&ReportB); // Interrupt - When channel B goes from 0 to 1 it is reported
simontruelove 1:0191658b6ff4 40 Index.rise(&ReportX); // Interrupt - When Index goes from 0 to 1 it is reported
simontruelove 1:0191658b6ff4 41 pc.baud(230400); //Set fastest baud rate
simontruelove 1:0191658b6ff4 42 Startup();
simontruelove 2:3f95c82c26bb 43
simontruelove 1:0191658b6ff4 44
simontruelove 2:3f95c82c26bb 45 while(CountX>0)
simontruelove 1:0191658b6ff4 46 {
simontruelove 2:3f95c82c26bb 47 wait(1);
simontruelove 1:0191658b6ff4 48 pc.printf("A = %d\n\r",CountA);
simontruelove 1:0191658b6ff4 49 pc.printf("B = %d\n\r",CountB);
simontruelove 2:3f95c82c26bb 50 while(Button1);
simontruelove 1:0191658b6ff4 51 wait(0.5);
simontruelove 1:0191658b6ff4 52 Ph1();
simontruelove 2:3f95c82c26bb 53 led1=!led1;
simontruelove 2:3f95c82c26bb 54 wait(1);
simontruelove 1:0191658b6ff4 55 pc.printf("A = %d\n\r",CountA);
simontruelove 1:0191658b6ff4 56 pc.printf("B = %d\n\r",CountB);
simontruelove 2:3f95c82c26bb 57 while(Button1);
simontruelove 1:0191658b6ff4 58 wait(0.5);
simontruelove 1:0191658b6ff4 59 Ph2();
simontruelove 2:3f95c82c26bb 60 led2=!led2;
simontruelove 2:3f95c82c26bb 61 wait(1);
simontruelove 1:0191658b6ff4 62 pc.printf("A = %d\n\r",CountA);
simontruelove 1:0191658b6ff4 63 pc.printf("B = %d\n\r",CountB);
simontruelove 2:3f95c82c26bb 64 while(Button1);
simontruelove 1:0191658b6ff4 65 wait(0.5);
simontruelove 1:0191658b6ff4 66 Ph3();
simontruelove 2:3f95c82c26bb 67 led3=!led3;
simontruelove 2:3f95c82c26bb 68 wait(1);
simontruelove 1:0191658b6ff4 69 pc.printf("A = %d\n\r",CountA);
simontruelove 1:0191658b6ff4 70 pc.printf("B = %d\n\r",CountB);
simontruelove 2:3f95c82c26bb 71 while(Button1);
simontruelove 1:0191658b6ff4 72 wait(0.5);
simontruelove 1:0191658b6ff4 73 Ph4();
simontruelove 2:3f95c82c26bb 74 led4=!led4;
simontruelove 1:0191658b6ff4 75 }
simontruelove 1:0191658b6ff4 76 }
simontruelove 1:0191658b6ff4 77
simontruelove 0:634dd505dace 78
simontruelove 1:0191658b6ff4 79 void Startup(void)
simontruelove 1:0191658b6ff4 80 {
simontruelove 1:0191658b6ff4 81 while(CountX==0)
simontruelove 1:0191658b6ff4 82 {
simontruelove 1:0191658b6ff4 83 StepCW();
simontruelove 1:0191658b6ff4 84 }
simontruelove 1:0191658b6ff4 85 }
simontruelove 1:0191658b6ff4 86
simontruelove 1:0191658b6ff4 87
simontruelove 1:0191658b6ff4 88
simontruelove 1:0191658b6ff4 89
simontruelove 1:0191658b6ff4 90 void ReportA(void)
simontruelove 1:0191658b6ff4 91 {
simontruelove 1:0191658b6ff4 92 CountA++;
simontruelove 2:3f95c82c26bb 93 //led1 = !led1; //Counts A
simontruelove 1:0191658b6ff4 94 //pc.printf("A = %d\n\r",CountA); //Prints cumulative counts to Terraterm
simontruelove 1:0191658b6ff4 95 }
simontruelove 1:0191658b6ff4 96
simontruelove 1:0191658b6ff4 97
simontruelove 1:0191658b6ff4 98 void ReportB(void)
simontruelove 1:0191658b6ff4 99 {
simontruelove 1:0191658b6ff4 100 CountB++;
simontruelove 2:3f95c82c26bb 101 //led2 = !led2; //Counts B
simontruelove 1:0191658b6ff4 102 //pc.printf("B = %d\n\r",CountB); //Prints cumulative counts to Terraterm
simontruelove 0:634dd505dace 103
simontruelove 1:0191658b6ff4 104 }
simontruelove 1:0191658b6ff4 105
simontruelove 1:0191658b6ff4 106
simontruelove 1:0191658b6ff4 107 void ReportX(void)
simontruelove 1:0191658b6ff4 108 {
simontruelove 1:0191658b6ff4 109 CountX++;
simontruelove 1:0191658b6ff4 110 pc.printf("X = %d\n\r",CountX); //Prints cumulative counts to Terraterm
simontruelove 2:3f95c82c26bb 111 //led4 = !led4;
simontruelove 1:0191658b6ff4 112 CountA = CountB = 0;
simontruelove 1:0191658b6ff4 113 }
simontruelove 1:0191658b6ff4 114
simontruelove 1:0191658b6ff4 115 void StepCW(void) //Square wave switching
simontruelove 1:0191658b6ff4 116 {
simontruelove 1:0191658b6ff4 117 Ph1();
simontruelove 1:0191658b6ff4 118
simontruelove 1:0191658b6ff4 119 Phase1 = Phase2 = 1;
simontruelove 1:0191658b6ff4 120 Phase3 = Phase4 = 0;
simontruelove 1:0191658b6ff4 121 wait(y);
simontruelove 1:0191658b6ff4 122
simontruelove 1:0191658b6ff4 123 Ph2();
simontruelove 1:0191658b6ff4 124
simontruelove 1:0191658b6ff4 125 Phase2 = Phase3 = 1;
simontruelove 1:0191658b6ff4 126 Phase1 = Phase4 = 0;
simontruelove 1:0191658b6ff4 127 wait(y);
simontruelove 1:0191658b6ff4 128
simontruelove 1:0191658b6ff4 129 Ph3();
simontruelove 1:0191658b6ff4 130
simontruelove 1:0191658b6ff4 131 Phase3 = Phase4 = 1;
simontruelove 1:0191658b6ff4 132 Phase1 = Phase2 = 0;
simontruelove 1:0191658b6ff4 133 wait(y);
simontruelove 1:0191658b6ff4 134
simontruelove 1:0191658b6ff4 135 Ph4();
simontruelove 1:0191658b6ff4 136
simontruelove 1:0191658b6ff4 137 Phase4 = Phase1 = 1;
simontruelove 1:0191658b6ff4 138 Phase2 = Phase3 = 0;
simontruelove 1:0191658b6ff4 139 wait(y);
simontruelove 1:0191658b6ff4 140 }
simontruelove 1:0191658b6ff4 141
simontruelove 1:0191658b6ff4 142 void Ph1(void)
simontruelove 1:0191658b6ff4 143 {
simontruelove 1:0191658b6ff4 144 Phase1 = 1;
simontruelove 0:634dd505dace 145 Phase2 = Phase3 = Phase4 = 0;
simontruelove 0:634dd505dace 146 wait(x);
simontruelove 1:0191658b6ff4 147 }
simontruelove 1:0191658b6ff4 148
simontruelove 1:0191658b6ff4 149 void Ph2(void)
simontruelove 1:0191658b6ff4 150 {
simontruelove 1:0191658b6ff4 151 Phase2 = 1;
simontruelove 1:0191658b6ff4 152 Phase1 = Phase3 = Phase4 = 0;
simontruelove 1:0191658b6ff4 153 wait(x);
simontruelove 1:0191658b6ff4 154 }
simontruelove 0:634dd505dace 155
simontruelove 1:0191658b6ff4 156 void Ph3(void)
simontruelove 1:0191658b6ff4 157 {
simontruelove 1:0191658b6ff4 158 Phase3 = 1;
simontruelove 1:0191658b6ff4 159 Phase1 = Phase2 = Phase4 = 0;
simontruelove 1:0191658b6ff4 160 wait(x);
simontruelove 1:0191658b6ff4 161 }
simontruelove 1:0191658b6ff4 162
simontruelove 1:0191658b6ff4 163 void Ph4(void)
simontruelove 1:0191658b6ff4 164 {
simontruelove 1:0191658b6ff4 165 Phase4 = 1;
simontruelove 1:0191658b6ff4 166 Phase1 = Phase2 = Phase3 = 0;
simontruelove 1:0191658b6ff4 167 wait(x);
simontruelove 1:0191658b6ff4 168 }