/* * channel_control.c * * Created on: Mar 10, 2025 * Author: janek */ #include "channel_control.h" #include "main.h" volatile enable_gpios enable; extern int inhibit_SDC; extern int prev_epsc_state; void ChannelControl_init(){ enable.porta.porta = 0; enable.portb.portb = 0; enable.portb.alwayson = 1; ChannelControl_UpdateGPIOs(enable); } void ChannelControl_UpdateGPIOs(enable_gpios UpdatePorts){ UpdatePorts.portb.alwayson = 1; if (inhibit_SDC == 1){ UpdatePorts.portb.sdc = 0; HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, 1); } HAL_GPIO_WritePin(IN1_GPIO_Port, IN1_Pin, (GPIO_PinState)UpdatePorts.porta.acc_cooling); // Acc-Cooling HAL_GPIO_WritePin(IN2_GPIO_Port, IN2_Pin, (GPIO_PinState)UpdatePorts.porta.ts_cooling); // TS-Cooling HAL_GPIO_WritePin(IN3_GPIO_Port, IN3_Pin, (GPIO_PinState)UpdatePorts.porta.drs); // DRS HAL_GPIO_WritePin(IN4_GPIO_Port, IN4_Pin, (GPIO_PinState)UpdatePorts.porta.acu); // ACU if (prev_epsc_state == 0 && ((UpdatePorts.porta.porta >> 4) & 1) == 1){ // will be replaced by precharge HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, 1); // precharge activate HAL_Delay(2000); // contiuosly read precharge voltage HAL_GPIO_WritePin(IN5_GPIO_Port, IN5_Pin, (GPIO_PinState)UpdatePorts.porta.epsc); // if precharge voltage > 95% 24V enable PROFET HAL_Delay(100); // after few ms disengage precharge HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, 0); prev_epsc_state = UpdatePorts.porta.epsc; } else { HAL_GPIO_WritePin(IN5_GPIO_Port, IN5_Pin, (GPIO_PinState)UpdatePorts.porta.epsc); prev_epsc_state = UpdatePorts.porta.epsc; } HAL_GPIO_WritePin(IN6_GPIO_Port, IN6_Pin, (GPIO_PinState)UpdatePorts.porta.inverter); // inverter HAL_GPIO_WritePin(IN7_GPIO_Port, IN7_Pin, (GPIO_PinState)UpdatePorts.porta.lidar); // lidar HAL_GPIO_WritePin(IN8_GPIO_Port, IN8_Pin, (GPIO_PinState)UpdatePorts.porta.misc); // MISC HAL_GPIO_WritePin(IN9_GPIO_Port, IN9_Pin, (GPIO_PinState)UpdatePorts.portb.alwayson); // always on -> standardmäßig auf HIGH forcen HAL_GPIO_WritePin(IN10_GPIO_Port, IN10_Pin, (GPIO_PinState)UpdatePorts.portb.sdc); // SDC -> muss anders controlled werden HAL_GPIO_WritePin(IN11_GPIO_Port, IN11_Pin, (GPIO_PinState)UpdatePorts.portb.ebs1); // EBS 1 HAL_GPIO_WritePin(IN12_GPIO_Port, IN12_Pin, (GPIO_PinState)UpdatePorts.portb.ebs2); // EBS 2 HAL_GPIO_WritePin(IN13_GPIO_Port, IN13_Pin, (GPIO_PinState)UpdatePorts.portb.ebs3); // EBS 3 }