Heater for threaded program

Dependents:   LEX_Threaded_Programming

Heater.h

Committer:
omatthews
Date:
2019-07-28
Revision:
18:f5d26d3d532f
Parent:
17:0bfed0e96927
Child:
19:fccdd7127f94

File content as of revision 18:f5d26d3d532f:

/*------------------------------------------------------------------------------
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          50     // measurement delay for ADC
#define WAIT_DELAY          3      // wait delay for ADC

#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                  30.0f   //proportional gain
#define Ti                  1.0f       //Integration time
#define Kd                  0.0f   //Differentiator gain
#define WIND_UP_LIMIT       0.005f //The change in error which turns off the integral term
#define PWM_PERIOD          5     //Period of Pwm for the motor
#define LOG_LIM          100     //Period of Pwm for the motor


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 motor drive
                 * @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, 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
        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
        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

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