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.
sm_esc.cpp@5:8bbe640528bc, 2019-09-29 (annotated)
- 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?
User | Revision | Line number | New 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 | } |