Skip to content

Commit a618c8b

Browse files
jahnavithota2011cindyli-13
authored andcommitted
Create PDB monitoring module (#392)
* PDB Module added * CMake * rename include * Fixed Errors * clang fix * Changes made * Made pins config private members * clang
1 parent 27418c3 commit a618c8b

File tree

6 files changed

+285
-0
lines changed

6 files changed

+285
-0
lines changed

rover-apps/pdb/CMakeLists.txt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
add_library(PDB_Monitoring STATIC)
2+
target_sources(PDB_Monitoring PRIVATE src/PDBMonitoring.cpp)
3+
target_include_directories(PDB_Monitoring PUBLIC
4+
include
5+
../common/include
6+
)
7+
target_link_libraries(PDB_Monitoring
8+
PRIVATE
9+
Logger
10+
mbed-os
11+
)
12+
13+
add_executable(pdb)
14+
target_sources(pdb PRIVATE ../common/src/main.cpp)
15+
target_include_directories(pdb PUBLIC ../common/include)
16+
target_link_libraries(pdb
17+
PRIVATE
18+
CANBus
19+
CANMsg
20+
Logger
21+
uwrt-mars-rover-hw-bridge
22+
#Modules
23+
PDB_Monitoring
24+
)
25+
mbed_set_post_build(pdb)

rover-apps/pdb/include/AppConfig.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#pragma once
2+
3+
#include <vector>
4+
5+
#include "Module.h"
6+
#include "PDBMonitoring.h"
7+
8+
PDBMonitoring PDB;
9+
10+
std::vector<Module*> gModules = {
11+
// put modules here
12+
&PDB,
13+
};
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#pragma once
2+
3+
#include "Module.h"
4+
#include "mbed.h"
5+
6+
/*This PDB module is for load, rail and temperature monitoring.*/
7+
8+
class PDBMonitoring final : public Module {
9+
public:
10+
/* Sets the Load DIAG_EN pins */
11+
PDBMonitoring();
12+
13+
void periodic_1s(void) override;
14+
void periodic_10s(void) override {}
15+
void periodic_100ms(void) override {}
16+
void periodic_10ms(void) override {}
17+
void periodic_1ms(void) override;
18+
19+
private:
20+
void load_monitoring();
21+
void rail_monitoring();
22+
void temperature_monitoring();
23+
24+
static const float PDB_VBAT_RAIL_NOMINAL_VOLTAGE;
25+
static const float PDB_VBAT_RAIL_MIN_THRESHOLD;
26+
static const float PDB_VBAT_RAIL_MAX_THRESHOLD;
27+
28+
static const float PDB_24V_RAIL_NOMINAL_VOLTAGE;
29+
static const float PDB_24V_RAIL_MIN_THRESHOLD;
30+
static const float PDB_24V_RAIL_MAX_THRESHOLD;
31+
32+
static const float PDB_17V_RAIL_NOMINAL_VOLTAGE;
33+
static const float PDB_17V_RAIL_MIN_THRESHOLD;
34+
static const float PDB_17V_RAIL_MAX_THRESHOLD;
35+
36+
static const float PDB_5V_RAIL_NOMINAL_VOLTAGE;
37+
static const float PDB_5V_RAIL_MIN_THRESHOLD;
38+
static const float PDB_5V_RAIL_MAX_THRESHOLD;
39+
40+
static const float PDB_TEMPERATURE_MIN_THRESHOLD;
41+
static const float PDB_TEMPERATURE_MAX_THRESHOLD;
42+
43+
static const bool PDB_5V_LOAD1_DIAG_EN;
44+
static const bool PDB_5V_LOAD2_DIAG_EN;
45+
static const bool PDB_5V_LOAD3_DIAG_EN;
46+
static const bool PDB_5V_LOAD4_DIAG_EN;
47+
static const bool PDB_5V_LOAD5_DIAG_EN;
48+
static const bool PDB_17V_LOAD_DIAG_EN;
49+
50+
/* Pins configuration for Load Monitoring */
51+
DigitalOut load1_5V_diag_en;
52+
DigitalIn load1_5V_fault_n;
53+
54+
DigitalOut load2_5V_diag_en;
55+
DigitalIn load2_5V_fault_n;
56+
57+
DigitalOut load3_5V_diag_en;
58+
DigitalIn load3_5V_fault_n;
59+
60+
DigitalOut load4_5V_diag_en;
61+
DigitalIn load4_5V_fault_n;
62+
63+
DigitalOut load5_5V_diag_en;
64+
DigitalIn load5_5V_fault_n;
65+
66+
DigitalOut load_17V_diag_en;
67+
DigitalIn load_17V_fault_n;
68+
69+
/* Pins configuration for Rail Monitoring */
70+
AnalogIn railBattery;
71+
AnalogIn rail5V;
72+
AnalogIn rail17V;
73+
AnalogIn rail24V;
74+
DigitalIn rail24V_pgood_n;
75+
76+
/* Pins configuration for Temperature Monitoring */
77+
AnalogIn temperatureADC;
78+
};
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
#include "PDBMonitoring.h"
2+
3+
#include <cmath>
4+
5+
#include "Logger.h"
6+
7+
const float PDBMonitoring::PDB_VBAT_RAIL_NOMINAL_VOLTAGE = 24.0;
8+
const float PDBMonitoring::PDB_VBAT_RAIL_MIN_THRESHOLD = 18.0;
9+
const float PDBMonitoring::PDB_VBAT_RAIL_MAX_THRESHOLD = 25.2;
10+
11+
const float PDBMonitoring::PDB_24V_RAIL_NOMINAL_VOLTAGE = 24.0;
12+
const float PDBMonitoring::PDB_24V_RAIL_MIN_THRESHOLD = 22.0;
13+
const float PDBMonitoring::PDB_24V_RAIL_MAX_THRESHOLD = 26.0;
14+
15+
const float PDBMonitoring::PDB_17V_RAIL_NOMINAL_VOLTAGE = 17.0;
16+
const float PDBMonitoring::PDB_17V_RAIL_MIN_THRESHOLD = 16.0;
17+
const float PDBMonitoring::PDB_17V_RAIL_MAX_THRESHOLD = 18.0;
18+
19+
const float PDBMonitoring::PDB_5V_RAIL_NOMINAL_VOLTAGE = 5.0;
20+
const float PDBMonitoring::PDB_5V_RAIL_MIN_THRESHOLD = 4.8;
21+
const float PDBMonitoring::PDB_5V_RAIL_MAX_THRESHOLD = 6.0;
22+
23+
const float PDBMonitoring::PDB_TEMPERATURE_MIN_THRESHOLD = 10.0;
24+
const float PDBMonitoring::PDB_TEMPERATURE_MAX_THRESHOLD = 50.0;
25+
26+
const bool PDBMonitoring::PDB_5V_LOAD1_DIAG_EN = 1;
27+
const bool PDBMonitoring::PDB_5V_LOAD2_DIAG_EN = 0;
28+
const bool PDBMonitoring::PDB_5V_LOAD3_DIAG_EN = 0;
29+
const bool PDBMonitoring::PDB_5V_LOAD4_DIAG_EN = 0;
30+
const bool PDBMonitoring::PDB_5V_LOAD5_DIAG_EN = 0;
31+
const bool PDBMonitoring::PDB_17V_LOAD_DIAG_EN = 1;
32+
33+
PDBMonitoring::PDBMonitoring()
34+
: load1_5V_diag_en(LOAD1_5V_DIAG_EN),
35+
load1_5V_fault_n(LOAD1_5V_FAULT),
36+
load2_5V_diag_en(LOAD2_5V_DIAG_EN),
37+
load2_5V_fault_n(LOAD2_5V_FAULT),
38+
load3_5V_diag_en(LOAD3_5V_DIAG_EN),
39+
load3_5V_fault_n(LOAD3_5V_FAULT),
40+
load4_5V_diag_en(LOAD4_5V_DIAG_EN),
41+
load4_5V_fault_n(LOAD4_5V_FAULT),
42+
load5_5V_diag_en(LOAD5_5V_DIAG_EN),
43+
load5_5V_fault_n(LOAD5_5V_FAULT),
44+
load_17V_diag_en(LOAD_17V_DIAG_EN),
45+
load_17V_fault_n(LOAD_17V_FAULT),
46+
railBattery(RAIL_BATTERY_ANLG_IN),
47+
rail5V(RAIL_5V_ANLG_IN),
48+
rail17V(RAIL_17V_ANLG_IN),
49+
rail24V(RAIL_24V_ANLG_IN),
50+
rail24V_pgood_n(RAIL_24V_PGOOD_N),
51+
temperatureADC(TEMPERATURE_ADC_IN) {
52+
load1_5V_diag_en = PDB_5V_LOAD1_DIAG_EN;
53+
load2_5V_diag_en = PDB_5V_LOAD2_DIAG_EN;
54+
load3_5V_diag_en = PDB_5V_LOAD3_DIAG_EN;
55+
load4_5V_diag_en = PDB_5V_LOAD4_DIAG_EN;
56+
load5_5V_diag_en = PDB_5V_LOAD5_DIAG_EN;
57+
load_17V_diag_en = PDB_17V_LOAD_DIAG_EN;
58+
}
59+
60+
/*TODO:Replace the logger statements with CAN logs
61+
* after CAN Module is ready */
62+
63+
void PDBMonitoring::load_monitoring() {
64+
if (load1_5V_diag_en && !load1_5V_fault_n) {
65+
Utility::logger << "Fault on 5V load 1\n";
66+
}
67+
if (load2_5V_diag_en && !load2_5V_fault_n) {
68+
Utility::logger << "Fault on 5V load 2\n";
69+
}
70+
if (load3_5V_diag_en && !load3_5V_fault_n) {
71+
Utility::logger << "Fault on 5V load 3\n";
72+
}
73+
if (load4_5V_diag_en && !load4_5V_fault_n) {
74+
Utility::logger << "Fault on 5V load 4\n";
75+
}
76+
if (load5_5V_diag_en && !load5_5V_fault_n) {
77+
Utility::logger << "Fault on 5V load 5\n";
78+
}
79+
if (load_17V_diag_en && !load_17V_fault_n) {
80+
Utility::logger << "Fault on 17V load\n";
81+
}
82+
}
83+
84+
void PDBMonitoring::rail_monitoring() {
85+
float rail_vbat_voltage = railBattery.read_voltage() / 3 * PDB_VBAT_RAIL_NOMINAL_VOLTAGE;
86+
float rail_24V_voltage = rail24V.read_voltage() / 3 * PDB_24V_RAIL_NOMINAL_VOLTAGE;
87+
float rail_17V_voltage = rail17V.read_voltage() / 3 * PDB_17V_RAIL_NOMINAL_VOLTAGE;
88+
float rail_5V_voltage = rail5V.read_voltage() / 3 * PDB_5V_RAIL_NOMINAL_VOLTAGE;
89+
90+
if (rail_vbat_voltage < PDB_VBAT_RAIL_MIN_THRESHOLD || rail_vbat_voltage > PDB_VBAT_RAIL_MAX_THRESHOLD) {
91+
Utility::logger << "!!! VBAT RAIL VOLTAGE: %.3fV !!!\n", rail_vbat_voltage;
92+
}
93+
if (rail_24V_voltage < PDB_24V_RAIL_MIN_THRESHOLD || rail_24V_voltage > PDB_24V_RAIL_MAX_THRESHOLD) {
94+
Utility::logger << "!!! 24V RAIL VOLTAGE: %.3fV !!!\n", rail_24V_voltage;
95+
}
96+
if (rail_17V_voltage < PDB_17V_RAIL_MIN_THRESHOLD || rail_17V_voltage > PDB_17V_RAIL_MAX_THRESHOLD) {
97+
Utility::logger << "!!! 17V RAIL VOLTAGE: %.3fV !!!\n", rail_17V_voltage;
98+
}
99+
if (rail_5V_voltage < PDB_5V_RAIL_MIN_THRESHOLD || rail_5V_voltage > PDB_5V_RAIL_MAX_THRESHOLD) {
100+
Utility::logger << "!!! 5V RAIL VOLTAGE: %.3fV !!!\n", rail_5V_voltage;
101+
}
102+
}
103+
104+
/*https://www.ti.com/lit/ds/symlink/lmt87-q1.pdf?ts=1627158177761&ref_url=https%253A%252F%252Fwww.google.com%252F*/
105+
106+
void PDBMonitoring::temperature_monitoring() {
107+
float temperature_celsius =
108+
(13.582 - sqrt(pow(-13.582, 2) + 4 * 0.00433 * (2230.8 - temperatureADC.read_voltage() * 1000))) /
109+
(2 * (-0.00433)) +
110+
30;
111+
112+
if (temperature_celsius < PDB_TEMPERATURE_MIN_THRESHOLD || temperature_celsius > PDB_TEMPERATURE_MAX_THRESHOLD) {
113+
Utility::logger << "!!! TEMPERATURE FAULT:" << temperature_celsius << "degrees Celsius\n";
114+
}
115+
}
116+
117+
void PDBMonitoring::periodic_1s() {
118+
temperature_monitoring();
119+
load_monitoring();
120+
}
121+
122+
void PDBMonitoring::periodic_1ms() {
123+
/*Monitoring Period = 500ms*/
124+
int rail_counter = 0;
125+
126+
if (rail_counter % 5 == 0) {
127+
rail_monitoring();
128+
rail_counter = 0;
129+
}
130+
131+
rail_counter++;
132+
}

rover-apps/pdb_2021/CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1+
add_library(PDB_Monitoring STATIC)
2+
target_sources(PDB_Monitoring PRIVATE src/PDBMonitoring.cpp)
3+
target_include_directories(PDB_Monitoring PUBLIC
4+
include
5+
../common/include
6+
)
7+
target_link_libraries(PDB_Monitoring
8+
PRIVATE
9+
Logger
10+
mbed-os
11+
)
12+
113
add_executable(pdb_2021)
214
target_sources(pdb_2021 PRIVATE src/main.cpp)
315
target_include_directories(pdb_2021 PUBLIC include)
@@ -7,5 +19,7 @@ target_link_libraries(pdb_2021
719
CANMsg
820
Logger
921
uwrt-mars-rover-hw-bridge
22+
#Modules
23+
PDB_Monitoring
1024
)
1125
mbed_set_post_build(pdb_2021)

targets/TARGET_PDB_REV2_2021/include/PinNames.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,29 @@ typedef enum {
171171
RAIL_17V_ANLG_IN = PA_5,
172172
RAIL_24V_ANLG_IN = PB_0,
173173
RAIL_BATTERY_ANLG_IN = PB_1,
174+
RAIL_24V_PGOOD_N = PC_6,
175+
176+
/**** Temperature Sensor ****/
177+
TEMPERATURE_ADC_IN = PA_3,
178+
179+
/**** Load Monitor ****/
180+
LOAD1_5V_DIAG_EN = PA_6,
181+
LOAD1_5V_FAULT = PA_7,
182+
183+
LOAD2_5V_DIAG_EN = PC_2,
184+
LOAD2_5V_FAULT = PC_3,
185+
186+
LOAD3_5V_DIAG_EN = PC_0,
187+
LOAD3_5V_FAULT = PC_1,
188+
189+
LOAD4_5V_DIAG_EN = PC_13,
190+
LOAD4_5V_FAULT = PC_14,
191+
192+
LOAD5_5V_DIAG_EN = PB_8,
193+
LOAD5_5V_FAULT = PB_9,
194+
195+
LOAD_17V_DIAG_EN = PC_4,
196+
LOAD_17V_FAULT = PC_5,
174197

175198
/**** LED Matrix ****/
176199
LED_MATRIX_R_CHANNEL = PB_4,

0 commit comments

Comments
 (0)