Rotork Research Team / Mbed 2 deprecated TFM_Encoder

Dependencies:   mbed QEI

Committer:
simontruelove
Date:
Wed May 19 10:43:30 2021 +0000
Revision:
24:ebaced951bbd
Parent:
22:58558001804d
1st Stab

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 24:ebaced951bbd 4 /* Code written by Simon Truelove (18/05/2021) Stripped down version of SWM Demonstrator to check operation of TFM encoder RLS LM13ICPRGA00D10A and MR100F085A160M00
simontruelove 24:ebaced951bbd 5 using QEI.h. The code uses the pulses from the encoder to calculate RPM
simontruelove 20:dca9f4c12fe3 6 */
simontruelove 20:dca9f4c12fe3 7
simontruelove 5:4e5c644d5cc3 8 void RPM (void);
simontruelove 1:0191658b6ff4 9
simontruelove 10:808cb9052f14 10 Serial pc(USBTX, USBRX); // tx, rx - set up the Terraterm input from mbed
simontruelove 1:0191658b6ff4 11
simontruelove 24:ebaced951bbd 12 QEI wheel(p5, p6, p8, 20000, QEI::X4_ENCODING); //code for quadrature encoder see QEI.h
simontruelove 3:4249dbdf7ed3 13
simontruelove 10:808cb9052f14 14 Timer t; //timer used in RPM
simontruelove 3:4249dbdf7ed3 15
simontruelove 20:dca9f4c12fe3 16 DigitalOut led1 (LED1); //LEDs used to as very basic memmory for controlling the state machines
simontruelove 20:dca9f4c12fe3 17 DigitalOut led2 (LED2);
simontruelove 20:dca9f4c12fe3 18 DigitalOut led3 (LED3);
simontruelove 20:dca9f4c12fe3 19 DigitalOut led4 (LED4);
simontruelove 22:58558001804d 20 DigitalIn anticlockwise (p11);
simontruelove 22:58558001804d 21 DigitalIn clockwise (p15);
simontruelove 22:58558001804d 22
simontruelove 20:dca9f4c12fe3 23 DigitalOut UnUsedPhase1 (p21);
simontruelove 22:58558001804d 24 DigitalOut UnUsedPhase2 (p22);
simontruelove 10:808cb9052f14 25
simontruelove 10:808cb9052f14 26 int TimePerClick = 0; //for calc of RPM
simontruelove 24:ebaced951bbd 27 int enc = 80000; //20 000 x4 enc = 80 000 Pulses Per Rev
simontruelove 20:dca9f4c12fe3 28 int s = enc/50; //s=number of cases in state machine (64)
simontruelove 22:58558001804d 29 int start = 28;
simontruelove 22:58558001804d 30 int adj = 25-start;
simontruelove 11:74eeb8871fe6 31
simontruelove 10:808cb9052f14 32 char c; //keyboard cotrol GetChar
simontruelove 4:3aedc9246ae4 33
simontruelove 20:dca9f4c12fe3 34 float rps = 0; //for calc of RPM
simontruelove 20:dca9f4c12fe3 35 float rpm = 0; //for calc of RPM
simontruelove 20:dca9f4c12fe3 36 float TimePerRev = 0; //for calc of RPM
simontruelove 1:0191658b6ff4 37
simontruelove 1:0191658b6ff4 38 int main(void)
simontruelove 3:4249dbdf7ed3 39 {
simontruelove 24:ebaced951bbd 40 pc.baud(460800); //Set baud rate
simontruelove 22:58558001804d 41 wait(2);
simontruelove 22:58558001804d 42 t.start(); //start timer for rpm calculation
simontruelove 14:1eb49362a607 43 wait(0.1);
simontruelove 3:4249dbdf7ed3 44
simontruelove 5:4e5c644d5cc3 45 while(1)
simontruelove 5:4e5c644d5cc3 46 {
simontruelove 24:ebaced951bbd 47 if(wheel.getWhoop()==1) //PulseCount2_==3200 (this is 1 rotation), whoop_=1;
simontruelove 4:3aedc9246ae4 48 {
simontruelove 20:dca9f4c12fe3 49 RPM(); //calculate RPM
simontruelove 24:ebaced951bbd 50 led1==1;
simontruelove 24:ebaced951bbd 51 pc.printf("yay= %i, whoop= %i, Pulses= %i, Revs= %i, RPM= %f\n\r", wheel.getYay(),wheel.getWhoop(),wheel.getPulses(),wheel.getRevolutions(), rpm);
simontruelove 24:ebaced951bbd 52 }
simontruelove 24:ebaced951bbd 53 if (pc.readable())
simontruelove 24:ebaced951bbd 54 {
simontruelove 24:ebaced951bbd 55 c = pc.getc();
simontruelove 24:ebaced951bbd 56 if(c == 'z') //turn on led2 print some stuff
simontruelove 24:ebaced951bbd 57 {
simontruelove 24:ebaced951bbd 58 led2 = !led2;
simontruelove 24:ebaced951bbd 59 pc.printf("yay= %i, whoop= %i, Pulses= %i, Revs= %i, RPM= %f\n\r", wheel.getYay(),wheel.getWhoop(),wheel.getPulses(),wheel.getRevolutions(), rpm);
simontruelove 11:74eeb8871fe6 60 }
simontruelove 4:3aedc9246ae4 61 }
simontruelove 1:0191658b6ff4 62 }
simontruelove 1:0191658b6ff4 63 }
simontruelove 5:4e5c644d5cc3 64 void RPM (void)
simontruelove 5:4e5c644d5cc3 65 {
simontruelove 17:19b2c598810a 66 wheel.ResetWhoop(); //Whoop = 1 x per rev
simontruelove 14:1eb49362a607 67 TimePerClick = (t.read_us()); //read timer in microseconds
simontruelove 14:1eb49362a607 68 t.reset(); //reset timer
simontruelove 20:dca9f4c12fe3 69 TimePerRev = TimePerClick; //Convert from int to float TimePerClick = int, TimePerRev = float
simontruelove 14:1eb49362a607 70 TimePerRev = TimePerRev / 1000000; // 1microsecond = 0.000001s
simontruelove 20:dca9f4c12fe3 71 rps = 1 / TimePerRev; //inverse to convert SPR to rps
simontruelove 20:dca9f4c12fe3 72 rpm = rps * 60; //x 60 to convert rps to RPM
simontruelove 3:4249dbdf7ed3 73 }