【STM32自学笔记-ADC】

一、ADC简介

        ADC全称是模拟-数字转换器,主要作用是将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。其分辨率有12位,输入电压为0~3.3V,转换结果范围在0~4095.拥有18个输入通道,可测量16个外部和2个内部信号源。

二、ADC框图简介

2.1 第一部分:电压输入范围

ADC 输入范围为: VREF- ≤ VIN ≤ VREF+。由 VREF-、 VREF+ 、 VDDA 、 VSSA、这四个外部引脚决定。我们在设计原理图的时候一般把 VSSA 和 VREF- 接地,把 VREF+ 和 VDDA 接 3V3,得到 ADC 的输入电压范围为: 0~3.3V。

2.2 第二部分:输入通道

STM32ADC的通道有18个,其中有16个外部通道,2个内部通道。外部的 16 个通道在转换的时候又分为规则通道和注入通道,其中规则通道最多有 16 路,注入通道最多有 4 路。

规则通道:规则通道就是这16个外部通道,一般使用规则通道比较多。

注入通道:它是一种在规则通道转换的时候强行插入要转换的一种通道。如果在规则通道转换过程中,有注入通道插队,那么就要先转换完注入通道,等注入通道转换完成后,再回到规则通道的转换流程。只有规则通道存在时才会有注入通道。

2.3 第三部分:转换顺序

        多个规则通道采集数据转换时需要进行转换顺序,SQR3,SQR2,SQR1这2个寄存器决定了这16个通道的转换顺序。

注入通道转换顺序由JSQR寄存器控制,他最多只支持4个通道,和规则转换的顺序是不一样的,如果有4个通道,第一个转换通道为JSQ1设置。

如果有3个通道,第一个转换通道为JSQ2设置。

如果有2个通道,第一个转换通道为JSQ3设置。

如果有1个通道,第一个转换通道为JSQ4设置。

2.4 第四部分:触发源

ADC的触发源可以是定时器中断触发、外部引脚中断触发,也可以由内部软件触发。

2.5 第五部分:转换时间

ADC的输入时钟ADC_CLK由ABP2(72M)经过分频提供,分频系数为2、4、6、8分频。其ADC_CLK最大时钟频率是14M,所以一般只能进行6分频(72/6=12)或8分频(72/8=9)。

ADC 使用若干个 ADC_CLK 周期对输入的电压进行采样,采样的周期数可通过 ADC 采样时间来控制,其中最快采样时间为1.5周期。

2.6 第六部分:数据寄存器

规则通道的数据寄存器

        所有规则通道数据转换后的结果存放在ADC_DR数据寄存器中,ADC_DR数据寄存器是一个32位的寄存器,在单通道情况下,数据存储在ADC_DR数据寄存器的低16位,由于ADC的精度只有12位,所有可以现在左对齐存放和右对齐存放。右对齐存放数据高位补0,左对齐存放数据整数数据扩大了16倍。

采用ADC多通道采集数据,那么不断有数据放到ADC_DR寄存器中,没有及时把数据拿出来。采集到之前的数据就会被之后的数据覆盖。这时候就需要使用到DMA及时把数据搬运出来。(只有ADC1和ADC3具有DMA功能)

使用双ADC模式时,比如ADC1和ADC2,那么AD1采集到的数据就会被存放到ADC_DR寄存器的低16位。ADC2采集到的数据就会被存放到ADC_DR寄存器的高16位,他们是同时存放进ADC_DR数据寄存器中,不需要进行转换排序。

注入通道的数据寄存器

ADC 注入组最多有 4 个通道,刚好注入数据寄存器也有 4 个,每个通道对应着自己的寄存器,不
会跟规则寄存器那样产生数据覆盖的问题。数据也是存放到ADC_JDRx寄存器中。低16位存放数据,高16位保留。

2.7 第七部分:中断

转换结束中断

数据转换结束后,可以产生中断,中断分为三种:规则通道转换结束中断,注入转换通道转换结
束中断,模拟看门狗中断。其中转换结束中断很好理解,跟我们平时接触的中断一样,有相应的
中断标志位和中断使能位,我们还可以根据中断类型写相应配套的中断服务程序

模拟看门狗中断

当被 ADC 转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断,前提是我们开启了模
拟看门狗中断,其中低阈值和高阈值由 ADC_LTR 和 ADC_HTR 设置。例如我们设置高阈值是
2.5V,那么模拟电压超过 2.5V 的时候,就会产生模拟看门狗中断,反之低阈值也一样

三、ADC校验

        ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差,建议在每次上电后执行一次校准启动校准前, ADC必须处于关电状态超过至少两个ADC时钟周期

四、电压转换

模拟电压经过 ADC 转换后,是一个 12 位的数字值,如果通过串口以 16 进制打印出来的话,可读性比较差,那么有时候我们就需要把数字电压转换成模拟电压,也可以跟实际的模拟电压(用万用表测)对比,看看转换是否准确。

我们一般在设计原理图的时候会把 ADC 的输入电压范围设定在: 0~3.3v,因为 ADC 是 12 位的,那么 12 位满量程对应的就是 3.3V, 12 位满量程对应的数字值是: 2^12。数值 0 对应的就是 0V。如果转换后的数值为 X , X 对应

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值