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.
Revision 7:8575dc24281f, committed 2019-04-11
- Comitter:
- Marcelocostanzo
- Date:
- Thu Apr 11 13:21:15 2019 +0000
- Parent:
- 6:111a7f1b978f
- Commit message:
- Programa sem limites de tempo de injecao e rotacao
Changed in this revision
--- a/TextLCD.lib Fri Mar 01 10:07:05 2019 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://os.mbed.com/teams/Sz_Insper/code/TextLCD/#14d6edd19f7e
--- a/main.cpp Fri Mar 01 10:07:05 2019 +0000
+++ b/main.cpp Thu Apr 11 13:21:15 2019 +0000
@@ -1,31 +1,21 @@
#include "mbed.h"
-#include "reScale.h"
-#define KP 0.8f
-#define KI 1.0f
-#define KD 0.01f
-#define offset 0.02f
-
+Ticker flipper;
-AnalogIn SETPOINT(A0);
-AnalogIn TPS1(A2);
-AnalogIn TPS2(A3);
-Ticker flipper;
-DigitalOut controlLED(LED2);
-DigitalOut IN1A(D10);
-DigitalOut IN2A(D8);
-PwmOut TBI(D9);
+DigitalOut controlLED(D13);
+DigitalOut inj_1(D2);
+DigitalOut inj_2(D3);
+DigitalOut inj_3(D4);
+DigitalOut inj_4(D5);
//Timer t1;
+Timer t2;
-//Serial device(PB_6, PB_7); // tx, rx
Serial device(USBTX, USBRX); // tx, rx
-reScale _scale(0.0f,1.0f,0.09f,0.83f);
-
-float pwm=0, erro=0, proporcional=0, integrador=0;
-float TPS1_VAL, SETPOINT_VAL=0, SETPOINT_scaled=0;
-bool flag=0;
+bool flag;
+float RPS = 0;
+int inj_time = 10000;
void flip()
{
@@ -33,85 +23,145 @@
controlLED=!controlLED;
}
-void open()
+void set_parameters()
{
- IN1A=1;
- IN2A=0;
+ char c[8];
+ char parameter = 0x00;
+ int i = 0;
+ int value;
+ int RPM;
+
+ parameter = device.getc();
+
+ if((parameter == 'T') || (parameter == 'R')) //T or R
+ {
+ while(c[i-1] != '\n')
+ {
+ c[i] = device.getc();
+ i++;
+ }
+ }
+
+ else
+ {
+ device.printf("Invalid command. Txxxxx to set injection time, Rxxxxx to set RPM\n\r");
+ device.fsync();
+ }
+
+ if(parameter == 'T')
+ {
+ value = atoi(c);
+ inj_time = value;
+
+ device.printf("Inj Time %i uS\n\r",inj_time);
+ }
+
+ if(parameter == 'R')
+ {
+ value = atoi(c);
+
+ RPM = value;
+
+ RPS = RPM / 60.0f;
+
+ RPS = RPS * 2; //multiplicador por 2 pois um ciclo otto são 2 voltas
+
+ RPS = 1.0f / RPS;
+
+ flipper.attach(&flip, RPS);
+
+ device.printf("%f S\n\r",RPS);
+ }
}
-void close()
-{
- IN1A=0;
- IN2A=1;
-}
-
int main()
{
- flipper.attach(&flip, 0.2);
- TBI.period(0.01f);
+ bool valid_pulse;
+ int inj_counter = 1;
- IN1A=0;
- IN2A=0;
+ RPS = 1.0f;
+ flipper.attach(&flip, RPS);
- while(1)
+ device.printf("Start\n\r");
+
+ while(1)
{
//t1.reset();
- //t1.start();
-
- TPS1_VAL = TPS1.read();
- SETPOINT_VAL = SETPOINT.read();
+ //t1.start();
+
+ if(device.readable())
+ {
+ set_parameters();
+ }
- SETPOINT_scaled = _scale.from(SETPOINT_VAL);
- if(SETPOINT_scaled < 0.185f)
+ if(inj_counter > 4)
{
- close();
- erro = TPS1_VAL - SETPOINT_scaled;
- proporcional = erro * KP;
+ inj_counter = 1;
}
- else
+ if(t2.read_us() > inj_time)
+ {
+ t2.stop();
+ inj_1 = 0;
+ inj_2 = 0;
+ inj_3 = 0;
+ inj_4 = 0;
+ }
+ if((inj_counter == 1) && (valid_pulse == 1))
{
- open();
- erro = SETPOINT_scaled - TPS1_VAL;
- proporcional = erro * KP;
+ valid_pulse = 0;
+ inj_1 = 1;
+ inj_2 = 0;
+ inj_3 = 0;
+ inj_4 = 0;
+ t2.reset();
+ t2.start();
}
-
- if(erro>1 || erro<-1)
+
+ if((inj_counter == 2) && (valid_pulse == 1))
{
- //do nothing
+ valid_pulse = 0;
+ inj_1 = 0;
+ inj_2 = 0;
+ inj_3 = 1;
+ inj_4 = 0;
+ t2.reset();
+ t2.start();
}
- else
+ if((inj_counter == 3) && (valid_pulse == 1))
{
- integrador = integrador + ((erro * KI)*0.01f);
+ valid_pulse = 0;
+ inj_1 = 0;
+ inj_2 = 0;
+ inj_3 = 0;
+ inj_4 = 1;
+ t2.reset();
+ t2.start();
}
- if(integrador >=1)
- integrador = 1;
-
- if(integrador <=-1)
- integrador = -1;
-
-
- pwm = proporcional + integrador;
- TBI = pwm + offset;
+ if((inj_counter == 4) && (valid_pulse == 1))
+ {
+ valid_pulse = 0;
+ inj_1 = 0;
+ inj_2 = 1;
+ inj_3 = 0;
+ inj_4 = 0;
+ t2.reset();
+ t2.start();
+ }
if(flag==1)
{
- device.printf("\n\rPedal: %.4f",SETPOINT_scaled);
- device.printf("\n\rTPS: %.4f",TPS1_VAL);
- device.printf("\n\rErro: %.4f",erro);
- device.printf("\n\rPWM: %.4f",pwm);
- //device.printf("integrador: %f\n",integrador);
- //device.printf("proporcional: %f\n",proporcional);
+ inj_counter++;
flag=0;
+ valid_pulse = 1;
}
//t1.stop();
//printf("O ciclo levou: %i uS \n\r", t1.read_us());
- wait(0.01);
}
}
\ No newline at end of file
--- a/mbed.bld Fri Mar 01 10:07:05 2019 +0000 +++ b/mbed.bld Thu Apr 11 13:21:15 2019 +0000 @@ -1,1 +1,1 @@ -https://os.mbed.com/users/mbed_official/code/mbed/builds/5aab5a7997ee \ No newline at end of file +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file
--- a/reScale.lib Fri Mar 01 10:07:05 2019 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://os.mbed.com/users/c0ax/code/reScale/#ebb951147122