Skip to main content
LCenn.1
Associate
July 14, 2022
Question

STM32WL Signal glitch on ADC conversion

  • July 14, 2022
  • 0 replies
  • 628 views

We periodically start a conversion for multiple channels by timer, with DMA.

void HAL_ADC_Setup_Completed(void) 
{
 ADC_ChannelConfTypeDef sConfig = {0};
 
 adc_channel_number = ADC_CHANNEL_NUMBER;
 
 /* DMA controller clock enable */
 __HAL_RCC_DMAMUX1_CLK_ENABLE();
 __HAL_RCC_DMA1_CLK_ENABLE();
 
 /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
 */
 hadc.Instance = ADC;
 //hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
 hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
 hadc.Init.Resolution = ADC_RESOLUTION_12B;
 hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
 hadc.Init.ScanConvMode = ADC_SCAN_ENABLE;
 hadc.Init.EOCSelection = ADC_EOC_SEQ_CONV;
 hadc.Init.LowPowerAutoWait = DISABLE;
 hadc.Init.LowPowerAutoPowerOff = ENABLE;
 hadc.Init.ContinuousConvMode = DISABLE;
 hadc.Init.NbrOfConversion = adc_channel_number;
 hadc.Init.DiscontinuousConvMode = DISABLE;
 hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
 hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
 hadc.Init.DMAContinuousRequests = DISABLE;
 hadc.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
 hadc.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_39CYCLES_5;
 hadc.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_160CYCLES_5;
 hadc.Init.OversamplingMode = DISABLE;
 hadc.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_LOW;
 if (HAL_ADC_Init(&hadc) != HAL_OK)
 {
 Error_Handler();
 }
 
 /** Configure Regular Channel
 */
 sConfig.Channel = ADC_CHANNEL_1; 
 sConfig.Rank = ADC_REGULAR_RANK_1;
 sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;
 if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
 {
 Error_Handler();
 }
 /** Configure Regular Channel
 */
 sConfig.Channel = ADC_CHANNEL_2; 
 sConfig.Rank = ADC_REGULAR_RANK_2;
 sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;
 if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
 {
 Error_Handler();
 }
 /** Configure Regular Channel
 */
 sConfig.Channel = ADC_CHANNEL_3; 
 sConfig.Rank = ADC_REGULAR_RANK_3;
 sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;
 if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
 {
 Error_Handler();
 }
 /** Configure Regular Channel 
 */
 sConfig.Channel = ADC_CHANNEL_7; 
 sConfig.Rank = ADC_REGULAR_RANK_4;
 sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;
 if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
 {
 Error_Handler();
 }
 /** Configure Regular Channel
 */
 sConfig.Channel = ADC_CHANNEL_8; 
 sConfig.Rank = ADC_REGULAR_RANK_5;
 sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;
 if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
 {
 Error_Handler();
 }
 /** Configure Regular Channel
 */
 sConfig.Channel = ADC_CHANNEL_VREFINT; //VREF
 sConfig.Rank = ADC_REGULAR_RANK_6;
 sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;
 if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
 {
 Error_Handler();
 }
 /** Configure Regular Channel
 */
 sConfig.Channel = ADC_CHANNEL_4; 
 sConfig.Rank = ADC_REGULAR_RANK_7;
 sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_2;
 if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
 {
 Error_Handler();
 }
 
 /* Run the ADC calibration */
 if (HAL_ADCEx_Calibration_Start(&hadc) != HAL_OK)
 {
 /* Calibration Error */
 Error_Handler();
 }
 
// while(!adcCompleted){}
 while(!HAL_ADC_PollForConversion(&hadc, 0)){}
 
 //HAL_ADCEx_Calibration_Start(&hadc);
}
 
void HAL_ADC_StartConversion(void) 
{
 /* Start ADC group regular conversion with DMA */
 if (HAL_ADC_Start_DMA(&hadc,
 (uint32_t *)aADCxConvertedData,
 adc_channel_number
 ) != HAL_OK)
 {
 /* ADC conversion start error */
 Error_Handler();
 } 
}

Monitoring an input channel with a scope, there is a big glitch on the signal, that does not seem commensurate with the input capacity of the ADC or the output impedance of the amplifier. What can be the cause? And can we suppose that the sampling ends at point 2 of the trace? In this case also the value on sampling capacitor is wrong.

Regards.0693W00000QLGeXQAX.png

This topic has been closed for replies.