Heater for threaded program

Dependents:   LEX_Threaded_Programming

Revision:
18:f5d26d3d532f
Parent:
17:0bfed0e96927
Child:
19:fccdd7127f94
--- 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;
       
 };