STM32-(28):ADC模数转换(理论分析)

发布者:HeavenlyMelody最新更新时间:2019-08-13 来源: eefocus关键字:STM32  ADC  模数转换 手机看文章 扫描二维码
随时随地手机看文章

ADC,Analog-to-Digital Converter的缩写,指模/数转换器或者模数转换器

嵌入式实时闭环控制系统

在这里插入图片描述

将模拟量转换为数字量的过程称为模数( A / D )转换,完成这一转换的器件称为模数转换器(简称 ADC ) ; 将数字量转换为模拟量的过程称为数模( D / A )转换,完成这一转换的器件称为数模转换器(简称 DAC )。
模拟量主要有:电流、电压、温度、湿度、速度、湿度、亮度、压力等等。

A/D转换器至关重要,如果没有,也就没有了外界输入,控制系统相当于没有眼睛,没有耳朵

A/D转换器

模拟信号的采集与处理
数据采集系统由模拟信号采集、A/D转换、数字信号处理三大部分组成。

在这里插入图片描述
A/D转换器是模拟信号转变成数字信号的桥梁。

传感器

现场信号在进行A/D转换之前首先要经过传感器转换为电信号,即将现场的非电信号转换为电模拟信号。

传感器就是这种能够将非电信号转换成电模拟信号的敏感元件,通常所指的信息采集主要依靠各类传感器。传感器所获取的信息通常有物理量、化学量和生物量等,而经传感器转换后的信息多数为电阻、电容、电感、电压、电流及频率与相位的变化等电学量。
在这里插入图片描述
在这里插入图片描述

A/D(模/数)转换的原理

A/D转换中通常要完成采样保持和量化编码两个内容。所以AD转换是需要转换时间的。一般AD转换的时间在uS级别。
在这里插入图片描述
简析:f(t)是输入信号,s(t)是采样信号(按照一定的时间间隔给出一个脉冲,脉冲高电平的时间跟量化编码的时间有关,在高电平器件,采样器的开关闭合,fs(t)就会得到一些离散的采样值)
将采样后得到的样点幅值转换为数字量即为量化、编码的过程。量化编码过程是模/数转换的核心。所谓量化编码,就是以一定的量化单位,把数值上连续的模拟量而时间上离散的模拟信号通过量化装罝转变为数值上离散的阶跃量的过程。常见的量化编码技术有:计数式转换、双积分式转换、逐次逼近式转换、并联式转换等。

A/D转换器的主要参数

1.分辨率
分辨率是指A/D转换器输出数字量的最低位变化一个数码时,对应输入模拟量的变化量 。显 然 A/D转换器的位数越多,分辨最小模拟电压的值软越小。如一个最大输入电压为5V的8位A/D转换器,所能分辨的嚴小输入电压变化量为5V / 2 8 = 19.53mv,而同样输入电压的10位A/D转换器,分辨率为5V / 2 10 = 4.88mV〃
因此一个n位的A/D转换器,其分辨率也可说是n位,它是一个设计参数,不是测量参数•

2.相对精度
相对精度是指A/D转换器实际输出数字t与理论输出数字童之间的最大差值。通常用最低有效位LSB的倍数来表示 。

3.转换速度
转换速度是指A/D转换器完成一次转换所需要的时间,即从转换开始到输出端出现稳定
的数字信号所需要的时间。

STM的ADC

STM 32拥有1〜3个 ADC ,这些 ADC 可以独立使用,也可以使用双重模式(提高采样率)。 STM 32 F 103系列最少都拥有2个 ADC ,我们选择的 STM 32 F 103 RBT 6也包含有2个 ADC 。

STM 32的 ADC 是12位逐次逼近型的模拟数字转换器。它有18个通道,可测量16个外部和2个内部信号源。各通道的 A / D 转换可以单次、连续、扫描或间断模式执行。

ADC 的结果可以左对齐或右对齐方式存储在16位数据寄存器中。(因为在这里ADC是12位的,还有四位没有用到,所以存在左/右对齐的方式)
模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。

STM 32的 ADC 最大的转换速率为1 Mhz ,也就是转换时间为1 us (在ADCCLK =14 M ,采样周期为1.5个 ADC 时钟下得到),不要让 ADC 的时钟超过14 M ,否则将导致结果准确度下降。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

简析:

