REV1

Dependencies:   KellerDruck_pressure PID PWM-Coil-driver Sensirion_SF04 VL6180

Fork of TestBenchSerenity-proto_F429ZI by Ian Wolf

Files at this revision

API Documentation at this revision

Comitter:
iwolf32
Date:
Mon Jul 31 20:55:31 2017 +0000
Parent:
4:79b23d1fbcd1
Commit message:
REV1;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
main.h Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed Jul 26 14:03:10 2017 +0000
+++ b/main.cpp	Mon Jul 31 20:55:31 2017 +0000
@@ -1,82 +1,7 @@
 #include "main.h"
-//---------------------------
-void dutycycleincrease()
-{
-    dutycycle=dutycycle+0.01;
-}
-
-void dutycycledecrease()
-{
-    dutycycle=dutycycle-0.01;
-}
-
-void frequencyincrease()
-{
-    frequency=frequency+1;
-}
-void frequencydecrease()
-{
-    frequency=frequency-1;
-}
-void injectorvalvecontrol(){
-
-while(true){
-float openvalue=(((1/frequency)*dutycycle));
-float offvalue=(1/frequency)-openvalue;
-    
-injector.on();
-wait(openvalue);
-injector.off();
-wait(offvalue);
-}
-}
-
-//-----------------------------
-void pumpTachTrigger()
-{
-    pumpTachCounts++;
-}
 
-void pump_tach_update()
-{
-    float i = pumpTachCounts; // In case it triggers mid-calculation
-    pumpTachCounts = 0;
-    pumpRpm = (i/pumpTachPoles)*60;
-}
-
-void pump_init()
-{
-    pump.period(.001); // 1kHz PWM
-    pump = 0;
-    //ledGrn.period(.001);
-
-    InterruptIn pumpTach(pumpTachPin);
-    pumpTach.rise(&pumpTachTrigger);
-
-    pump_control_PID.setInputLimits(pumpMinPSI, pumpMaxPSI);
-    pump_control_PID.setOutputLimits(0.0, 1.0); // Output is a PWM signal ranging from 0-1
-    pump_control_PID.setMode(AUTO_MODE);
-    pump_control_PID.setSetPoint(((double)pot2)*pumpMaxPSI); // pump setpoint based on pot 2*/
-}
-
-void pump_pid_update(char error)
-{
-    if (pumpPressure.status != 0x40) {
-        pump = 0;
-        pump_control_PID.reset();
-    } else {
-        pump_control_PID.setSetPoint(((double)pot2)*pumpMaxPSI);
-
-        //Update the process variable.
-        pump_control_PID.setProcessValue(pumpPressure.pressurePSI);
-        //PID calculation and set the new output value.
-        pump = pump_control_PID.compute();
-        //pump = 0.1;
-        //ledGrn = ((float)1.0-pump.read());
-    }
-}
-
-void update_pressures()
+//Liquid Flow Sensor Adjacent to the Pump
+void update_flow2()
 {
     Timer timer;
     timer.start();
@@ -84,47 +9,21 @@
     while (true) {
         i2c1_m.lock();
         timer.reset();
-        error = pumpPressure.readPT();
-        //error |= mixerPressure.readPT();
-        int wait = (200 - timer.read_ms());
+        error = mainflow.Measure(FLOW);
+        //int wait = (200 - timer.read_ms());
         i2c1_m.unlock();
-        Thread::wait(wait);
-        pump_pid_update(error);
+        //Thread::wait(wait);
     }
 }
 
