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:
0:77803b3ee157
Child:
1:450090bdb6f4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Alternator.h	Fri Jun 28 19:32:51 2019 +0000
@@ -0,0 +1,36 @@
+#include    "Servo.h"
+#include    "BufferedSerial.h"
+const   int eeprom_page = 17;   //  Determines where in eeprom 'settings' reside
+
+const   int lut_seg_size    =   60; //  steps per thousand RPM
+const   int lut_size = lut_seg_size * 8;    //  8 segments - 0-1, 1-2, 2-3, 3-4 etc 000 rpm
+
+class   eeprom_settings {
+    char        settings    [36];
+    int         max_pwm_lut [lut_size + 4];
+//    bool        rd_24LC64  (int start_addr, char * dest, int length)    ;
+//    bool        wr_24LC64  (int start_addr, char * dest, int length)    ;
+//    bool        set_24LC64_internal_address (int    start_addr) ;
+//    bool        ack_poll    ()  ;
+    void        build_lut   ()  ;
+  public:
+    eeprom_settings (); //  Constructor
+    int         get_pwm (int)   ;
+    char        rd  (uint32_t)  ;           //  Read one setup char value from private buffer 'settings'
+    bool        wr  (char, uint32_t)  ;     //  Write one setup char value to private buffer 'settings'
+    bool        save    ()  ;               //  Write 'settings' buffer to EEPROM
+    bool        load    ()  ;               //  Get 'settings' from EEPROM
+    bool        set_defaults    ();         //  Put default settings into EEPROM and local buffer
+//    uint32_t    errs    ()  ;               //  Return errors
+}   ;
+
+enum    {RPM0, RPM1, RPM2, RPM3, RPM4, RPM5, RPM6, RPM7, RPM8, 
+            PWM_SCALE, FUT1, FUT2, FUT3, FUT4, FUT5}  ;  //  
+
+struct  optpar  {
+    int min, max, def;  //  min, max, default
+    const char * t;     //  description
+}   ;
+
+const   int PWM_PERIOD_US = 3200    ;
+