Simple regulator (doesnt work :( )
This commit is contained in:
+47
-3
@@ -54,7 +54,7 @@ static void MX_GPIO_Init(void);
|
|||||||
static void MX_ADC1_Init(void);
|
static void MX_ADC1_Init(void);
|
||||||
static void MX_USB_PCD_Init(void);
|
static void MX_USB_PCD_Init(void);
|
||||||
/* USER CODE BEGIN PFP */
|
/* USER CODE BEGIN PFP */
|
||||||
|
uint16_t ADC_ReadChannel(uint32_t channel);
|
||||||
/* USER CODE END PFP */
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
/* Private user code ---------------------------------------------------------*/
|
/* Private user code ---------------------------------------------------------*/
|
||||||
@@ -103,9 +103,22 @@ int main(void)
|
|||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
/* USER CODE END WHILE */
|
/* USER CODE END WHILE */
|
||||||
state = state == GPIO_PIN_RESET ? GPIO_PIN_SET : GPIO_PIN_RESET;
|
// Read voltages before and after current limiting resistor (R22, 10 ohm)
|
||||||
|
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;
|
||||||
|
|
||||||
|
// simple regulation
|
||||||
|
const float target_voltage = 3.0f;
|
||||||
|
if (voltage_ch0 < target_voltage)
|
||||||
|
{
|
||||||
|
state = GPIO_PIN_SET;
|
||||||
|
} else {
|
||||||
|
state = GPIO_PIN_RESET;
|
||||||
|
}
|
||||||
HAL_GPIO_WritePin(VDD_LEDL_EN_GPIO_Port, VDD_LEDL_EN_Pin, state);
|
HAL_GPIO_WritePin(VDD_LEDL_EN_GPIO_Port, VDD_LEDL_EN_Pin, state);
|
||||||
HAL_Delay(50);
|
|
||||||
/* USER CODE BEGIN 3 */
|
/* USER CODE BEGIN 3 */
|
||||||
}
|
}
|
||||||
/* USER CODE END 3 */
|
/* USER CODE END 3 */
|
||||||
@@ -294,7 +307,38 @@ static void MX_GPIO_Init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 4 */
|
/* USER CODE BEGIN 4 */
|
||||||
|
uint16_t ADC_ReadChannel(uint32_t channel)
|
||||||
|
{
|
||||||
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
|
// Configure the specific channel
|
||||||
|
sConfig.Channel = channel;
|
||||||
|
sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start conversion
|
||||||
|
if (HAL_ADC_Start(&hadc1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Poll for completion (timeout 10ms)
|
||||||
|
if (HAL_ADC_PollForConversion(&hadc1, 10) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get result
|
||||||
|
uint16_t adc_value = HAL_ADC_GetValue(&hadc1);
|
||||||
|
|
||||||
|
// Stop ADC
|
||||||
|
HAL_ADC_Stop(&hadc1);
|
||||||
|
|
||||||
|
return adc_value;
|
||||||
|
}
|
||||||
/* USER CODE END 4 */
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user