STM3 ESC dual brushless motor controller. 10-60v, motor power rating tiny to kW. Ganged or independent motor control As used in 'The Brute' locomotive - www.jons-workshop.com

Dependencies:   mbed BufferedSerial Servo FastPWM

F446ZE.h

Committer:
JonFreeman
Date:
2018-08-18
Revision:
8:93203f473f6e
Parent:
7:6deaeace9a3e

File content as of revision 8:93203f473f6e:

//  5TH JUNE 2018 NONE OF THIS IS RIGHT YET !!
//  Hoped to select servo functions from user info stored on EEROM. Too difficult. Do not define servo as in and out
//  Port A -> MotorA, Port B -> MotorB
const   uint16_t
AUL = 1 << 1,   //  Feb 2018 Now using DGD21032 mosfet drivers via 74HC00 pwm gates (low side) - GOOD, works well with auto-tickle of high side drivers
AVL = 1 << 2,   //  These are which port bits connect to which mosfet driver
AWL = 1 << 3,

AUH = 1 << 4,
AVH = 1 << 5,
AWH = 1 << 6,

AUV =   AUH | AVL,  //  Each of 6 possible output energisations made up of one hi and one low
AVU =   AVH | AUL,
AUW =   AUH | AWL,
AWU =   AWH | AUL,
AVW =   AVH | AWL,
AWV =   AWH | AVL,

KEEP_L_MASK_A   = AUL | AVL | AWL,
KEEP_H_MASK_A   = AUH | AVH | AWH,

BRA = AUL | AVL | AWL,  //  All low side switches on (and all high side off) for braking

BUL = 1 << 0,   //  Likewise for MotorB but different port bits on different port
BVL = 1 << 1,
BWL = 1 << 2,

BUH = 1 << 10,
BVH = 1 << 11,
BWH = 1 << 3,

BUV =   BUH | BVL,
BVU =   BVH | BUL,
BUW =   BUH | BWL,
BWU =   BWH | BUL,
BVW =   BVH | BWL,
BWV =   BWH | BVL,

KEEP_L_MASK_B   = BUL | BVL | BWL,
KEEP_H_MASK_B   = BUH | BVH | BWH,

BRB = BUL | BVL | BWL,

PORT_A_MASK = AUL | AVL | AWL | AUH | AVH | AWH,            //  NEW METHOD FOR DGD21032 MOSFET DRIVERS
PORT_B_MASK = BUL | BVL | BWL | BUH | BVH | BWH;
//  Use Ports E and G - best first guess July 2018
PortOut MotA    (PortE, PORT_A_MASK);   //  Activate output ports to motor drivers
PortOut MotB    (PortG, PORT_B_MASK);

//  Pin 1   VBAT    NET +3V3

//DigitalIn   J3         (PC_13, PullUp);//  Pin 2   Jumper pulls to GND, R floats Hi
InterruptIn   Temperature_pin   (PD_7);//  Pin ??   June 2018 - taken for temperature sensor - hard wired to T1 due to wrong thought T1 could be InterruptIn


//  Pin 3   PC14-OSC32_IN   NET O32I
//  Pin 4   PC15-OSC32_OUT  NET O32O
//  Pin 5   PH0-OSC_IN      NET PH1
//  Pin 6   PH1-OSC_OUT     NET PH1
//  Pin 7   NRST            NET NRST
AnalogIn    Ain_DriverPot   (PC_0); //  Pin 8   Spare Analogue in, net SAIN fitted with external pull-down
AnalogIn    Ain_SystemVolts (PC_1); //  Pin 9
AnalogIn    Motor_A_Current (PC_2); //  Pin 10
AnalogIn    Motor_B_Current (PC_3); //  Pin 11
//  Pin 12 VSSA/VREF-   NET GND
//  Pin 13 VDDA/VREF+   NET +3V3
//  Pin 14  Port_A AUL
//  Pin 15  Port_A AUH
//  Pins 16, 17 BufferedSerial pc
BufferedSerial  pc          (PD_8, PD_9, 512, 4, NULL);    //  Pins 16, 17    tx, rx to pc via usb lead
//  Pin 18  VSS     NET GND
//  Pin 19  VDD     NET +3V3
//  Pin 20  Port_A AWL
//  Pin 21  DigitalOut led1(LED1);
DigitalOut  LED           (PB_0); //  Pin ?? as fitted to Nucleo board. Other leds use PB_7 and PB_14
//  Pin 22  Port_A AVL
//  Pin 23  Port_A AVH
InterruptIn  MBH2      (PD_1); //  Pin ??
InterruptIn  MBH3      (PD_3); //  Pin ??
//  Pin 26  Port_B BUL
//  Pin 27  Port_B BVL
//  Pin 28  Port_B BWL
//  Pin 29  Port_B BUH
//  Pin 30  VCAP1
//  Pin 31  VSS
//  Pin 32  VDD
//  Pin 33  Port_B BVH
//  Pin 34  Port_B BWH

