STM32高速ADC采样电路设计实战:从问题排查到解决方案
STM32高速ADC采样电路设计实战:从问题排查到解决方案
在使用STM32F334进行数字电源设计时,遇到了高速ADC采样异常的问题。通过详细的排查和分析,最终发现是由于高速采样时输入信号处理不当导致的。本文将分享这一问题的解决过程,并总结ADC设计的关键要点。
问题描述
在使用STM32F334进行数字电源设计时,需要通过高速ADC采集电压和电流信号。设计中参考电压VREF为3.3V,输入信号经过运放跟随后直接接入单片机的采样通道。在低电压输入时,采集结果正常,但当输入信号增加到2.5V左右时,采集到的电压值突然严重偏大(例如实际2.5V,ADC采集到的电压为2.6V)。
排查过程
首先排除了软件问题,因为低电压时采集数据正常。然后检查硬件,确认输入信号和参考电压正常,排除了通道间干扰的可能性。怀疑是单片机自身的缺陷,但根据经验,更可能是硬件设计或软件配置的问题。
进一步分析发现,这次的采样率高达300kHz,而以往的经验中采样率都很低(通常小于1kHz)。因此,怀疑问题出在高速采样上。配置代码如下:
ADC_StructInit(&ADC_InitStructure);
ADC_InitStructure.ADC_ContinuousConvMode = ADC_ContinuousConvMode_Disable; //单次触发模式
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ExternalTrigConvEvent = ADC_ExternalTrigConvEvent_7; //HRTIM_ADCTRG1 event
ADC_InitStructure.ADC_ExternalTrigEventEdge = ADC_ExternalTrigEventEdge_RisingEdge;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_OverrunMode = ADC_OverrunMode_Disable;
ADC_InitStructure.ADC_AutoInjMode = ADC_AutoInjec_Disable;
ADC_InitStructure.ADC_NbrOfRegChannel = 4;
ADC_Init(ADC1, &ADC_InitStructure);
/* ADC1 regular channel configuration */
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_1Cycles5); //VISENS
ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_1Cycles5); //IOSENS
ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_1Cycles5); //VOSENS1
ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 4, ADC_SampleTime_1Cycles5); //VOSENS2
尝试将采样时间设大后,采集到的值误差变小,基本判定问题与采样时间有关。查阅手册发现,需要足够的采样时间确保输入信号对内嵌的保持电容充电并达到稳定状态。将采样时间设置到最大后,采样结果有所改善,但仍未完全解决问题。
问题根源
通过深入研究ADC的工作原理,发现问题是由于高速采样时输入信号处理不当导致的。直接将运放跟随后的信号接入ADC,在高速采样时,采样开关开启瞬间放大器会产生尖峰。由于采样时间很短,尖峰还未消除,采样开关已经关闭,导致实际采样到的值偏大。
ADC设计要点总结
基准源的设计
基准电压需要稳定且具有一定的驱动能力。可以参考这篇文章详细了解基准电压的设计。输入信号的设计
输入信号处理的重要性
直接将电阻分压信号接入ADC采样会导致采样值偏差,因为ADC本身有一定的输入阻抗(有些甚至只有几kΩ),会起到分压作用。
如上图所示,ADC的输入阻抗Rz与R2并联后再与R1分压,实际分压比会与设计值不同。
常规处理方法是在输入信号前加跟随器,但仅跟随不滤波在高速采样时仍存在问题。高速采样时的解决方案
高速采样时需要对输入信号进行低通滤波处理。下图显示了加RC滤波和不加RC滤波的区别:
从图中可以看到,不加RC滤波时采样瞬间放大器输出信号产生尖峰,而加了RC滤波后信号平稳上升到实际值。
总结
在进行ADC设计时,不仅要知其然,更要知其所以然。面对问题时,需要深入理解原理,才能做到处变不惊,游刃有余。