TRR 2018 / Mbed 2 deprecated biniou-TRR2019-DLVV

Dependencies:   mbed MPU6050

Committer:
GaspardD
Date:
Sun Sep 29 14:58:03 2019 +0000
Revision:
4:efa207509f63
Parent:
3:1b7eb426247e
Child:
5:8bbe640528bc
algo fonctionnel direction + esc rotation a droite 10 sec a vitesse minimale

Who changed what in which revision?

UserRevisionLine numberNew contents of line
GaspardD 1:8faddee0e52f 1 #include "sm_esc.h"
GaspardD 1:8faddee0e52f 2
GaspardD 1:8faddee0e52f 3 PwmOut pwm_ESC(PD_12);
GaspardD 1:8faddee0e52f 4 DigitalOut relay_ESC(PG_0);
GaspardD 1:8faddee0e52f 5 E_STATE_ESC e_stateESC;
GaspardD 1:8faddee0e52f 6
GaspardD 1:8faddee0e52f 7 void init_sm_esc()
GaspardD 1:8faddee0e52f 8 {
GaspardD 1:8faddee0e52f 9 e_stateESC = ESC_DISABLED;
GaspardD 1:8faddee0e52f 10 return;
GaspardD 1:8faddee0e52f 11 }
GaspardD 1:8faddee0e52f 12
GaspardD 1:8faddee0e52f 13 void update_sm_esc()
GaspardD 1:8faddee0e52f 14 {
GaspardD 3:1b7eb426247e 15 E_STATE_ESC next_state = e_stateESC;
GaspardD 1:8faddee0e52f 16
GaspardD 1:8faddee0e52f 17 switch(e_stateESC) {
GaspardD 1:8faddee0e52f 18 case ESC_DISABLED:
GaspardD 3:1b7eb426247e 19 if(b_UTILS_flag_button && !b_UTILS_flag_emergency_stop) {
GaspardD 1:8faddee0e52f 20 next_state = ESC_INIT;
GaspardD 1:8faddee0e52f 21 }
GaspardD 1:8faddee0e52f 22 break;
GaspardD 1:8faddee0e52f 23 case ESC_INIT:
GaspardD 1:8faddee0e52f 24 next_state = ESC_COMMAND;
GaspardD 1:8faddee0e52f 25 break;
GaspardD 1:8faddee0e52f 26 case ESC_COMMAND:
GaspardD 1:8faddee0e52f 27 if(b_UTILS_flag_emergency_stop)
GaspardD 1:8faddee0e52f 28 {
GaspardD 1:8faddee0e52f 29 next_state = ESC_DISABLED;
GaspardD 1:8faddee0e52f 30 }
GaspardD 1:8faddee0e52f 31 break;
GaspardD 1:8faddee0e52f 32 default:
GaspardD 1:8faddee0e52f 33 break;
GaspardD 1:8faddee0e52f 34 }
GaspardD 1:8faddee0e52f 35
GaspardD 1:8faddee0e52f 36 e_stateESC = next_state;
GaspardD 1:8faddee0e52f 37 return;
GaspardD 1:8faddee0e52f 38 }
GaspardD 1:8faddee0e52f 39
GaspardD 1:8faddee0e52f 40 void output_sm_esc()
GaspardD 1:8faddee0e52f 41 {
GaspardD 1:8faddee0e52f 42 switch(e_stateESC) {
GaspardD 1:8faddee0e52f 43 case ESC_DISABLED:
GaspardD 3:1b7eb426247e 44 if(b_UTILS_flag_emergency_stop){
GaspardD 4:efa207509f63 45 pc.printf("EMERGENCY STOP\r\n");
GaspardD 4:efa207509f63 46 b_UTILS_flag_emergency_stop = false;
GaspardD 3:1b7eb426247e 47 relay_ESC = 1;
GaspardD 3:1b7eb426247e 48 wait(0.5);
GaspardD 3:1b7eb426247e 49 relay_ESC = 0;
GaspardD 3:1b7eb426247e 50 }
GaspardD 1:8faddee0e52f 51 break;
GaspardD 4:efa207509f63 52
GaspardD 1:8faddee0e52f 53 case ESC_INIT:
GaspardD 4:efa207509f63 54 pc.printf("Init esc\r\n");
GaspardD 4:efa207509f63 55 b_UTILS_flag_button = false;
GaspardD 3:1b7eb426247e 56 pwm_ESC.period_ms(ESC_PERIOD_DURATION_MS); //20 ms is default
GaspardD 3:1b7eb426247e 57 pwm_ESC.pulsewidth_us(0);
GaspardD 3:1b7eb426247e 58
GaspardD 1:8faddee0e52f 59 relay_ESC = 1;
GaspardD 3:1b7eb426247e 60 wait(0.5);
GaspardD 3:1b7eb426247e 61 relay_ESC = 0;
GaspardD 3:1b7eb426247e 62 wait(0.1);
GaspardD 3:1b7eb426247e 63
GaspardD 3:1b7eb426247e 64 pwm_ESC.pulsewidth_us(ESC_PULSE_MIN_US);
GaspardD 3:1b7eb426247e 65 wait(3);
GaspardD 3:1b7eb426247e 66 pwm_ESC.pulsewidth_us(ESC_PULSE_MAX_US);
GaspardD 3:1b7eb426247e 67 wait(1);
GaspardD 3:1b7eb426247e 68 pwm_ESC.pulsewidth_us(ESC_PULSE_IDLE_US);
GaspardD 1:8faddee0e52f 69 wait(1);
GaspardD 1:8faddee0e52f 70 break;
GaspardD 4:efa207509f63 71
GaspardD 1:8faddee0e52f 72 case ESC_COMMAND:
GaspardD 1:8faddee0e52f 73 wait(1);
GaspardD 4:efa207509f63 74
GaspardD 4:efa207509f63 75 pc.printf("send pulse 1620 to esc\r\n");
GaspardD 4:efa207509f63 76 pwm_ESC.pulsewidth_us(1620);
GaspardD 4:efa207509f63 77 wait(10);
GaspardD 3:1b7eb426247e 78
GaspardD 4:efa207509f63 79 pc.printf("emergency stop flag raised\r\n");
GaspardD 1:8faddee0e52f 80 b_UTILS_flag_emergency_stop = true;
GaspardD 1:8faddee0e52f 81 break;
GaspardD 1:8faddee0e52f 82 default:
GaspardD 1:8faddee0e52f 83 break;
GaspardD 1:8faddee0e52f 84 }
GaspardD 1:8faddee0e52f 85
GaspardD 1:8faddee0e52f 86 return;
GaspardD 1:8faddee0e52f 87 }