Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Create PDB monitoring module (#392)
* PDB Module added

* CMake

* rename include

* Fixed Errors

* clang fix

* Changes made

* Made pins config private members

* clang
  • Loading branch information
jahnavithota2011 authored and upadhyaydhruv committed Feb 4, 2022
commit 1a488c7456321dea556f1cada98d1f8917042a5c
25 changes: 25 additions & 0 deletions rover-apps/pdb/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
add_library(PDB_Monitoring STATIC)
target_sources(PDB_Monitoring PRIVATE src/PDBMonitoring.cpp)
target_include_directories(PDB_Monitoring PUBLIC
include
../common/include
)
target_link_libraries(PDB_Monitoring
PRIVATE
Logger
mbed-os
)

add_executable(pdb)
target_sources(pdb PRIVATE ../common/src/main.cpp)
target_include_directories(pdb PUBLIC ../common/include)
target_link_libraries(pdb
PRIVATE
CANBus
CANMsg
Logger
uwrt-mars-rover-hw-bridge
#Modules
PDB_Monitoring
)
mbed_set_post_build(pdb)
13 changes: 13 additions & 0 deletions rover-apps/pdb/include/AppConfig.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#pragma once

#include <vector>

#include "Module.h"
#include "PDBMonitoring.h"

PDBMonitoring PDB;

std::vector<Module*> gModules = {
// put modules here
&PDB,
};
78 changes: 78 additions & 0 deletions rover-apps/pdb/include/PDBMonitoring.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
#pragma once

#include "Module.h"
#include "mbed.h"

/*This PDB module is for load, rail and temperature monitoring.*/

class PDBMonitoring final : public Module {
public:
/* Sets the Load DIAG_EN pins */
PDBMonitoring();

void periodic_1s(void) override;
void periodic_10s(void) override {}
void periodic_100ms(void) override {}
void periodic_10ms(void) override {}
void periodic_1ms(void) override;

private:
void load_monitoring();
void rail_monitoring();
void temperature_monitoring();

static const float PDB_VBAT_RAIL_NOMINAL_VOLTAGE;
static const float PDB_VBAT_RAIL_MIN_THRESHOLD;
static const float PDB_VBAT_RAIL_MAX_THRESHOLD;

static const float PDB_24V_RAIL_NOMINAL_VOLTAGE;
static const float PDB_24V_RAIL_MIN_THRESHOLD;
static const float PDB_24V_RAIL_MAX_THRESHOLD;

static const float PDB_17V_RAIL_NOMINAL_VOLTAGE;
static const float PDB_17V_RAIL_MIN_THRESHOLD;
static const float PDB_17V_RAIL_MAX_THRESHOLD;

static const float PDB_5V_RAIL_NOMINAL_VOLTAGE;
static const float PDB_5V_RAIL_MIN_THRESHOLD;
static const float PDB_5V_RAIL_MAX_THRESHOLD;

static const float PDB_TEMPERATURE_MIN_THRESHOLD;
static const float PDB_TEMPERATURE_MAX_THRESHOLD;

static const bool PDB_5V_LOAD1_DIAG_EN;
static const bool PDB_5V_LOAD2_DIAG_EN;
static const bool PDB_5V_LOAD3_DIAG_EN;
static const bool PDB_5V_LOAD4_DIAG_EN;
static const bool PDB_5V_LOAD5_DIAG_EN;
static const bool PDB_17V_LOAD_DIAG_EN;

/* Pins configuration for Load Monitoring */
DigitalOut load1_5V_diag_en;
DigitalIn load1_5V_fault_n;

DigitalOut load2_5V_diag_en;
DigitalIn load2_5V_fault_n;

DigitalOut load3_5V_diag_en;
DigitalIn load3_5V_fault_n;

DigitalOut load4_5V_diag_en;
DigitalIn load4_5V_fault_n;

DigitalOut load5_5V_diag_en;
DigitalIn load5_5V_fault_n;

DigitalOut load_17V_diag_en;
DigitalIn load_17V_fault_n;

/* Pins configuration for Rail Monitoring */
AnalogIn railBattery;
AnalogIn rail5V;
AnalogIn rail17V;
AnalogIn rail24V;
DigitalIn rail24V_pgood_n;

/* Pins configuration for Temperature Monitoring */
AnalogIn temperatureADC;
};
132 changes: 132 additions & 0 deletions rover-apps/pdb/src/PDBMonitoring.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
#include "PDBMonitoring.h"

#include <cmath>

#include "Logger.h"

const float PDBMonitoring::PDB_VBAT_RAIL_NOMINAL_VOLTAGE = 24.0;
const float PDBMonitoring::PDB_VBAT_RAIL_MIN_THRESHOLD = 18.0;
const float PDBMonitoring::PDB_VBAT_RAIL_MAX_THRESHOLD = 25.2;

const float PDBMonitoring::PDB_24V_RAIL_NOMINAL_VOLTAGE = 24.0;
const float PDBMonitoring::PDB_24V_RAIL_MIN_THRESHOLD = 22.0;
const float PDBMonitoring::PDB_24V_RAIL_MAX_THRESHOLD = 26.0;

const float PDBMonitoring::PDB_17V_RAIL_NOMINAL_VOLTAGE = 17.0;
const float PDBMonitoring::PDB_17V_RAIL_MIN_THRESHOLD = 16.0;
const float PDBMonitoring::PDB_17V_RAIL_MAX_THRESHOLD = 18.0;

const float PDBMonitoring::PDB_5V_RAIL_NOMINAL_VOLTAGE = 5.0;
const float PDBMonitoring::PDB_5V_RAIL_MIN_THRESHOLD = 4.8;
const float PDBMonitoring::PDB_5V_RAIL_MAX_THRESHOLD = 6.0;

const float PDBMonitoring::PDB_TEMPERATURE_MIN_THRESHOLD = 10.0;
const float PDBMonitoring::PDB_TEMPERATURE_MAX_THRESHOLD = 50.0;

const bool PDBMonitoring::PDB_5V_LOAD1_DIAG_EN = 1;
const bool PDBMonitoring::PDB_5V_LOAD2_DIAG_EN = 0;
const bool PDBMonitoring::PDB_5V_LOAD3_DIAG_EN = 0;
const bool PDBMonitoring::PDB_5V_LOAD4_DIAG_EN = 0;
const bool PDBMonitoring::PDB_5V_LOAD5_DIAG_EN = 0;
const bool PDBMonitoring::PDB_17V_LOAD_DIAG_EN = 1;

PDBMonitoring::PDBMonitoring()
: load1_5V_diag_en(LOAD1_5V_DIAG_EN),
load1_5V_fault_n(LOAD1_5V_FAULT),
load2_5V_diag_en(LOAD2_5V_DIAG_EN),
load2_5V_fault_n(LOAD2_5V_FAULT),
load3_5V_diag_en(LOAD3_5V_DIAG_EN),
load3_5V_fault_n(LOAD3_5V_FAULT),
load4_5V_diag_en(LOAD4_5V_DIAG_EN),
load4_5V_fault_n(LOAD4_5V_FAULT),
load5_5V_diag_en(LOAD5_5V_DIAG_EN),
load5_5V_fault_n(LOAD5_5V_FAULT),
load_17V_diag_en(LOAD_17V_DIAG_EN),
load_17V_fault_n(LOAD_17V_FAULT),
railBattery(RAIL_BATTERY_ANLG_IN),
rail5V(RAIL_5V_ANLG_IN),
rail17V(RAIL_17V_ANLG_IN),
rail24V(RAIL_24V_ANLG_IN),
rail24V_pgood_n(RAIL_24V_PGOOD_N),
temperatureADC(TEMPERATURE_ADC_IN) {
load1_5V_diag_en = PDB_5V_LOAD1_DIAG_EN;
load2_5V_diag_en = PDB_5V_LOAD2_DIAG_EN;
load3_5V_diag_en = PDB_5V_LOAD3_DIAG_EN;
load4_5V_diag_en = PDB_5V_LOAD4_DIAG_EN;
load5_5V_diag_en = PDB_5V_LOAD5_DIAG_EN;
load_17V_diag_en = PDB_17V_LOAD_DIAG_EN;
}

/*TODO:Replace the logger statements with CAN logs
* after CAN Module is ready */

void PDBMonitoring::load_monitoring() {
if (load1_5V_diag_en && !load1_5V_fault_n) {
Utility::logger << "Fault on 5V load 1\n";
}
if (load2_5V_diag_en && !load2_5V_fault_n) {
Utility::logger << "Fault on 5V load 2\n";
}
if (load3_5V_diag_en && !load3_5V_fault_n) {
Utility::logger << "Fault on 5V load 3\n";
}
if (load4_5V_diag_en && !load4_5V_fault_n) {
Utility::logger << "Fault on 5V load 4\n";
}
if (load5_5V_diag_en && !load5_5V_fault_n) {
Utility::logger << "Fault on 5V load 5\n";
}
if (load_17V_diag_en && !load_17V_fault_n) {
Utility::logger << "Fault on 17V load\n";
}
}

void PDBMonitoring::rail_monitoring() {
float rail_vbat_voltage = railBattery.read_voltage() / 3 * PDB_VBAT_RAIL_NOMINAL_VOLTAGE;
float rail_24V_voltage = rail24V.read_voltage() / 3 * PDB_24V_RAIL_NOMINAL_VOLTAGE;
float rail_17V_voltage = rail17V.read_voltage() / 3 * PDB_17V_RAIL_NOMINAL_VOLTAGE;
float rail_5V_voltage = rail5V.read_voltage() / 3 * PDB_5V_RAIL_NOMINAL_VOLTAGE;

if (rail_vbat_voltage < PDB_VBAT_RAIL_MIN_THRESHOLD || rail_vbat_voltage > PDB_VBAT_RAIL_MAX_THRESHOLD) {
Utility::logger << "!!! VBAT RAIL VOLTAGE: %.3fV !!!\n", rail_vbat_voltage;
}
if (rail_24V_voltage < PDB_24V_RAIL_MIN_THRESHOLD || rail_24V_voltage > PDB_24V_RAIL_MAX_THRESHOLD) {
Utility::logger << "!!! 24V RAIL VOLTAGE: %.3fV !!!\n", rail_24V_voltage;
}
if (rail_17V_voltage < PDB_17V_RAIL_MIN_THRESHOLD || rail_17V_voltage > PDB_17V_RAIL_MAX_THRESHOLD) {
Utility::logger << "!!! 17V RAIL VOLTAGE: %.3fV !!!\n", rail_17V_voltage;
}
if (rail_5V_voltage < PDB_5V_RAIL_MIN_THRESHOLD || rail_5V_voltage > PDB_5V_RAIL_MAX_THRESHOLD) {
Utility::logger << "!!! 5V RAIL VOLTAGE: %.3fV !!!\n", rail_5V_voltage;
}
}

/*https://www.ti.com/lit/ds/symlink/lmt87-q1.pdf?ts=1627158177761&ref_url=https%253A%252F%252Fwww.google.com%252F*/

void PDBMonitoring::temperature_monitoring() {
float temperature_celsius =
(13.582 - sqrt(pow(-13.582, 2) + 4 * 0.00433 * (2230.8 - temperatureADC.read_voltage() * 1000))) /
(2 * (-0.00433)) +
30;

if (temperature_celsius < PDB_TEMPERATURE_MIN_THRESHOLD || temperature_celsius > PDB_TEMPERATURE_MAX_THRESHOLD) {
Utility::logger << "!!! TEMPERATURE FAULT:" << temperature_celsius << "degrees Celsius\n";
}
}

void PDBMonitoring::periodic_1s() {
temperature_monitoring();
load_monitoring();
}

void PDBMonitoring::periodic_1ms() {
/*Monitoring Period = 500ms*/
int rail_counter = 0;

if (rail_counter % 5 == 0) {
rail_monitoring();
rail_counter = 0;
}

rail_counter++;
}
14 changes: 14 additions & 0 deletions rover-apps/pdb_2021/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
add_library(PDB_Monitoring STATIC)
target_sources(PDB_Monitoring PRIVATE src/PDBMonitoring.cpp)
target_include_directories(PDB_Monitoring PUBLIC
include
../common/include
)
target_link_libraries(PDB_Monitoring
PRIVATE
Logger
mbed-os
)

add_executable(pdb_2021)
target_sources(pdb_2021 PRIVATE src/main.cpp)
target_include_directories(pdb_2021 PUBLIC include)
Expand All @@ -7,5 +19,7 @@ target_link_libraries(pdb_2021
CANMsg
Logger
uwrt-mars-rover-hw-bridge
#Modules
PDB_Monitoring
)
mbed_set_post_build(pdb_2021)
23 changes: 23 additions & 0 deletions targets/TARGET_PDB_REV2_2021/include/PinNames.h
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,29 @@ typedef enum {
RAIL_17V_ANLG_IN = PA_5,
RAIL_24V_ANLG_IN = PB_0,
RAIL_BATTERY_ANLG_IN = PB_1,
RAIL_24V_PGOOD_N = PC_6,

/**** Temperature Sensor ****/
TEMPERATURE_ADC_IN = PA_3,

/**** Load Monitor ****/
LOAD1_5V_DIAG_EN = PA_6,
LOAD1_5V_FAULT = PA_7,

LOAD2_5V_DIAG_EN = PC_2,
LOAD2_5V_FAULT = PC_3,

LOAD3_5V_DIAG_EN = PC_0,
LOAD3_5V_FAULT = PC_1,

LOAD4_5V_DIAG_EN = PC_13,
LOAD4_5V_FAULT = PC_14,

LOAD5_5V_DIAG_EN = PB_8,
LOAD5_5V_FAULT = PB_9,

LOAD_17V_DIAG_EN = PC_4,
LOAD_17V_FAULT = PC_5,

/**** LED Matrix ****/
LED_MATRIX_R_CHANNEL = PB_4,
Expand Down