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_working1.cpp.txt
- Revision:
- 0:0d0af930b49a
diff -r 000000000000 -r 0d0af930b49a main_working1.cpp.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main_working1.cpp.txt Tue Mar 17 04:29:11 2015 +0000 @@ -0,0 +1,184 @@ +// Revision 4 PWM Added ----- WORK IN PROGRESS + +#include "mbed.h" + + +#define EncRes 256 +#define DefaultGap 1 +#define Quad0 0 +#define Quad1 EncRes/4 +#define Quad2 EncRes/2 +#define Quad3 Quad1 + Quad2 +#define Quad4 EncRes +#define Quad5 EncRes + Quad1 + + +#define OPENLOOP 0 +#define CLOSEDLOOP 1 +#define MODE CLOSEDLOOP + +//Ticker DebugDisplay; +//Serial pc(PTE0, PTE1); + +DigitalOut LEDR(PTB18); +DigitalOut Cyl_1(PTD1); +DigitalOut Cyl_2(PTD3); +DigitalOut Cyl_3(PTD2); +DigitalOut Cyl_4(PTD0); +DigitalOut Cyl_5(PTD5); +DigitalOut Cyl_6(PTA13); +DigitalOut Cyl_7(PTC9); +DigitalOut Cyl_8(PTC8); + +// User Rotary Encoder definition +/* +PwmOut LEDRed(PTA5); +PwmOut LEDGreen(PTA4); +PwmOut LEDBlue(PTA12); +InterruptIn UserEnc1A(PTD4); +DigitalIn UserEnc1B(PTA12); +DigitalIn PB1(PTC3); */ +DigitalOut ANODE(PTC6); +DigitalOut COMMON(PTC5); + +//--------------------------- + +InterruptIn CrankAngleEncA(PTA1); +DigitalIn CrankAngleEncB(PTC0); + + +Timer t; + +char CylinderFired = 0; +uint8_t CrankAngle, CrankAngleChange; +uint8_t Gap = DefaultGap; +float Throttle; +// Max Speed is currently about 15RPS, 923RPM, 65ms/rev, 254uS/Encoder pulse +// 1000us interval = 3.9RPS. 0.5RPS = 7813uS encoder pulse interval +uint16_t TargetInterval = 400; +int elapseTime; + +#define PWMPeriod 1000 +#define DefaultPWMPercent 0.5 + +//Throttle = DefaultPWMPercent; +//Cyl_1.period_us = PWMPeriod ; Cyl_1 = Throttle; +//Cyl_2.period_us = PWMPeriod ; Cyl_2 = Throttle; +//Cyl_3.period_us = PWMPeriod ; Cyl_3 = Throttle; +//Cyl_4.period_us = PWMPeriod ; Cyl_4 = Throttle; +//Cyl_5.period_us = PWMPeriod ; Cyl_5 = Throttle; +//Cyl_6.period_us = PWMPeriod ; Cyl_6 = Throttle; +//Cyl_7.period_us = PWMPeriod ; Cyl_7 = Throttle; +//Cyl_8.period_us = PWMPeriod ; Cyl_8 = Throttle; + +/* +void UserEnc1_pulse(void) +{ + if (UserEnc1B && (TargetInterval < 8000)) + TargetInterval += 100; + else if (TargetInterval > 200) + TargetInterval -= 100; + +} +*/ + +void CrankAngleEnc_pulse(void) +{ + if (CrankAngleEncB) + CrankAngle++; + else + CrankAngle--; + //elapseTime = t.read_us(); t.reset(); + CrankAngleChange = true; +} + + +//void DispUpdate(void) { +// pc.printf("%d : %d : %d\n\r",CrankAngle,CylindersFired1,CylindersFired2);} + +int main() { + ANODE = 1 ; COMMON = 0; + LEDR = 0; + CrankAngleChange = true; +// pc.baud(57600); + // pc.printf("V8-Solenoid Engine..........."); + + + Cyl_1 = 0; Cyl_2 = 0; Cyl_3 = 0; Cyl_4 = 0; + Cyl_5 = 0; Cyl_6 = 1; Cyl_7 = 0; Cyl_8 = 0; + wait_ms(500); + Cyl_2 = 1; Cyl_5 = 1;Cyl_6 = 0; + wait_ms(1000); + CrankAngle = 0; + Cyl_2 = 0; Cyl_5 = 0; + +// DebugDisplay.attach(&DispUpdate,2.0); + CrankAngleEncA.rise(&CrankAngleEnc_pulse); +// UserEnc1A.rise(&UserEnc1_pulse); + +// pc.printf("Initialized!\n"); + + while(true) { + + if(CrankAngleChange){ + + // Pair#2 270 deg to 90 deg +// if ( (CrankAngle < ((int8_t)Quad1-Gap-Taper) ) || ( (CrankAngle<(Quad5-Gap-Taper)) && (CrankAngle>(Quad3+Gap)) ) ) + if ( (CrankAngle < (Quad1-Gap)) || (CrankAngle>(Quad3+Gap)) ) { + Cyl_1 = 0; Cyl_4 = 0; + Cyl_7 = 1; Cyl_6 = 1; + } + + //Pair#4 90 deg to 270 + else if ((CrankAngle>(Quad1+Gap)) && (CrankAngle<(Quad3-Gap))) { + Cyl_7 = 0; Cyl_6 = 0; + Cyl_4 = 1; Cyl_1 = 1; + } + else { + Cyl_1 = 0; + Cyl_4 = 0; + Cyl_6 = 0; + Cyl_7 = 0; + } + + + //Pair#3 0-180 deg + if ((CrankAngle>Gap) && (CrankAngle<(Quad2-Gap))) { + Cyl_2 = 0; Cyl_5 = 0; + Cyl_8 = 1; Cyl_3 = 1; + } + // Pair#1 180-360 deg + else if ((CrankAngle>(Quad2+Gap)) && (CrankAngle<(Quad4-Gap))) { + Cyl_3 = 0; Cyl_8 = 0; + Cyl_2 = 1; Cyl_5 = 1; + } + else { + Cyl_3 = 0; + Cyl_8 = 0; + Cyl_2 = 0; + Cyl_5 = 0; + } + + CrankAngleChange = false; + + // Speed Control Section + + if (MODE == CLOSEDLOOP) { +/* + Error = TargetInterval - elapseTime; + ErrorPrime = Error - PreviousError; + CompensationSignal = pGain*Error + dGain*ErrorPrime; + PreviousError = Error; +*/ + } + else { + + Throttle = TargetInterval; + + } + } //if crankAngleChange + + + }//main loop - while(true) +}//main +