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:
Tue Aug 01 14:48:01 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
diff -r 79b23d1fbcd1 -r 8e47d5323647 main.cpp
--- a/main.cpp	Wed Jul 26 14:03:10 2017 +0000
+++ b/main.cpp	Tue Aug 01 14:48:01 2017 +0000
@@ -1,188 +1,19 @@
 #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()
+      
+int main()
 {
-    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());
+    pc.baud(250000);
+    t1.start();
+    pc.printf("Serenity Starting up...\n\r");
+   while (true) {
+        float t= t1.read_ms();
+        High_Speed_Pressure = analog_value.read(); // 
+        High_Speed_Pressure = High_Speed_Pressure*100*(14.69/8.6); // Calibrate value to 1atm
+        mainflow.Measure(FLOW);
+        pc.printf("%.02f %.02f\r\n", High_Speed_Pressure, t);
+        //pc.printf("%0.02fpsi raw: %u %.02f", High_Speed_Pressure, mainflow.flow.u16, t);*/
+            
     }
 }
 
-void update_pressures()
-{
-    Timer timer;
-    timer.start();
-    char error;
-    while (true) {
-        i2c1_m.lock();
-        timer.reset();
-        error = pumpPressure.readPT();
-        //error |= mixerPressure.readPT();
-        int wait = (200 - timer.read_ms());
-        i2c1_m.unlock();
-        Thread::wait(wait);
-        pump_pid_update(error);
-    }
-}
-
-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);
-    }
-}
-
-//------------------------------------------------
-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
-    Timer timer;
-    timer.start();
-    while (true) {
-        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());
-
-        stdio_m.unlock();
-        Thread::wait(wait);
-    }
-}
-
-// main() runs in its own thread in the OS
-int main()
-{
-    pump_init();
-    //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 flow sensor
-    update_flow2_t.set_priority(osPriorityNormal);
-    update_flow2_t.start(update_flow2);
-
-    // Thread to send process values to serial port
-    print_process_values_t.set_priority(osPriorityLow);
-    print_process_values_t.start(&print_process_values);
-
-    while (true) {
-         pump_tach_update();
-        
-    }
-}
-
diff -r 79b23d1fbcd1 -r 8e47d5323647 main.h
--- a/main.h	Wed Jul 26 14:03:10 2017 +0000
+++ b/main.h	Tue Aug 01 14:48:01 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