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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers field.h Source File

field.h

00001 #include "mbed.h"
00002 /**
00003     Functions to control alternator field
00004 */
00005 
00006 
00007 /**void    set_pwm (double d)   {   Range 0.0 to 1.0
00008     This PWM used to limit max duty ratio of alternator field energisation.
00009     With R25=33k and C4=100n controlling ramp input to CS pin of MCP1630 (not MCP1630V),
00010     ramp terminates fet 'on' pulse after a max of approx 980 us.
00011     With const   int PWM_PERIOD_US = 2000    , duty ratio is thus limited to approx 50% max.
00012     This is about right when using 12V alternator on 24V systems
00013     A 1.225V reference (U7) is fed to the MCP1630 error amp which compares this to fed-back proportion of system voltage.
00014     This adjusts final PWM down to zero % as needed to maintain alternator output voltage.
00015 */
00016 
00017 class   FieldControl    {
00018     uint8_t     privatemadetab[440];
00019     uint64_t    t_on, t_off, measured_pw_us, measured_period, rise_count, fall_count;
00020     uint32_t    old_percent;
00021     PwmOut      pwm_osc_in;     //  Controller PWM driving MCP1630
00022     InterruptIn V_ext;          //  Connected to MCP1630 output to MOSFET
00023     void        VextRise ();    //  Handles - MCP1630 has just turned mosfet on
00024     void        VextFall ();    //  Handles - MCP1630 has just turned mosfet off
00025   public:
00026     FieldControl  (PinName pwmoscin, PinName vext)  ;   //  Constructor
00027     void    set_pwm (double);   //  What it says, 0.0 to 1.0 but inverts to suit MCP1630
00028     void    maketable   ();
00029     uint32_t    set_for_speed   (uint32_t rpm);
00030     double  get_duty_ratio  ()  ;
00031 }   ;
00032