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
Diff: Alternator.h
- 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 ; +