-void update_flow1()
-{
-    Timer timer;
-    timer.start();
-    char error;
-    while (true) {
-        i2c2_m.lock();
-        timer.reset();
-        error = mainflow.Measure(FLOW);
-        int wait = (200 - timer.read_ms());
-        i2c2_m.unlock();
-        Thread::wait(wait);
-    }
+//High Speed Pressure Sensor  
+void highspeedpressure(){
+     while(true) {
+        High_Speed_Pressure = analog_value.read(); // 
+        High_Speed_Pressure = High_Speed_Pressure*100*(14.69/8.6); // Calibrate value to 1atm
+        wait_ms(1);
+  }  
 }
-
-//------------------------------------------------
-void update_flow2()
-{
-    Timer timer;
-    timer.start();
-    char error;
-    while (true) {
-        i2c3_m.lock();
-        timer.reset();
-        error = loopflow.Measure(FLOW);
-        int wait = (200 - timer.read_ms());
-        i2c3_m.unlock();
-        Thread::wait(wait);
-    }
-}
-//------------------------------------------------   
-
 void print_process_values()
 {
     //Thread::wait(100); // Wait initially to allow sensors to update, prevents a zero reading from going to serial
@@ -134,44 +33,26 @@
         stdio_m.lock();
         timer.reset();
 
-        pc.printf("%.02fkPa %.02fpsi %.02fC %02X %.2f%% %.0fRPM %u %.0f %s %u %.0f %s %.3f %.02fHz %.02f\r\n",
-                  pumpPressure.pressureKPA, pumpPressure.pressurePSI, pumpPressure.temperatureC, pumpPressure.status,
-                  pump.read()*100, pumpRpm,
-                  mainflow.flow.u16, (((float)mainflow.flow.i16) / mainflow.scaleFactor.u16), mainflow.flowUnitStr, 
-                  loopflow.flow.u16, (((float)loopflow.flow.i16) / loopflow.scaleFactor.u16), loopflow.flowUnitStr,
-                  ((double)pot2)*pumpMaxPSI, frequency, dutycycle);//, agentlevel;
-        int wait = (1000 - timer.read_ms());
-
+        pc.printf("%0.02fpsi raw: %u %.02f\r\n",
+                High_Speed_Pressure, mainflow.flow.u16, t);
+        //pc.printf("%.0f %s (raw: %i) Temp: %.1fC Vdd: %.2f\n\r", ((float)mainflow.flow.i16 / mainflow.scaleFactor.u16), mainflow.flowUnitStr, mainflow.flow.i16, (float)mainflow.temperature.i16/10, (float)mainflow.vdd.u16/1000);
+        //int wait = 1;//(1000- timer.read_ms());
         stdio_m.unlock();
-        Thread::wait(wait);
+        //Thread::wait(wait);
     }
 }
 
 // main() runs in its own thread in the OS
 int main()
 {
-    pump_init();
+    t1.start();
     //ledBlu = 1;
     pc.printf("Serenity Starting up...\n\r");
-//--------------------------------------------
-dutycycleup.rise(&dutycycleincrease);
-dutycycledown.rise(&dutycycledecrease);
-frequencyup.rise(&frequencyincrease);
-frequencydown.rise(&frequencydecrease);    
-
-    //Thread to execute injector valve control
-    Injector_Valve_Control.set_priority(osPriorityHigh);
-    Injector_Valve_Control.start(injectorvalvecontrol);
-//--------------------------------------------
-
-    // Thread to poll pressure sensors
-    update_pressures_t.set_priority(osPriorityNormal);
-    update_pressures_t.start(update_pressures); 
-
-    // Thread to poll flow sensor
-    update_flow1_t.set_priority(osPriorityNormal);
-    update_flow1_t.start(update_flow1);
-    
+  
+    //Thread to poll high speed pressure sensor
+    HighSpeedPressure.set_priority(osPriorityNormal);
+    HighSpeedPressure.start(highspeedpressure);
+  
     //Thread to poll flow sensor
     update_flow2_t.set_priority(osPriorityNormal);
     update_flow2_t.start(update_flow2);
@@ -181,8 +62,8 @@
     print_process_values_t.start(&print_process_values);
 
     while (true) {
-         pump_tach_update();
-        
+        t= t1.read_ms();
+             
     }
 }
 
--- a/main.h	Wed Jul 26 14:03:10 2017 +0000
+++ b/main.h	Mon Jul 31 20:55:31 2017 +0000
@@ -7,33 +7,22 @@
 #include "PID.h"
 #include "coil-driver.h"
 #include "VL6180.h"
-/*Start of Where Additional Code was Added
---------------------------------------------------------------------------------------------------*/
-//Coil shutoff(A1, 5000, 40, 6); // Shutoff valve, 5ms spike time, 25kHz PWM at 15% duty cycle
-Coil injector(A0, 200, 40, 3); // Injector valve, 200us spike time, 25kHz PWM at 7.5% duty cycle
 
-InterruptIn dutycycleup(A2);
-InterruptIn dutycycledown(D4);
-InterruptIn frequencyup(A5);
-InterruptIn frequencydown(A4);
+//Timer From Start of the Script
+Timer t1;
+float t;
 
