allow config to set the max current and current conversion factor for the digipot
authorJim Morris <morris@wolfman.com>
Fri, 11 Oct 2013 06:35:00 +0000 (23:35 -0700)
committerJim Morris <morris@wolfman.com>
Mon, 14 Oct 2013 20:17:29 +0000 (13:17 -0700)
src/modules/utils/currentcontrol/CurrentControl.cpp
src/modules/utils/currentcontrol/CurrentControl.h
src/modules/utils/currentcontrol/DigipotBase.h
src/modules/utils/currentcontrol/mcp4451.h

index 5e4d8be..dc22d55 100644 (file)
@@ -46,6 +46,9 @@ void CurrentControl::on_module_loaded(){
     this->eta_current =             this->kernel->config->value(eta_current_checksum    )->by_default(-1)->as_number();
     this->theta_current =           this->kernel->config->value(theta_current_checksum  )->by_default(-1)->as_number();
 
+    digipot->set_max_current(       this->kernel->config->value(digipot_max_current     )->by_default(2.0)->as_number());
+    digipot->set_factor(            this->kernel->config->value(digipot_factor          )->by_default(113.33)->as_number());
+
     this->digipot->set_current(0, this->alpha_current);
     this->digipot->set_current(1, this->beta_current );
     this->digipot->set_current(2, this->gamma_current);
index 02e7b2b..e5f6b58 100644 (file)
@@ -17,6 +17,8 @@
 #define theta_current_checksum                  CHECKSUM("theta_current")
 #define currentcontrol_module_enable_checksum   CHECKSUM("currentcontrol_module_enable")
 #define digipotchip_checksum                    CHECKSUM("digipotchip")
+#define digipot_max_current                     CHECKSUM("digipot_max_current")
+#define digipot_factor                          CHECKSUM("digipot_factor")
 
 #define mcp4451_checksum                        CHECKSUM("mcp4451")
 #define ad5206_checksum                         CHECKSUM("ad5206")
@@ -39,6 +41,7 @@ class CurrentControl : public Module {
         double theta_current;
 
         DigipotBase* digipot;
+
 };
 
 
index 2d88e90..cb00677 100644 (file)
@@ -13,6 +13,12 @@ class DigipotBase {
 
         virtual void set_current( int channel, double current )= 0;
         virtual double get_current(int channel)= 0;
+        void set_max_current(double c) { max_current= c; }
+        void set_factor(double f) { factor= f; }
+
+    protected:
+        double factor;
+        double max_current;
 };
 
 
index 7ebf10e..ab02578 100644 (file)
@@ -17,14 +17,14 @@ class MCP4451 : public DigipotBase {
             for (int i = 0; i < 8; i++)
                 currents[i] = 0.0;
         }
-        
+
         ~MCP4451(){
             delete this->i2c;
         }
 
         void set_current( int channel, double current )
         {
-            current = min( max( current, 0.0L ), 2.0L );
+            current = min( max( current, 0.0 ), this->max_current );
             currents[channel] = current;
             char addr = 0x58;
             while(channel > 3){
@@ -45,7 +45,7 @@ class MCP4451 : public DigipotBase {
         {
             return currents[channel];
         }
-        
+
     private:
 
         void i2c_send( char first, char second, char third ){
@@ -57,7 +57,7 @@ class MCP4451 : public DigipotBase {
         }
 
         char current_to_wiper( double current ){
-            return char(ceil(double((113.33*current))));
+            return char(ceil(double((this->factor*current))));
         }
 
         mbed::I2C* i2c;