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:
- 8:2e690f407ec6
- Parent:
- 7:b8de1529c7fc
- Child:
- 9:061600a6c750
--- a/main.cpp Mon Nov 19 11:14:28 2018 +0000
+++ b/main.cpp Mon Nov 19 15:30:08 2018 +0000
@@ -1,5 +1,6 @@
#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);
@@ -21,10 +22,10 @@
Timer t;
-PwmOut Phase1 (p21); //Pin and LED set up
-PwmOut Phase2 (p22);
-PwmOut Phase3 (p23);
-PwmOut Phase4 (p24);
+FastPWM Phase1 (p21); //Pin and LED set up
+FastPWM Phase2 (p22);
+FastPWM Phase3 (p23);
+FastPWM Phase4 (p24);
AnalogOut Aout(p18);
@@ -47,10 +48,11 @@
int rpm = 0;
int SetPoint = 250;
int z = 80;
+int PWMduty = 10000;
char c;
-float duty = 1;
+float duty = 0;
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
@@ -58,16 +60,24 @@
int main(void)
{
pc.baud(230400); //Set fastest baud rate
- Phase1.period(0.000001);
- Phase2.period(0.000001);
- Phase3.period(0.000001);
- Phase4.period(0.000001);
+ /* 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);
StepCW();
Initialisation();
wait(0.1);
t.start();
-
-
+
while(wheel.getRevolutions()<2)
{
switch(StateA)
@@ -107,10 +117,10 @@
while((led1 == 0) && (led2 == 0))
{
Aout = 0;
- Phase1.write(0);
- Phase2.write(0);
- Phase3.write(0);
- Phase4.write(0);
+ Phase1.pulsewidth_ticks(0);
+ Phase2.pulsewidth_ticks(0);
+ Phase3.pulsewidth_ticks(0);
+ Phase4.pulsewidth_ticks(0);
GetChar();
//StateB = wheel.getPulses()%16;
//StateC = (800+wheel.getPulses()+StateA+AdjCW)%16;
@@ -277,85 +287,85 @@
void Ph1(void)
{
- Phase1.write(duty);
- Phase2.write(0);
- Phase3.write(0);
- Phase4.write(0);
+ Phase1.pulsewidth_ticks(PWMduty);
+ Phase2.pulsewidth_ticks(0);
+ Phase3.pulsewidth_ticks(0);
+ Phase4.pulsewidth_ticks(0);
//wait(x);
//pc.printf("Phase 1 = %i\n\r", wheel.getPulses());
}
void Ph12 (void)
{
- Phase1.write(duty);
- Phase2.write(duty);
- Phase3.write(0);
- Phase4.write(0);
+ Phase1.pulsewidth_ticks(PWMduty);
+ Phase2.pulsewidth_ticks(PWMduty);
+ Phase3.pulsewidth_ticks(0);
+ Phase4.pulsewidth_ticks(0);
//wait(y);
}
void Ph2(void)
{
- Phase1.write(0);
- Phase2.write(duty);
- Phase3.write(0);
- Phase4.write(0);
+ Phase1.pulsewidth_ticks(0);
+ Phase2.pulsewidth_ticks(PWMduty);
+ Phase3.pulsewidth_ticks(0);
+ Phase4.pulsewidth_ticks(0);
//wait(x);
//pc.printf("Phase 2 = %i\n\r", wheel.getPulses());
}
void Ph23 (void)
{
- Phase1.write(0);
- Phase2.write(duty);
- Phase3.write(duty);
- Phase4.write(0);
+ Phase1.pulsewidth_ticks(0);
+ Phase2.pulsewidth_ticks(PWMduty);
+ Phase3.pulsewidth_ticks(PWMduty);
+ Phase4.pulsewidth_ticks(0);
//wait(y);
}
void Ph3(void)
{
- Phase1.write(0);
- Phase2.write(0);
- Phase3.write(duty);
- Phase4.write(0);
+ Phase1.pulsewidth_ticks(0);
+ Phase2.pulsewidth_ticks(0);
+ Phase3.pulsewidth_ticks(PWMduty);
+ Phase4.pulsewidth_ticks(0);
//wait(x);
//pc.printf("Phase 3 = %i\n\r", wheel.getPulses());
}
void Ph34 (void)
{
- Phase1.write(0);
- Phase2.write(0);
- Phase3.write(duty);
- Phase4.write(duty);
+ Phase1.pulsewidth_ticks(0);
+ Phase2.pulsewidth_ticks(0);
+ Phase3.pulsewidth_ticks(PWMduty);
+ Phase4.pulsewidth_ticks(PWMduty);
//wait(y);
}
void Ph4(void)
{
- Phase1.write(0);
- Phase2.write(0);
- Phase3.write(0);
- Phase4.write(duty);
+ Phase1.pulsewidth_ticks(0);
+ Phase2.pulsewidth_ticks(0);
+ Phase3.pulsewidth_ticks(0);
+ Phase4.pulsewidth_ticks(PWMduty);
//wait(x);
//pc.printf("Phase 4 = %i\n\r", wheel.getPulses());
}
void Ph41 (void)
{
- Phase1.write(duty);
- Phase2.write(0);
- Phase3.write(0);
- Phase4.write(duty);
+ Phase1.pulsewidth_ticks(PWMduty);
+ Phase2.pulsewidth_ticks(0);
+ Phase3.pulsewidth_ticks(0);
+ Phase4.pulsewidth_ticks(PWMduty);
//wait(y);
}
void Initialisation (void)
{
- Phase1.write(0);
- Phase2.write(0);
- Phase3.write(0);
- Phase4.write(0);
+ Phase1.pulsewidth_ticks(0);
+ Phase2.pulsewidth_ticks(0);
+ Phase3.pulsewidth_ticks(0);
+ Phase4.pulsewidth_ticks(0);
led1 = 0;
led2 = 0;
led3 = 0;
@@ -389,6 +399,14 @@
// SetPoint = 100;
// }
}
+ if(c == 'p')
+ {
+ duty = duty+0.1;
+ }
+ if(c == 'l')
+ {
+ duty = duty-0.1;
+ }
}
}
@@ -402,6 +420,7 @@
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());
}
@@ -409,14 +428,18 @@
void VelocityLoop (void)
{
diff = SetPoint - rpm;
- duty = duty + (diff*0.00005);
- if (duty > 0.9)
+ duty = duty + (diff*0.01);
+
+
+ if (duty > 19)
{
- duty = 0.9;
+ duty = 19;
}
- if (duty <0.1)
+ if (duty <2)
{
- duty = 0.1;
+ duty = 2;
}
- pc.printf("duty = %f, SetPoint = %i, rpm = %i\n\r", duty, SetPoint, rpm);
+ PWMduty = (int) duty;
+ pc.printf("duty = %f, PWMduty = %i, SetPoint = %i, rpm = %i\n\r", duty, PWMduty, SetPoint, rpm);
+
}
\ No newline at end of file