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
- Committer:
- simontruelove
- Date:
- 2018-11-15
- Revision:
- 5:4e5c644d5cc3
- Parent:
- 4:3aedc9246ae4
- Child:
- 6:f7028034aabb
File content as of revision 5:4e5c644d5cc3:
#include "mbed.h"
#include "QEI.h"
void Initialisation (void); //These voids are written after the main. They must be listed here too (functional prototypes).
void StepCW(void);
void Ph1(void);
void Ph12 (void);
void Ph2(void);
void Ph23 (void);
void Ph3(void);
void Ph34 (void);
void Ph4(void);
void Ph41 (void);
void GetChar (void);
void RPM (void);
Serial pc(USBTX, USBRX); // tx, rx - set up the Terraterm input from mbed
QEI wheel(p5, p6, p8, 800, QEI::X4_ENCODING); //code for quadrature encoder see QEI.h
Timer t;
DigitalOut Phase1 (p21); //Pin and LED set up
DigitalOut Phase2 (p22);
DigitalOut Phase3 (p23);
DigitalOut Phase4 (p24);
DigitalIn Button1 (p11);
DigitalIn Button2 (p12);
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);
int StateA = 0;
int StateB = 0;
int TimePerClick = 0;
int TimePerRev = 0;
int RPS = 0;
int rpm = 0;
char c;
float x=0.05; //x=time of square wave when 1 phase energised,
float y=0.02; //y=time of square wave when 2 phases energised
int main(void)
{
pc.baud(230400); //Set fastest baud rate
StepCW();
Initialisation();
wait(0.1);
t.start();
while(wheel.getRevolutions()==0)
{
switch(StateA)
{
case 0:Ph1();pc.printf("Ph1= %i\n\r", wheel.getPulses());break;
case 1:Ph12();pc.printf("Ph12= %i\n\r", wheel.getPulses());break;
case 2:Ph2();pc.printf("Ph2= %i\n\r", wheel.getPulses());break;
case 3:Ph23();pc.printf("Ph23= %i\n\r", wheel.getPulses());break;
case 4:Ph3();pc.printf("Ph3= %i\n\r", wheel.getPulses());break;
case 5:Ph34();pc.printf("Ph34= %i\n\r", wheel.getPulses());break;
case 6:Ph4();pc.printf("Ph4= %i\n\r", wheel.getPulses());break;
case 7:Ph41();pc.printf("Ph41= %i\n\r", wheel.getPulses());break;
default:break;
}
if(wheel.getYay()==1)
{
StateA++;
wheel.ResetYay();
if (StateA>7)
{
StateA=0;
}
}
}
while(1)
{
while((led1 == 0) && (led2 == 0))
{
GetChar();
StateB = (wheel.getPulses())%16;
Phase1 = 0;
Phase2 = 0;
Phase3 = 0;
Phase4 = 0;
pc.printf("StateA= %i\r", StateA);
//pc.printf("0 StateB= %i, Pulses= %i, Revs= %i\r", StateB,wheel.getPulses(),wheel.getRevolutions());
}
while((wheel.getRevolutions()>0) && (wheel.getPulses()>0) && (led1==1))
{
GetChar();
StateB = (wheel.getPulses())%16;
pc.printf("StateA= %i\r", StateA);
//pc.printf("1 StateB= %i, Pulses= %i, Revs= %i\r", StateB,wheel.getPulses(),wheel.getRevolutions());
switch(StateB)
{
case 0:Ph3();break;
case 1:Ph3();break;
case 2:Ph34();break;
case 3:Ph34();break;
case 4:Ph4();break;
case 5:Ph4();break;
case 6:Ph41();break;
case 7:Ph41();break;
case 8:Ph1();break;
case 9:Ph1();break;
case 10:Ph12();break;
case 11:Ph12();break;
case 12:Ph2();break;
case 13:Ph2();break;
case 14:Ph23();break;
case 15:Ph23();break;
default:break;
}
if(wheel.getYay()==1)
{
RPM();
}
}
while(wheel.getRevolutions()>0 && wheel.getPulses()<1 && (led1==1))
{
GetChar();
StateB = (800+wheel.getPulses())%16;
pc.printf("StateA= %i\r", StateA);
//pc.printf("2 StateB= %i, Pulses= %i, Revs= %i\r", StateB,wheel.getPulses(),wheel.getRevolutions());
switch(StateB)
{
case 0:Ph3();break;
case 1:Ph3();break;
case 2:Ph34();break;
case 3:Ph34();break;
case 4:Ph4();break;
case 5:Ph4();break;
case 6:Ph41();break;
case 7:Ph41();break;
case 8:Ph1();break;
case 9:Ph1();break;
case 10:Ph12();break;
case 11:Ph12();break;
case 12:Ph2();break;
case 13:Ph2();break;
case 14:Ph23();break;
case 15:Ph23();break;
default:break;
}
if(wheel.getYay()==1)
{
RPM();
}
}
while((wheel.getRevolutions()>0) && (wheel.getPulses()>0) && (led2==1))
{
GetChar();
StateB = (800+wheel.getPulses())%16;
pc.printf("StateA= %i\r", StateA);
//pc.printf("StateA= %i\n\r", StateA);
//pc.printf("3 StateB= %i, Pulses= %i, Revs= %i \r", StateB,wheel.getPulses(),wheel.getRevolutions());
switch(StateB)
{
case 15:Ph34();break;
case 14:Ph3();break;
case 13:Ph3();break;
case 12:Ph23();break;
case 11:Ph23();break;
case 10:Ph2();break;
case 9:Ph2();break;
case 8:Ph12();break;
case 7:Ph12();break;
case 6:Ph1();break;
case 5:Ph1();break;
case 4:Ph41();break;
case 3:Ph41();break;
case 2:Ph4();break;
case 1:Ph4();break;
case 0:Ph34();break;
default:break;
}
if (StateB<0)
{
StateB = 800+wheel.getPulses();
}
if(wheel.getYay()==1)
{
RPM();
}
}
while((wheel.getRevolutions()>0) && (wheel.getPulses()<1) && (led2==1))
{
GetChar();
StateB = (800+wheel.getPulses())%16;
pc.printf("StateA= %i\r", StateA);
//pc.printf("4 StateB= %i, Pulses= %i, Revs= %i \r", StateB,wheel.getPulses(),wheel.getRevolutions());
switch(StateB)
{
case 15:Ph34();break;
case 14:Ph3();break;
case 13:Ph3();break;
case 12:Ph23();break;
case 11:Ph23();break;
case 10:Ph2();break;
case 9:Ph2();break;
case 8:Ph12();break;
case 7:Ph12();break;
case 6:Ph1();break;
case 5:Ph1();break;
case 4:Ph41();break;
case 3:Ph41();break;
case 2:Ph4();break;
case 1:Ph4();break;
case 0:Ph34();break;
default:break;
}
if (StateB<0)
{
StateB = 800+wheel.getPulses();
}
if(wheel.getYay()==1)
{
RPM();
}
}
}
}
void StepCW(void) //Square wave switching
{
Ph1();
wait(x);
Ph12();
wait(y);
Ph2();
wait(x);
Ph23();
wait(y);
Ph3();
wait(x);
Ph34();
wait(y);
Ph4();
wait(x);
Ph41();
wait(y);
}
void Ph1(void)
{
Phase1 = 1;
Phase2 = Phase3 = Phase4 = 0;
//wait(x);
//pc.printf("Phase 1 = %i\n\r", wheel.getPulses());
}
void Ph12 (void)
{
Phase1 = Phase2 = 1;
Phase3 = Phase4 = 0;
//wait(y);
}
void Ph2(void)
{
Phase2 = 1;
Phase1 = Phase3 = Phase4 = 0;
//wait(x);
//pc.printf("Phase 2 = %i\n\r", wheel.getPulses());
}
void Ph23 (void)
{
Phase2 = Phase3 = 1;
Phase4 = Phase1 = 0;
//wait(y);
}
void Ph3(void)
{
Phase3 = 1;
Phase1 = Phase2 = Phase4 = 0;
//wait(x);
//pc.printf("Phase 3 = %i\n\r", wheel.getPulses());
}
void Ph34 (void)
{
Phase3 = Phase4 = 1;
Phase1 = Phase2 = 0;
//wait(y);
}
void Ph4(void)
{
Phase4 = 1;
Phase1 = Phase2 = Phase3 = 0;
//wait(x);
//pc.printf("Phase 4 = %i\n\r", wheel.getPulses());
}
void Ph41 (void)
{
Phase4 = Phase1 = 1;
Phase2 = Phase3 = 0;
//wait(y);
}
void Initialisation (void)
{
Phase1 = 0;
Phase2 = 0;
Phase3 = 0;
Phase4 = 0;
led1 = 0;
led2 = 0;
led3 = 0;
led4 = 0;
wheel.ResetYay();
}
void GetChar (void)
{ if (pc.readable())
{
c = pc.getc();
if(c == 'z')
{
led1 = !led1;
led2 = 0;
}
if(c == 'x')
{
led1 = 0;
led2 = !led2 ;
}
}
}
void RPM (void)
{
wheel.ResetYay();
TimePerClick = (t.read_us());
t.reset();
TimePerRev = TimePerClick * 400;
TimePerRev = TimePerRev / 1000;
RPS = 10000000 / TimePerRev;
rpm = (RPS * 60)/10000;
//pc.printf("rpm = %d\n\r", rpm);
}