Heater for threaded program
Dependents: LEX_Threaded_Programming_V3
Diff: Heater.h
- Revision:
- 18:f5d26d3d532f
- Parent:
- 17:0bfed0e96927
- Child:
- 19:fccdd7127f94
diff -r 0bfed0e96927 -r f5d26d3d532f Heater.h --- a/Heater.h Thu Jul 25 16:20:01 2019 +0000 +++ b/Heater.h Sun Jul 28 11:49:57 2019 +0000 @@ -12,39 +12,46 @@ #include "FastPWM.h" #define MEAS_DELAY 50 // measurement delay for ADC -#define WAIT_DELAY 5 // wait 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 2 //Integration time +#define Ti 1.0f //Integration time #define Kd 0.0f //Differentiator gain -#define WIND_UP_LIMIT 0.006f //Avoids integral windup on a sharp drop in T_ref -#define PWM_PERIOD 50 +#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 port for the current in the ADC - * @param v_port, the port for the voltage in the ADC - * @param drive, the motor drive - * @param R_ref, the target value for R - */ - Heater(int i_port, int v_port, FastPWM * drive, float corr_grad, float corr_int, float R_ref = 1); + * @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(); - void hold(int hold_time); - void ramp_R(int ramp_time, float R_final, float R_start); - void ramp_T(int ramp_time, float T_final, float T_start); - void output(); + 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 - //Conversions between temperature and resistance - float R_to_T(float R); - float T_to_R(float T); + + //Linear conversions between temperature and resistance + float R_to_T(const float R) const; + float T_to_R(const float T) const; @@ -52,35 +59,34 @@ void Set_T_ref(float T); void Set_R_ref(float R); void Set_D(float D); - int Get_i(); - int Get_v(); - float Get_R(); - float Get_T(); + int Get_i() const; + int Get_v() const; + float Get_R() const; + float Get_T() const; - void turn_on(); - void turn_off(); + protected: - int curr; - int v; - float R; - float R_ref; - float error; - float error_diff; - float error_integrated; + 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 - int i_port; - int v_port; - FastPWM * drive; + 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) - float corr_grad; - float corr_int; + const float corr_grad; + const float corr_int; };