ADC 采样数据抖动

MSP430或STM32,在使用内部ADC出现的采样数据异常抖动问题

采样设计:

用于检测供电线路电流及电压。

产品运行在两种模式下,1、低功耗静态模式(仓储态),2、全功能全速运行模式(工作态)。

在仓储态下,所有外设均处于关闭状态,MCU也处于低功耗模式下(如MSP430处于LPM3模式,STM32处于STOP2模式下),仅保留低功耗定时器及ADC,ADC处于低速运行状态,检测的是工频信号,在一个工频周期内检测8个点的数据,每隔2.5ms采样一次。外部采样通道也通过MOS管进行开启关闭。

ADC转换器内部图:

问题1.ADC多通道连续采样,采样值异常波动

当MCU需要多通道连续采样时,ADC从设置的通道开始顺序采样到通道结束,其内部使用的是一个ADC进行对不同的采样通道的切换,在切换过程中,不可避免的需要对ADC内部RC(Cadc)进行充放电,此时就存在一个隐蔽的问题。

若不同的采样通道之间的采样幅值不同,如CHANEL1的信号为3.6V的电池电压,CHANEL2的信号为1V基准的交流信号,CHANEL3的信号为3V左右的温度信号。此时ADC先采样CHANEL1,完成后将结果写入结果寄存器,紧接着采样CHANEL2,再采样CHANEL3。

这个过程中,当不同的信道接入ADC时,外接待采样信号会通过RC回路进行充放电(这个过程需要一定的采样

虽然给定的引用中未提及解决STM32 ADC采集数据不稳定问题的方法,但结合专业知识,以下是一些常见的解决方法: ### 硬件方面 - **电源稳定性**:ADC对电源噪声非常敏感,不稳定的电源会导致采集数据波动。可使用低噪声的电源芯片,如TPS7A4700等,并在电源输入和输出端添加合适的去耦电容,一般在电源引脚附近放置0.1μF和10μF的电容,以滤除高频和低频噪声。 - **参考电压稳定性**:参考电压ADC转换的基准,其波动会直接影响采集数据的准确性。可采用高精度的外部参考电压源,如REF3030,为ADC提供稳定的参考电压。 - **布线优化**:合理的布线可以减少电磁干扰。将模拟信号和数字信号分开布线,避免相互干扰;缩短ADC输入引脚到信号源的距离,减小信号衰减和干扰。 ### 软件方面 - **采样时间调整**:适当增加ADC的采样时间,让电容有足够的时间充电到稳定值。在STM32中,可以通过配置ADC的采样时间寄存器来调整采样时间。例如: ```c ADC_HandleTypeDef hadc; hadc.Instance = ADC1; hadc.Init.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; // 增加采样时间 HAL_ADC_Init(&hadc); ``` - **多次采样取平均值**:对同一通道进行多次采样,然后取平均值作为最终结果,以减少随机噪声的影响。示例代码如下: ```c #define SAMPLE_TIMES 10 uint32_t adc_sum = 0; for (int i = 0; i < SAMPLE_TIMES; i++) { HAL_ADC_Start(&hadc); HAL_ADC_PollForConversion(&hadc, HAL_MAX_DELAY); adc_sum += HAL_ADC_GetValue(&hadc); } uint32_t adc_average = adc_sum / SAMPLE_TIMES; ``` - **滤波算法**:采用数字滤波算法,如滑动平均滤波、中值滤波等,进一步平滑采集数据。以滑动平均滤波为例: ```c #define FILTER_LENGTH 5 uint32_t filter_buffer[FILTER_LENGTH]; uint8_t filter_index = 0; uint32_t filter_sum = 0; void sliding_average_filter(uint32_t new_value) { filter_sum -= filter_buffer[filter_index]; filter_buffer[filter_index] = new_value; filter_sum += new_value; filter_index = (filter_index + 1) % FILTER_LENGTH; } // 使用示例 uint32_t adc_value = HAL_ADC_GetValue(&hadc); sliding_average_filter(adc_value); uint32_t filtered_value = filter_sum / FILTER_LENGTH; ``` ### 其他方面 - **避免干扰源**:检查周围是否存在强电磁干扰源,如电机、开关电源等,尽量远离这些干扰源,或采取屏蔽措施。 - **校准ADC**:使用STM32提供的ADC校准功能,对ADC进行校准,以提高转换精度。示例代码如下: ```c HAL_ADCEx_Calibration_Start(&hadc, ADC_SINGLE_ENDED); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值