STM32 ADC学习

ADC

Analog-to-Digital Converter,即模拟/数字转换器
在这里插入图片描述

常见ADC类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分辨率和采样速度相互矛盾,分辨率越高,采样速率越低。

ADC的特性参数

  • 分辨率:表示ADC能辨别的最小模拟量,用二进制位数表示,比如8,10,12,16位等。(刻度划分)(3.3V/4096)
  • 转换时间:完成一次A/D转换所需的时间,转换时间越短,采样率就可以越高
  • 精度:最小刻度基础上叠加各种误差的参数,精度受ADC性能、温度和气压等影响。
  • 量化误差:用数字量近似表示模拟量,采用四舍五入原则,此过程产生的误差为量化误差。

STM32各系列ADC主要特性

在这里插入图片描述

ADC工作原理

ADC供电电源VSSA、VDDA(2.4V~3.6V)

在这里插入图片描述

输入通道
外部16个输入通道,内部2个输入通道

转换序列

触发源

转换时间

数据寄存器

中断

转换序列(F1为例)

A/D转换被组织为两组:规则组(常规转换组)和注入组(注入转换组)
规则组最多可以有16个转换,注入组最多有4个转换。

在这里插入图片描述
排A/D转换先后顺序

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

触发源

触发转换的方法有两种:

  1. ADON位触发转换(仅限F1系列)
    在这里插入图片描述

  2. 外部事件触发转换

外部事件触发转换分为:规则组外部触发和注入组外部触发

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

DMA请求(只适用于规则组)

规则组每个通道转换结束后,除了可以产生中断外,还可以产生DMA请求,我们利用DMA及时把转换好的数据传输到指定的内存里,防止数据被覆盖。

单次转换模式和连续转换模式

在这里插入图片描述
单次转换模式:只触发一次转换
连续转换模式:自动触发下一次转换

扫描模式

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

单通道ADC采集实验(战舰为例)

通过ADC1通道1(PA1)采集电位器的电压,并显示ADC转换的数字量以及换算后的电压值。

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

RTT ADC

ADC(Analog-to-Digital Converter)指模数转换器。
是指将连续变化的模拟信号转换为离散的数字信号的器件。

真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的数字形式。
模数转换器可以实现这个功能,在各种不同的产品中都可以找到它的身影。
与之相对应的DAC(Digital-to-Analog Converter),它是ADC模数转换的逆向过程。
ADC最早用于对无线信号箱数字信号转换。如电视信号,长短播电台发射接收等。

转换过程

如下图所示,模数转换一般要经过采样、保持和量化、编码这几个步骤。
在实际电路中,有些过程是合并进行的,如采样和保持,量化和编码在转换过程中是同时实现的。
在这里插入图片描述

采样是将时间上连续变化的模拟信号转换为时间上离散的模拟信号。
采样取得的模拟信号转换为数字信号都需要一定时间,为了给后续的量化编程过程提供一个稳定的值,在采样电路后要求将所采样的模拟信号保持一段时间。

将数值连续的模拟量转换为数字量的过程称为量化。
数字信号在数值上是离散的。
采用保持电路的输出电压还需要按照某种近似方式归化到与之相应的离散电平上,任何数字量只能是某个最小数量单位的整数倍。
量化后的数值最后还需要编码过程,也就是AD转换器输出的数字量。

分辨率

分辨率以二进制(或十进制)数的位数来表示,一般有8位、10位、12位、16位等,它说明模数转换器对输入信号的分辨能力,位数越多,表示分辨率越高,恢复模拟信号时会更精确。

精度

精度表示ADC器件在所有的数值点上对应的模拟值和真实值之间的最大误差值,也就是输出数值偏离线性最大的距离。

转换速率

转换速率是指A/D转换器完成一次从模拟到数字的AD转换所需时间的倒数。
例如,某A/D转换器的转换速率为1MHZ,则表示完成一次AD转换时间为1us。

查找ADC设备

应用程序根据ADC设备名称获取设备句柄,进而可以操作ADC设备,查找设备函数如下所示:

rt_device_t rt_device_find(const char* name);

一般情况下,注册到系统的ADC设备名称为adc0,adc1等,使用示例如下:

#define ADC_DEV_NAME "adc1"
rt_adc_device_t adc_dev;

adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);

使能ADC通道

在读取ADC设备数据前需要先使能设备,通过如下函数使能设备:

rt_err_t rt_adc_enable(rt_adc_device_t dev, rt_uint32_t channel);
  • dev:ADC设备句柄
  • channel:ADC通道

返回

  • RT_EOK:成功
  • -RT_ENOSYS:失败,设备操作方法为空
