ADC模数转换器

ADC(Analog-Digital Converter)模拟-数字转换器

ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。

12位逐次逼近型ADC,1us转换时间。

分辨率含义:0 ~ 2^12,即0 ~ 4095 ,位数越高量化结果越精细,分辨率越高

STM32的ADC输入是0~3.3V,所以ADC是将0~3.3V线性映射成0~4095。

逐次逼近型ADC图

VREF与VCC相连,输入电压模拟量范围由VREF决定。

可以单通道输入,也可以多通道接不通传感器输入。

输出是八位二进制数,因此是8位ADC。

STM32的ADC完整框图

VREF与VDDA内部电源连接。

三、 规则组转换模式

1、单次转换,非扫描模式

2、连续转换,非扫描模式

3、单次转换,扫描模式

4、连续转换,扫描模式

单次转换:每次从开始触发(软件触发或者硬件触发)到数据写入规则组数据寄存器后置EOC标志位,转换结束。后面要再采集数据需要重新上述过程。

连续转换:每次从开始触发(软件触发或者硬件触发)到数据写入规则组数据寄存器后置EOC标志位,转换不结束,不需要再次触发,继续采集数据写入数据寄存器。

扫描模式:多通道采集数据,并在序列中指定好通道顺序,开始触发后,数据寄存器逐个写入指定序列中数据(会覆盖,因此采用这个模式需要配合DMA使用)序列中数据读完后置EOC标志位。

非扫描模式:单通道单序列就是非扫描模式,默认。

如图:

  

触发控制有硬件和软件两种触发:如图

数据对齐方式:

因为STM32中ADC是12位的,而ADC的数据寄存器是16位的,因此有两种对齐方式。其中左对齐会损失精度,右对齐不会。左对齐降低精度,只读高八位,舍去后四位。

六、转换时间

AD转换的步骤:采样,保持,量化,编码

其中采样、保持放一起,量化、编码放一起。

七、校准

代码部分

AD单通道

功能实现:用电位计产生0~3.3V的连续变化的模拟电压,在LCD显示转换后的数据和处理后得到的电压值

流程:

参考上面的框图,具体步骤如下:

第一步开启RCC时钟,包括ADC和GPIO的时钟,ADCCLK的分频器也要配置(给ADC配置时钟信号的用来计算采样的时间。72MHZ/ADCCLK);

第二步配置GPIO,把需要用的GPIO配置成模拟输入的模式;

第三步配置多路开关(黄颜色部分),把左边的通道接入到右边的规则组列表里;

第四步配置ADC转换器,库函数中用结构体来配置,包括单次转换还是连续转换、扫描还是非扫描、通道数量、触发源、数据对齐方式(左对齐or右对齐)。若需要模拟看门狗,会有几个函数配置阈值和检测通道。若想开启中断,就在中断输出控制里用ITConfig函数开启对应的中断输出,然后再在NVIC里,配置一下优先级,就可以触发中断了;

第五步调用ADC_Cmd函数,开启ADC。

注:开启ADC后,根据手册建议,可以对ADC进行校准,减小误差。在ADC工作时,如果想要软件触发转换,那会有函数可以触发;如果想读取转换结果,那也会有函数可以读取结果。

