/* * board_logic.h * * Created on: Jul 25, 2024 * Author: User */ #ifndef INC_BOARD_LOGIC_H_ #define INC_BOARD_LOGIC_H_ #define MODBUS_FIRMWARE_VERSION ( /*major*/ 10 + /*minor*/ 0 * 0x100) #define MODBUS_BOARD_TYPE (12) //BSV Module board ID #define HVS_U_LIMIT 30.0 //[kV] #define HVS_I_LIMIT 11500 //[uA] #define K_ADC_CURRENT 0.272 #define K_ADC_VOLTAGE 124.666 #define K_ADC_15V 160.0 // Really should be 161.8972 (but 160 gives a number closer to reality) #define K_ADC_24V 111.0 // Really should be 112.8193 (but 111 gives a number closer to reality) #define K_DAC_CURRENT 0.302 #define K_DAC_VOLTAGE 124.533 #define CONF_BIT_HVS_EN (1u<<0) // ADC channels #define ADC_CH_VOLTAGE 6 #define ADC_CH_CURRENT 7 #define ADC_CH_15V 14 #define ADC_CH_24V 15 #define ADC_BUFF_LENGTH 20 // ADC buffer length (to smooth the result). 1 per ms // PIN macros #define GET_HVS_ENABLE (HAL_GPIO_ReadPin(HVS_ENABLE_GPIO_Port, HVS_ENABLE_Pin) == GPIO_PIN_SET) #define GET_HVS_CONN (HAL_GPIO_ReadPin(HVS_CONN_GPIO_Port, HVS_CONN_Pin) == GPIO_PIN_RESET) #define GET_HVS_READY (HAL_GPIO_ReadPin(HVS_READY_GPIO_Port, HVS_READY_Pin) == GPIO_PIN_SET) #define GET_HVS_XRAYON (HAL_GPIO_ReadPin(HVS_XRAYON_GPIO_Port, HVS_XRAYON_Pin) == GPIO_PIN_SET) #define GET_HVS_NOLINK (HAL_GPIO_ReadPin(HVS_NOLINK_GPIO_Port, HVS_NOLINK_Pin) == GPIO_PIN_SET) #define GET_HVS_OVERHEAT (HAL_GPIO_ReadPin(HVS_OVERHEAT_GPIO_Port, HVS_OVERHEAT_Pin) == GPIO_PIN_SET) #define GET_HVS_OVERLOAD (HAL_GPIO_ReadPin(HVS_OVERLOAD_GPIO_Port, HVS_OVERLOAD_Pin) == GPIO_PIN_SET) #define SET_HVS_ON HAL_GPIO_WritePin(HVS_ENABLE_GPIO_Port, HVS_ENABLE_Pin, GPIO_PIN_SET) #define SET_HVS_OFF HAL_GPIO_WritePin(HVS_ENABLE_GPIO_Port, HVS_ENABLE_Pin, GPIO_PIN_RESET) typedef struct hvs_t { float voltage; //[kV] float current; //[uA] float v_24; //[V] float v_15; //[V] float set_voltage; //[kV] float set_current; //[uA] uint8_t update_voltage_flag; //Need update voltage DAC flag uint8_t update_current_flag; //Need update current DAC flag } hvs_t; void board_init(void); void loop_iterate(); void update_service_indication(void); #endif /* INC_BOARD_LOGIC_H_ */