#define ADC_DEV_NAME "adc1"
#define ADC_DEV_CHANNEL 5
rt_adc_device_t adc_dev;

adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);

读取ADC通道采样值

rt_uint32_t rt_adc_read(rt_adc_device_t dev, rt_uint32_t channel);
#define ADC_DEV_NAME "adc1"
#define ADC_DEV_CHANNEL 5
#define REFER_VOLTAGE 330 
#define CONVERT_BITS (1 << 12)

rt_adc_device_t adc_dev;            /* ADC 设备句柄 */
rt_uint32_t value;
/* 查找设备 */
adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
/* 使能设备 */
rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);
/* 读取采样值 */
value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
/* 转换为对应电压值 */
vol = value * REFER_VOLTAGE / CONVERT_BITS
rt_kprintf("the voltage is :%d.%02d\n", vol/100, vol%100);

实际电压值的计算公式为:采样值*参考电压/(1 << 分辨率位数),上面示例代码乘以 100 将数据放大,最后通过 vol / 100 获得电压的整数位值,通过 vol % 100 获得电压的小数位值。

FinSH命令

在使用设备前,需要先查找设备是否存在,可以使用命令adc probe后面跟注册的ADC设备的名称。

msh >adc probe adc1
probe adc1 success

使能设备的某个通道可以使用命令adc enable后面跟通道号

msh >adc enable 5
adc1 channel 5 enables success

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/608637.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI 正在开发一种可以防止版权诉讼的工具

OpenAI 正在开发一种名为 Media Manager 的工具&#xff0c;该工具将使内容创建者和所有者能够确定他们是否愿意将自己的内容用于 ML 研究和 AI 模型训练。 Media Manager 将做什么&#xff1f; 明年推出的 Media Manager 将使内容创作者和所有者能够更好地控制他们的工作是否…

C语言初阶(6) - 指针

目录 1.指针是什么&#xff1f; 2. 指针和指针类型 2.1 指针 - 整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 常量指针和指针常量 (const) 4.1.常量指针 4.2.指针常量 5. 指针运算 5.1 指针-整数 5.2 指针-指针 5.3指针的关系运算 6.…

Vitis HLS 学习笔记--理解串流Stream(2)

目录 1. 简介 2. 极简的对比 3. 硬件模块的多次触发 4. 进一步探讨 do-while 5. 总结 1. 简介 在这篇博文中《Vitis HLS 学习笔记--AXI_STREAM_TO_MASTER-CSDN博客》&#xff0c;我分享了关于 AXI Stream 接口的实际应用案例。然而&#xff0c;尽管文章中提供了代码示例&…

如何向Linux内核提交开源补丁?

2021年&#xff0c;我曾经在openEuler社区上看到一项改进Linux内核工具的需求&#xff0c;因此参与过Linux内核社区的开源贡献。贡献开源社区的流程都可以在内核社区文档中找到&#xff0c;但是&#xff0c;单独学习需要一个较长的过程&#xff0c;新手难以入门&#xff0c;因此…

分享四种免费获取SSL的方式

SSL证书目前需要部署安装的网站很多&#xff0c;主要还是基于国内目前对证书的需求度在不断的升高&#xff0c;网站多了、服务器多了之后。网络安全问题就成为了大家不得不面对的一个重要的问题了。SSL证书的作用有很多&#xff0c;这里就不一一详述了&#xff0c;本期作品主要…

如何在线阅读Linux内核源码?

开源社区有一句名言&#xff1a;Talk is cheap, show me your code。阅读源代码是学习Linux操作系统的必经之路。但是&#xff0c;Linux内核的代码量超过3000万行&#xff0c;工程包非常大&#xff0c;直接下载耗时较长&#xff0c;这就需要使用一些在线阅读的技巧。 方式1&am…

【深度学习】【Lora训练0】StabelDiffusion,Lora训练,kohya_ss训练

文章目录 环境数据自动标注kohya_ss BLIP2kohya_ss WD14 后续 资源&#xff1a; &#xff08;1&#xff09;训练ui kohya_ss&#xff1a; https://github.com/bmaltais/kohya_ss &#xff08;2&#xff09;kohya_ss 的docker 其他docker https://github.com/ashleykleynhans…

韩顺平0基础学Java——第7天

p110-p154 控制结构&#xff08;第四章&#xff09; 多分支 if-elseif-else import java.util.Scanner; public class day7{public static void main(String[] args) {Scanner myscanner new Scanner(System.in);System.out.println("input your score?");int s…

Word表格标题间距大修改环绕为无仍无法解决

