System Management code
Dependencies: mbed CANBuffer Watchdog MODSERIAL mbed-rtos xbeeRelay IAP
Fork of SystemManagement by
Revision 10:db13782f05d9, committed 2014-10-19
- Comitter:
- martydd3
- Date:
- Sun Oct 19 22:46:46 2014 +0000
- Parent:
- 9:ada056631cac
- Child:
- 11:1d086618dd18
- Commit message:
- Copied Kiran's calculations for monitoring batttery currents; To do: Test on car, Xbees, 10 Hz Can Message (what data is needed?)
Changed in this revision
--- a/CANBuffer.lib Thu Oct 16 15:13:49 2014 +0000 +++ b/CANBuffer.lib Sun Oct 19 22:46:46 2014 +0000 @@ -1,1 +1,1 @@ -http://developer.mbed.org/teams/Penn-Electric-Racing/code/CANBuffer/#36e62c1f7039 +http://developer.mbed.org/teams/Penn-Electric-Racing/code/CANBuffer/#110f268af846
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CurrentMonitor/CurrentMonitor.cpp Sun Oct 19 22:46:46 2014 +0000
@@ -0,0 +1,68 @@
+#include "mbed.h"
+#include "CurrentMonitor.h"
+#include "Store_RTC.h"
+
+#define MSEC_HRS 2.77778e-7
+#define DC_DC_ISENSE_OFFSET_V 0.5
+#define DC_DC_ISENSE_INCREMENT 0.133
+
+#define BAT_ISENSE_OFFSET_V 1.65
+#define BAT_ISENSE_INCREMENT 0.5297
+
+CANBuffer *tx_Current_Buffer;
+
+double BATmA_Hr;
+float DCA_msec,BATA_msec;
+float Bat_I_Ratio,DC_I_Ratio;
+
+AnalogIn BatISense(p19);
+AnalogIn DCSense(p20);
+
+RTCStore store;
+
+union converter{
+ float data;
+ char ch[4];
+} convert;
+
+CurrentMonitor::CurrentMonitor(CANBuffer *can){
+ tx_Current_Buffer = can;
+}
+
+void update_current(const void *arg){
+ char data[4] = {0};
+ while(1){
+ float bat_reading = store.read(1);
+ convert.data = bat_reading;
+
+ data[0] = convert.ch[0];
+ data[1] = convert.ch[1];
+ data[2] = convert.ch[2];
+ data[3] = convert.ch[3];
+
+ CANMessage txMessage(TX_CURRENT_ID, data, 4);
+ tx_Current_Buffer->txWrite(txMessage);
+
+ Thread::wait(100); //10 Hz update
+ }
+}
+
+void monitor_current(const void *arg){
+ while(1){
+ Bat_I_Ratio=BatISense.read();
+ BATA_msec=(((Bat_I_Ratio*3.3) - BAT_ISENSE_OFFSET_V)/BAT_ISENSE_INCREMENT);
+ BATmA_Hr+=(BATA_msec*MSEC_HRS);
+ store.write(BATmA_Hr,0);
+
+ DC_I_Ratio=DCSense.read();
+ DCA_msec=(((DC_I_Ratio*3.3) - DC_DC_ISENSE_OFFSET_V)/DC_DC_ISENSE_INCREMENT);
+ store.write(DCA_msec,1);
+
+ Thread::wait(1); //1 Khz coulomb counter
+ }
+}
+
+void CurrentMonitor::start_update(){
+ Thread monitor_thread(monitor_current);
+ Thread update_thread(update_current);
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CurrentMonitor/CurrentMonitor.h Sun Oct 19 22:46:46 2014 +0000
@@ -0,0 +1,18 @@
+#ifndef _FILE_CURRENTMONITOR_H
+#define _FILE_CURRENTMONITOR_H
+
+#include "mbed.h"
+#include "rtos.h"
+#include "CANBuffer.h"
+
+const int TX_CURRENT_ID = ((4 << 8) | 3);
+
+class CurrentMonitor{
+public:
+ CurrentMonitor(CANBuffer *can);
+ void start_update();
+
+private:
+
+};
+#endif
\ No newline at end of file
--- a/DC_DC/DC_DC.cpp Thu Oct 16 15:13:49 2014 +0000
+++ b/DC_DC/DC_DC.cpp Sun Oct 19 22:46:46 2014 +0000
@@ -1,11 +1,12 @@
#include "mbed.h"
#include "DC_DC.h"
-DigitalOut dc_pin(p20);
FanPump *fanPump;
CANBuffer *tx_DC_Buffer;
bool status;
+DigitalOut dc_pin(p20);
+
DC::DC(FanPump *fp, CANBuffer *can){
status = false;
dc_pin = !status;
@@ -26,18 +27,17 @@
dc_pin = !status;
}
-void update(const void *arg){
+void update_dcdc(const void *arg){
char data[4] = {0};
while(1){
data[0] = status;
CANMessage txMessage(TX_DC_DC_ID, data, 4);
- CANMessage msg(1);
- tx_DC_Buffer->txWrite(msg);
+ tx_DC_Buffer->txWrite(txMessage);
Thread::wait(100); //10 Hz update
}
}
void DC::start_update(){
- Thread update_thread(update);
+ Thread update_thread(update_dcdc);
}
\ No newline at end of file
--- a/SysMngmt.cpp Thu Oct 16 15:13:49 2014 +0000
+++ b/SysMngmt.cpp Sun Oct 19 22:46:46 2014 +0000
@@ -4,12 +4,18 @@
Revised Sept 30, 2014: Began analyzing and commenting program, trying to figure out what the hell it does (Martin Deng)
*/
-#include "SysMngmt.h"
+//#include "SysMngmt.h"
+
+/*
#include "Get_IMD.h"
#include "PollSwitch.h"
#include "TemperatureRead.h"
+*/
+
#include "Store_RTC.h"
#include "XBee_Lib.h"
+
+
#include "CANBuffer.h"
#include "mbed.h"
@@ -20,6 +26,68 @@
#include "DC_DC.h"
#include "PollSwitch.h"
#include "IMD.h"
+#include "CurrentMonitor.h"
+
+CANBuffer rxBuffer(CAN1, MEDIUM);
+//XBee250x XbeeTx;
+Serial pc1(USBTX,USBRX);
+
+char sys_src_id = 4; // source address of system management
+char reset_id = 0x010;
+
+extern "C" void mbed_reset();
+
+void soft_reset(){
+ //http://developer.mbed.org/forum/mbed/topic/890/
+ mbed_reset();
+}
+
+int main() {
+ CANMessage rx_msg;
+ Watchdog wdt;
+
+ wdt.kick(10.0);
+ pc1.baud(115200);
+
+ FanPump fanPump(&rxBuffer);
+ DC dc_dc(&fanPump, &rxBuffer);
+ PollSwitch pollSwitch(&rxBuffer);
+ IMD imdMonitor(&rxBuffer);
+ CurrentMonitor curMonitor(&rxBuffer);
+
+ fanPump.start_update();
+ dc_dc.start_update();
+ pollSwitch.start_update();
+ imdMonitor.start_update();
+ curMonitor.start_update();
+
+ while(1)
+ {
+ if(rxBuffer.rxRead(rx_msg)){
+ if(rx_msg.id == reset_id)
+ soft_reset();
+
+ char src_addr = (rx_msg.id & 0x0700) >> 8; // get bits 10:8
+
+ if(src_addr == sys_src_id){
+ char cont_id = (rx_msg.id & 0x00FF); // get bits 7:0
+
+ // only control fans of dc_dc converter is on
+ if(cont_id == RX_FAN_ID && dc_dc.is_on())
+ {
+ fanPump.set_fan((FanSelect)rx_msg.data[0], rx_msg.data[1]);
+ }
+
+ if(cont_id == RX_DC_DC_ID){
+ dc_dc.set(rx_msg.data[0]);
+ }
+ } // check for correct src_addr
+ } // check CANBuffer
+
+ wdt.kick();
+ } // main while loop
+}
+
//Possible problems in IMD coz change of counter
//Possible problems in BatteryStatus coz change in library
@@ -51,34 +119,10 @@
Interrupt handler, This is probably linked to the Timer 2 interrupt request somewhere by the libraries
-extern "C" void TIMER2_IRQHandler(void)
-{
- if((LPC_TIM2->IR & 0x01) == 0x01) // if MR0 interrupt
- {
- // This probably shouldn't be here, never have a printf() in an interrupt, locks up the main thread
- // printf("Every 1ms\n\r");
-
- LPC_TIM2->IR |= 1 << 0; // Clear MR0 interrupt flag
-
- // gonna hope all these calculations are correct
- // writes to RTC store, but there's no read code here
- // 2 misleading things. First, RTC store writes to a general purpose register
- // secondly, no code reads from this register in this .cpp, but maybe some other code does
-
- Bat_I_Ratio=BatISense.read();
- BATA_msec=(((Bat_I_Ratio*3.3) - BAT_ISENSE_OFFSET_V)/BAT_ISENSE_INCREMENT);
- BATmA_Hr+=(BATA_msec*MSEC_HRS);
- store.write(BATmA_Hr,0);
-
- DC_I_Ratio=DCSense.read();
- DCA_msec=(((DC_I_Ratio*3.3) - DC_DC_ISENSE_OFFSET_V)/DC_DC_ISENSE_INCREMENT);
- store.write(DCA_msec,1);
-
- LPC_TIM2->TCR |= (1<<1); //Reset Timer1
- LPC_TIM2->TCR &= ~(1<<1); //Re Enable Timer1
- }
-}
+*/
+
+/*
Appears to read a whole bunch of DigitalOut pins in void PollSwitch(), store the value in uint16_t Rxpoll,
and write the result to the CAN bus
@@ -261,51 +305,3 @@
Main Loop: Currently reads CANMessages from Can interface (Pins: rd = p30, td = p29)
Send CANMessage data through XBee radio transmitters
*/
-
-
-CANBuffer rxBuffer(CAN1, MEDIUM);
-XBee250x XbeeTx;
-Serial pc1(USBTX,USBRX);
-
-char sys_src_id = 4; // source address of system management
-
-int main() {
- CANMessage rx_msg;
- Watchdog wdt;
-
- wdt.kick(10.0);
- pc1.baud(115200);
-
- FanPump fanPump(&rxBuffer);
- DC dc_dc(&fanPump, &rxBuffer);
- PollSwitch pollSwitch(&rxBuffer);
- IMD imdMonitor(&rxBuffer);
-
- fanPump.start_update();
- dc_dc.start_update();
- pollSwitch.start_update();
- imdMonitor.start_update();
-
- while(1)
- {
- if(rxBuffer.rxRead(rx_msg)){
- char src_addr = (rx_msg.id & 0x0700) >> 8; // get bits 10:8
-
- if(src_addr == sys_src_id){
- char cont_id = (rx_msg.id & 0x00FF); // get bits 7:0
-
- // only control fans of dc_dc converter is on
- if(cont_id == RX_FAN_ID && dc_dc.is_on())
- {
- fanPump.set_fan((FanSelect)rx_msg.data[0], rx_msg.data[1]);
- }
-
- if(cont_id == RX_DC_DC_ID){
- dc_dc.set(rx_msg.data[0]);
- }
- } // check for correct src_addr
- } // check CANBuffer
-
- wdt.kick();
- } // main while loop
-}
--- a/Watchdog.lib Thu Oct 16 15:13:49 2014 +0000 +++ b/Watchdog.lib Sun Oct 19 22:46:46 2014 +0000 @@ -1,1 +1,1 @@ -http://developer.mbed.org/teams/Penn-Electric-Racing/code/Watchdog/#80edf726eb04 +http://developer.mbed.org/teams/Penn-Electric-Racing/code/Watchdog/#390a291e8c4b
