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@2:e9d928fd327a, 2019-09-28 (annotated)
- Committer:
- GaspardD
- Date:
- Sat Sep 28 22:58:02 2019 +0000
- Revision:
- 2:e9d928fd327a
- Parent:
- 1:8faddee0e52f
- Child:
- 3:1b7eb426247e
servo state machine
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 | 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 | 1:8faddee0e52f | 15 | E_STATE_ESC next_state; |
GaspardD | 1:8faddee0e52f | 16 | |
GaspardD | 1:8faddee0e52f | 17 | switch(e_stateESC) { |
GaspardD | 1:8faddee0e52f | 18 | case ESC_DISABLED: |
GaspardD | 1:8faddee0e52f | 19 | if(b_UTILS_flag_button) { |
GaspardD | 1:8faddee0e52f | 20 | next_state = ESC_INIT; |
GaspardD | 1:8faddee0e52f | 21 | b_UTILS_flag_button = false; |
GaspardD | 1:8faddee0e52f | 22 | } |
GaspardD | 1:8faddee0e52f | 23 | break; |
GaspardD | 1:8faddee0e52f | 24 | case ESC_INIT: |
GaspardD | 1:8faddee0e52f | 25 | next_state = ESC_COMMAND; |
GaspardD | 1:8faddee0e52f | 26 | break; |
GaspardD | 1:8faddee0e52f | 27 | case ESC_COMMAND: |
GaspardD | 1:8faddee0e52f | 28 | if(b_UTILS_flag_emergency_stop) |
GaspardD | 1:8faddee0e52f | 29 | { |
GaspardD | 1:8faddee0e52f | 30 | next_state = ESC_DISABLED; |
GaspardD | 1:8faddee0e52f | 31 | } |
GaspardD | 1:8faddee0e52f | 32 | break; |
GaspardD | 1:8faddee0e52f | 33 | default: |
GaspardD | 1:8faddee0e52f | 34 | break; |
GaspardD | 1:8faddee0e52f | 35 | } |
GaspardD | 1:8faddee0e52f | 36 | |
GaspardD | 1:8faddee0e52f | 37 | e_stateESC = next_state; |
GaspardD | 1:8faddee0e52f | 38 | return; |
GaspardD | 1:8faddee0e52f | 39 | } |
GaspardD | 1:8faddee0e52f | 40 | |
GaspardD | 1:8faddee0e52f | 41 | void output_sm_esc() |
GaspardD | 1:8faddee0e52f | 42 | { |
GaspardD | 1:8faddee0e52f | 43 | switch(e_stateESC) { |
GaspardD | 1:8faddee0e52f | 44 | case ESC_DISABLED: |
GaspardD | 1:8faddee0e52f | 45 | relay_ESC = 0; |
GaspardD | 1:8faddee0e52f | 46 | break; |
GaspardD | 1:8faddee0e52f | 47 | case ESC_INIT: |
GaspardD | 2:e9d928fd327a | 48 | pc.printf("init the ESC"); |
GaspardD | 1:8faddee0e52f | 49 | relay_ESC = 1; |
GaspardD | 1:8faddee0e52f | 50 | wait(0.2); |
GaspardD | 1:8faddee0e52f | 51 | pwm_ESC.period_ms(ESC_PERIOD_DURATION_MS); //20 ms is default |
GaspardD | 1:8faddee0e52f | 52 | pwm_ESC.pulsewidth_us(600); |
GaspardD | 1:8faddee0e52f | 53 | wait(1); |
GaspardD | 1:8faddee0e52f | 54 | break; |
GaspardD | 1:8faddee0e52f | 55 | case ESC_COMMAND: |
GaspardD | 1:8faddee0e52f | 56 | pc.printf("send pulse 1500 to esc"); |
GaspardD | 1:8faddee0e52f | 57 | pwm_ESC.pulsewidth_us(1500); |
GaspardD | 1:8faddee0e52f | 58 | wait(1); |
GaspardD | 1:8faddee0e52f | 59 | pc.printf("send pulse 1600 to esc"); |
GaspardD | 1:8faddee0e52f | 60 | pwm_ESC.pulsewidth_us(1600); |
GaspardD | 1:8faddee0e52f | 61 | wait(1); |
GaspardD | 1:8faddee0e52f | 62 | pc.printf("send pulse 1700 to esc"); |
GaspardD | 1:8faddee0e52f | 63 | pwm_ESC.pulsewidth_us(1700); |
GaspardD | 1:8faddee0e52f | 64 | wait(1); |
GaspardD | 1:8faddee0e52f | 65 | pc.printf("send pulse 1800 to esc"); |
GaspardD | 1:8faddee0e52f | 66 | pwm_ESC.pulsewidth_us(1800); |
GaspardD | 1:8faddee0e52f | 67 | wait(1); |
GaspardD | 1:8faddee0e52f | 68 | pc.printf("send pulse 1900 to esc"); |
GaspardD | 1:8faddee0e52f | 69 | pwm_ESC.pulsewidth_us(1900); |
GaspardD | 1:8faddee0e52f | 70 | wait(1); |
GaspardD | 1:8faddee0e52f | 71 | pc.printf("send pulse 2000 to esc"); |
GaspardD | 1:8faddee0e52f | 72 | pwm_ESC.pulsewidth_us(2000); |
GaspardD | 1:8faddee0e52f | 73 | wait(1); |
GaspardD | 1:8faddee0e52f | 74 | pc.printf("emergency stop"); |
GaspardD | 1:8faddee0e52f | 75 | b_UTILS_flag_emergency_stop = true; |
GaspardD | 1:8faddee0e52f | 76 | break; |
GaspardD | 1:8faddee0e52f | 77 | default: |
GaspardD | 1:8faddee0e52f | 78 | break; |
GaspardD | 1:8faddee0e52f | 79 | } |
GaspardD | 1:8faddee0e52f | 80 | |
GaspardD | 1:8faddee0e52f | 81 | return; |
GaspardD | 1:8faddee0e52f | 82 | } |