NUCLEO64-STM32L073RZ的12位ADC输出波动问题求助
问题描述
使用NUCLEO64-STM32L073RZ开发板搭配ACS725电流传感器IC,配置Timer2触发ADC自动转换,系统时钟为16MHz。开发板由笔记本USB供电,ACS725由开发板3.3V输出供电,ADC引脚连接ACS725输出引脚(理论输出为1.65V,即Vcc的一半),但ADC输出波动超过20步。已确认STM32的ADC参考电压和Vcc稳定,相关代码如下:
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { endOfConversion = 1; } int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART2_UART_Init(); MX_ADC_Init(); MX_TIM2_Init(); /* USER CODE BEGIN 2 */ HAL_ADCEx_Calibration_Start(&hadc, ADC_SINGLE_ENDED); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_TIM_Base_Start(&htim2); HAL_ADC_Start_IT(&hadc); do { if(endOfConversion==1) { endOfConversion=0; adc_val = HAL_ADC_GetValue(&hadc); volt = (float) (adc_val*3.33)/4095; txcount++; char str[70]={}; sprintf(str,"adc = %d, Ic out = %.03f\n\r", adc_val, volt); HAL_UART_Transmit(&huart2,(uint8_t *)str, strlen(str), 50); HAL_Delay(500); } }while(txcount>0); HAL_ADC_Stop_IT(&hadc); HAL_TIM_Base_Stop(&htim2); char *str1 = "NEW SET \n\r"; HAL_UART_Transmit(&huart2,(uint8_t *)str1, strlen(str1), 50); } /* USER CODE END 3 */ }
后续在ACS725滤波引脚接入1uF电容(截止频率88Hz)后,大幅波动消除,但仍存在3-7步的波动。由于需测量交流电流无法使用平均滤波,寻求消除剩余波动的方法。
可行解决方案
硬件优化
- 在ACS725的3.3V供电端添加LC滤波:串联10~100Ω磁珠/电感,并联10uF钽电容+0.1uF陶瓷电容,抑制电源链路的高频噪声
- 优化ADC引脚布线:缩短ADC输入走线,远离USB、UART等高频信号线;在ADC引脚对地并联100nF陶瓷电容(电容值不宜过大,避免影响交流信号响应)
- 切换外部高精度参考源:若STM32内部Vref稳定性不足,可改用TL431这类外部参考电压芯片,确保参考源纹波足够低
软件优化
- 启用ADC硬件过采样:STM32L0系列ADC支持硬件过采样,无需软件额外处理,不会延迟交流信号响应。可配置4x/8x倍率,硬件自动完成采样平均,平衡噪声抑制与响应速度
- 调整Timer2触发频率:确保ADC采样频率至少为被测交流信号的10倍以上(如50Hz交流设为1kHz采样率),避免混叠噪声,配合硬件过采样进一步优化
- 延长ADC采样时间:将ADC采样窗口调整为239.5个ADC时钟周期,让输入信号在采样电容上充分稳定,减少采样引入的误差
内容的提问来源于stack exchange,提问作者vishnu m c
相关产品推荐
相关产品推荐

