사용 MCU: STM32F103VCT

사용 IDE: TrueSTUDIO 9.3.0

 

STM32F HAL드라이브에서 HAL_ADCEx_Calibration_Start라는 함수가 있습니다.

/**
  * @brief  Perform an ADC automatic self-calibration
  *         Calibration prerequisite: ADC must be disabled (execute this
  *         function before HAL_ADC_Start() or after HAL_ADC_Stop() ).
  *         During calibration process, ADC is enabled. ADC is let enabled at
  *         the completion of this function.
  * @param  hadc: ADC handle
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc);

 

이 함수를 꼭 써야하는가 ? 의문이 들어서 Calibration을 하고 안 하고의 차이점을 확인하기 위해 직접 실험 해 보았습니다.

 

STM32F103VCT6가 달려있는 보드를 사용했고 ADC한 회로는 아래와 같이 가변저항으로 실험 했고 확인하기 좋게

한쪽으로 끝까지 돌려 PC5_SBT에 3.3V가 들어가도록 하였습니다. 

 

이론적으로 ADC결과는 4095(12bit ADC)가 나와야합니다.

가변저항 회로도

 

실험한 코드는 아래와 같습니다.

 

/* 100ms마다 ADC결과 전송 */
void adc_task()
{
    static uint32_t time = 0;
    uint16_t value;
    
    if (HAL_GetTick() - time < 100) {
    	return;
    }
    
    time = HAL_GetTick();
    
    /* ADC 시작 */
    HAL_ADC_Start(&hadc1);
    
    /* ADC가 완료될 때까지 대기 */
    while(HAL_ADC_PollForConversion(&hadc1, 10) != HAL_OK);
    
    /* ADC 값 가져오기 */
    value = HAL_ADC_GetValue(&hadc1);
    
    /* ADC 중지 */
    HAL_ADC_Stop(&hadc1);

    printf("%d\r\n", value);
}


int main(void)
{
  ...
  
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_USART1_UART_Init();
  
  ...
  
  /* ADC Calibration ? 실험 포인트 */
  while(HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK);
  
  while(1)
  {
  	adc_task();
  
  }
}

 

결과 확인

결과는 제가 확인하기 편하게 Electron으로 GUI툴을 작성하여 Serial값을 수신하여 값과 차트로 표현하도록 하였습니다.

 

1. while(HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK); 를 주석처리 하고 ADC 결과 값 확인

Calibration 없이 3.3V ADC 결과

이론적이라면 ADC값이 최대값인 4095가 나와야하는데 4030~40대가 나오네요.

 

 

2. while(HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK); 호출한 후 ADC 결과 값 확인

Calibration 후 3.3V ADC 결과

 

중간에 하나씩 튀는 값이 있지만 이론값대로 4095가 나오는 것을 볼 수 있습니다.

 

 

아래는 위 두 실험을 한 차트에 표현했을 때 차트입니다. 차이가 있는것을 볼 수 있습니다.

(Calibration 후 ADC가 flat하니 보기 좋은데 최대 전압이라 그렇지 전압을 조금 내리면 노이즈 정도는 비슷합니다.)

 

반응형

+ Recent posts