-Thread Injector_Valve_Control;
-
-double frequency=5.00;
-double dutycycle=0.75;
-float openvalue=(((1/frequency)*dutycycle));
-float offvalue=(1/frequency)-openvalue;
-
-/*
---------------------------------------------------------------------------------------------------*/
-
+//High Speed Pressure
+AnalogIn analog_value(A3);
+Thread HighSpeedPressure;
+float High_Speed_Pressure=0.00;
 
 // Mbed application shield display
 #include "C12832A1Z.h"
 #include "Small_7.h"
 #include "Fonts/ArialR12x14.h"
 
-C12832A1Z lcd(D11, D13, D12, D7, D10); // MOSI, SCK, Reset, A0, CS
+//C12832A1Z lcd(D11, D13, D12, D7, D10); // MOSI, SCK, Reset, A0, CS
 // LCD width and height (minus 1)
 #define lcdWidth 127
 #define lcdHeight 31
@@ -45,8 +34,8 @@
 //#define pumpHystPSI 2
 
 // Gas flow sensor defines
-#define SFM7033_ADDR 0x40
-#define SFM7034_ADDR 0x40
+#define MAINFLOW_ADDR 0x40
+#define LOOPFLOW_ADDR 0x40
 // End gas flow sensor defines
 
 // Liquid pump defines
@@ -55,17 +44,15 @@
 float pumpKp = 4.0;
 float pumpKi = 1.0;
 #define pumpKd 0
-
 #define pumpPwmFrequency 1000 // Frequency of PWM signal supplied to pump
 #define pumpTachPoles 6 // 6 pulses per revolution
-#define pumpTachPin PB_15 // Pump tach input (green wire)
+#define pumpTachPin PA_10 // Pump tach input (green wire)
 #define pumpCtrlPin PB_13 // Pump control (white wire)
 // End Liquid pump defines
 
-Thread print_process_values_t, update_pressures_t, update_flow1_t, update_flow2_t, update_level_t, update_lcd_t, update_shutoff_t;
+Thread print_process_values_t, update_pressures_t, update_flow1_t, update_flow2_t, update_shutoff_t;
 Mutex i2c1_m, i2c2_m, i2c3_m, stdio_m;
 
-//DigitalOut myled(LED2);
 Serial pc(USBTX, USBRX, 250000); // tx, rx, baud
 
 // an I2C sub-class that provides a constructed default
@@ -78,34 +65,16 @@
 };
 
 //I2CPreInit gI2C1(I2C_SDA, I2C_SCL, I2C frequency);
-I2CPreInit i2c1(PB_9, PB_8, 100000);
-I2CPreInit i2c2(PB_3, PB_10, 100000);
-I2CPreInit i2c3(PB_4, PA_8, 100000);
-
-KELLER_PRESSURE pumpPressure(i2c1, 0x40);
+I2CPreInit i2c1(PB_3, PB_10, 100000);
 
 // Sensirion gas flow sensor object (i2c object, i2c address, calibration field, resolution 9-16 bit)
-// calibration field 1: Air, 2: O2, 3: N2O
-SF04 mainflow(i2c2, SFM7033_ADDR, 0, 9); // Gas flow sensor (SFM7033)
-SF04 loopflow(i2c3, SFM7034_ADDR, 0, 9);
+SF04 mainflow(i2c1, MAINFLOW_ADDR, 0, 16);
 // Mbed application shield
-//AnalogIn pot1(A0);
 AnalogIn pot2(A1);
-
 PwmOut pump(pumpCtrlPin);
-//pump.period(.001);
 
 PID pump_control_PID(pumpKp, pumpKi, pumpKd, pumpPIDRate);
 
-//InterruptIn pumpTach(pumpTachPin);
-volatile int pumpTachCounts = 0;
-volatile float pumpRpm = 0;
-
-//PwmOut ledRed(PE_11);
-//PwmOut ledGrn(PD_15);
-//DigitalOut ledBlu(PF_12);
-
-// Level sensor
-//VL6180 level(i2c1); //I2C object
-//float agentlevel = 0;
+VL6180 level(i2c1); //I2C object
+float agentlevel = 0;
 #endif
\ No newline at end of file