Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@24:ebaced951bbd, 2021-05-19 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |