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

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?

UserRevisionLine numberNew 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