stm32—ADC

1. 什么是ADC

生活中我们经常会用到ADC这种器件,比如说,当我们在使用手机进行语音通信时,ADC器件会将我们的声信号转换为电信号 (模拟信号 ---> 数字信号)

模拟信号:

模拟信号是指用连续变化的物理量表示的信息,其信号的幅度、频率、相位随时间作连续变化,或在一段连续的时间间隔内,其代表信息的特征量可以在任意瞬间呈现为任意数值的信号

数字信号:

数字信号指自变量是离散的、因变量也是离散的信号,这种信号的自变量用整数表示,因变量用有限数字中的一个数字来表示。在计算机中,数字信号的大小常用有限位的二进制数表示
自然界中大部分信号都是模拟的,比如说:温度、压力、声音、速度等等,这些信号容易受噪声干扰且不易存储,而数字信号则没有这两种缺点,因此我们使用ADC器件以便于我们处理和存储这些模拟信号


将模拟信号转化为数字信号一般包括三个步骤:抽样(采样)、量化和编码

**抽样(采样):**是在发送端将模拟信号转换为离散信号的过程

采样定理:在进行模拟/数字信号的转换过程中,当采样频率大于信号中最高频率的2倍时,采样之后的数字信号就能完整地保留原始信号中的信息

远远高于信号带宽两倍或其最高频率对其进行采样的过程,又叫做过采样

采样的目的:为了利用有限的采用率,无失真的还原出原有声音信号的样子

**量化:**抽样信号在各抽样时刻的幅度反映了模拟信号的幅度变化,因此仍然是连续的,必须在编码之前,将幅度抽样值用预先规定的有限个取值来表示

**编码:**所谓编码就是将量化器输出量化信号在各离散时刻的取值用指定位数的二进制代码表示,从而得到数字信号
ADC的作用:采集传感器数据,测量输入电压,检查电池电量剩余,检测温度 ......

2. ADC0809模块的工作原理

在早期单片机性能相对较弱时,单片机内部并没有ADC外设往往需要外接ADC模块进行ADC采集

(1) 引脚介绍
cpp 复制代码
IN0---IN7:8路模拟量输入端

D0---D7:8位数字量输出端

ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路

ALE:地址锁存允许信号,输入 高电平 有效

START:A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复
       位,下降沿启动A/D转换)

EOC: A/D转换结束信号,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)

OE:数据输出允许信号,输入 高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出
    三态门,输出数字量

CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ

VREF(+)、VREF(-):基准电压

Vcc:电源,单一,+5V

GND:地
(2) 工作过程
cpp 复制代码
1. 首先输入3位地址,并使ALE=1,将地址存入地址锁存器中

2. 此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位

3. 下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行

4. 直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,
   这个信号可用作中断申请

5. 当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上
(3) 转换原理
cpp 复制代码
比较器:
    比较器是一种基本的电路,广泛应用于数字电路中。它通常用于将两个电压或电流进行比较,
并输出比较结果。在数字电路中,比较器是非常重要的,因为它可以用来判断两个数字的大小关系,
并控制逻辑电路的运行
    
比较器的一端为输入电压,比较器的另一端为DAC器件所产生的电压输入

测量电压范围:
    即DAC器件产生的电压范围 VREF+-对应的电压范围
    例如:VREF+ 为3.3V VREF- 为 0V,则测量范围为0-3.3V

8位逐次逼近型:
    8位:转换后的数据范围为8位,即输出数据范围为0-255
    逐次逼近:DAC器件产生电压和输入电压比较,相等/最接近时即为待测电压数值

测得的电压值:
    ADC输出数据范围0-255,和测量电压范围一一对应,即输出结果为255,则输入电压为3.3v

3. stm32 ADC外设

(1) 分辨率

分辨率表示精度,位数越高精度越高,同时也表示最小可检测电压变化。例如12位分辨率,即ADC输出数据范围为0---4095

(2) ADC输入

ADCx_IN0---ADCx_IN15 + 温度传感器 + VREFINT + VABT

(3) 测量范围

参考电压:即测量范围,VREF- --- VREF+



