Code for 'Smart Regulator' featured in 'Model Engineer', November 2020 on. Contains all work to August 2020 including all code described. Top level algorithm development is quite spares, leaving some work for you! Any questions - jon@jons-workshop.com

Dependencies:   mbed BufferedSerial Servo2 PCT2075 I2CEeprom FastPWM

Revision:
2:8e7b51353f32
Parent:
1:450090bdb6f4
Child:
3:43cb067ecd00
--- a/cli.cpp	Sat Apr 25 15:35:58 2020 +0000
+++ b/cli.cpp	Mon Jun 08 13:46:52 2020 +0000
@@ -15,11 +15,11 @@
 
 //extern  int ver, vef, measured_pw_us;
 extern  void    set_throttle_limit    (struct parameters & a)    ;
-extern  void    speed_control_factor_set    (struct parameters & a)    ;
+//extern  void    speed_control_factor_set    (struct parameters & a)    ;
 extern  void    query_system    (struct parameters & a)    ;
 extern  uint32_t    ReadEngineRPM  ()   ;
 extern  double  Read_BatteryVolts   ()  ;
-extern  void Read_Ammeter   (double *)  ;
+//extern  void Read_Ammeter   (double *)  ;
 
 
 
@@ -34,6 +34,32 @@
 extern  BufferedSerial pc;
 #endif
 //extern  double  test_pot;    //  These used in knifeandfork code testing only
+extern  void    maketable   ()  ;
+
+void    table_tweak_cmd   (struct parameters & a)   {     //  Requires two params. First '20', '25' etc representing hundreds RPM. Second 0 to 99 percent
+    char    txt[100];
+    uint32_t    d[3];
+    txt[0] = 0;
+    if  (a.numof_dbls != 2) 
+        sprintf   (txt, "Need 2 params, got %d, ", a.numof_dbls);
+    else    {
+        d[2] = (uint32_t)a.dbl[0];
+        d[0] = d[2] / 5;
+        d[1] = (uint32_t)a.dbl[1];
+        if  (d[0] > 16 || d[1] > 99 || d[2] != d[0] * 5)
+            sprintf (txt + strlen(txt), "Param out of range %d, %d, ", d[2], d[1]);
+        else    {
+            pc.printf   ("Off to reset table %d RPM, %d percent\r\n", d[2] * 100, d[1]);
+            user_settings.wr    ((char)d[1], d[0]);
+            user_settings.save  ();
+            maketable   ();
+        }
+    }
+    if  (txt[0])
+        pc.printf   ("Errors in table_tweak_cmd - %s\r\n", txt);
+    else
+        pc.printf   ("Good in table_tweak_cmd, RPM=%d, percentage=%d\r\n", d[0] * 500, d[1]);
+}
 
 //extern  int numof_eeprom_options2    ;
 //extern  struct  optpar const option_list2[]  ;
@@ -97,38 +123,39 @@
 
 }
 
-void    gpcmd   (struct parameters & a)   {
+/*void    gpcmd   (struct parameters & a)   {
     pc.printf   ("pwm=%.3f\r\n", user_settings.get_pwm    ((int)a.dbl[0]));
-}
+}*/
 
 extern  VEXT_Data   Field;
 
-void    rfcmd   (struct parameters & a)   {
-    pc.printf   ("Field.measured_period = %d, Field.measured_pw_us = %d, duty_cycle = %.3f\r\n", Field.measured_period, Field.measured_pw_us, Field.duty_cycle());
+void    rfcmd   (struct parameters & a)   {     //  Note casts all wrong here, values are 64 bit
+    pc.printf   ("Field.measured_period = %u", (uint32_t)Field.measured_period);
+    pc.printf   (", Field.measured_pw_us = %u, duty_cycle = %.3f\r\n", (uint32_t)Field.measured_pw_us, Field.duty_cycle());
 }
 
-extern  void    set_RPM_demand  (uint32_t   d)  ;
+//extern  void    set_RPM_demand  (uint32_t   d)  ;
 
-void    set_rpm_cmd   (struct parameters & a)   {
+/*void    set_rpm_cmd   (struct parameters & a)   {
     pc.printf   ("setting RPM to %d\r\n",(int)a.dbl[0]);
     set_RPM_demand  ((uint32_t)a.dbl[0]);
-}
+}*/
 
-void    speedcmd   (struct parameters & a)   {
+/*void    speedcmd   (struct parameters & a)   {
     int s = ReadEngineRPM  ();
     pc.printf   ("speed %d, pwm %.3f\r\n", s, user_settings.get_pwm(s));
-}
+}*/
 
 void    vcmd    (struct parameters & a)   {
     pc.printf   ("volts %.2f\r\n", Read_BatteryVolts());
 }
 
-void    icmd    (struct parameters & a)   {
+/*void    icmd    (struct parameters & a)   {
     double  results[4];
     //double * ampsptr = 
     Read_Ammeter(results)   ;
     pc.printf   ("amps %.3f, offset %.3f\r\n", results[0], results[1]);
-}
+}*/
 
 extern  void    set_servo   (double p)  ;   //  Only for test, called from cli
 
@@ -159,20 +186,21 @@
 
 struct  kb_command const command_list[] = {
     {"?", "Lists available commands, same as ls", menucmd},
+    {"tt", "Table Tweak - 2 params RPM/100, percentage 0-99", table_tweak_cmd},
     {"rf", "Check rise and fall on VEXT", rfcmd},
-    {"s", "Speed, RPM", speedcmd},
+//    {"s", "Speed, RPM", speedcmd},
     {"v", "Read Battery volts", vcmd},
-    {"i", "Read Ammeter", icmd},
+//    {"i", "Read Ammeter", icmd},
     {"p", "Set PWM 0 to 2400???", p_cmd},
     {"q", "Query system - toggle message stream on/off", query_system},
-    {"gp","Get pwm from RPM", gpcmd},
+//    {"gp","Get pwm from RPM", gpcmd},
     {"mode", "See or set eeprom values", mode19_cmd},
     {"nu", "do nothing", null_cmd},
 #ifndef SPEED_CONTROL_ENABLE    //  Includes engine revs servo control loop
     {"ser","set throttle servo direct 0 - 99", set_servo_cmd},
 #endif
-    {"sf","set speed control factor", speed_control_factor_set},
-    {"sv","set engine RPM demand 2500 - 6000", set_rpm_cmd},
+//    {"sf","set speed control factor", speed_control_factor_set},
+//    {"sv","set engine RPM demand 2500 - 6000", set_rpm_cmd},
     {"tl","set throttle_limit 0.0-1.0", set_throttle_limit},
 };