#include "stm32f10x.h"                  // Device headervoid AD_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);  //提供时钟,72/6=12MHZ//GPIO配置GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);///选择规则组的输入通道.第三个参数为//要配置的ADC通道在转换序列中的排位。取值为1~16,表示该通道在转换序列中的第几个进行转换。//例如,若取值为2,则表示该通道在转换序列中排在第2位。//ADC模块配置ADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作在单ADC模式ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;  //数据对齐方式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;  //采用软件触发,还是硬件触发ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;  //连续或单一模式。ADC_InitStructure.ADC_ScanConvMode = DISABLE;  // 扫描(多通道)或单(单通道)模式。ADC_InitStructure.ADC_NbrOfChannel = 1;  //指定在哪个序列上ADC_Init(ADC1, &ADC_InitStructure);ADC_Cmd(ADC1, ENABLE);//校准模块ADC_ResetCalibration(ADC1);while (ADC_GetResetCalibrationStatus(ADC1) == SET);ADC_StartCalibration(ADC1);while (ADC_GetCalibrationStatus(ADC1) == SET);
}uint16_t AD_GetValue(void)
{ADC_SoftwareStartConvCmd(ADC1, ENABLE);  //软件触发,开始工作while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);  //获取转换结束EOC标志位return ADC_GetConversionValue(ADC1);//转换完成会自动清除标志位
}

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"uint16_t ADValue;
float Voltage;int main(void)
{OLED_Init();AD_Init();OLED_ShowString(1, 1, "ADValue:");OLED_ShowString(2, 1, "Volatge:0.00V");while (1){ADValue = AD_GetValue();Voltage = (float)ADValue / 4095 * 3.3;  //12位ADCOLED_ShowNum(1, 9, ADValue, 4);OLED_ShowNum(2, 9, Voltage, 1);OLED_ShowNum(2, 11, (uint16_t)(Voltage * 100) % 100, 2);Delay_ms(100);}
}

STM32之ADC模数转换器单通道。相关推荐

  1. STM-32:ADC模数转换器—ADC单通道转换/ADC多通道转换

    目录 一.ADC 模数转换器 1.1ADC简介 1.2 逐次逼近型ADC工作原理 1.3STM32中的ADC基本结构 1.4STM32中ADC的输入通道 1.5STM32中的ADC的四种转换模式 1. ...

  2. stm32 多通道AD和单通道AD的差别

    今天萧条了一下 stm32的AD 感觉用起来还是比较顺手的~下面我就总结一下 多通道AD和单通道的一些差别 (1)首先 我们要改的就是vu16 ADC1ConvertedValue[2]: 这个vol ...

  3. axi dma 寄存器配置_「STM32」DMA采集单通道,简单数据分析

    什么是DMA DMA,Direct Memory Access,直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式.在DMA模式下,CPU只需要向DMA控制器下达指令,传输数据由DMA ...

  4. STM32F4 ADC+DMA单通道采集

    背景:对锂电池电压进行采集,由于电池电压为12V,已经提前对12V进行分压,保证ADC采集电压的范围为0~3.3V.对电池电压的采集不用太过频繁,循环模式下的ADC+DMA对一直采集电压浪费资源.于是 ...

  5. 【stm32】ADC的规则通道和注入通道混合使用

    之前完成了规则通道DMA的数据传输了,不过平时在使用ADC的时候可能就会遇到很多情况,不可能就这样简单的按规则通道来采样,DMA存储,使用数据的:可能有时候会需要立刻采样,那样我们就需要利用到注入通道 ...

  6. STM32学习笔记(八)丨ADC模数转换器(ADC单、双通道转换)

    本篇文章包含的内容 一.ADC 模数转换器 1.1 ADC简介 1.2 逐次逼近型ADC工作原理 1.3 STM32中的ADC基本结构 1.4 STM32中ADC的输入通道 1.5 STM32中的AD ...

  7. STM32实现ADC采集(待优化)

    1.ADC简介 STM32F103 系列最少都拥有 2 个 ADC ,我们选择的 STM32F103RCT 包含有 3 个 ADC,STM32的最大转换速率为1Mhz,也就是转换时间为1us,除此之外 ...

  8. stm32之ADC应用实例(单通道、多通道、基于DMA)

    硬件:STM32F103VCT6 开发工具:Keil uVision4 下载调试工具:ARM仿真器 网上资料很多,这里做一个详细的整合.(也不是很详细,但很通俗). 所用的芯片内嵌3个12位的模拟/数 ...

  9. STM32 ADC单通道与多通道_DMA学习笔记

    转自:https://blog.csdn.net/dmfylb/article/details/72802690 第一部分  ADC单路采集 下面我们将 PC0引脚配置成 AD1的通道10为例进行讲解 ...

最新文章

  1. lucene源码分析(4)Similarity相似度算法
  2. 超越GPT-3!NormFormer:归一化提高预训练、缓解梯度不匹配
  3. CF98E Help Shrek and Donkey(纳什博弈 + 大讨论)
  4. C#.net实现密码加密算法的语句
  5. npm 私有库开源组件_苹果的ResearchKit,npm私有模块以及更多开源新闻
  6. Srping MVC中Controller的void方法声明误区
  7. php--学习封装类 (一)(操作mysql数据库的数据访问)
  8. Linux sort命令浅析
  9. sql server添加列
  10. TensorFlow实现对花朵数据集的图片分类(保证运行成功)
  11. github 迁移google code 项目
  12. 大白菜pe安装服务器系统安装教程视频教程,大白菜u盘启动盘制作工具安装系统的详细方法...
  13. 用python批量导入阿里云安全组规则
  14. 详解 JVM Garbage First(G1) 垃圾收集器
  15. QT4.6.3在TQ2440上的移植
  16. hd集成显卡 linux驱动,ati 集成显卡HD3200 驱动安装
  17. Unexpected token u in JSON at position 0报错如何解决?
  18. terminate called after throwing an instance of 'std::cad_alloc' what():std::bad_alloc
  19. layui动态表格下拉菜单
  20. 人工智能之状态空间表示法的简单应用之翻转三枚钱币

热门文章

  1. 如何提升敏捷团队的效能?
  2. Unity3D--Unity篇(一)
  3. It is impossible to add a non-nullable field ‘university‘ to userinfo without specifying a default.
  4. 苹果cms提示没有权限解决方法
  5. ENISA云认证计划:在欧洲建立可信的云服务
  6. 正定矩阵及其系列性质
  7. 六个案例,带你感受新零售服务市场的潜力
  8. 爱奇艺2020校招Java方向笔试题(第一场)
  9. python7c 高等数学 之 BL模型,barra收益回归模型
  10. 简单破解win2k8密码