ADCx区域中有两个组,Injected Channels(注入组)、Regular Channels(规则组),举个例子:比如一个养殖场所,需要测量室内室外的温度,分别在室内室外放几个温度探头,我们长期需要对室内温度进行采集,我把室内这一组定义为“规则组”,把室外的定义为“注入组”,满足现实中的需求,一个作为常规使用,一个作为特殊使用。ADCx左侧是输入,GPIO Ports是外部的GPIO输入(使用时应将GPIO设置为模拟输入),下方是内部输入(温度、电池等),输入经过一个选择开关进入。进入ADCx之后进行数据转换(自动转换),转换完的数据存储在右侧寄存器中,下方是一些状态量,如果事先设定的话,当这些状态量发生变化,就会触发对应的中断。上方是ADC的时钟,是一个单独的时钟ADCCLK,左下方两排是触发模块,有外部触发(Ext_IT_),比如外部按键,也有内部触发(比如定时器等等);右下方是一个看门狗模块,可以对输入电压进行检测,可以设定一个域值(最大最小值),当超过这个范围,就会给NVIC一个中断。看门狗应用举例:当使用内部电池,当电池被拔掉了,看门狗检测到电压发生变化,立即产生中断,响应到内核中,马上把核心的数据保存起来等等操作。ADCx 还有一路可以输出到 DMA (DMA Request)

通道选择

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

在工业应用领域中有很多检测和监视探头需要较快地处理,这样对 AD 转换的分组将简化事件处理的程序并提高事件处理的速度。

STM 32 ADC 的规则通道组最多包含16个转换,而注入通道组最多包含4个通道。

在这里插入图片描述
Trigger 一般是由上面简析中提到的触发模块部分产生的。

在这里插入图片描述
简析:用规则组举例解释这张表的作用。规则组最多有16次转换,保存转换指令的寄存器的优先级分别为 ADC_SQR 1/2/3,保存转换之后数据的寄存器为ADC_DR,开始装换的几种方式有软件触发(软件写寄存器)、外部事件(定时器、按键等等),触发源可以选择触发方式。

转换模式

在这里插入图片描述
举例:如何使用规则通道的单词转换模式
单次转换模式里, ADC 只执行一次转换。这个模式既可通过设罝 ADC_CR2寄存器的 ADON 位(只适用于规则通道)启动也可通过外部触发启动(适用于规则通道或注入通道),这时 CONT 位为0

一旦选择通道的转换完成:
如果一个规则通道被转换:

  • 转换数据被存储在16位 ADC_DR 寄存器中

  • EOC (转换结束)标志被设置

  • 如果设置了 EOCIE .则产生中断
    如果一个注入通道被转换:

  • 转换数据被储存在16位的 ADC _ DRJ 1寄存器中

  • JEOC (注入转换结束)标志被设置

  • 如果设置了JEOCIE 位,则产生中断。
    然后 ADC 停止。

在这里插入图片描述

单通道单次转换
■对一个通逬进行一次转换,然后ADC停止
■应用举例:启动系统功能之前测电压
多通道单次转换
■对多个通道进行逐个的独立转换,然后ADC停止
■可对多达 16 个通逍的转换配置不同采样时间和顺序
无需中途停ihADC来配置下一个通道的采样时间
节省CPU负载
应用举例:启动系统之前测量多个参数
■电压、温度、压力等
■机器人操作臂的坐标
■物体所受扭力和形变的方N以及受力

在这里插入图片描述
单通道连续转换
■对一个规则通逬进行连续转换
■通常可用于后台,无需 CPU 干涉的连续转换;配合 DMA 的循环模式,进一步减少 CPU 负载
■应用举例:监测电池电压,测量并调节炉温等
多通道连续转换
■对多个通逬进行连续的独立转换
■可对多达 16 个通逬的转换配置不同采样时间和顺序
■应用举例:多电池充电器中监测多个电压和温度的信息


关键字:STM32  ADC  模数转换 引用地址:STM32-(28):ADC模数转换(理论分析)

上一篇:STM32-(27):RTC实时时钟
下一篇:STM32-(29):ADC模数转换(实验)

推荐阅读最新更新时间:2024-11-12 10:40

