1、ADC简介

1.1 ADC的作用

采集传感器的数据,测量输入电压,检查电池电量剩余,检测温湿度等。

1.2 ADC的性能指标

量程:能测量的电压范围

分辨率:ADC的分辨率通常以输出二进制的位数表示,位数越多,分辨率越高,一般来说分辨率越高,转化时间越长。常见 8位,10位,12位,16位,24位

转化时间:模拟输入电压在允许的最大变化范围内,从转换开始到活的稳定的数字量输出所需要的时间称为转换时间。

1.3 ADC 特性

①转换速度

②可配置的转换精度:6位,8位,10位,12位

③ 转换电压范围:0 ~ 3.6V           VSSA ~ VDD

④ 供电范围:2.4V ~ 3.6V

⑤ 19个转换通道:16个外部通道,3个内部通道

⑥ 采样时间可配置

⑦ADC的结果可以左对齐或右对齐方式存储在数据寄存器中

2、STM32F-ADC时钟

3、STM32F-ADC转化模式

3.1 通道的选择

①19路复用通道

②16个从GPIO引脚引入的模拟输入(ADC_IN0...ADC_IN15)

③3个内部模拟输入(温度传感,内部参考电压,VBAT通道)

ADC可以转换一个单一通道或自动扫描一个序列通道,被转换的通道序列必须再通道选择寄存器

ADC_CHSELR中编程选择:每个模拟输入通道有专门的一位选择位(CHSEL0......CHSEL18)

④ 什么是规则组转换,注入组转换

STM32的ADC控制器有很多通道,所以模块通过内部的模拟多路开关,可以切换到不同的输入通道并进行转换。STM32特别地加入了多种成组转换的模式,可以由程序设置好之后,

对多个模拟通道自动地进行逐个地采样转换。它们可以组织成两组:规则通道组和注入通道组。

例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。

规则通道组:最多可以安排16个通道。规则通道和它的转换顺序在ADC_SQRx寄存器中选择,规则组转换的总数应写入ADC_SQR1寄存器的L[3:0]中;
                        注入通道组:最多可以安排4个通道。注入组和它的转换顺序在ADC_JSQR寄存器中选择。注入组里转化的总数应写入ADC_JSQR寄存器的L[1:0]中。
                        在执行规则通道组扫描转换时,如有例外处理则可启用注入通道组的转换。也就是说,注入通道的转换可以打断规则通道的转换,在注入通道被转换完成之后,规则通道才可以继续转换。

当然,需要注意的是:如果ADC_SQRx或ADC_JSQR寄存器在转换期间被更改,当前的转换被清除,一个新的启动脉冲将发送到ADC以转换新选择的组。

可能单从字面上还是不是很了解?我们可以通过图形来更直观地认知:

3.2 常见五种转换模式

注:ADC通知应用每次转换结束(EOC)事件

ADC通知应用每次序列转换结束(EOS)事件

这些标志都是在ADC中断和状态寄存器(ADC_ISR)中

ADC_CFGR1可配置COUNT位

3.3 单次转换模式代码示例

3.3.1 STM32CubeMx如何配置

配置为单次转换模式

开启中断

3.3.2 主程序

int main(void)
{

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
       HAL_Init();

/* Configure the system clock */
     SystemClock_Config();

MX_GPIO_Init();
      MX_ADC1_Init();

while (1)
     {
            /* USER CODE END WHILE */
            HAL_ADC_Start_IT(&hadc1);
            /* USER CODE BEGIN 3 */

HAL_Delay(1000);
      }
      /* USER CODE END 3 */
}

3.3.3 中断代码

/* USER CODE BEGIN 0 */
static uint32_t value = 0;
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(hadc);
/* NOTE : This function Should not be modified, when the callback is needed,
the HAL_ADC_ConvCpltCallback could be implemented in the user file
*/
value = HAL_ADC_GetValue(hadc);
printf("value = %d\n",value);
}
/* USER CODE END 0 */

3.4 连续转换模式代码示例

3.4.1 STM32CubeMx如何配置

3.4.2 寄存器

3.4.3 主程序代码        80c51这种简单的CPU基本都是采用这种模式采集AD信号的,就是定时轮询,

int main(void)
{

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();

/* Configure the system clock */
SystemClock_Config();

MX_GPIO_Init();
MX_ADC1_Init();

uint32_t temp = 0;

uint32_t temp2 = 0;
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
HAL_ADC_Start(&hadc1);
while(!(hadc1.Instance->SR & (1 < 2))); /*如果退出表示EOC置位,表示当前通道1转换完成*/
temp = HAL_ADC_GetValue(&hadc1);
printf("channel 1 temp=%d\n",temp);

while(!(hadc1.Instance->SR & (1 < 2))); /*如果退出表示EOC置位,表示当前通道4转换完成*/
temp = HAL_ADC_GetValue(&hadc1);
printf("channel 4 temp2=%d\n",temp2);
/* USER CODE BEGIN 3 */

HAL_Delay(1000);
}
/* USER CODE END 3 */
}

4、STM32F-ADC转化时间

4.1 可编程采样时间(SMP)

T Sampling 可配置: SMP[2:0]@ADC_SMPR

需要和外部电路的输入阻抗匹配,采样时间适用于所有通道

