Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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
49 changes: 27 additions & 22 deletions TestBoardFirmware/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,14 @@ static Result_t res;
}
UARTprintf("Mode detected: ");

//++ Added by jay pacamarra for debugging :)
sciReceive(PC_UART, 173, (unsigned char *)&UARTBuffer);
//++ Added by jay pacamarra for debugging :)
if(testBoardState.testMode == VCU_MODE){
//++ Added by jay pacamarra for debugging :)
sciReceive(PC_UART, 173, (unsigned char *)&UARTBuffer);
//++ Added by jay pacamarra for debugging :)
}
else if (testBoardState.testMode == BMS_MODE){
sciReceive(PC_UART, 102, (unsigned char *)&UARTBuffer);
}

//* test code *//
// setPeripheralTestCases(&testBoardState, JSONHandler(UARTBuffer));
Expand Down Expand Up @@ -180,32 +185,32 @@ static json_t * JSONHandler(unsigned char *jsonstring){
static void setPeripheralTestCases(TestBoardState_t *stateptr, json_t* json){

#ifdef GUI_MODE

if (testBoardState.testMode == VCU_MODE){
//VCU Tests
json_t * appsProperty = json_getProperty(json, "APPS");
stateptr->peripheralStateArray[APPS] = (uint8_t) json_getInteger(appsProperty);
json_t * bseProperty = json_getProperty(json, "BSE");
stateptr->peripheralStateArray[BSE] = (uint8_t) json_getInteger(bseProperty);
json_t * hv_vsProperty = json_getProperty(json, "HV_VOLTAGE_SENSOR");
stateptr->peripheralStateArray[HV_VS] = (uint8_t) json_getInteger(hv_vsProperty);
json_t * appsProperty = json_getProperty(json, "APPS");
stateptr->peripheralStateArray[APPS] = (uint8_t) json_getInteger(appsProperty);
json_t * bseProperty = json_getProperty(json, "BSE");
stateptr->peripheralStateArray[BSE] = (uint8_t) json_getInteger(bseProperty);
json_t * hv_vsProperty = json_getProperty(json, "HV_VOLTAGE_SENSOR");
stateptr->peripheralStateArray[HV_VS] = (uint8_t) json_getInteger(hv_vsProperty);

stateptr->peripheralStateArray[TSAL] = 0;
stateptr->peripheralStateArray[TSAL] = 0;

stateptr->peripheralStateArray[IMD] = 0;
stateptr->peripheralStateArray[IMD] = 0;

stateptr->peripheralStateArray[LV] = 0;
stateptr->peripheralStateArray[LV] = 0;

stateptr->peripheralStateArray[VCU_COMMUNICATIONS] = 0;
stateptr->peripheralStateArray[VCU_COMMUNICATIONS] = 0;
} else if (testBoardState.testMode == BMS_MODE){
// BMS Tests
// Check mode of testboard before setting test cases - Jay Pacamarra >:(
json_t * bmsProperty = json_getProperty(json, "BMS_SLAVES");
stateptr->peripheralStateArray[BMS_SLAVES] = (uint8_t) json_getInteger(bmsProperty);

stateptr->peripheralStateArray[THERMISTOR_EXPANSION] = 0;

//BMS Tests
//Check mode of testboard before setting test cases - Jay Pacamarra >:(
// json_t * bmsProperty = json_getProperty(json, "BMS_SLAVES");
// stateptr->peripheralStateArray[BMS_SLAVES] = (uint8_t) json_getInteger(bmsProperty);

//stateptr->peripheralStateArray[THERMISTOR_EXPANSION] = 0;

//stateptr->peripheralStateArray[BMS_COMMUNICATIONS] = 0;
stateptr->peripheralStateArray[BMS_COMMUNICATIONS] = 0;
}

#endif

Expand Down
2 changes: 0 additions & 2 deletions TestBoardFirmware/phantom_drivers/bms/include/bms_slaves.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ enum
UNDER_VOLTAGE_FAULT,
OVER_TEMPERATURE_FAULT,
UNDER_TEMPERATURE_FAULT,
WEIRD_SENSOR_READINGS_VOLTAGE,
WEIRD_SENSOR_READINGS_TEMPERATURE,
COMMUNICATION_LOSS,
};

Expand Down
168 changes: 51 additions & 117 deletions TestBoardFirmware/phantom_drivers/bms/source/bms_slaves.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*
* Created on: Oct 25, 2020
* Author: Mahmoud Ahmed
* Further Development and Refactoring: Courtenay Huffman
*/
#include "bms_slaves.h"
#include "stdlib.h"
Expand All @@ -14,51 +15,38 @@
#include "gio.h"
#include "het.h"

// #include "FreeRTOS.h"
// #include "os_timer.h"

// BMS Slave specific definitions, not accessed outside bms_slaves.c
#define VOLTAGE_STEP 0.04
#define DEFAULT_VOLTAGE 84
#define DEFAULT_TEMPERATURE 25
#define NUMBER_OF_TEMPERATURE_READINGS 16
#define VOLTAGE_STEP 0.04
#define DEFAULT_VOLTAGE 840
#define DEFAULT_TEMP 2064 // 23 degrees
#define NUMBER_OF_TEMPERATURE_READINGS 16 // represents 2 slaves

#define TRANSFER_GROUP 2

// THESE VALUES NEED TO BE CHECKED - all must be an INT
#define TEMP_MAX_VOLT 113 // 1.131 == 55 degrees
#define TEMP_MIN_VOLT 268 // 2.682 = 0 degrees
#define TEMP_HIGH_VOLT 67 //66.83 // 0.6683 = 76 degrees
#define TEMP_LOW_VOLT 270 // 2.70 = 0 degrees
#define VOLT_MIN 76 // 0.7608 * 100
#define VOLT_MAX 100 // 0.9985 * 100

// CHANGE THIS VALUE TO
#define VOLT_TEST 0 //102 = 84.5

//const uint8_t[] BMS_FAULT_LUT = { }

#define TEMP_MAX_VOLT 1106 // 55 degrees
#define TEMP_MIN_VOLT 2705 // 0 degrees
#define VOLT_MIN 761
#define VOLT_MAX 999

typedef struct {
float bmsSlaveVoltage;
float bmsSlaveTemperatures[NUMBER_OF_TEMPERATURE_READINGS];
} BMSSlave_t; // BMSSlave_t is like double or int
} BMSSlave_t;

