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.
Diff: main.cpp
- Revision:
- 9:061600a6c750
- Parent:
- 8:2e690f407ec6
- Child:
- 10:808cb9052f14
--- a/main.cpp Mon Nov 19 15:30:08 2018 +0000
+++ b/main.cpp Tue Nov 20 15:34:06 2018 +0000
@@ -1,6 +1,5 @@
#include "mbed.h"
#include "QEI.h"
-#include "FastPWM.h"
void Initialisation (void); //These voids are written after the main. They must be listed here too (functional prototypes).
void StepCW(void);
@@ -22,10 +21,10 @@
Timer t;
-FastPWM Phase1 (p21); //Pin and LED set up
-FastPWM Phase2 (p22);
-FastPWM Phase3 (p23);
-FastPWM Phase4 (p24);
+PwmOut Phase1 (p21); //Pin and LED set up
+PwmOut Phase2 (p22);
+PwmOut Phase3 (p23);
+PwmOut Phase4 (p24);
AnalogOut Aout(p18);
@@ -40,19 +39,18 @@
int StateA = 0;
int StateB = 0;
//int StateC = 0;
-int AdjCW = 2;
-int AdjACW = 5;
-int TimePerClick = 0;
+int AdjCW = 3;
+int AdjACW = 6;
+int TimePerClick = 0;
int TimePerRev = 0;
int RPS = 0;
int rpm = 0;
-int SetPoint = 250;
+int SetPoint = 500;
int z = 80;
-int PWMduty = 10000;
char c;
-float duty = 0;
+float duty = 1;
float diff = 0.0;
float x=0.1; //x=time of square wave when 1 phase energised,
float y=0.04; //y=time of square wave when 2 phases energised
@@ -60,24 +58,16 @@
int main(void)
{
pc.baud(230400); //Set fastest baud rate
- /* while (1)
- {
- Phase1.period_ticks(20);
- Phase1.pulsewidth_ticks(10);
- while(1)
- {
-
- }
- } */
- Phase1.period_ticks(10000);
- Phase2.period_ticks(10000);
- Phase3.period_ticks(10000);
- Phase4.period_ticks(10000);
+ Phase1.period(0.00002);
+ Phase2.period(0.00002);
+ Phase3.period(0.00002);
+ Phase4.period(0.00002);
StepCW();
Initialisation();
wait(0.1);
t.start();
-
+
+
while(wheel.getRevolutions()<2)
{
switch(StateA)
@@ -117,10 +107,10 @@
while((led1 == 0) && (led2 == 0))
{
Aout = 0;
- Phase1.pulsewidth_ticks(0);
- Phase2.pulsewidth_ticks(0);
- Phase3.pulsewidth_ticks(0);
- Phase4.pulsewidth_ticks(0);
+ Phase1.write(0);
+ Phase2.write(0);
+ Phase3.write(0);
+ Phase4.write(0);
GetChar();
//StateB = wheel.getPulses()%16;
//StateC = (800+wheel.getPulses()+StateA+AdjCW)%16;
@@ -159,7 +149,7 @@
if(wheel.getWhoop()==1)
{
RPM();
- //VelocityLoop();
+ VelocityLoop();
}
}
@@ -194,7 +184,7 @@
if(wheel.getWhoop()==1)
{
RPM();
- //VelocityLoop();
+ VelocityLoop();
}
}
while((wheel.getRevolutions()>1) && (wheel.getPulses()>0) && (led2==1))
@@ -228,7 +218,7 @@
if(wheel.getWhoop()==1)
{
RPM();
- //VelocityLoop();
+ VelocityLoop();
}
}
while((wheel.getRevolutions()>1) && (wheel.getPulses()<1) && (led2==1))
@@ -260,7 +250,7 @@
if(wheel.getWhoop()==1)
{
RPM();
- //VelocityLoop();
+ VelocityLoop();
}
}
}
@@ -287,85 +277,85 @@
void Ph1(void)
{
- Phase1.pulsewidth_ticks(PWMduty);
- Phase2.pulsewidth_ticks(0);
- Phase3.pulsewidth_ticks(0);
- Phase4.pulsewidth_ticks(0);
+ Phase1.write(duty);
+ Phase2.write(0);
+ Phase3.write(0);
+ Phase4.write(0);
//wait(x);
//pc.printf("Phase 1 = %i\n\r", wheel.getPulses());
}
void Ph12 (void)
{
- Phase1.pulsewidth_ticks(PWMduty);
- Phase2.pulsewidth_ticks(PWMduty);
- Phase3.pulsewidth_ticks(0);
- Phase4.pulsewidth_ticks(0);
+ Phase1.write(duty);
+ Phase2.write(duty);
+ Phase3.write(0);
+ Phase4.write(0);
//wait(y);
}
void Ph2(void)
{
- Phase1.pulsewidth_ticks(0);
- Phase2.pulsewidth_ticks(PWMduty);
- Phase3.pulsewidth_ticks(0);
- Phase4.pulsewidth_ticks(0);
+ Phase1.write(0);
+ Phase2.write(duty);
+ Phase3.write(0);
+ Phase4.write(0);
//wait(x);
//pc.printf("Phase 2 = %i\n\r", wheel.getPulses());
}
void Ph23 (void)
{
- Phase1.pulsewidth_ticks(0);
- Phase2.pulsewidth_ticks(PWMduty);
- Phase3.pulsewidth_ticks(PWMduty);
- Phase4.pulsewidth_ticks(0);
+ Phase1.write(0);
+ Phase2.write(duty);
+ Phase3.write(duty);
+ Phase4.write(0);
//wait(y);
}
void Ph3(void)
{
- Phase1.pulsewidth_ticks(0);
- Phase2.pulsewidth_ticks(0);
- Phase3.pulsewidth_ticks(PWMduty);
- Phase4.pulsewidth_ticks(0);
+ Phase1.write(0);
+ Phase2.write(0);
+ Phase3.write(duty);
+ Phase4.write(0);
//wait(x);
//pc.printf("Phase 3 = %i\n\r", wheel.getPulses());
}
void Ph34 (void)
{
- Phase1.pulsewidth_ticks(0);
- Phase2.pulsewidth_ticks(0);
- Phase3.pulsewidth_ticks(PWMduty);
- Phase4.pulsewidth_ticks(PWMduty);
+ Phase1.write(0);
+ Phase2.write(0);
+ Phase3.write(duty);
+ Phase4.write(duty);
//wait(y);
}
void Ph4(void)
{
- Phase1.pulsewidth_ticks(0);
- Phase2.pulsewidth_ticks(0);
- Phase3.pulsewidth_ticks(0);
- Phase4.pulsewidth_ticks(PWMduty);
+ Phase1.write(0);
+ Phase2.write(0);
+ Phase3.write(0);
+ Phase4.write(duty);
//wait(x);
//pc.printf("Phase 4 = %i\n\r", wheel.getPulses());
}
void Ph41 (void)
{
- Phase1.pulsewidth_ticks(PWMduty);
- Phase2.pulsewidth_ticks(0);
- Phase3.pulsewidth_ticks(0);
- Phase4.pulsewidth_ticks(PWMduty);
+ Phase1.write(duty);
+ Phase2.write(0);
+ Phase3.write(0);
+ Phase4.write(duty);
//wait(y);
}
void Initialisation (void)
{
- Phase1.pulsewidth_ticks(0);
- Phase2.pulsewidth_ticks(0);
- Phase3.pulsewidth_ticks(0);
- Phase4.pulsewidth_ticks(0);
+ Phase1.write(0);
+ Phase2.write(0);
+ Phase3.write(0);
+ Phase4.write(0);
led1 = 0;
led2 = 0;
led3 = 0;
@@ -389,23 +379,17 @@
}
if(c == 'q')
{
+ //duty = duty + 0.0001;
SetPoint=SetPoint+10;
}
if(c == 'a')
{
+ //duty = duty - 0.0001;
SetPoint=SetPoint-10;
- //if (Setpoint <100)
- //{
- // SetPoint = 100;
- // }
- }
- if(c == 'p')
- {
- duty = duty+0.1;
- }
- if(c == 'l')
- {
- duty = duty-0.1;
+ if (SetPoint <500)
+ {
+ SetPoint = 500;
+ }
}
}
}
@@ -420,7 +404,6 @@
RPS = 10000000 / TimePerRev;
rpm = (RPS * 60)/10000;
Aout=((0.298*rpm)/1000); // for 500 rpm (0.30303*500/1000)*3.3V = 0.500V
- pc.printf("duty = %f, PWMduty = %i, SetPoint = %i, rpm = %i\n\r", duty, PWMduty, SetPoint, rpm);
//pc.printf("rpm = %i\n\r", rpm);
//pc.printf("StateA= %i, StateB= %i, StateC= %i, Pulses = %i\n\r", StateA, StateB, StateC, wheel.getPulses());
}
@@ -428,18 +411,14 @@
void VelocityLoop (void)
{
diff = SetPoint - rpm;
- duty = duty + (diff*0.01);
-
-
- if (duty > 19)
+ duty = duty + (diff*0.00001);
+ if (duty > 1)
{
- duty = 19;
+ duty = 1;
}
- if (duty <2)
+ if (duty <0.96)
{
- duty = 2;
+ duty = 0.96;
}
- PWMduty = (int) duty;
- pc.printf("duty = %f, PWMduty = %i, SetPoint = %i, rpm = %i\n\r", duty, PWMduty, SetPoint, rpm);
-
+ pc.printf("%i, %.5f\r", SetPoint, duty); //SetPoint = %i, rpm = %i\n\r", duty, SetPoint, rpm);
}
\ No newline at end of file