ADC
stm32f207, 引脚对应的模拟通道:PA0 IN0,PA1PA2PA3PA4PA5PA6PA7 INPB0 IN8PB1 IN9PC0 IN10PC1PC2PC3PC4 IN14PC5 IN15
- ADC采样转换时间
ADC转换就是输入模拟的信号量,单片机转换成数字量。读取数字量必须等转换完成后,完成一个通道的读取叫做采样周期。采样周期一般来说=转换时间+读取时间。而转换时间=采样时间+12.5个时钟周期。采样时间是你通过寄存器告诉stm32采样模拟量的时间,设置越长越精确
The total conversion time is calculated as follows:Tconv = Sampling time + 12 cyclesExample:With ADCCLK = 30 MHzand sampling time = 3 cycles:Tconv = 3 + 12 = 15 cycles = 0.5 μs with APB2 at 60 MHz
- ADC输入阻抗--匹配--信号源内阻
信号源内阻当然越小越好,这样带负载能力强
当信号源的阻抗大于2.5K时,AD的输入阻抗对信号源的分压将不能忽
略。信号源阻抗是指从AD口朝外看出来的等效阻抗,当然越小越好。
ADC的输入阻抗越大越好,这样对信号源适应性好
也就不会吸收电流,不会对外电路产生什么影响
AD采样相当于一个电容,工作时候,需要尽快跟上外部电压,于是有个充放电的问题,这个充放电其实就是采样过程。采样完成后断开外部连接,保持器,给ADC转换提供稳定的电压。
若要做到阻抗匹配,有什么思路呢:问题:STM32Fxx的AD输入阻抗这么低,导致ad从分压电阻中吸收了电流,以致分压值不准,采样值偏低,
处理方法:思路一、减小信号源内阻,对于ad采样来说,若从两分压电阻中间取样,那么分压电阻就不要太大,选取2.5k,试试看。---经验证,效果明显,分压电阻采用的2k---2k。
略。信号源阻抗是指从AD口朝外看出来的等效阻抗,当然越小越好。
思路二、加电压跟随器
匹配流程:信号源内阻<---匹配<---高输入阻抗-电压跟随器-低输出阻抗--->匹配---->adc输入阻抗
参考:电压跟随器的显著特点就是,输入阻抗高,而输出阻抗低。--百度百科链接,说得不错,算是做了一个阻抗匹配的科普了,呵呵http://baike.baidu.com/link?url=q7ecMEmTmwwxMe48AN6I1uSotP3MhXDrKio7QmqXnrfKtlJMXOChfeH_OcwqrXg1Uk4P5pv1l6h1mvpeI5s3o_
思路三、减小ADC的采样速率??
---减小ADC的时钟频率。 经验证,确实有效果,将ADC_Prescaler 设置成ADC_Prescaler_Div8(即7.5MHz)后,ADC引脚的连接对信号源电平的影响减小,有一定的增大ADC输入阻抗的作用。
---增加两次采样之间的时间间隔。经验证,效果基本没有。
减小ADC的采样速率,采样电压的变化频率减小,即AD采样的充放电电容的阻抗减小,从而降低了adc的输入阻抗。
参考:为什么STM32Fxx的AD输入阻抗这么低 -----http://bbs.eeworld.com.cn/thread-249624-1-1.html
(原因:综合网友们的讨论,基本是这个原因---阻抗小,即电容值充放电快,采样速率更高,是为了保证采样速率)
请高手出马:ADC的输入阻抗问题 -----http://bbs.21ic.com/icview-152735-1-1.html
ADC采样输入阻抗的计算 ------http://bbs.21ic.com/icview-84949-1-1.html
- Using the DMA
If the DMA bit is set, the direct memory access (DMA) controller is used to transfer the data
converted from the regular group of channels (stored in the ADC_DR register) to SRAM
after each regular channel conversion.Data management--Using the DMA
When the DMA mode is enabled (DMA bit set to 1 in the ADC_CR2 register), after each
conversion of a regular channel, a DMA request is generated. This allows the transfer of the
converted data from the ADC_DR register to the destination location selected by the
software.
官方的固体库里的demo例子不错,可直接复制过来进行测试。
不懂可以参考,下面这文章总结的不错,解决了我的问题。
STM32F4 ADC采集数据的DMA数据传输【库函数操作】
http://www.cnblogs.com/zyqgold/archive/2013/05/23/3095301.html
STM32 ADC结合DMA数据采样与软件滤波处理
http://blog.csdn.net/i792439187/article/details/8825397