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

Revision:
11:bfb73f083009
Parent:
10:e40d8724268a
Child:
12:d1d21a2941ef
--- a/cli_BLS_nortos.cpp	Tue Jan 15 09:03:57 2019 +0000
+++ b/cli_BLS_nortos.cpp	Sat Jan 19 11:45:01 2019 +0000
@@ -1,6 +1,9 @@
 //  DualBLS2018_06
 #include "mbed.h"
 #include "BufferedSerial.h"
+#include "FastPWM.h"
+#include "DualBLS.h"
+#include "brushless_motor.h"
 
 #include <cctype>
 #include "DualBLS.h"
@@ -11,6 +14,8 @@
 extern  bool    WatchDogEnable;
 extern  char    mode_bytes[];
 
+extern  brushless_motor MotorA, MotorB;
+
 const int   BROADCAST   = '\r';
 const   int MAX_PARAMS = 20;
 struct  parameters  {
@@ -30,10 +35,11 @@
 extern  void    setVI   (double v, double i)  ;
 extern  void    setV    (double v)  ;
 extern  void    setI    (double i)  ;
-extern  void    read_last_VI    (double * val)  ;   //  only for test from cli
+//extern  void    last_VI    (double * val)  ;   //  only for test from cli
 
 //BufferedSerial * com;
 extern  double  Read_DriverPot  ();
+extern  double  Read_BatteryVolts   ();
 void    pot_cmd (struct parameters & a)
 {
     pc.printf   ("Driver's pot %.3f\r\n", Read_DriverPot  ());
@@ -69,12 +75,6 @@
     a.com->printf   ("Watchdog %sabled\r\n", WatchDogEnable ? "En":"Dis");
 }
 
-extern  void prscfuck   (int);
-void    pf_cmd (struct parameters & a)
-{
-    prscfuck    ((int)a.dbl[0]);
-}
-
 extern  void    report_motor_types  ()  ;
 void    mt_cmd (struct parameters & a)
 {
@@ -84,24 +84,17 @@
 }
 
 extern  void    mode_set_both_motors   (int mode, double val)  ;   //  called from cli to set fw, re, rb, hb
-extern  void    read_supply_vi   (double * val)  ;
 
 void    rdi_cmd (struct parameters & a)  //  read motor currents
 {
-    if  (a.respond) {
-        double  r[4];
-        read_supply_vi  (r);    //  get MotorA.I.ave, MotorB.I.ave, Battery volts
-        a.com->printf ("rdi%.0f %.0f %.1f\r", r[0], r[1], r[2]);  //  Format good to be unpicked by cli in touch screen controller
-    }
+    if  (a.respond) 
+        a.com->printf ("rdi%.0f %.0f %.1f\r", MotorA.I.ave, MotorB.I.ave, Read_BatteryVolts  ());  //  Format good to be unpicked by cli in touch screen controller
 }
 
 void    rvi_cmd (struct parameters & a)  //  read last normalised values sent to pwms
 {
-    if  (a.respond) {
-        double  r[6];
-        read_last_VI    (r);
-        a.com->printf ("rvi%.2f %.2f %.2f %.2f\r", r[0], r[1], r[2], r[3]);
-    }
+    if  (a.respond) 
+        a.com->printf ("rvi%.2f %.2f %.2f %.2f\r", MotorA.last_V, MotorA.last_I, MotorB.last_V, MotorB.last_I);
 }
 
 void    fw_cmd (struct parameters & a)  //  Forward command
@@ -233,24 +226,17 @@
     }
 }
 
-extern  void    read_RPM    (uint32_t * dest)  ;
 void    rpm_cmd (struct parameters & a) //  to report e.g. RPM 1000 1000 ; speed for both motors
 {
-    if  (a.respond) {
-        uint32_t dest[3];
-        read_RPM    (dest);     //  gets rpm for each motor
-        a.com->printf  ("rpm%d %d\r", dest[0], dest[1]);
-    }
+    if  (a.respond) 
+        a.com->printf  ("rpm%d %d\r", MotorA.RPM, MotorB.RPM);
 }
 
 extern  double  rpm2mph ;
 void    mph_cmd (struct parameters & a) //  to report miles per hour
 {
-    if  (a.respond) {
-        uint32_t dest[3];
-        read_RPM    (dest);     //  gets rpm for each motor
-        a.com->printf ("mph%c %.3f\r", mode_bytes[ID], (double)(dest[0] + dest[1]) * rpm2mph / 2.0);
-    }
+    if  (a.respond) 
+        a.com->printf ("mph%c %.3f\r", mode_bytes[ID], (double)(MotorA.RPM + MotorB.RPM) * rpm2mph / 2.0);
 }
 
 void    menucmd (struct parameters & a);
@@ -343,7 +329,6 @@
     {"ls", "Lists available commands", menucmd},
     {"?", "Lists available commands, same as ls", menucmd},
     {"mtypes", "report types of motors found", mt_cmd},
-    {"pf", "try changing FastPWM prescaler values", pf_cmd},
     {"pot", "read drivers control pot", pot_cmd},
     {"fw", "forward", fw_cmd},
     {"re", "reverse", re_cmd},
@@ -405,7 +390,7 @@
 */
 //void    command_line_interpreter    (void const *argument)
 void    cli_core    (struct parameters & a) {
-    const int MAX_CMD_LEN = 120;
+    const int MAX_CMD_LEN = 180;
     int ch, IAm = I_Am();
     char * pEnd;//, * cmd_line_ptr;
     while  (a.com->readable()) {
@@ -414,8 +399,10 @@
             a.com->printf   ("Error!! Stupidly long cmd line\r\n");
             a.cl_index = 0;
         }
-        if(ch != '\r')  //  was this the 'Enter' key?
-            a.cmd_line[a.cl_index++] = ch;  //  added char to command being assembled
+        if(ch != '\r')  {   //  was this the 'Enter' key?
+            if  (ch != '\n')       //  Ignore line feeds
+                a.cmd_line[a.cl_index++] = ch;  //  added char to command being assembled
+        }
         else    {   //  key was CR, may or may not be command to lookup
             a.target_unit = BROADCAST;    //  Set to BROADCAST default once found command line '\r'
             a.cmd_line_ptr = a.cmd_line;