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_working1.cpp.txt
- Committer:
- JoeMiller
- Date:
- 2015-03-21
- Revision:
- 2:de9b637d8cca
- Parent:
- 0:0d0af930b49a
File content as of revision 2:de9b637d8cca:
// 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