12/mar ignicao funcionando
Dependencies: mbed reScale TextLCD
main.cpp@6:111a7f1b978f, 2019-03-01 (annotated)
- Committer:
- Marcelocostanzo
- Date:
- Fri Mar 01 10:07:05 2019 +0000
- Revision:
- 6:111a7f1b978f
- Parent:
- 5:e04419b1e369
- Child:
- 7:5cd0b64dea2a
projeto base
Who changed what in which revision?
User | Revision | Line number | New 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 | } |