stm32 环形缓冲区
/*========================ringbuff.H========================================*/ #ifndef __RingBuff__H #define USER_RINGBUFF 1 //使用环形缓冲区形式接收数据 #if USER_RINGBUFF /**如果使用环形缓冲形式接收串口数据***/ #define RINGBUFF_LEN 200 /*最好是2^N,此时就可以进行用取模运算 https://www.cnblogs.com/rechen/p/5143841.html*/ #define FLASE 1 #define TRUE 0 #define TI
[单片机]
stm32专题二十九:Flash 读写保护
设置Flash的读写保护,其实就是操作内部Flash的选项字节。 选项字节在内部Flash的主存储页之后,由于是Flash,不能像内存RAM一样随意写入。由于Flash的写入特性,只能将 1 写成 0,而如果要确保写入数据的绝对正确,则需要先擦除再写入。如果直接对Flash写入,则只能确保写入 0 值是正确的。 选项字节,可以认为是掉电不会丢失的寄存器(Flash空间)。就是用Flash介质来存储配置,要修改选项字节,跟修改Flash一样。 RDP 读保护字节描述(可以通过j-link或st-link读Flash 加密等): RDP配置方式: 2个数据字节 Data0 Data1 3 设置写保护 RDP
[单片机]
<font color='red'>stm32</font>专题二十九:Flash 读写保护
原来STM32单片机的开发如此的简单
大家好! 今天我们讲下用STM32CubeMX和Keil5点亮一个LED,这个项目比较简单,大家都可以尝试下。 这个就是我们今天的主角,这款单片机芯片是STM32F030K6T6。 这个开发板非常简单,里面的芯片是STM32 F030 K6 T6,它有32个引脚,在它旁边这个一个八兆的晶振,然后晶振左边是电源芯片,可以把5伏电压转换成3.3伏电压给单片机供电。开发板右侧有一个按键reset按键,旁边是下载口。 为什么用这个芯片呢?因为这个芯片它非常便宜啊!在网上买的价钱才几块钱,这整块开发板下来才十多块钱包邮,对于一些刚刚开始学单片机的童鞋来说它的功能够用,重点它很便宜哈哈哈。 废话不多说,开始实操吧! 我们首先打
[单片机]
关于stm32的USB学习笔记之USB_HW.c
view plaincopyprint? #include stm32f10x_lib.h #include stm32f10x_map.h #include usbreg.h #include usbuser.h #include usbcore.h #include usb_hw.h #define _DEBUG_ #include debug.h #define USB_EP_NUM 4 /*端点缓冲区的开始地址 *因为每个缓冲块都需要一个端点描术表 *而所有的端点描述表放在,USB缓冲区的首部 *此地址是相对于USB缓冲区的地址,我认为加上Offset更好些 *这里使用2
[单片机]
STM32 Dali库是什么?
DALI库适用于STM32F系列和STM32L系列单片机。 在STM32单片机中的DALI包中有: 1.STM32F和STM32L系列的Dali从机示例 2.用户手册DALI从机接口 STM32 Dali Slave库根据DALI规范进行了测试。 STM32L1xx Dali 从机接口的文档是UM1629. STM32F1xx Dali 从机接口的文档是UM1728 用于DALI通信的STM8S-Discovery接口的插入式硬件模块是STEVAL-ILM001V1 以上是STM32 Dali的基础知识,希望对用户有所帮助。
[单片机]
解读关于STM32问题集之BOOT0和BOOT1的作用
一、功能及目的 在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序。 BOOT1=x BOOT0=0 // 从用户闪存启动,这是正常的工作模式。 BOOT1=0 BOOT0=1 // 从系统存储器启动,这种模式启动的程序功能由厂家设置。 BOOT1=1 BOOT0=1 // 从内置SRAM启动,这种模式可以用于调试。 二、使用方法 一般BOOT0和BOOT1跳线都跳到0(地)。只是在ISP下载的情况下,BOOT0=1,BOOT1=0,下载完成后,把BOOT0的跳线接回0,也即BOOT0=0,BOOT1=0。 三、注意说明 一般不使用内置SR
[单片机]
解读关于<font color='red'>STM32</font>问题集之BOOT0和BOOT1的作用
CM3(STM32)内核复位与系统复位区别及应用
Ⅰ、写在前面 某些系统允许复位,但对外设又有特殊要求:某一个IO状态不能因为复位而改变,某一个定时器计数器不能改变等。 例子:我一个A系统通过一个IO控制另一个B系统的电源,而这个IO置高时才开启B系统的电源。 正常工作过程中,B系统只有收到A系统关机命令任务才会进行关机(也就是说不能掉电关机),而A系统在工作过程中有复位的需求。 这个时候如果我使用常规的引脚复位,就会使IO置低,不符合要求,就需要使用到本文说到的内核复位。 Ⅱ、关于复位 说到复位,我们都不会陌生,学习时,开发板上基本都有一个复位按键。 复位的种类有很多:上电复位、掉电复位、复位引脚复位、看门狗复位、软件复位等。 上面说的复位按键,也就
[单片机]
STM32 ucos 下添加CAN模块
1.CAN IO RX TX 的设定和重映射 GPIO_PinRemapConfig(GPIO_Remap2_CAN, ENABLE); //端口重映射到PD0,PD1 2.clock CAN IO CLOCK 的开启 、*-------gpio for can------------*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE); CAN 自身CLOCK 的开启、 /* CAN Periph clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved