首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

野火stm32学习笔记_ADC(DMA方式)

野火stm32学习笔记_ADC(DMA方式)

1、
对于ADC来说,我们关注的是它的分辨率、转换速度、ADC类型、参考电压范围。

A、
分辨率,12位分辨率,最小量化单位LSB=VREF+/212


B、
转换时间,可编程的,采样一次至少要用14ADC时钟周期,而ADC时钟频率最高为14MHz,也就是说它的最短采样时间为1us


C、
ADC类型,类型决定了性能的极限,stm32是逐次比较型ADC


D、
参考电压范围,当需要测量负电压或测量的信号超出范围时,要先经过运算电路进行平移或利用电阻分压


2、
ADC工作过程分析,ADC部件要受到触发信号才开始进行转换,如EXTI外部触发、定时器触发,也可以软件触发。ADC部件在接收到触发信号后,在ADCCLK时钟的驱动下对输入通道信号进行采样,并进行模数转换。其中,ADCCLK来自ADC的预分频器


3、
DMA在传输时,由于不是内核执行的指令,所以修改变量值是绝对不会出现赋值语句的。


4、
ADC_Init( )中完成对ADCDMA配置后,ADC就不停地采集数据,而DMA就自动把ADC采集到的数据转移至内存中的变量ADC_ConvertedValue.因此,它是一个实时值


5、
ADC1_GPIO_Config( )的功能就是使能DMA时钟、GPIO时钟、ADC1时钟。然后把ADC1的通道11使用的GPIO引脚PC1配置成模拟输入模式


6、
配置DMAADC模式及其DMA传输方式都在ADC_Mode_Config( )中实现,ADCDMA整体上被配置为:使用DMA1的通道1


7、
配置ADC模式:主要对ADC的初始化结构体进行赋值,下面是它的结构体成员:


A.ADC_Mode,多个ADC,不同的ADC又是共用相同的通道,根据同一个通道的先后顺序、时间间隔,可划分10种模式(测量电压分压后的电压值,要求不高,用一个ADC就可以了)

B.ADC_ScanConvMode,当有多个通道需要采集信号时,可配置为按一定顺序对各个通道进行扫描转换,即轮流采集各通道的值,若采集多个通道,必须开启此模式

CADC_ContinuousConvMode,连续转换模式,即在上一次转换完后,立即开启下一次的转换

DADC_ExternalTrigConv,外部触发,若使用软件触发,则ADC_ExternalTrigConv_None

E.ADC_DataAlign,数据对齐方式

F.ADC_NbrOfChannel,这个成员保存了要进行ADC数据转换的通道数

8ADC初始化使用ADC_Init( )函数,但要调用ADC_Cmd( )函数来使能ADC外设,用ADC_DMACmd( )函数来使能ADCDMA接口

9ADC转换时间配置:RCC_ADCCLKConfig( )设置分频值,ADC转换时间不仅与ADC的时钟有关,还与采样周期有关

10stm32 ADC采样时间计算公式:Tconv=采样周期+12.5个周期,公式中的采样周期就是本函数配置的ADC_SampleTime,后面再加上12.5个固定周期值。所以,转换时间=采样时间/分频值

11ADC自校准,在ADC转换前,要启动ADC的自校准,校准可以大幅度减少准精度误差

12、软件触发可以调用库函数ADC_SoftwareStartConvCmd( )来开启软件触发

13Volatile定义的变量,使用该关键词来修饰,为的是不要让编译器去优化变量

14、用volatile声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。
因为ADC_ConvertedValue这个变量值随时都是会被DMA控制器改变的,所以我们用volatile来修饰它,确保每次读取到的都是实时的ADC转换值。


15ADC通用的电压计算公式:实际电压值=ADC转换值*LSB
返回列表