...

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
brianconnett
Date:
Wed Sep 03 22:00:33 2014 +0000
Commit message:
...

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 84ce715fc33b main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Sep 03 22:00:33 2014 +0000
@@ -0,0 +1,176 @@
+#include "mbed.h"
+// APIs
+Serial pc(USBTX, USBRX); // tx, rx for serial USB interface to pc
+SPI spi_max1270(p5, p6, p7);
+SPI spi(p5, p6, p7);
+DigitalOut max1270_cs(p8);  //MAX1270 ADC CS
+DigitalOut mot1_ph1(p21);
+DigitalOut mot1_ph2(p22);
+PwmOut mot_en1(p23);
+
+LocalFileSystem local("local"); // Create the local filesystem under the name "local"
+
+int read_max1270(int chan, int range, int bipol){
+    int cword=0x80;     //set the start bit
+    
+    spi_max1270.frequency(10000000);
+    spi_max1270.format(8, 0);   // 8 data bits, CPOL0, and CPHA0 (datasheet Digital Interface)
+        
+    cword |= (chan << 4);   //shift channel
+    cword |= (range << 3);
+    cword |= (bipol << 2);
+            
+    max1270_cs = 0;
+           
+    spi_max1270.write(cword);
+    wait_us(15);    //15us
+    spi_max1270.format(12, 3);
+    
+    int result = spi_max1270.write(0);
+    
+    max1270_cs = 1;
+    spi_max1270.format(8, 0);
+    return result;
+}
+
+float read_max1270_volts(int chan, int range, int bipol){
+    float rangevolts=0.0;
+    float volts=0.0;
+    int adc_res;
+
+    //read the ADC converter
+    adc_res = read_max1270(chan, range, bipol) & 0xFFF;
+        
+   //Determine the voltage range
+   if(range)  //RNG bit 
+     rangevolts=10.0;
+   else
+     rangevolts=5.0;
+             
+   //bi-polar input range
+   if(bipol){ //BIP is set, input is +/-
+     if(adc_res < 0x800){ //if result was positive
+      volts = ((float)adc_res/0x7FF) * rangevolts;      
+     }       
+     else{  //result was negative
+      volts = -(-((float)adc_res/0x7FF) * rangevolts) - (rangevolts * 2.0); 
+     }
+   }
+   else{  //input is positive polarity only
+      volts = ((float)adc_res/0xFFF) * rangevolts;   
+   }
+   
+   return volts;     
+}
+
+float Tank1,Tank2,dt,h1,h2;
+float Ts = 1.0; // Sampling period 1/Ts Hz 
+
+//float Tl = XXXX; // Logging period
+//float c1 = XX.X/(X.XX-X.XX); // cm/V
+//float c2 = XX.X/(X.XX-X.XX); // cm/V
+//float v10 = -X.XX; // V
+//float v20 = -X.XX; // V
+
+// Arrays for data storage
+float etime[200];
+float t1v[200];
+float t2v[200];
+//float t1h[200];
+//float t2h[200];
+float dcp[200];
+Timer t;
+
+ // Open "results.M" on the local file system for writing
+FILE *fp = fopen("/local/results.M", "w");
+
+float cntr;
+float dc;
+int k;
+
+int main ()
+{
+    pc.baud(921600); // Establish baud rate 
+    mot_en1.period_us(50); // Set PWM length to 50 us   
+    max1270_cs = 1; // Activate A/D
+    cntr = 0.0; // cntr used to keep track of sample period and elpased time
+    
+    // initialize data vectors
+    for(k=0;k<200;k++)
+  { etime[k] = 0.0;
+    t1v[k] = 0.0;
+    t2v[k]    = 0.0;
+    //t1h[k]    = 0.0;
+    //t2h[k]    = 0.0;
+    dcp[k]    = 0.0;    
+  }
+  k = 0; // Reset index counter
+    
+    while(cntr*Ts <= 180) {
+        t.start(); // start measuring comp time
+        
+        // Read pressure sensors        
+        Tank1 = read_max1270_volts(1, 1, 1);
+        Tank2 = read_max1270_volts(0, 1, 1);
+        
+        // Convert pressure voltage to tank height
+        //h1 = c1*(Tank1 - v10);
+        //h2 = c2*(Tank2 - v20);
+                
+        // Drive pump for ID
+        //if (cntr*Ts <= 5) {
+        //    dc = 0.0;
+       // } else 
+        if (cntr*Ts <= 180) {
+            dc = -0.7;      //<***CHANGE THIS***>
+        } else {
+            dc = 0.0;
+        }                
+        
+        if(dc > 0.0){
+            mot1_ph2 = 0;
+            mot1_ph1 = 1;
+            mot_en1 = dc;
+        }
+        else if(dc < -0.0){
+            mot1_ph1 = 0;
+            mot1_ph2 = 1;
+            mot_en1 = abs(dc);}
+        // Log data
+        etime[k] = cntr*Ts;
+        t1v[k] = Tank1;
+        t2v[k] = Tank2;
+        //t1h[k] = h1;
+        //t2h[k] = h2;
+        dcp[k] = -dc;
+        k++;
+              
+        t.stop(); // end measuring comp time
+        dt = Ts-t.read();
+        pc.printf("%5.2f %5.2f %5.2f %5.2f \n\r",cntr*Ts,Tank1,Tank2,dc);
+        //pc.printf("%5.2f %5.2f %5.2f %5.2f %5.2f %5.2f \n\r",cntr*Ts,Tank1,Tank2,h1,h2,dc);        
+        t.reset();
+        cntr=cntr+1;
+        wait(dt); // wait to ensure sampling period set by Ts    
+    }//while
+    mot1_ph2 = 0;
+    mot_en1 = 0.0;
+    
+    // Print out log variables in MATLAB structured variable format.
+    pc.printf("Printing log variables to file on mBed           ... ");
+    if(1) {
+        for(k=0; k<180; k++) {
+            fprintf(fp,"t(%d,1) = %.5f;\n",k+1,etime[k]);
+            fprintf(fp,"t1v(%d,1) = %.5f;\n",k+1,t1v[k]);
+            fprintf(fp,"t2v(%d,1)    = %.5f;\n",k+1,t2v[k]);
+            //fprintf(fp,"t1h(%d,1)    = %.5f;\n",k+1,t1h[k]);
+            //fprintf(fp,"t2h(%d,1)    = %.5f;\n",k+1,t2h[k]);
+            fprintf(fp,"dcp(%d,1)    = %.5f;\n",k+1,dcp[k]);            
+        }        
+    }
+    printf("done.\r\n");
+
+    // Close file
+    fclose(fp);
+    
+}//main
\ No newline at end of file
diff -r 000000000000 -r 84ce715fc33b mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Sep 03 22:00:33 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/9327015d4013
\ No newline at end of file