由原理图可知:VDDA = 3.3v VSSA = GND,即ADC测量电压测量范围为0---3.3V

(4) 转换通道

通道选择:选择由哪个通道对外部输入进行转换


规则通道:

可以按照设置的转换顺序进行转换的通道。一个规则转换组最多由 16 个转换构成

注入通道:

可以"插队",也就是说,注入通道的转换可以打断规则通道的转换,在注入通道被转换完成之后,规则通道才可以继续转换。一个注入转换组最多由 4 个转换构成

不同于ADC0809模块只能从8个通道中选择一个进行转换,stm32可以同时选择多个通道进行转换

(5) 转换顺序

转换顺序选择:转换顺序即为通道中对应输入的顺序,配置方式如下:


(6) 启动转换

触发信号:即开始ADC采集信号
配置了转换通道以及转换顺序之后,便可以开始转换了。ADC触发转换的有很多种方式:

软件触发:ADC 转换可以由 ADC 控制寄存器2(ADC_CR2) 的 ADON 这个位来控制,写 1 的时候开始转换,写 0 的时候停止转换;
外部事件触发:可分为内部定时器触发和外部IO触发
内部定时器触发:

外部IO触发:


数据转换:STM32 AD转换模块

(7) 转换时间
(8) 转换方式

转换方式:STM32 对于通道内转换序列的转换方式包括连续\单次,扫描\非扫描

单次模式:转换一次后,就停止转换

连续模式:转换一次后,接着进行下一次转换,不断连续

扫描模式:对于对通道的转换按设置顺序依次转换

非扫描模式:对于对通道的转换按设置顺序依次转换,但是每个序列转换需要

因此按照上述模式,总共有四种转换方式:




(9) 转换结果寄存器

数据输出:ADC转换后的结果

注入通道每个转换序列的结果保存在单独的注入数据寄存器中,而规则通道的转换序列的结果全部保存 在一个规则数据寄存器中

当规则通道需要转换多个序列时应当注意规则数据寄存器的覆盖问题
ADC_CR2 寄存器中的 ALIGN 位用于选择转换后存储的数据的对齐方式,有不同的保存方式:左对齐或者右对齐
注入通道组的转换数据将减去 ADC_JOFRx 寄存器中写入的用户自定义偏移量,因此结果可 以是一个负值。SEXT 位表示扩展的符号值

对于规则组中的通道,不会减去任何偏移量,因此只有十二个位有效


(10) 转换事件标志

转换事件标志:当转换完成时可能会设置如下标志

(11) 模拟看门狗

模拟看门狗:对输入的电压进行监控,如果不在阈值范围之间则将相应的标志位进行设置,如果使能中断则会产生相应的中断


4. 固件库ADC API 接口介绍

固件库的adc操作流程:

5. ADC---光敏传感器

相关推荐
芋头莎莎3 小时前
STM32 51单片机设计半导体制冷片温控设计
stm32·嵌入式硬件·51单片机
ღ 金龍戲水 ღ5 小时前
蓝桥杯竞赛单片机组备赛【经验帖】
经验分享·单片机·蓝桥杯
搬砖的小码农_Sky5 小时前
单片机和FPGA有什么区别?
单片机·嵌入式硬件·fpga开发
折途7 小时前
拆解一下用了两年的三十多块的剃须刀
嵌入式硬件
BT-BOX8 小时前
STM32仿真proteus位带操作和keil增加头文件C文件
c语言·stm32·proteus
7yewh9 小时前
嵌入式硬件实战提升篇(一)-泰山派RK3566制作多功能小手机
linux·arm开发·驱动开发·嵌入式硬件·物联网·智能手机·硬件架构
@晓凡10 小时前
STM32编程遇到的问题随笔【一】
stm32·单片机·嵌入式硬件
虾球xz11 小时前
游戏引擎学习第11天
stm32·学习·游戏引擎
DevinLGT12 小时前
6Pin Type-C Pin脚定义:【图文讲解】
人工智能·单片机·嵌入式硬件
小A15912 小时前
STM32完全学习——系统时钟设置
stm32·嵌入式硬件·学习