// Static Global Variables
static BMSSlave_t *bmsStruct;
static BMSSlave_t *bmsTempHigh;
static BMSSlave_t *bmsTempLow;
static BMSSlave_t *bmsSlaveData;
static BMSSlave_t *bmsSlaveData_HIGH;
static BMSSlave_t *bmsSlaveData_LOW;

// Static function definitions
static void normal_bms_operation();
static void over_voltage_test();
static void under_voltage_test();
static void over_temperature_test();
static void under_temperature_test();
//static void weird_sensor_readings_voltage_test();
//static void weird_sensor_readings_temperature_test();
static void communication_loss_test();
static void temperature_mux(uint8_t pinSelect);
static void set_temperature(float temparray[]);
static void set_voltage(float voltage);

Result_t bms_slaves_process(uint8_t state)
{
Expand All @@ -82,12 +70,6 @@ Result_t bms_slaves_process(uint8_t state)
case UNDER_TEMPERATURE_FAULT:
under_temperature_test();
break;
case WEIRD_SENSOR_READINGS_VOLTAGE:
//weird_sensor_readings_voltage_test();
break;
case WEIRD_SENSOR_READINGS_TEMPERATURE:
//weird_sensor_readings_temperature_test();
break;
case COMMUNICATION_LOSS:
communication_loss_test();
break;
Expand All @@ -96,127 +78,79 @@ Result_t bms_slaves_process(uint8_t state)
return SUCCESS;
}

