Electric Locomotive control system. Touch screen driver control, includes regenerative braking, drives 4 brushless motors, displays speed MPH, system volts and power
Dependencies: BSP_DISCO_F746NG FastPWM LCD_DISCO_F746NG SD_DISCO_F746NG TS_DISCO_F746NG mbed
throttle.cpp@1:8ef34deb5177, 2017-11-13 (annotated)
- Committer:
- JonFreeman
- Date:
- Mon Nov 13 09:53:00 2017 +0000
- Revision:
- 1:8ef34deb5177
Brushless Motor electric locomotive congtrol system; Drives 4 motors using touch-screen control.; Displays speed MPH, system volts and power
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JonFreeman | 1:8ef34deb5177 | 1 | /* |
JonFreeman | 1:8ef34deb5177 | 2 | This file about using model control servo to drive the throttle of Honda GX120 engine |
JonFreeman | 1:8ef34deb5177 | 3 | |
JonFreeman | 1:8ef34deb5177 | 4 | Using a model control servo to set the throttle of Honda GX120 petrol engine |
JonFreeman | 1:8ef34deb5177 | 5 | First thoughts 12 Nov 2017. |
JonFreeman | 1:8ef34deb5177 | 6 | |
JonFreeman | 1:8ef34deb5177 | 7 | Servo driven by positive pulse of duration 1000 to 2000 micro sec. Repetition rate 50Hz |
JonFreeman | 1:8ef34deb5177 | 8 | Will first try repeating in 32ms loop giving repetirion rate approx 30 Hz. |
JonFreeman | 1:8ef34deb5177 | 9 | Pos pulse generated by setting to 1 in 32ms handler and starting a 'timeout' |
JonFreeman | 1:8ef34deb5177 | 10 | |
JonFreeman | 1:8ef34deb5177 | 11 | ... as part of 32ms code |
JonFreeman | 1:8ef34deb5177 | 12 | if (torque_demand < 0.01) { |
JonFreeman | 1:8ef34deb5177 | 13 | throttle (TICKOVER); |
JonFreeman | 1:8ef34deb5177 | 14 | } |
JonFreeman | 1:8ef34deb5177 | 15 | else { // got positive torque demand |
JonFreeman | 1:8ef34deb5177 | 16 | throttle (MID_REVS); |
JonFreeman | 1:8ef34deb5177 | 17 | } |
JonFreeman | 1:8ef34deb5177 | 18 | throttle_servo_pulse_out = 1; |
JonFreeman | 1:8ef34deb5177 | 19 | throttle_servo_pulse_width.attach_us (&servo_pulse_lo, global_throttle_us); |
JonFreeman | 1:8ef34deb5177 | 20 | */ |
JonFreeman | 1:8ef34deb5177 | 21 | #include "mbed.h" |
JonFreeman | 1:8ef34deb5177 | 22 | #include "Electric_Loco.h" |
JonFreeman | 1:8ef34deb5177 | 23 | |
JonFreeman | 1:8ef34deb5177 | 24 | static const int |
JonFreeman | 1:8ef34deb5177 | 25 | SERVO_RANGE = 1000, // micro sec difference between max and min |
JonFreeman | 1:8ef34deb5177 | 26 | SERVO_OFFSET = 1000, // min servo pulse width micro sec |
JonFreeman | 1:8ef34deb5177 | 27 | TICKOVER = SERVO_OFFSET + 0, |
JonFreeman | 1:8ef34deb5177 | 28 | MID_REVS = SERVO_OFFSET + 500, |
JonFreeman | 1:8ef34deb5177 | 29 | RANGE_MULTIPLIER = SERVO_RANGE + SERVO_OFFSET - MID_REVS; |
JonFreeman | 1:8ef34deb5177 | 30 | |
JonFreeman | 1:8ef34deb5177 | 31 | DigitalOut throttle_servo_pulse_out (D8); // now defined in throttle.cpp |
JonFreeman | 1:8ef34deb5177 | 32 | |
JonFreeman | 1:8ef34deb5177 | 33 | Timeout throttle_servo_pulse_width; |
JonFreeman | 1:8ef34deb5177 | 34 | |
JonFreeman | 1:8ef34deb5177 | 35 | void throttle_servo_pulse_lo () { // Interrupt handler called at end of 'Timeout' |
JonFreeman | 1:8ef34deb5177 | 36 | throttle_servo_pulse_out = 0; // end servo positive pulse |
JonFreeman | 1:8ef34deb5177 | 37 | } |
JonFreeman | 1:8ef34deb5177 | 38 | |
JonFreeman | 1:8ef34deb5177 | 39 | int throttle (double torque_demand, double speed_mph) { // called from main every 31ms |
JonFreeman | 1:8ef34deb5177 | 40 | int duration_us; |
JonFreeman | 1:8ef34deb5177 | 41 | if (throttle_servo_pulse_out != 0) |
JonFreeman | 1:8ef34deb5177 | 42 | return -1; // pulse positive already |
JonFreeman | 1:8ef34deb5177 | 43 | if (torque_demand < 0.01) { |
JonFreeman | 1:8ef34deb5177 | 44 | duration_us = TICKOVER; |
JonFreeman | 1:8ef34deb5177 | 45 | } |
JonFreeman | 1:8ef34deb5177 | 46 | else { // got positive torque demand |
JonFreeman | 1:8ef34deb5177 | 47 | double tmpd = torque_demand * RANGE_MULTIPLIER; |
JonFreeman | 1:8ef34deb5177 | 48 | duration_us = MID_REVS + (int) tmpd; |
JonFreeman | 1:8ef34deb5177 | 49 | } |
JonFreeman | 1:8ef34deb5177 | 50 | throttle_servo_pulse_out = 1; // start servo positive pulse |
JonFreeman | 1:8ef34deb5177 | 51 | throttle_servo_pulse_width.attach_us (&throttle_servo_pulse_lo, duration_us); |
JonFreeman | 1:8ef34deb5177 | 52 | return 0; |
JonFreeman | 1:8ef34deb5177 | 53 | } |
JonFreeman | 1:8ef34deb5177 | 54 | // endof New Nov 2017 Controlling throttle of Honda engine |
JonFreeman | 1:8ef34deb5177 | 55 | |
JonFreeman | 1:8ef34deb5177 | 56 |