1.选中表格&#xff0c;右键选择【表格属性】 2.选择【环绕】&#xff0c;此时【定位】可以被启用&#xff08;如下&#xff09;&#xff0c;点击进入窗口 3.修改参数和下面一模一样 注意&#xff1a;【垂直】那里的修改方式是先选段落&#xff0c;后在位置输入0

【linux】主分区,扩展分区,逻辑分区,动态分区,引导分区,标准分区

目录 主分区&#xff0c;扩展分区&#xff0c;逻辑分区 主分区和引导分区 主分区&#xff0c;扩展分区&#xff0c;逻辑分区&#xff08;标准分区&#xff09; 硬盘一般划分为一个“主分区”和“扩展分区”&#xff0c;然后在扩展分区上再分成数个逻辑分区。 磁盘主分区扩展…

html+css-Day1(盒子模型)

一、常用属性 1、字体设置font "line-height" 是 CSS 中的一个属性&#xff0c;用于设置文本行之间的距离&#xff0c;也就是行间距。它影响着段落、行内元素或者任何包含文本的元素的可读性。"line-height" 可以设置为数字、长度单位&#xff08;如 px、e…

现货黄金流程到何种程度?现货黄金在金融产品中的占比是多少?

踏入2024年以来&#xff0c;受美联储降息以及地缘局势紧张的影响&#xff0c;美元受压&#xff0c;避险情绪高涨&#xff0c;众多因素影响下黄金价格出现了强势的上涨&#xff0c;屡创历史新高。在上涨如此强劲的背景下&#xff0c;投资者希望通过黄金投资来实现资产增值。市场…

力扣爆刷第135天之数组五连刷(双指针快慢指针滑动窗口)

力扣爆刷第135天之数组五连刷&#xff08;双指针快慢指针滑动窗口&#xff09; 文章目录 力扣爆刷第135天之数组五连刷&#xff08;双指针快慢指针滑动窗口&#xff09;一、704. 二分查找二、27. 移除元素三、977. 有序数组的平方四、209. 长度最小的子数组五、59. 螺旋矩阵 II…

Adversarial Synthesis of Human Pose From Text # 论文阅读

URL https://arxiv.org/pdf/2005.00340 TD;DR 20 年 5 月来自高校的一篇论文&#xff0c;任务是用 GAN 生成 pose&#xff0c;目前 7 引用。 Model & Method 输入的是描述动作的 text&#xff0c;通过 text encoder&#xff08;本文用的是叫做 fastText 的方法&#…

Kafka应用Demo:指派分区订阅消息消费

环境准备 Kafka环境搭建和生产者样例代码与《Kafka应用Demo&#xff1a;按主题订阅消费消息》相同。 消费者代码样例 public class KafkaConsumerService {private static final Logger LOGGER LoggerFactory.getLogger(KafkaConsumerService.class);private static final S…

word图片水印

一、word中旧水印如何删除 打开word模板&#xff0c;想要删除旧水印&#xff0c;如下图所示操作&#xff0c;但是旧水印删除不掉。 以为上传新水印图片会替换掉旧水印&#xff0c;结果显示了2个水印&#xff0c;要怎么删除呢&#xff1f; 如下截图所示&#xff0c;双击打开页…

vue+element的表格(el-table)排班情况表(2024-05-09)

vueelement的表格&#xff08;el-table&#xff09;排班情况&#xff0c;增删查改等简单功能 代码&#xff1a; <template><!-- 表格 --><div class"sedules"><el-header><el-date-pickerv-model"monthValue2"type"month…

YOLOv8网络结构介绍

将按照YOLOv8目标检测任务、实例分割任务、关键点检测任务以及旋转目标检测任务的顺序来介绍&#xff0c;主要内容也是在目标检测任务中介绍&#xff0c;其他任务也只是Head层不相同。 1.YOLOv8_det网络结构 首先&#xff0c;YOLOv8网络分成了三部分&#xff0c;分别是主干网络…

制鞋5G智能工厂数字孪生可视化平台,推进行业数字化转型

制鞋5G智能工厂数字孪生可视化平台&#xff0c;推进行业数字化转型。随着科技的飞速发展&#xff0c;5G技术与智能制造的结合正成为推动制鞋行业数字化转型的重要力量。制鞋5G智能工厂数字孪生可视化平台&#xff0c;不仅提高了生产效率&#xff0c;还优化了资源配置&#xff0…

【Linux系统编程】31.pthread_detach、线程属性

目录 pthread_detach 参数pthread 返回值 测试代码1 测试结果 pthread_attr_init 参数attr 返回值 pthread_attr_destroy 参数attr 返回值 pthread_attr_setdetachstate 参数attr 参数detachstate 返回值 测试代码2 测试结果 线程使用注意事项 pthread_deta…