void bms_slaves_init(){
void bms_slaves_init(){

gioSetBit(HV_ACTIVE_PORT, HV_ACTIVE_PIN, 1);

bmsStruct->bmsSlaveVoltage = DEFAULT_VOLTAGE;
bmsSlaveData->bmsSlaveVoltage = DEFAULT_VOLTAGE;
uint8_t i;
for(i = 0; i < NUMBER_OF_TEMPERATURE_READINGS; i++) {
bmsStruct->bmsSlaveTemperatures[i] = (TEMP_MAX_VOLT + TEMP_MIN_VOLT)*0.5;
bmsSlaveData->bmsSlaveTemperatures[i] = DEFAULT_TEMP;
}

bmsTempHigh->bmsSlaveVoltage = DEFAULT_VOLTAGE;
uint8_t j;
for(j=0; j < NUMBER_OF_TEMPERATURE_READINGS; j++) {
bmsTempHigh->bmsSlaveTemperatures[j] = (TEMP_MAX_VOLT + TEMP_MIN_VOLT)*0.5;
bmsSlaveData_HIGH->bmsSlaveVoltage = VOLT_MAX;
for(i = 0; i < NUMBER_OF_TEMPERATURE_READINGS; i++) {
bmsSlaveData_HIGH->bmsSlaveTemperatures[i] = TEMP_MAX_VOLT;
}
bmsTempHigh->bmsSlaveTemperatures[0] = TEMP_MAX_VOLT*1.5;

bmsTempLow->bmsSlaveVoltage = DEFAULT_VOLTAGE;
uint8_t k;
for(k = 0; j < NUMBER_OF_TEMPERATURE_READINGS; j++) {
bmsTempLow->bmsSlaveTemperatures[j] =(TEMP_MAX_VOLT + TEMP_MIN_VOLT)*0.5;

bmsSlaveData_LOW->bmsSlaveVoltage = VOLT_MIN;
for(i = 0; i < NUMBER_OF_TEMPERATURE_READINGS; i++) {
bmsSlaveData_LOW->bmsSlaveTemperatures[i] = TEMP_MIN_VOLT;
}
bmsTempLow->bmsSlaveTemperatures[0] = 0;
UARTprintf("BMS Initialization Complete");

set_voltage(bmsSlaveData->bmsSlaveVoltage);
set_temperature(bmsSlaveData->bmsSlaveTemperatures);

UARTprintf("BMS Initialization Complete");
}

// Send a constant 3.8V
static void normal_bms_operation(){
set_voltage(bmsSlaveData->bmsSlaveVoltage);
set_temperature(bmsSlaveData->bmsSlaveTemperatures);

// set_bms_voltage and temp at normal levels
UARTprintf("Normal BMS Operation\n\r");

MCP48FV_Set_Value_Single(VOLT_TEST, DAC_SIZE_BMS, 0, 2);

uint8_t pinSelect = 0;
//setting temp on each of the 16 pins
for( ; pinSelect <= 00001111; pinSelect++){
temperature_mux(pinSelect);
MCP48FV_Set_Value_Single(bmsStruct->bmsSlaveTemperatures[pinSelect], DAC_SIZE_BMS, 1, TRANSFER_GROUP);
}
}

static void under_voltage_test() {

//send a voltage under the opperating region (3.2-4.2)
//send 2.7V for more than 3 seconds
MCP48FV_Set_Value_Single(VOLT_MIN, DAC_SIZE_BMS, 0, TRANSFER_GROUP);
set_voltage(bmsSlaveData_LOW->bmsSlaveVoltage);
set_temperature(bmsSlaveData->bmsSlaveTemperatures);

uint8_t pinSelect = 0;
for( ; pinSelect <= 00001111; pinSelect++){// for loop - iterate over each pin
temperature_mux(pinSelect);
// set the DAC
MCP48FV_Set_Value_Single(bmsStruct->bmsSlaveTemperatures[pinSelect], DAC_SIZE_BMS, 1, TRANSFER_GROUP);
}
}

static void over_voltage_test(){
set_voltage(bmsSlaveData_HIGH->bmsSlaveVoltage);
set_temperature(bmsSlaveData->bmsSlaveTemperatures);

//send a voltage over the opperating region (3.2-4.2)
//send 4.7V for more than 3 seconds
MCP48FV_Set_Value_Single(VOLT_MAX, DAC_SIZE_BMS, 0, TRANSFER_GROUP);

uint8_t pinSelect = 0;
for( ; pinSelect <= 00001111; pinSelect++){// for loop - iterate over each pin
temperature_mux(pinSelect);
// set the DAC
MCP48FV_Set_Value_Single(bmsStruct->bmsSlaveTemperatures[pinSelect], DAC_SIZE_BMS, 1, TRANSFER_GROUP);
}
}

static void under_temperature_test(){

//send a temperature voltage over the opperating region (55 degrees C)
//send 60 C for more than 3 seconds

MCP48FV_Set_Value_Single((VOLT_MAX + VOLT_MIN)*0.5, DAC_SIZE_BMS, 0, TRANSFER_GROUP);

uint8_t pinSelect = 0;
for( ; pinSelect <= 0b00001111; pinSelect++){// for loop - iterate over each pin
temperature_mux(pinSelect);
// set the DAC
MCP48FV_Set_Value_Single(bmsTempLow->bmsSlaveTemperatures[pinSelect], DAC_SIZE_BMS, 1, TRANSFER_GROUP);
}
set_voltage(bmsSlaveData->bmsSlaveVoltage);
set_temperature(bmsSlaveData_LOW->bmsSlaveTemperatures);
}

static void over_temperature_test(){
set_voltage(bmsSlaveData->bmsSlaveVoltage);
set_temperature(bmsSlaveData_HIGH->bmsSlaveTemperatures);
}

//send a temperature voltage over the opperating region (55 degrees C)
//send 60 C for more than 3 seconds

MCP48FV_Set_Value_Single((VOLT_MAX + VOLT_MIN)*0.5, DAC_SIZE_BMS, 0, TRANSFER_GROUP);
static void communication_loss_test(){
set_voltage(0);
set_temperature(0);
}

// internal BMS Slave functions
static void set_temperature(float temparray[]){
uint8_t pinSelect = 0;
for( ; pinSelect <= 0b00001111; pinSelect++){// for loop - iterate over each pin
temperature_mux(pinSelect);
// set the DAC
MCP48FV_Set_Value_Single(bmsTempHigh->bmsSlaveTemperatures[pinSelect], DAC_SIZE_BMS, 1, TRANSFER_GROUP);
for( ; pinSelect <= 00001111; pinSelect++){
temperature_mux(pinSelect);
MCP48FV_Set_Value_Single(temparray[pinSelect], DAC_SIZE_BMS, 1, TRANSFER_GROUP);
}
}

static void communication_loss_test(){

// send nothing
// "what is timing out of messages"

MCP48FV_Set_Value_Single(0, DAC_SIZE_BMS, 0, TRANSFER_GROUP);

uint8_t pinSelect = 0;
for( ; pinSelect <= 00001111; pinSelect++){// for loop - iterate over each pin
temperature_mux(pinSelect);
// set the DAC
MCP48FV_Set_Value_Single(0, DAC_SIZE_BMS, 1, TRANSFER_GROUP);
}
return;
static void set_voltage(float voltage){
MCP48FV_Set_Value_Single(voltage, DAC_SIZE_BMS, 0, TRANSFER_GROUP);
}

// *****temperature mux function (loop)*****
static void temperature_mux(uint8_t pinSelect){

// set the different mux pins
if (0b00000001 & pinSelect){
gioSetBit(THERMISTOR_MUX_HET_PORT, THERMISTOR_MUX_PIN_0, 1);
} else {
Expand Down
Loading