ADC

  stm32f207,  引脚对应的模拟通道: PA0 IN0, PA1 PA2 PA3 PA4 PA5 PA6 PA7 IN PB0 IN8 PB1 IN9 PC0 IN10 PC1 PC2 PC3  PC4 IN14 PC5 IN15 
  • ADC采样转换时间

ADC转换就是输入模拟的信号量,单片机转换成数字量。读取数字量必须等转换完成后,完成一个通道的读取叫做采样周期。采样周期一般来说=转换时间+读取时间。而转换时间=采样时间+12.5个时钟周期采样时间是你通过寄存器告诉stm32采样模拟量的时间,设置越长越精确
The total conversion time is calculated as follows:

Tconv = Sampling time + 12 cycles

Example:

With ADCCLK = 30 MHz

and 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。

思路二、加电压跟随器

匹配流程:信号源内阻<---匹配<---高输入阻抗-电压跟随器-低输出阻抗--->匹配---->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 

  • ADC软件滤波

----其实,弄个均值滤波就可以了

参考:

10种ADC软件滤波方法及程序 

http://blog.csdn.net/haozi_1989/article/details/6625404

来自为知笔记(Wiz)

时间: 2024-12-23 23:20:13

ADC的相关文章

重学STM32---(五)ADC

这两天把外部中断和ADC看了下,个人感觉外部中断不是很难,也就没有把记下来了,毕竟写这个挺浪费时间.ADC是比较复杂的,如果想让完全自由的运用ADC必须经过多次实践可能才可以.由于已经学过库函数,也就打算自己看数据手册写了一个简单的寄存器版的ADC,期间也遇到了很多问题,幸好都解决了. 把这次学习的重点都记下来,以后再看不知是什么感觉O(∩_∩)O哈哈~ 1. 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值. ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生.

1.13裸机ADC部分

1.13.1.ADC的引入 1.13.1.1.什么是ADC (1)ADC:analog digital converter ,AD转换,模数转换(也就是模拟转数字) (2)CPU本身是数数字的,而外部世界变量(如电压.温度.高度.压力)都是模拟的,所以需要用CPU来处理这些外部的模拟量的时候就需要做AD转换 1.13.1.2.为什么需要ADC (1)为了用数字技术来处理外部的模拟量 1.13.1.3.关于模拟量和数字量 (1)模拟的就是连续的,显示生活中的时间.电压.高度等都是模拟的(连续分布的

利用STM32CubeMX来生成USB_HID_Mouse工程【添加ADC】(2)【非dma和中断方式】

上回讲到怎么采集一路的adc的数据,这次我们来采集两路的数据. 现在直接修改原先的代码 /* Private variables ---------------------------------------------------------*/ uint16_t AD_Value_Buf[2]; uint16_t AD_X_Value = 0; uint16_t AD_Y_Value = 0; /* USER CODE END PV */ /* USER CODE BEGIN 3 */ fo

STM32F0的多路ADC 无DMA

前段时间几乎用了一下午的时间, 就为了调F0的两路ADC, 一开始想的办法是将采样的连续模式(ADC_ContinuousConvMode)使能, 然后连续拿两个值, 拿完分别返回. 坏处不用说, 看着就傻, 就算你只需要一个ADC通道的值, 也要拿足N个, 比如你一共要拿5个ADC引脚的电压, 那就要全拿, 然后取其中第若干个, 如果你要拿8个做平均, 就要把时间再乘8, 看着就蠢. 但是反复调试发现如果不连续采样, 第一次ok, 但是后面每次就只采后一个通道了, 很奇怪, 结果发现原来是居然

【ADC】ADC初始化的注意事项

ADC的初始化如果没设置好,对于整个系统是有很大的影响的,首先就是拖慢采集速度. 再有就是没打开通道没有检测.那直接看710的ADC初始化代码来理解吧 要用的引脚需要先设置为输入. 27     AD1PCFGH=0XFFFF;                        //选择AN0引脚作为模拟输入28     AD1PCFGL=0XFFF0; 这两个寄存器设置需要注意,0为模拟输入,所以你要多个采集的话就要把那几位置零了 AD1CSSL=0X0001;                  

MAX10 ADC的一些基知识

MAX10 ADC 的一些知识 1.        MAX 10 内部集成的12bit SAR ADC的特点为: a.        采样速率高达1Mhz. b.        模拟通道多达18个,单个ADC多达17个,双ADC器件中有16个双功能ADC通道,2个专用的ADC. c.         提供单端测量功能. d.        双ADC器件的专用模拟输入管脚具备同步测量功能.因两个专用的管脚的封装布线是匹配的.而双功能管脚,两个ADC模块之间的布线延时在同步测量中导致数据失配.另外I

ADC类型总结

1.SAR型 (逐次逼近型) 摘要:逐次逼近寄存器型(SAR)模数转换器(ADC)占据着大部分的中等至高分辨率ADC市场.SAR ADC的采样速率最高可达5Msps,分辨率为8位至18位.SAR架构允许高性能.低功耗ADC采用小尺寸封装,适合对尺寸要求严格的系统. 本文说明了SAR ADC的工作原理,采用二进制搜索算法,对输入信号进行转换.本文还给出了SAR ADC的核心架构,即电容式DAC和高速比较器.最后,对SAR架构与流水线.闪速型以及Σ-Δ ADC进行了对比. 引言 逐次逼近寄存器型(S

STM32 ADC基础与多通道采样

12位ADC是一种逐次逼近型模拟数字数字转换器.它有多达18个通道,可测量16个外部和2个内部信号源.ADC的输入时钟不得超过14MHZ,它是由PCLK2经分频产生.如果被ADC转换的模拟电压低于低阀值或高于高阀值,AWD模拟看门狗状态位被设置. ADC通常要与DMA一起使用 这里只是简单的用库配置ADC 不断扫描来实现ADC的应用. 配置DMA: void DMA_Config(void) { DMA_InitTypeDef DMA_InitStructure;//定义DMA初始化结构体 DM

HAL驱动库学习-ADC

如何使用ADC驱动库 1  实现如下两个函数 a: HAL_ADC_MspInit()使能ADC时钟,设置时钟源, 使能ADC Pin,设置为输入模式,可选 DMA,中断 b:HAL_ADC_MspDeInit() 与 HAL_ADC_MspInit()作用相反,用来关闭ADC,可选 DMA,中断 2  配置ADC参数,详细参数描述参考ADC属性定义.通过HAL_ADC_Init()来加载参数 3  配置ADC通道,包括使用的通道,采样时间等 HAL_ADC_ConfigChannel() 4

[TM4C123单片机实战] 两路ADC检测,短路报警

如果最终得到的数据是两路数据的差值, 我们可以采用ADC的 Difference 工作模式 #include <stdbool.h> #include <stdint.h> #include "inc/hw_memmap.h" #include "driverlib/adc.h" #include "driverlib/gpio.h" #include "driverlib/pin_map.h" #in