PDU_Code/Core/Src/Current_Monitoring.c

143 lines
4.6 KiB
C

/*
* Current_Monitoring.c
*
* Created on: 24. April, 2024
* Author: nived
*/
#include "Current_Monitoring.h"
#include "main.h"
volatile union adc1_channels {
struct {
uint16_t isense5; // LiDAR | GSS (DSEL7)
uint16_t isense3; // AlwaysOn | SDC (DSEL4)
uint16_t isense7; // Misc | Inverters (DSEL5)
uint16_t isense9; // DRS
uint16_t isense12; // ACU
uint16_t isense11; // EPSC = ELIAS
uint16_t isense6; // Radiator Fans
uint16_t isense13; // TSAC Fans
} adcbank1;
uint16_t adcbuffer[8]; // array 8*16 bit
} adc_channels1;
// ADC's anpassen adc1 - 9, adc2 ist halt 5 , buffer anpassen und namen auch ( isense usw)
volatile union adc2_channels {
struct {
uint16_t isense2; // EBS A | EBS B (DSEL3)
uint16_t isense1; // EBS CS
uint16_t isense10; // Hydraulic Aggregate
uint16_t isense4; // Water Pump | Reserved (DSEL8)
uint16_t lv_sens; // LV voltage
} adcbank1;
uint16_t adcbuffer[5];
} adc_channels2;
CurrentMeasurements current_measurements_adc_val;
GPIO_PinState adcbank1 = GPIO_PIN_RESET;
GPIO_PinState adcbank2 = GPIO_PIN_RESET;
ADC_HandleTypeDef* adc1;
ADC_HandleTypeDef* adc2;
void currentMonitor_init(ADC_HandleTypeDef* hadc1, ADC_HandleTypeDef* hadc2, // init ist initilisierung
TIM_HandleTypeDef* trigtim) {
HAL_GPIO_WritePin(DSEL_3_GPIO_Port, DSEL_3_Pin, adcbank2);
HAL_GPIO_WritePin(DSEL_4_GPIO_Port, DSEL_4_Pin, adcbank1);
HAL_GPIO_WritePin(DSEL_5_GPIO_Port, DSEL_5_Pin, adcbank1);
HAL_GPIO_WritePin(DSEL_7_GPIO_Port, DSEL_7_Pin, adcbank1);
HAL_GPIO_WritePin(DSEL_8_GPIO_Port, DSEL_8_Pin, adcbank2);
adc1 = hadc1;
adc2 = hadc2;
HAL_TIM_Base_Start(trigtim);
HAL_ADC_Start_DMA(hadc1, (uint32_t*)adc_channels1.adcbuffer, 8);
HAL_ADC_Start_DMA(hadc2, (uint32_t*)adc_channels2.adcbuffer, 5); // wie adc mit dma geht , red mit jasper
}
uint8_t currentMonitor_checklimits() { return 0; }
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
if (hadc == adc1) {
if (adcbank1 == GPIO_PIN_RESET) {
current_measurements_adc_val.lidar =
adc_channels1.adcbank1.isense5 * CURR_SENSE_FACTOR_7_5A;
current_measurements_adc_val.always_on =
adc_channels1.adcbank1.isense3 * CURR_SENSE_FACTOR_5A;
current_measurements_adc_val.misc =
adc_channels1.adcbank1.isense7 * CURR_SENSE_FACTOR_7_5A;
adcbank1 = GPIO_PIN_SET;
} else {
current_measurements_adc_val.gss =
adc_channels1.adcbank1.isense5 * CURR_SENSE_FACTOR_7_5A;
current_measurements_adc_val.sdc =
adc_channels1.adcbank1.isense3 * CURR_SENSE_FACTOR_5A;
current_measurements_adc_val.inverters =
adc_channels1.adcbank1.isense7 * CURR_SENSE_FACTOR_7_5A;
adcbank1 = GPIO_PIN_RESET;
}
current_measurements_adc_val.servos =
adc_channels1.adcbank1.isense9 * CURR_SENSE_FACTOR_21A;
current_measurements_adc_val.acu =
adc_channels1.adcbank1.isense12 * CURR_SENSE_FACTOR_31A;
current_measurements_adc_val.epsc =
adc_channels1.adcbank1.isense11 * CURR_SENSE_FACTOR_21A;
current_measurements_adc_val.radiator_fans =
adc_channels1.adcbank1.isense6 * CURR_SENSE_FACTOR_21A;
current_measurements_adc_val.tsac_fans =
adc_channels1.adcbank1.isense13 * CURR_SENSE_FACTOR_31A;
HAL_GPIO_WritePin(DSEL_4_GPIO_Port, DSEL_4_Pin, adcbank1);
HAL_GPIO_WritePin(DSEL_5_GPIO_Port, DSEL_5_Pin, adcbank1);
HAL_GPIO_WritePin(DSEL_7_GPIO_Port, DSEL_7_Pin, adcbank1);
}
else
if (hadc == adc2) {
if (adcbank2 == GPIO_PIN_RESET) {
current_measurements_adc_val.ebsvalve_a =
adc_channels2.adcbank1.isense2 * CURR_SENSE_FACTOR_5A;
current_measurements_adc_val.cooling_pump =
adc_channels2.adcbank1.isense4 * CURR_SENSE_FACTOR_7_5A;
adcbank2 = GPIO_PIN_SET;
} else {
current_measurements_adc_val.ebsvalve_b =
adc_channels2.adcbank1.isense2 * CURR_SENSE_FACTOR_5A;
current_measurements_adc_val.reserved =
adc_channels2.adcbank1.isense4 * CURR_SENSE_FACTOR_7_5A;
adcbank2 = GPIO_PIN_RESET;
}
current_measurements_adc_val.ebs_cs_valve =
adc_channels2.adcbank1.isense1 * CURR_SENSE_FACTOR_5A;
current_measurements_adc_val.aggregat =
adc_channels2.adcbank1.isense10 * CURR_SENSE_FACTOR_21A;
current_measurements_adc_val.lv_v =
adc_channels2.adcbank1.lv_sens * LV_SENSE_FACTOR;
HAL_GPIO_WritePin(DSEL_3_GPIO_Port, DSEL_3_Pin, adcbank2);
HAL_GPIO_WritePin(DSEL_8_GPIO_Port, DSEL_8_Pin, adcbank2);
}
}