4.2 转化时间

T conversion 取决于转换精度:RES[1:0]

4.3 每个通道总得转换时间等于:

T Sampling + T conversion      精度越低,转化时间越短

5、STM32F-ADC触发方式

5.1 软件触发

软件设置ADC_CR的ADSTART=1时,触发选择有效。

5.2 外部事件触发

外部事件(例如:定时器TRGO,输入引脚)触发,可以设置触发源以及触发极性

6、STM32F-ADC模拟看门狗

可以使用这个功能,做电池的过流过压保护。

四、ADC模数转换概述相关推荐

  1. STM32学习笔记(七) ADC模数转换测电平(普通和DMA模式)

    嵌入式系统在微控制领域(温度,湿度,压力检测,四轴飞行器)中占据着重要地位,这些功能的实现是由微处理器cpu(如stm32)和传感器以及控制器共同完成的,而连接他们,使它们能够互相正常交流的正是本小节 ...

  2. 51单片机ADC模数转换

    51单片机ADC模数转换 ADC介绍 1.ADC简介 ​        ADC(analog to digital converter)也称为模数转换器,是指一个将模拟信号转变为数字信号.单片机在采集 ...

  3. 51单片机 | ADC模数转换实验

    文章目录 一.ADC介绍 1.ADC简介 2.ADC 转换原理 二.XPT2046 芯片介绍 三.硬件设计 四.软件设计 1.ADC 读写函数 2.主函数 五.实验现象   前面我们介绍的都是对数字信 ...

  4. STM32之ADC模数转换

    对于STM32的GPIO来说,只能读取引脚的高低电平,要么低电平,要么高电平,只有两个值,而使用了ADC之后,我们就可以对这个高电平和低电平之间的任意电压进行量化,最终用一个变量来表示,读取这个变量, ...

  5. 51单片机——ADC模数转换实验

    目录 一.功能描述 二.ADC介绍 2.1 逐次逼近型ADC转换原理 2.2 ADC的主要技术指标 三.XPT2046芯片介绍 3.1 XPT2046外部引脚 3.2 XPT2046的命令字 3.3 ...

  6. 使用Spring Security3的四种方法概述

    使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过, ...

  7. STM32 ADC模数转换

    STM32 ADC模数转换 独立模式/双重DMA/三重DMA //使能ADC时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //APB2 ...

  8. BLE MESH组网(四)安全概述

    BLE MESH(四)安全概述 一.安全的重要性 二.蓝牙MESH网络的安全性是强制性的 三.蓝牙MESH网络安全基础 四.关注点和安全密钥分离 五.区域隔离 六.节点移除.密钥刷新和垃圾桶攻击 七. ...

  9. 30、T5L 迪文屏 C51开发之 ADC模数转换

    T5L 迪文屏 C51开发之 ADC模数转换 1.介绍 2.例程功能介绍 3.GUI界面设计 4.C51程序设计 1.介绍   T5L 芯片内部的 ADC 模数转换外设,有一点需要注意的是此 ADC ...

最新文章

  1. java常量信用_JAVA常量
  2. Android USB Host与HID通讯
  3. AcWing 1068. 环形石子合并
  4. 2022将至,前端程序员们应该一起放个烟花庆祝一下,走起
  5. 198. 打家劫舍 golang 动态规划 数组越界
  6. 如何给ppt编辑页码_拒绝千篇一律:Word插入“侧边”页码,让文档别具一格!...
  7. android 服务器返回302,Android WebView 内处理302重定向不跳转的解决
  8. Jmeter连接Mysql
  9. HttpHandler HttpModule入门篇
  10. 给项目添加spring的测试单元
  11. HTML示例08---CSS3概述
  12. jasmine+seajs+angular+karma 单元测试开发
  13. 解决Macbook网络连接成功但是图标一直显示正在查找网络问题
  14. 几何基础,多种矩阵的学习,世界坐标到屏幕坐标的两种转换方法,三种绘制方框的原理,hookd3d,hookopengl,骨骼透视,主播的秘密,FPS各种BT功能的原理 和检测对抗原理,UE4引擎,U3D
  15. 【python】实战:“唱啥”app后台开发
  16. nginx重启后出现[error] open() “/usr/local/var/run/nginx/nginx.pid” failed
  17. 【SSH进阶之路】Spring简介,搭建Spring环境——轻量级容器框架(一)
  18. 寂寞的最初,爱情不过如此
  19. Python学习 - 列表
  20. 深拷⻉浅拷⻉的区别?如何实现一个深拷贝?

热门文章

  1. 微信集成监控Job状态的功能
  2. 哥本哈根大学计算机科学,计算机科学理科学士
  3. 精灵骑士二觉_dnf精灵骑士二觉
  4. 网页自动弹窗被拦截 html,JS弹出新窗口被拦截的解决方法
  5. 泡泡机器人原创专栏-Cartographer】Cartographer理论及实现浅析
  6. Linux下制作bin文件,并对其进行截取、合并、修改
  7. 如何让自己专注于工作
  8. torch编程-加载预训练权重-模型冻结-解耦-梯度不反传
  9. idea 阿里大鱼maven坐标
  10. linux系添加路由,Linux添加路由的两种方法