Penn Electric Racing / Mbed 2 deprecated SystemManagement

Dependencies:   mbed CANBuffer Watchdog MODSERIAL mbed-rtos xbeeRelay IAP

Fork of SystemManagement by Martin Deng

Committer:
martydd3
Date:
Tue Oct 21 23:44:15 2014 +0000
Revision:
12:e0adb697fcdb
Parent:
8:ecf68db484af
Added Error update thread, changed CAN message IDs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
martydd3 8:ecf68db484af 1 #include "IMD.h"
martydd3 8:ecf68db484af 2
martydd3 8:ecf68db484af 3 CANBuffer *tx_IMD_Buffer;
martydd3 8:ecf68db484af 4
martydd3 8:ecf68db484af 5 IMD::IMD(CANBuffer *can): _p(P1_26) {
martydd3 8:ecf68db484af 6 _p.rise(this, &IMD::rise);
martydd3 8:ecf68db484af 7 _p.fall(this, &IMD::fall);
martydd3 8:ecf68db484af 8 _period = 0.0;
martydd3 8:ecf68db484af 9 _pulsewidth = 0.0;
martydd3 8:ecf68db484af 10
martydd3 8:ecf68db484af 11 tx_IMD_Buffer = can;
martydd3 8:ecf68db484af 12 }
martydd3 8:ecf68db484af 13
martydd3 8:ecf68db484af 14 void IMD::rise() {
martydd3 8:ecf68db484af 15 _period = _t.read();
martydd3 8:ecf68db484af 16 _t.reset();
martydd3 8:ecf68db484af 17 }
martydd3 8:ecf68db484af 18
martydd3 8:ecf68db484af 19 void IMD::fall() {
martydd3 8:ecf68db484af 20 _pulsewidth = _t.read();
martydd3 8:ecf68db484af 21 }
martydd3 8:ecf68db484af 22
martydd3 8:ecf68db484af 23 float IMD::frequency() { return 1/_period; }
martydd3 8:ecf68db484af 24 float IMD::pulse_width() { return _pulsewidth; }
martydd3 8:ecf68db484af 25 float IMD::duty() { return _pulsewidth / _period; }
martydd3 8:ecf68db484af 26
martydd3 8:ecf68db484af 27 /*
martydd3 8:ecf68db484af 28 Status State
martydd3 8:ecf68db484af 29 1 Normal
martydd3 8:ecf68db484af 30 2 under voltage
martydd3 8:ecf68db484af 31 3 Insulation measurement: good
martydd3 8:ecf68db484af 32 4 Insulation measurement: bad
martydd3 8:ecf68db484af 33 5 Device error
martydd3 8:ecf68db484af 34 6 Connection fault earth
martydd3 8:ecf68db484af 35 */
martydd3 8:ecf68db484af 36 void update_IMD(void const *arg){
martydd3 8:ecf68db484af 37 IMD *instance = (IMD *)arg;
martydd3 12:e0adb697fcdb 38 char data[1] = {0};
martydd3 8:ecf68db484af 39 while(1){
martydd3 8:ecf68db484af 40 float freq = instance->frequency();
martydd3 8:ecf68db484af 41 float duty = instance->duty();
martydd3 8:ecf68db484af 42
martydd3 8:ecf68db484af 43 if(freq >= 5 && freq <15){
martydd3 8:ecf68db484af 44 data[0] = 1;
martydd3 8:ecf68db484af 45 }else if(freq >= 15 && freq < 25){
martydd3 8:ecf68db484af 46 data[0] = 2;
martydd3 8:ecf68db484af 47 }else if(freq >= 25 && freq < 35){
martydd3 8:ecf68db484af 48 if(duty <= 15){
martydd3 8:ecf68db484af 49 data[0] = 3;
martydd3 8:ecf68db484af 50 } else if(duty > 85 && duty < 100){
martydd3 8:ecf68db484af 51 data[0] = 4;
martydd3 8:ecf68db484af 52 }
martydd3 8:ecf68db484af 53 }else if(freq >= 35 && freq < 45){
martydd3 8:ecf68db484af 54 data[0] = 5;
martydd3 8:ecf68db484af 55 }else if(freq >= 45 && freq < 55){
martydd3 8:ecf68db484af 56 data[0] = 6;
martydd3 8:ecf68db484af 57 }
martydd3 8:ecf68db484af 58
martydd3 12:e0adb697fcdb 59 CANMessage txMessage(TX_IMD_ID, data, 1);
martydd3 8:ecf68db484af 60 tx_IMD_Buffer->txWrite(txMessage);
martydd3 8:ecf68db484af 61
martydd3 8:ecf68db484af 62 Thread::wait(100); //10 Hz update
martydd3 8:ecf68db484af 63 }
martydd3 8:ecf68db484af 64 }
martydd3 8:ecf68db484af 65
martydd3 8:ecf68db484af 66 void IMD::start_update(){
martydd3 8:ecf68db484af 67 Thread update_thread(update_IMD, this);
martydd3 8:ecf68db484af 68 }