//DigitalOut  T4        (PB_14);    //  Pin **
//DigitalOut  T3        (PB_15);    //  Pin **

//  BufferedSerial com2 pins 37 Tx, 38 Rx
BufferedSerial  com2          (PC_10, PC_11);    //  Pins 37, 38  tx, rx to XBee module
FastPWM     A_MAX_V_PWM     (PC_8, PWM_PRESECALER_DEFAULT),  //  Pin 39                  pwm3/3
            A_MAX_I_PWM     (PC_9, PWM_PRESECALER_DEFAULT); //  pin 40, prescaler value  pwm3/4
//InterruptIn MotB_Hall   (PA_8); //  Pin 41
//  Pin 41  Port_A AWH
//  BufferedSerial com3 pins 42 Tx, 43 Rx
//InterruptIn tryseredge  (PA_9);

BufferedSerial  com3        (PC_12, PD_2);    //    Pins 42, 43  tx, rx to any aux module

//  PA_9 is Tx. I wonder, can we also use InterruptIn on this pin to generate interrupts on tx bit transitions ? Let's find out !
//  No.

//  Feb 2018 Pins 44 and 45 now liberated, could use for serial or other uses
//BufferedSerial  extra_ser   (PA_11, PA_12);    //  Pins 44, 45  tx, rx to XBee module
DigitalOut  T2  (PA_11);    //  Pin 44
// was DigitalOut  T1  (PA_12);    //  Pin 45


//InterruptIn T1  (PA_12);    //  Pin 45 now input counting pulses from LMT01 temperature sensor
//  InterruptIn DOES NOT WORK ON PA_12. Boards are being made, will have to wire link PA12 to PC13
//DigitalIn   T1    (PA_12);
////InterruptIn T1  (PC_13);    //  Pin 45 now input counting pulses from LMT01 temperature sensor



//  Pin 46  SWDIO
//  Pin 47  VSS
//  Pin 48  VDD
//  Pin 49  SWCLK

//Was DigitalOut  T5  (PA_15); //  Pin 50
DigitalIn   T5  (PA_15); //  Pin 50 now fwd/rev from remote control box if fitted
InterruptIn MAH1    (PD_4);    //  Pin 51
InterruptIn MAH2    (PD_5);    //  Pin 52
InterruptIn MAH3    (PD_6);    //  Pin 53
InterruptIn MBH1    (PD_0);     //  Pin 54
DigitalOut  T6      (PB_3);     //  Pin 55
FastPWM     B_MAX_V_PWM     (PE_13, PWM_PRESECALER_DEFAULT),  //  Pin 56                  pwm3/3
            B_MAX_I_PWM     (PE_14, PWM_PRESECALER_DEFAULT); //  pin 57, prescaler value  pwm3/4

I2C i2c                     (PB_9, PB_8);   //  Pins 58, 59 For 24LC64 eeprom
//  Pin 60  BOOT0

//  Servo pins, 2 off. Configured as Input to read radio control receiver
//  If used as servo output, code gives pin to 'Servo' - seems to work
InterruptIn Servo1_i    (PF_14); //  Pin 61  to read output from rc rx
InterruptIn Servo2_i    (PF_15); //  Pin 62  to read output from rc rx

//  Pin 63  VSS
//  Pin 64  VDD
//  SYSTEM CONSTANTS