Regulating and switching polarity works

This commit is contained in:
Jan Mrna
2026-04-22 06:04:59 +02:00
parent ff006de4fd
commit 1e8a75f84c
+39 -4
View File
@@ -21,7 +21,7 @@
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdbool.h>
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@@ -60,6 +60,30 @@ uint16_t ADC_ReadChannel(uint32_t channel);
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void H_bridge_turn_off()
{
HAL_GPIO_WritePin(LS_A_GPIO_Port, LS_A_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LS_B_GPIO_Port, LS_B_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(HS_A_GPIO_Port, HS_A_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(HS_B_GPIO_Port, HS_B_Pin, GPIO_PIN_RESET);
}
void H_bridge_set_direction(bool positive)
{
H_bridge_turn_off();
if (positive)
{
HAL_GPIO_WritePin(HS_A_GPIO_Port, HS_A_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LS_B_GPIO_Port, LS_B_Pin, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(HS_B_GPIO_Port, HS_B_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LS_A_GPIO_Port, LS_A_Pin, GPIO_PIN_SET);
}
}
/* USER CODE END 0 */
/**
@@ -94,12 +118,16 @@ int main(void)
MX_ADC1_Init();
MX_USB_PCD_Init();
/* USER CODE BEGIN 2 */
H_bridge_turn_off();
H_bridge_set_direction(true);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
GPIO_PinState state = GPIO_PIN_RESET;
const uint32_t polarity_switch_period = 1000;
uint32_t next_polarity_switch_ms = HAL_GetTick() + polarity_switch_period;
bool polarity = true;
while (1)
{
/* USER CODE END WHILE */
@@ -107,8 +135,9 @@ int main(void)
uint16_t val_ch0 = ADC_ReadChannel(ADC_CHANNEL_0);
uint16_t val_ch1 = ADC_ReadChannel(ADC_CHANNEL_1);
// Convert to voltage (12-bit, 3.3V reference)
float voltage_ch0 = (val_ch0 * 3.3f) / 4095.0f;
float voltage_ch1 = (val_ch1 * 3.3f) / 4095.0f;
const float adc_voltage_divider = 2.0f;
float voltage_ch0 = (val_ch0 * 3.3f) / 4095.0f * adc_voltage_divider;
float voltage_ch1 = (val_ch1 * 3.3f) / 4095.0f * adc_voltage_divider;
// simple regulation
const float target_voltage = 3.0f;
@@ -119,6 +148,12 @@ int main(void)
state = GPIO_PIN_RESET;
}
HAL_GPIO_WritePin(VDD_LEDL_EN_GPIO_Port, VDD_LEDL_EN_Pin, state);
if (HAL_GetTick() > next_polarity_switch_ms)
{
next_polarity_switch_ms = HAL_GetTick() + polarity_switch_period;
polarity = !polarity;
H_bridge_set_direction(polarity);
}
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */