Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed CANBuffer Watchdog MODSERIAL mbed-rtos xbeeRelay IAP
Fork of SystemManagement by
Get_IMD/IMD.cpp@12:e0adb697fcdb, 2014-10-21 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |
