TRR 2018 / Mbed 2 deprecated biniou-TRR2019-DLVV

Dependencies:   mbed MPU6050

Committer:
GaspardD
Date:
Sun Sep 29 17:09:48 2019 +0000
Revision:
5:8bbe640528bc
Parent:
4:efa207509f63
Child:
6:ab9f3695633f
jumper detection

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 5:8bbe640528bc 6 bool b_chassis_with_pushbutton;
GaspardD 1:8faddee0e52f 7
GaspardD 1:8faddee0e52f 8 void init_sm_esc()
GaspardD 1:8faddee0e52f 9 {
GaspardD 1:8faddee0e52f 10 e_stateESC = ESC_DISABLED;
GaspardD 5:8bbe640528bc 11 if(chassisMode.read()){
GaspardD 5:8bbe640528bc 12 b_chassis_with_pushbutton = true;
GaspardD 5:8bbe640528bc 13 }
GaspardD 5:8bbe640528bc 14 else
GaspardD 5:8bbe640528bc 15 {
GaspardD 5:8bbe640528bc 16 b_chassis_with_pushbutton = false;
GaspardD 5:8bbe640528bc 17 }
GaspardD 1:8faddee0e52f 18 return;
GaspardD 1:8faddee0e52f 19 }
GaspardD 1:8faddee0e52f 20
GaspardD 1:8faddee0e52f 21 void update_sm_esc()
GaspardD 1:8faddee0e52f 22 {
GaspardD 3:1b7eb426247e 23 E_STATE_ESC next_state = e_stateESC;
GaspardD 1:8faddee0e52f 24
GaspardD 1:8faddee0e52f 25 switch(e_stateESC) {
GaspardD 1:8faddee0e52f 26 case ESC_DISABLED:
GaspardD 3:1b7eb426247e 27 if(b_UTILS_flag_button && !b_UTILS_flag_emergency_stop) {
GaspardD 1:8faddee0e52f 28 next_state = ESC_INIT;
GaspardD 1:8faddee0e52f 29 }
GaspardD 1:8faddee0e52f 30 break;
GaspardD 1:8faddee0e52f 31 case ESC_INIT:
GaspardD 1:8faddee0e52f 32 next_state = ESC_COMMAND;
GaspardD 1:8faddee0e52f 33 break;
GaspardD 1:8faddee0e52f 34 case ESC_COMMAND:
GaspardD 5:8bbe640528bc 35 if(b_UTILS_flag_emergency_stop) {
GaspardD 5:8bbe640528bc 36 next_state = ESC_DISABLED;
GaspardD 5:8bbe640528bc 37 }
GaspardD 1:8faddee0e52f 38 break;
GaspardD 1:8faddee0e52f 39 default:
GaspardD 5:8bbe640528bc 40 break;
GaspardD 1:8faddee0e52f 41 }
GaspardD 1:8faddee0e52f 42
GaspardD 1:8faddee0e52f 43 e_stateESC = next_state;
GaspardD 1:8faddee0e52f 44 return;
GaspardD 1:8faddee0e52f 45 }
GaspardD 1:8faddee0e52f 46
GaspardD 1:8faddee0e52f 47 void output_sm_esc()
GaspardD 1:8faddee0e52f 48 {
GaspardD 5:8bbe640528bc 49 switch(e_stateESC) {
GaspardD 1:8faddee0e52f 50 case ESC_DISABLED:
GaspardD 5:8bbe640528bc 51 if(b_UTILS_flag_emergency_stop) {
GaspardD 4:efa207509f63 52 pc.printf("EMERGENCY STOP\r\n");
GaspardD 4:efa207509f63 53 b_UTILS_flag_emergency_stop = false;
GaspardD 5:8bbe640528bc 54 if(b_chassis_with_pushbutton) {
GaspardD 5:8bbe640528bc 55 relay_ESC = 1;
GaspardD 5:8bbe640528bc 56 wait(0.5);
GaspardD 5:8bbe640528bc 57 }
GaspardD 3:1b7eb426247e 58 relay_ESC = 0;
GaspardD 3:1b7eb426247e 59 }
GaspardD 1:8faddee0e52f 60 break;
GaspardD 5:8bbe640528bc 61
GaspardD 1:8faddee0e52f 62 case ESC_INIT:
GaspardD 4:efa207509f63 63 pc.printf("Init esc\r\n");
GaspardD 4:efa207509f63 64 b_UTILS_flag_button = false;
GaspardD 3:1b7eb426247e 65 pwm_ESC.period_ms(ESC_PERIOD_DURATION_MS); //20 ms is default
GaspardD 3:1b7eb426247e 66 pwm_ESC.pulsewidth_us(0);
GaspardD 5:8bbe640528bc 67
GaspardD 1:8faddee0e52f 68 relay_ESC = 1;
GaspardD 5:8bbe640528bc 69 if(b_chassis_with_pushbutton) {
GaspardD 3:1b7eb426247e 70 wait(0.5);
GaspardD 3:1b7eb426247e 71 relay_ESC = 0;
GaspardD 5:8bbe640528bc 72 }
GaspardD 3:1b7eb426247e 73 wait(0.1);
GaspardD 5:8bbe640528bc 74
GaspardD 3:1b7eb426247e 75 pwm_ESC.pulsewidth_us(ESC_PULSE_MIN_US);
GaspardD 3:1b7eb426247e 76 wait(3);
GaspardD 3:1b7eb426247e 77 pwm_ESC.pulsewidth_us(ESC_PULSE_MAX_US);
GaspardD 3:1b7eb426247e 78 wait(1);
GaspardD 3:1b7eb426247e 79 pwm_ESC.pulsewidth_us(ESC_PULSE_IDLE_US);
GaspardD 1:8faddee0e52f 80 wait(1);
GaspardD 1:8faddee0e52f 81 break;
GaspardD 5:8bbe640528bc 82
GaspardD 1:8faddee0e52f 83 case ESC_COMMAND:
GaspardD 1:8faddee0e52f 84 wait(1);
GaspardD 5:8bbe640528bc 85 pwm_ESC.pulsewidth_us(1700);
GaspardD 5:8bbe640528bc 86 wait(0.7);
GaspardD 4:efa207509f63 87 pc.printf("send pulse 1620 to esc\r\n");
GaspardD 4:efa207509f63 88 pwm_ESC.pulsewidth_us(1620);
GaspardD 4:efa207509f63 89 wait(10);
GaspardD 5:8bbe640528bc 90
GaspardD 4:efa207509f63 91 pc.printf("emergency stop flag raised\r\n");
GaspardD 1:8faddee0e52f 92 b_UTILS_flag_emergency_stop = true;
GaspardD 1:8faddee0e52f 93 break;
GaspardD 1:8faddee0e52f 94 default:
GaspardD 5:8bbe640528bc 95 break;
GaspardD 1:8faddee0e52f 96 }
GaspardD 5:8bbe640528bc 97
GaspardD 1:8faddee0e52f 98 return;
GaspardD 1:8faddee0e52f 99 }