System Management code

Dependencies:   mbed CANBuffer Watchdog MODSERIAL mbed-rtos xbeeRelay IAP

Fork of SystemManagement by Martin Deng

Files at this revision

API Documentation at this revision

Comitter:
martydd3
Date:
Fri Nov 07 21:09:50 2014 +0000
Parent:
21:2e83002d452d
Child:
23:ebdb30592a4b
Commit message:
CANController to link DC_DC and FanPump, as well as listen to CAN Messages (since only these 2 functions act based on incoming messages)

Changed in this revision

CANController/CANController.c Show annotated file Show diff for this revision Revisions of this file
CANController/CANController.h Show annotated file Show diff for this revision Revisions of this file
CANController/DC_DC/DC_DC.cpp Show annotated file Show diff for this revision Revisions of this file
CANController/DC_DC/DC_DC.h Show annotated file Show diff for this revision Revisions of this file
CANController/FanPump/FanPump.cpp Show annotated file Show diff for this revision Revisions of this file
CANController/FanPump/FanPump.h Show annotated file Show diff for this revision Revisions of this file
DC_DC/DC_DC.cpp Show diff for this revision Revisions of this file
DC_DC/DC_DC.h Show diff for this revision Revisions of this file
FanPump/FanPump.cpp Show diff for this revision Revisions of this file
FanPump/FanPump.h Show diff for this revision Revisions of this file
IOobjects.cpp Show annotated file Show diff for this revision Revisions of this file
IOobjects.h Show annotated file Show diff for this revision Revisions of this file
SerialDiagnostics/SerialDiagnostics.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib 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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CANController/CANController.c	Fri Nov 07 21:09:50 2014 +0000
@@ -0,0 +1,1 @@
+#include "CANController.h"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CANController/CANController.h	Fri Nov 07 21:09:50 2014 +0000
@@ -0,0 +1,23 @@
+#ifndef _FILE_CANCONTRL_H
+#define _FILE_CANCONTRL_H
+
+#include "DC_DC.h"
+#include "FanPump.h"
+
+enum ContrlPinName{
+    FAN1, FAN2, FAN3, PUMP
+}
+
+class CANController{
+public:
+    CANController();
+    bool dc_on();
+    void set_dc(bool status);   
+    bool write_contrl(ContrlPinName name, float duty);
+    void direct_off(ContrlPinName name, float duty);
+    float *read_control();
+
+private:
+    FanPump *contrl_pins[6];
+    DC dc;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CANController/DC_DC/DC_DC.cpp	Fri Nov 07 21:09:50 2014 +0000
@@ -0,0 +1,23 @@
+#include "mbed.h"
+#include "DC_DC.h"
+
+DigitalOut dc_pin(p20);
+DigitalOut dc_control(p18);
+
+#define OFF 1
+#define ON 0
+
+DC::DC(){
+    dc_control = OFF;
+}
+
+bool DC::is_on(){
+    return dc_pin;
+}
+
+void DC::set(bool s){
+    if(s)
+        dc_control = ON;
+    else
+        dc_control = OFF;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CANController/DC_DC/DC_DC.h	Fri Nov 07 21:09:50 2014 +0000
@@ -0,0 +1,18 @@
+#ifndef _FILE_DC_DC_H
+#define _FILE_DC_DC_H
+
+#include "CANBuffer.h"
+#include "FanPump.h"
+#include "rtos.h"
+
+const int TX_DC_DC_ID = ((0x4 << 8) | 0x01);
+const int RX_DC_DC_ID = ((0x4 << 8) | 0x90);
+
+class DC{
+    public:
+        DC();          //constructor takes function to shut down certain processes when off
+        bool is_on();
+        void set(bool status);   
+};
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CANController/FanPump/FanPump.cpp	Fri Nov 07 21:09:50 2014 +0000
@@ -0,0 +1,82 @@
+#include "FanPump.h"
+
+static FanPump* instance[6] = { NULL };         // Access pwm object by channel#
+const int PCLK = 24e6;          // 24Mhz clock
+uint32_t FanPump::period_us = 0.0;
+
+// Interrupt handler, must be called from static context, calls all the slew functions
+void pwmIRQ() {
+    int sum = 0;
+    int items = 0;
+    if (LPC_PWM1->IR & 1) {
+        for (int i = 0; i < 6; i++) {
+            if (instance[i] != NULL) {
+                items++;
+                sum += instance[i]->slew();
+            }
+        }
+    }
+    LPC_PWM1->IR = 0x73F;                 // Clear interrupts
+    if (items == sum) LPC_PWM1->MCR = 0;  // Detach all the interrupts, every pin is already where it needs to be
+}
+
+// Called on each timer expire for each pwm object
+int FanPump::slew() {
+    uint32_t currPulseT = *((uint32_t*)(&LPC_PWM1->MR0)+chan);    // Get the current pulsewidth ticks
+    uint32_t setPointT = setPoint_us * (PCLK/1e6);   // Convert us into ticks
+    if (currPulseT == setPointT) return 1;           // Nothing to slew here, already at its setpoint
+    
+    uint32_t currPulse_us = currPulseT / (PCLK/1e6);        // Convert to us
+    if (currPulseT < setPointT) {
+        if (setPoint_us - currPulse_us <= maxChange_us) pwm.pulsewidth_us(setPoint_us);  // Close to the setpoint, write it directly
+        else pwm.pulsewidth_us(currPulse_us + maxChange_us);       
+    } else {
+        if (currPulse_us - setPoint_us <= maxChange_us) pwm.pulsewidth_us(setPoint_us);  // Close to the setpoint, write it directly
+        else pwm.pulsewidth_us(currPulse_us - maxChange_us);
+    }
+    return 0;
+}
+
+FanPump::FanPump(PinName pin, float period, float slew) : pwm(pin) {
+    
+    // Match the pin# to the PWM object for the interrupt
+    int chan=0;
+    if (pin == p26 || pin == LED1) chan = 1;
+    if (pin == p25 || pin == LED2) chan = 2;
+    if (pin == p24 || pin == LED3) chan = 3;
+    if (pin == p23 || pin == LED4) chan = 4;
+    if (pin == p22)                chan = 5;
+    if (pin == p21)                chan = 6;
+    if (chan == 0) return;     // Invalid pin
+    instance[chan-1] = this;
+    
+    setPoint_us = 0;
+    period_us = period / 1.0e6;
+    pwm.period_us(period_us);
+    maxChange_us = (period / slew) * period_us;
+        
+    LPC_PWM1->IR = 0x73F;    // Clear interrupts
+    NVIC_SetVector(PWM1_IRQn, (uint32_t)&pwmIRQ);
+    NVIC_SetPriority(PWM1_IRQn, 0);
+    NVIC_EnableIRQ(PWM1_IRQn);
+    LPC_PWM1->MCR = 1;       // Enable interrupt on MR0 (when the pwm period expires)
+}
+void FanPump::write(float duty) {
+    if (duty < 0) duty = 0;
+    if (duty > 1) duty = 1;
+    setPoint_us = duty * period_us;
+    LPC_PWM1->MCR = 1;       // Enable interrupt on MR0 (when the pwm period expires)
+}
+void FanPump::directOff() {
+    __disable_irq();
+    pwm.pulsewidth_us(0);
+    setPoint_us = 0;
+    __enable_irq();
+}
+float FanPump::read() {
+    return (float)(setPoint_us)/(float)(period_us);
+}
+float FanPump::readRaw() {
+    uint32_t currPulseT = *((uint32_t*)(&LPC_PWM1->MR0)+chan);    // Get the current pulsewidth ticks
+    return ((float)(currPulseT) / (float)(PCLK/1e6)) / (float)(period_us);
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CANController/FanPump/FanPump.h	Fri Nov 07 21:09:50 2014 +0000
@@ -0,0 +1,24 @@
+#ifndef _FILE_FANPUMP_H
+#define _FILE_FANPUMP_H
+
+#include "mbed.h"
+
+class FanPump{
+public:
+    // Takes Pwmout pin, period (seconds), duty cycle slew rate in second^-1 (1 means duty 0 to 1 occurs over 1 second, 0 means no slew)
+    // Use slew rate to implement soft start
+    FanPump(PinName pin, float period, float slew);
+    void write(float duty);
+    float read();       // Read the last setpoint
+    float readRaw();    // Read the raw current duty (may be mid-transition)
+    void directOff();   // Turn off the channel immediately (no slew)
+    int slew();         // Slew rate callback function
+private:
+    PwmOut pwm;         // mbed PWM out
+    volatile int chan;                  // pwm channel#
+    static uint32_t period_us;          // Period in microseconds (shared by all channels)
+    volatile uint32_t setPoint_us;
+    volatile uint32_t maxChange_us;     // Max pulsewidth change allowed to achieve the slew rate
+};
+
+#endif
\ No newline at end of file
--- a/DC_DC/DC_DC.cpp	Fri Nov 07 01:26:37 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-#include "mbed.h"
-#include "DC_DC.h"
-
-FanPump *fanPump;
-CANBuffer *tx_DC_Buffer;
-bool status;
-
-DigitalOut dc_pin(p20);
-
-DC::DC(FanPump *fp, CANBuffer *can){
-    status = false;
-    dc_pin = !status;
-    tx_DC_Buffer = can;
-    fanPump = fp;
-}
-
-bool DC::is_on(){
-    return status;
-}
-
-void DC::set(bool s){/*
-    status = s;
-    if(!status){
-        fanPump->shutdown_all();    
-    }
-    
-    dc_pin = !status;*/
-}
-
-void update_dcdc(const void *arg){
-    char data[1] = {0};
-    while(1){
-        data[0] = status;
-        CANMessage txMessage(TX_DC_DC_ID, data, 1);
-        tx_DC_Buffer->txWrite(txMessage);
-        
-        Thread::wait(100);          //10 Hz update
-    }
-}
-
-void DC::start_update(){
-    Thread update_thread(update_dcdc);
-}
\ No newline at end of file
--- a/DC_DC/DC_DC.h	Fri Nov 07 01:26:37 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-#ifndef _FILE_DC_DC_H
-#define _FILE_DC_DC_H
-
-#include "CANBuffer.h"
-#include "FanPump.h"
-#include "rtos.h"
-
-const int TX_DC_DC_ID = ((0x4 << 8) | 0x01);
-const int RX_DC_DC_ID = ((0x4 << 8) | 0x90);
-
-class DC{
-public:
-    DC(FanPump *fanPump, CANBuffer *can);          //constructor takes function to shut down certain processes when off
-    bool is_on();
-    void set(bool status);   
-    void start_update(); 
-};
-
-#endif
\ No newline at end of file
--- a/FanPump/FanPump.cpp	Fri Nov 07 01:26:37 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-#include "FanPump.h"
-
-static FanPump* instance[6] = { NULL };         // Access pwm object by channel#
-const int PCLK = 24e6;          // 24Mhz clock
-uint32_t FanPump::period_us = 0.0;
-
-// Interrupt handler, must be called from static context, calls all the slew functions
-void pwmIRQ() {
-    int sum = 0;
-    int items = 0;
-    if (LPC_PWM1->IR & 1) {
-        for (int i = 0; i < 6; i++) {
-            if (instance[i] != NULL) {
-                items++;
-                sum += instance[i]->slew();
-            }
-        }
-    }
-    LPC_PWM1->IR = 0x73F;                 // Clear interrupts
-    if (items == sum) LPC_PWM1->MCR = 0;  // Detach all the interrupts, every pin is already where it needs to be
-}
-
-// Called on each timer expire for each pwm object
-int FanPump::slew() {
-    uint32_t currPulseT = *((uint32_t*)(&LPC_PWM1->MR0)+chan);    // Get the current pulsewidth ticks
-    uint32_t setPointT = setPoint_us * (PCLK/1e6);   // Convert us into ticks
-    if (currPulseT == setPointT) return 1;           // Nothing to slew here, already at its setpoint
-    
-    uint32_t currPulse_us = currPulseT / (PCLK/1e6);        // Convert to us
-    if (currPulseT < setPointT) {
-        if (setPoint_us - currPulse_us <= maxChange_us) pwm.pulsewidth_us(setPoint_us);  // Close to the setpoint, write it directly
-        else pwm.pulsewidth_us(currPulse_us + maxChange_us);       
-    } else {
-        if (currPulse_us - setPoint_us <= maxChange_us) pwm.pulsewidth_us(setPoint_us);  // Close to the setpoint, write it directly
-        else pwm.pulsewidth_us(currPulse_us - maxChange_us);
-    }
-    return 0;
-}
-
-FanPump::FanPump(PinName pin, float period, float slew) : pwm(pin) {
-    
-    // Match the pin# to the PWM object for the interrupt
-    int chan=0;
-    if (pin == p26 || pin == LED1) chan = 1;
-    if (pin == p25 || pin == LED2) chan = 2;
-    if (pin == p24 || pin == LED3) chan = 3;
-    if (pin == p23 || pin == LED4) chan = 4;
-    if (pin == p22)                chan = 5;
-    if (pin == p21)                chan = 6;
-    if (chan == 0) return;     // Invalid pin
-    instance[chan-1] = this;
-    
-    setPoint_us = 0;
-    period_us = period / 1.0e6;
-    pwm.period_us(period_us);
-    maxChange_us = (period / slew) * period_us;
-        
-    LPC_PWM1->IR = 0x73F;    // Clear interrupts
-    NVIC_SetVector(PWM1_IRQn, (uint32_t)&pwmIRQ);
-    NVIC_SetPriority(PWM1_IRQn, 0);
-    NVIC_EnableIRQ(PWM1_IRQn);
-    LPC_PWM1->MCR = 1;       // Enable interrupt on MR0 (when the pwm period expires)
-}
-void FanPump::write(float duty) {
-    if (duty < 0) duty = 0;
-    if (duty > 1) duty = 1;
-    setPoint_us = duty * period_us;
-    LPC_PWM1->MCR = 1;       // Enable interrupt on MR0 (when the pwm period expires)
-}
-void FanPump::directOff() {
-    __disable_irq();
-    pwm.pulsewidth_us(0);
-    setPoint_us = 0;
-    __enable_irq();
-}
-float FanPump::read() {
-    return (float)(setPoint_us)/(float)(period_us);
-}
-float FanPump::readRaw() {
-    uint32_t currPulseT = *((uint32_t*)(&LPC_PWM1->MR0)+chan);    // Get the current pulsewidth ticks
-    return ((float)(currPulseT) / (float)(PCLK/1e6)) / (float)(period_us);
-}
\ No newline at end of file
--- a/FanPump/FanPump.h	Fri Nov 07 01:26:37 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-#ifndef _FILE_FANPUMP_H
-#define _FILE_FANPUMP_H
-
-#include "mbed.h"
-
-class FanPump{
-public:
-    // Takes Pwmout pin, period (seconds), duty cycle slew rate in second^-1 (1 means duty 0 to 1 occurs over 1 second, 0 means no slew)
-    // Use slew rate to implement soft start
-    FanPump(PinName pin, float period, float slew);
-    void write(float duty);
-    float read();       // Read the last setpoint
-    float readRaw();    // Read the raw current duty (may be mid-transition)
-    void directOff();   // Turn off the channel immediately (no slew)
-    int slew();         // Slew rate callback function
-private:
-    PwmOut pwm;         // mbed PWM out
-    volatile int chan;                  // pwm channel#
-    static uint32_t period_us;          // Period in microseconds (shared by all channels)
-    volatile uint32_t setPoint_us;
-    volatile uint32_t maxChange_us;     // Max pulsewidth change allowed to achieve the slew rate
-};
-
-#endif
\ No newline at end of file
--- a/IOobjects.cpp	Fri Nov 07 01:26:37 2014 +0000
+++ b/IOobjects.cpp	Fri Nov 07 21:09:50 2014 +0000
@@ -6,4 +6,5 @@
 Watchdog wdt(0.11);                                     // Watchdog timer set to 110ms
 PollSwitch pollSwitch;
 IMD imd;
-CoulombCounter coulombCounter(10, 0, 0);
\ No newline at end of file
+CoulombCounter coulombCounter(10, 0, 0);
+DC dc;
\ No newline at end of file
--- a/IOobjects.h	Fri Nov 07 01:26:37 2014 +0000
+++ b/IOobjects.h	Fri Nov 07 21:09:50 2014 +0000
@@ -9,6 +9,7 @@
 #include "PollSwitch.h"
 #include "IMD.h"
 #include "CoulombCounter.h"
+#include "DC_DC.h"
 
 extern CANBuffer can;
 extern MODSERIAL pc;
@@ -16,5 +17,6 @@
 extern PollSwitch pollSwitch;
 extern IMD imd;
 extern CoulombCounter coulombCounter;
+extern DC dc;
  
 #endif
\ No newline at end of file
--- a/SerialDiagnostics/SerialDiagnostics.cpp	Fri Nov 07 01:26:37 2014 +0000
+++ b/SerialDiagnostics/SerialDiagnostics.cpp	Fri Nov 07 21:09:50 2014 +0000
@@ -77,11 +77,21 @@
         }
         
     // Reading Coulomb Counter
-        
         padCenter(line, max_charsPerLine-2, " ", ' '); ADD_LINE     // Generate blank line 
         padCenter(line, max_charsPerLine-2, " CoulombCounter ", '*'); ADD_LINE
         
-        sprintf(temp, "Current: %f ampHours: %f Capacity: %f SOC: %f", coulombCounter.current(), coulombCounter.ampHours(), coulombCounter.capacity(), coulombCounter.SOC()); ADD_SPRINTF_LINE
+        sprintf(temp, "Current: %f ampHours: %f ", coulombCounter.current(), coulombCounter.ampHours()); ADD_SPRINTF_LINE
+        sprintf(temp, "Capacity: %f SOC: %f ", coulombCounter.capacity(), coulombCounter.SOC()); ADD_SPRINTF_LINE
+        
+    // Reading DC_DC
+        padCenter(line, max_charsPerLine-2, " ", ' '); ADD_LINE     // Generate blank line 
+        padCenter(line, max_charsPerLine-2, " DC-DC Converter ", '*'); ADD_LINE
+        
+        sprintf(temp, "DC Converter on: %d ", dc.is_on()); ADD_SPRINTF_LINE
+        
+    // Reading FanPump
+        padCenter(line, max_charsPerLine-2, " ", ' '); ADD_LINE     // Generate blank line 
+        padCenter(line, max_charsPerLine-2, "  ", '*'); ADD_LINE
         
         // Write it all at once to output tx buffer
         for (int i = 0; i < strlen(buff); i++) {
--- a/mbed-rtos.lib	Fri Nov 07 01:26:37 2014 +0000
+++ b/mbed-rtos.lib	Fri Nov 07 21:09:50 2014 +0000
@@ -1,1 +1,1 @@
-http://developer.mbed.org/users/mbed_official/code/mbed-rtos/#aaa1b2c7c64c
+http://developer.mbed.org/users/mbed_official/code/mbed-rtos/#77c8e4604045
--- a/mbed.bld	Fri Nov 07 01:26:37 2014 +0000
+++ b/mbed.bld	Fri Nov 07 21:09:50 2014 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/552587b429a1
\ No newline at end of file
+http://mbed.org/users/mbed_official/code/mbed/builds/031413cf7a89
\ No newline at end of file