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

Committer:
JonFreeman
Date:
Fri Jun 28 19:32:51 2019 +0000
Revision:
0:77803b3ee157
Child:
1:450090bdb6f4
As at end June 2019

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JonFreeman 0:77803b3ee157 1 #include "Servo.h"
JonFreeman 0:77803b3ee157 2 #include "BufferedSerial.h"
JonFreeman 0:77803b3ee157 3 const int eeprom_page = 17; // Determines where in eeprom 'settings' reside
JonFreeman 0:77803b3ee157 4
JonFreeman 0:77803b3ee157 5 const int lut_seg_size = 60; // steps per thousand RPM
JonFreeman 0:77803b3ee157 6 const int lut_size = lut_seg_size * 8; // 8 segments - 0-1, 1-2, 2-3, 3-4 etc 000 rpm
JonFreeman 0:77803b3ee157 7
JonFreeman 0:77803b3ee157 8 class eeprom_settings {
JonFreeman 0:77803b3ee157 9 char settings [36];
JonFreeman 0:77803b3ee157 10 int max_pwm_lut [lut_size + 4];
JonFreeman 0:77803b3ee157 11 // bool rd_24LC64 (int start_addr, char * dest, int length) ;
JonFreeman 0:77803b3ee157 12 // bool wr_24LC64 (int start_addr, char * dest, int length) ;
JonFreeman 0:77803b3ee157 13 // bool set_24LC64_internal_address (int start_addr) ;
JonFreeman 0:77803b3ee157 14 // bool ack_poll () ;
JonFreeman 0:77803b3ee157 15 void build_lut () ;
JonFreeman 0:77803b3ee157 16 public:
JonFreeman 0:77803b3ee157 17 eeprom_settings (); // Constructor
JonFreeman 0:77803b3ee157 18 int get_pwm (int) ;
JonFreeman 0:77803b3ee157 19 char rd (uint32_t) ; // Read one setup char value from private buffer 'settings'
JonFreeman 0:77803b3ee157 20 bool wr (char, uint32_t) ; // Write one setup char value to private buffer 'settings'
JonFreeman 0:77803b3ee157 21 bool save () ; // Write 'settings' buffer to EEPROM
JonFreeman 0:77803b3ee157 22 bool load () ; // Get 'settings' from EEPROM
JonFreeman 0:77803b3ee157 23 bool set_defaults (); // Put default settings into EEPROM and local buffer
JonFreeman 0:77803b3ee157 24 // uint32_t errs () ; // Return errors
JonFreeman 0:77803b3ee157 25 } ;
JonFreeman 0:77803b3ee157 26
JonFreeman 0:77803b3ee157 27 enum {RPM0, RPM1, RPM2, RPM3, RPM4, RPM5, RPM6, RPM7, RPM8,
JonFreeman 0:77803b3ee157 28 PWM_SCALE, FUT1, FUT2, FUT3, FUT4, FUT5} ; //
JonFreeman 0:77803b3ee157 29
JonFreeman 0:77803b3ee157 30 struct optpar {
JonFreeman 0:77803b3ee157 31 int min, max, def; // min, max, default
JonFreeman 0:77803b3ee157 32 const char * t; // description
JonFreeman 0:77803b3ee157 33 } ;
JonFreeman 0:77803b3ee157 34
JonFreeman 0:77803b3ee157 35 const int PWM_PERIOD_US = 3200 ;
JonFreeman 0:77803b3ee157 36