嵌入式--ADC实验原理及相关库函数功能

一、ADC原理

        ADC指模/数转换器或者模拟/数字转换器。是将连续变量的模拟信号转换为离散的数字信号的器件典型的模拟数字转换器是将模拟信号转换为表示一定比例电压值的数字信号。ADC的输入时钟不得超过14MHz,否则将导致结果准确度下降是由PCLK2经分频产生。

1、STM32F10x 类型的ADC特点 :

(1)12位逐次逼近型的模拟数字转换器。
(2)最多带3个ADC控制器
(3)最多支持18个通道,可最多测量16个外部和2个内部信号源。
(4)支持单次和连续转换模式
(5)转换结束,注入转换结束,和发生模拟看门狗事件时产生中断。
(6)通道0到通道n的自动扫描模式
(7)自动校准
(8)采样间隔可以按通道编程
(9)规则通道和注入通道均有外部触发选项
(10)转换结果支持左对齐或右对齐方式存储在16位数据寄存器
(11)ADC转换时间:最大转换速率 1us。(最大转换速度为1MHz,在ADCCLK=14M,采样周期为1.5个ADC时钟下得到。)
(12)ADC供电要求:2.4V-3.6V
(13)ADC输入范围:VREF- ≤  VIN  ≤  VREF+

嵌入式--ADC实验原理及相关库函数功能_第1张图片

嵌入式--ADC实验原理及相关库函数功能_第2张图片

 图1 ADC原理图

2、ADC通道和引脚对应关系 

嵌入式--ADC实验原理及相关库函数功能_第3张图片

嵌入式--ADC实验原理及相关库函数功能_第4张图片  图2 引脚对应图

3、规则通道和注入通道

STM32 将 ADC 的转换分为 2 个通道组:规则通道组和注入通道组。规则通道相当于你正常运行的程序,而注入通道呢,就相当于中断。在你程序正常执行的时候,中断是可以打断你的执行的。同这个类似,注入通道的转换可以打断规则通道的转换, 在注入通道被转换完成之后,规则通道才得以继续转换。

规则组由多达16个转换组成,注入组由多达4个转换组成。
嵌入式--ADC实验原理及相关库函数功能_第5张图片
二、ADC常用的库函数功能与作用
 (1)void ADC_DeInit(ADC_TypeDef* ADCx);

 初始化ADCx外围寄存器为默认,调用RCC_APB2PeriphResetCmd()函数进行复位。

(2) void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);

ADC初始化函数, ADC_TypeDef*对ADC进行选择。ADC_InitTypeDef对ADC进行配置,包括(1)模式:十种操作模式选择。(2)扫描模式:是否开启扫描。(3)转换模式:是否开启连续转换模式。(4)启动规则组外部事件: 选择是哪种启动。(5)数据对齐方式:左对齐或者右对齐。(6)通道数目:最多16个。

(3)void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);

用默认值对ADC进行结构体形式的初始化 ,初始化参数和上面六个参数一样,但都是默认值。

(4) void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);

使能或者失能指定的ADC外设。

(5)void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);

使能或者失能指定的ADC外设的DMA请求,只有ADC1和ADC3能产生DMA请求。 

(6)void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);

ADC中断配置,1.ADC外设选择。2.中断选择:EOC、JEOC、AWD。3.中断使能。

(7)void ADC_ResetCalibration(ADC_TypeDef* ADCx); 

复位选中的ADC校准寄存器 

(8)FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx);

获取ADC复位校准状态,0.校准完成 1.开始校准。

(9) void ADC_StartCalibration(ADC_TypeDef* ADCx);

开始ADC校准。

(10)FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx); 

 获取ADC校准状态,0.校准完成 1.开始校准。7、8、9、10是整个ADC校准过程。

(11)void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

选择使用外部事件启动转换 的软件启动,使能或者失能选定的ADC软件启动转换。

(12)FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);

获取选定的ADC软件开始转换状态,检查转换是否开始 。

(13)void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);

 ADC规则通道参数配置,1.选择ADC外设。2.确定ADC通道。3.设置转换排名。4.选择采样时间。

(14)uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);

获取规则通道的最后一个ADCx转换结果数据。

(15)FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);

获取ADC状态标志,主要获取SR寄存器中五种状态标志。

三、ADC一般配置过程

开启 PA 口时钟和 ADC1 时钟,设置 PA1 为模拟输入。

      GPIO_Init();     

     APB2PeriphClockCmd();

复位ADC1,同时设置ADC1分频因子。

      RCC_ADCCLKConfig(RCC_PCLK2_Div6);

      ADC_DeInit(ADC1);

初始化ADC1参数,设置ADC1的工作模式以及规则序列的相关信息。

     void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct)

使能ADC并校准。

       ADC_Cmd(ADC1, ENABLE);

⑤ 配置规则通道参数:

     ADC_RegularChannelConfig();

⑥开启软件转换:ADC_SoftwareStartConvCmd(ADC1);

⑦等待转换完成,读取ADC值。

   ADC_GetConversionValue(ADC1);

 

你可能感兴趣的:(嵌入式,单片机,stm32,嵌入式硬件)