tbi fiat com controle feedforward PID

Dependencies:   mbed reScale TextLCD

Committer:
Marcelocostanzo
Date:
Fri Mar 01 10:07:05 2019 +0000
Revision:
6:111a7f1b978f
Parent:
5:e04419b1e369
projeto base

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:b5a9e0614efd 1 #include "mbed.h"
Marcelocostanzo 5:e04419b1e369 2 #include "reScale.h"
Marcelocostanzo 5:e04419b1e369 3
Marcelocostanzo 6:111a7f1b978f 4 #define KP 0.8f
Marcelocostanzo 6:111a7f1b978f 5 #define KI 1.0f
Marcelocostanzo 6:111a7f1b978f 6 #define KD 0.01f
Marcelocostanzo 6:111a7f1b978f 7 #define offset 0.02f
Marcelocostanzo 5:e04419b1e369 8
Marcelocostanzo 5:e04419b1e369 9
Marcelocostanzo 6:111a7f1b978f 10 AnalogIn SETPOINT(A0);
Marcelocostanzo 6:111a7f1b978f 11 AnalogIn TPS1(A2);
Marcelocostanzo 6:111a7f1b978f 12 AnalogIn TPS2(A3);
Marcelocostanzo 6:111a7f1b978f 13 Ticker flipper;
Marcelocostanzo 6:111a7f1b978f 14 DigitalOut controlLED(LED2);
Marcelocostanzo 6:111a7f1b978f 15 DigitalOut IN1A(D10);
Marcelocostanzo 6:111a7f1b978f 16 DigitalOut IN2A(D8);
Marcelocostanzo 6:111a7f1b978f 17 PwmOut TBI(D9);
Marcelocostanzo 6:111a7f1b978f 18
Marcelocostanzo 6:111a7f1b978f 19 //Timer t1;
Marcelocostanzo 4:9da4a46f38bc 20
Marcelocostanzo 6:111a7f1b978f 21 //Serial device(PB_6, PB_7); // tx, rx
Marcelocostanzo 6:111a7f1b978f 22 Serial device(USBTX, USBRX); // tx, rx
Marcelocostanzo 6:111a7f1b978f 23
Marcelocostanzo 6:111a7f1b978f 24 reScale _scale(0.0f,1.0f,0.09f,0.83f);
Marcelocostanzo 6:111a7f1b978f 25
Marcelocostanzo 6:111a7f1b978f 26 float pwm=0, erro=0, proporcional=0, integrador=0;
Marcelocostanzo 6:111a7f1b978f 27 float TPS1_VAL, SETPOINT_VAL=0, SETPOINT_scaled=0;
Marcelocostanzo 6:111a7f1b978f 28 bool flag=0;
Marcelocostanzo 6:111a7f1b978f 29
Marcelocostanzo 6:111a7f1b978f 30 void flip()
Marcelocostanzo 2:3c69c0772709 31 {
Marcelocostanzo 6:111a7f1b978f 32 flag=!flag;
Marcelocostanzo 6:111a7f1b978f 33 controlLED=!controlLED;
Marcelocostanzo 5:e04419b1e369 34 }
Marcelocostanzo 5:e04419b1e369 35
Marcelocostanzo 6:111a7f1b978f 36 void open()
Marcelocostanzo 6:111a7f1b978f 37 {
Marcelocostanzo 6:111a7f1b978f 38 IN1A=1;
Marcelocostanzo 6:111a7f1b978f 39 IN2A=0;
Marcelocostanzo 5:e04419b1e369 40 }
Marcelocostanzo 6:111a7f1b978f 41
Marcelocostanzo 6:111a7f1b978f 42 void close()
Marcelocostanzo 2:3c69c0772709 43 {
Marcelocostanzo 6:111a7f1b978f 44 IN1A=0;
Marcelocostanzo 6:111a7f1b978f 45 IN2A=1;
Marcelocostanzo 6:111a7f1b978f 46 }
Marcelocostanzo 2:3c69c0772709 47
Marcelocostanzo 6:111a7f1b978f 48 int main()
Marcelocostanzo 6:111a7f1b978f 49 {
Marcelocostanzo 6:111a7f1b978f 50 flipper.attach(&flip, 0.2);
Marcelocostanzo 6:111a7f1b978f 51 TBI.period(0.01f);
Marcelocostanzo 5:e04419b1e369 52
Marcelocostanzo 6:111a7f1b978f 53 IN1A=0;
Marcelocostanzo 6:111a7f1b978f 54 IN2A=0;
Marcelocostanzo 2:3c69c0772709 55
Marcelocostanzo 2:3c69c0772709 56 while(1)
Marcelocostanzo 6:111a7f1b978f 57 {
Marcelocostanzo 6:111a7f1b978f 58
Marcelocostanzo 6:111a7f1b978f 59 //t1.reset();
Marcelocostanzo 6:111a7f1b978f 60 //t1.start();
Marcelocostanzo 3:9d22aa32b223 61
Marcelocostanzo 6:111a7f1b978f 62 TPS1_VAL = TPS1.read();
Marcelocostanzo 6:111a7f1b978f 63 SETPOINT_VAL = SETPOINT.read();
Marcelocostanzo 6:111a7f1b978f 64
Marcelocostanzo 6:111a7f1b978f 65 SETPOINT_scaled = _scale.from(SETPOINT_VAL);
Marcelocostanzo 6:111a7f1b978f 66
Marcelocostanzo 6:111a7f1b978f 67 if(SETPOINT_scaled < 0.185f)
Marcelocostanzo 5:e04419b1e369 68 {
Marcelocostanzo 6:111a7f1b978f 69 close();
Marcelocostanzo 6:111a7f1b978f 70 erro = TPS1_VAL - SETPOINT_scaled;
Marcelocostanzo 6:111a7f1b978f 71 proporcional = erro * KP;
Marcelocostanzo 2:3c69c0772709 72 }
Marcelocostanzo 2:3c69c0772709 73
Marcelocostanzo 2:3c69c0772709 74 else
Marcelocostanzo 2:3c69c0772709 75 {
Marcelocostanzo 6:111a7f1b978f 76 open();
Marcelocostanzo 6:111a7f1b978f 77 erro = SETPOINT_scaled - TPS1_VAL;
Marcelocostanzo 6:111a7f1b978f 78 proporcional = erro * KP;
Marcelocostanzo 6:111a7f1b978f 79 }
Marcelocostanzo 6:111a7f1b978f 80
Marcelocostanzo 6:111a7f1b978f 81 if(erro>1 || erro<-1)
Marcelocostanzo 6:111a7f1b978f 82 {
Marcelocostanzo 6:111a7f1b978f 83 //do nothing
Marcelocostanzo 2:3c69c0772709 84 }
Marcelocostanzo 5:e04419b1e369 85
Marcelocostanzo 6:111a7f1b978f 86 else
Marcelocostanzo 6:111a7f1b978f 87 {
Marcelocostanzo 6:111a7f1b978f 88 integrador = integrador + ((erro * KI)*0.01f);
Marcelocostanzo 6:111a7f1b978f 89 }
Marcelocostanzo 6:111a7f1b978f 90
Marcelocostanzo 6:111a7f1b978f 91 if(integrador >=1)
Marcelocostanzo 6:111a7f1b978f 92 integrador = 1;
Marcelocostanzo 6:111a7f1b978f 93
Marcelocostanzo 6:111a7f1b978f 94 if(integrador <=-1)
Marcelocostanzo 6:111a7f1b978f 95 integrador = -1;
Marcelocostanzo 6:111a7f1b978f 96
Marcelocostanzo 5:e04419b1e369 97
Marcelocostanzo 6:111a7f1b978f 98 pwm = proporcional + integrador;
Marcelocostanzo 6:111a7f1b978f 99 TBI = pwm + offset;
Marcelocostanzo 6:111a7f1b978f 100
Marcelocostanzo 6:111a7f1b978f 101
Marcelocostanzo 6:111a7f1b978f 102 if(flag==1)
Marcelocostanzo 6:111a7f1b978f 103 {
Marcelocostanzo 6:111a7f1b978f 104 device.printf("\n\rPedal: %.4f",SETPOINT_scaled);
Marcelocostanzo 6:111a7f1b978f 105 device.printf("\n\rTPS: %.4f",TPS1_VAL);
Marcelocostanzo 6:111a7f1b978f 106 device.printf("\n\rErro: %.4f",erro);
Marcelocostanzo 6:111a7f1b978f 107 device.printf("\n\rPWM: %.4f",pwm);
Marcelocostanzo 6:111a7f1b978f 108 //device.printf("integrador: %f\n",integrador);
Marcelocostanzo 6:111a7f1b978f 109 //device.printf("proporcional: %f\n",proporcional);
Marcelocostanzo 6:111a7f1b978f 110 flag=0;
Marcelocostanzo 6:111a7f1b978f 111 }
Marcelocostanzo 6:111a7f1b978f 112
Marcelocostanzo 6:111a7f1b978f 113 //t1.stop();
Marcelocostanzo 6:111a7f1b978f 114 //printf("O ciclo levou: %i uS \n\r", t1.read_us());
Marcelocostanzo 6:111a7f1b978f 115 wait(0.01);
mbed_official 0:b5a9e0614efd 116 }
Marcelocostanzo 2:3c69c0772709 117 }