Heater for threaded program

Dependents:   LEX_Threaded_Programming

Heater.h

Committer:
omatthews
Date:
2019-08-15
Revision:
24:6debc2fb9ff3
Parent:
23:947850bbf325
Child:
25:09a315a59956

File content as of revision 24:6debc2fb9ff3:

/*------------------------------------------------------------------------------
Library header file for heater operations
Date: 16/07/2018


------------------------------------------------------------------------------*/

#ifndef Heater_H
#define Heater_H
#include "mbed.h"
#include "ADS8568_ADC.h"
#include "FastPWM.h"

#define MEAS_DELAY          60     // measurement delay for ADC in us
#define WAIT_DELAY          3      // wait delay for ADC in ms

#define N_ROLL_AVG          1      // rolling average for R values
#define ALL_CH              15     //value of convst bus to read all chanels simultaneosly
#define Kp                  4.0f   //proportional gain
#define Ti                  0.5f       //Integration time
#define Kd                  0.1f   //Differentiator gain
#define WIND_UP_LIMIT       0.1f //The change in error which turns off the integral term
#define PWM_PERIOD          5     //Period of Pwm for the motor in us
#define LOG_LIM             10       //Number of reads before the result is logged
#define GUARD_PWM_RATIO     0.25    //Ratio of guard duty cycle to heater duty cycle


class Heater
{
    //This class provides the interface through which each heater can be controlled
    public:
        /** Constructor
                 * @param i_port, the current port in the ADC
                 * @param v_port, the voltage port in the ADC
                 * @param * drive, a pointer to the heater drive
         * @param * guard, a pointer to the guard
                 * @param * corr_grad, the gradient of the linear relationship between resistance and temperature
                 * @param * corr_int, the intercept of the linear relationship between resistance and temperature
                 * @param R_ref (default value 1), optional parameter sets the target value for R                 
        **/         
        Heater(const int i_port, const int v_port, FastPWM * drive, FastPWM * guard, const float corr_grad, const float corr_int, float R_ref = 1);
        
        //Public member functions

        void read();            //Updates the resistance and error values for the heater
        void hold(const int hold_time);  //Holds R_ref for hold_time miliseconds
        void ramp_R(const int ramp_time, const float R_final, const float R_start);   //Ramps for ramp_time miliseconds from R_start to R_final
        void ramp_T(const int ramp_time, const float T_final, const float T_start);   //Same as above but with T (T is in degrees celcius)
        void output() const;  //Prints the current state of the heater
        void turn_on();     //Turns the heater on
        void turn_off();    //Turns the heater off
        
                
        //Linear conversions between temperature and resistance. Note that temperature is always in celcius
        float R_to_T(const float R) const;
        float T_to_R(const float T) const;

        
        
        //Getters and setters
        void Set_T_ref(float T);
        void Set_R_ref(float R);
        void Set_D(float D);
        int Get_i() const;
        int Get_v() const;
        float Get_R() const;
        float Get_T() const;
        
        


        
    
    protected:
        

        int curr;       //Latest current reading from ADC
        int v;          //Latest voltage reading from ADC
        float R;        //Latest resistance calculated from ADC current and voltage
        float R_ref;    //Current referance for resistance
        float error;    //R_ref - R
        //float error_diff; //Differential error
        float error_integrated; //Integrated error
        
        const int i_port;     //ADC port which corresponds to current measurements
        const int v_port;     //ADC port which corresponds to voltage measurements
        FastPWM * drive;    //Pointer to the driver
        FastPWM * guard;    //Pointer to the guard

        //Heater correlations give temperature for a given resistance (assume linear relationship)
        const float corr_grad;
        const float corr_int;
      
};
    
#endif