当前位置: 首页 > backend >正文

嵌入式ADC和DMA

ADC(模数转换)

1.模拟信号(A)与数字信号(D)

模拟信号(Analog) : 

模拟信号是指用连续变化的物理量所表达的信息,如温度、湿度、压力、长度、电流、电压等等,我们通常又把模拟信号称为连续信号,它在一定的时间范围内可以有无限多个不同的取值。模拟信号传输过程中,先把信息信号转换成几乎“一模一样”的波动电信号(因此叫“模拟”)(传感器可以将非电学量转换成电学量)
数字信号(Digital) :
数字信号,是指自变量离散的、因变量也是离散的信号,这种信号的自变量用整数表示,因变量用有限数字中的一个数字来表示。在计算机中,数字信号的大小常用有限位的二进制数表示。

2. 概念

  转换器(converter)是指将一种信号转换成另一种信号的装置。信号是信息存在的形式或载体。在自动化仪表设备和自动控制系统中,常将一种信号转换成另一种与标准量或参考量比较后的信号,以便将两类仪表联接起来,因此,转换器常常是两个仪表(或装置)间的中间环节。

ADC,全称模数转换器(Analog-to-Digital Converter),模拟数字转换器即A/D转换器,ADC的作用就是将连续变化的模拟信号转换为离散的数字信号。通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。

ADC应用场景

1)智能手机(陀螺仪,加速度计,光传感器)

2)温度计和湿度计(模拟信号转换为数字信号进行处理和显示)

3)电子秤(压力传感器测量物体的重量)

3.ADC原理

采用逐次逼近(二分法)的思想

若为12位的ADC,假设电压范围是0~4v, 则是将0~4v分成2^12(4096)份,每一份对应一个电压取值范围。 

我们可以知道,位数越多,测得的电平准确度会更高。

4.ADC特性

量程:能测量的电压范围 0 ~ 3.6V(VSS ~VDD) (单片机供电范围是1.71到3.6)

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

可配置的转换精度:6位,8位,10位,12位,14位 2^6 2^8 2^10 2^12 。。。

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

5.CubeMX配置 

6.ADC单通道采集

U5系列特有函数:(以ADC4为例)

HAL_PWREx_EnableVddA();

这个函数用于启用VDDA电压域。VDDA是指处理器的模拟电源电压域,用于供电模拟功能模块,例如ADC,DAC等。通过HAL_PWREx_EnableVddA()函数,可以使处理器的VDDA电压域处于启用状态,以供给模拟功能模块所需的电源。

HAL_PWREx_EnableVddIO2();

这个函数用于启用VDDIO2电压域。VDDIO2是指处理器的I/O引脚电源域,用于供电处理器的I/O引脚。通过调用HAL_PWREx_EnableVddIO2()函数,可以使处理器的VDDIO2电压域处于启用状态,以供给处理器的I/O引脚所需的电源。

HAL_ADCEx_Calibration_Start(&hadc4,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED); //校准单端ADC采样(用于采样一个输入端)

单端模式:在单端模式中,ADC的输入信号是相对于一个固定的参考点(通常是地或VCC的某个比例)进行测量的。这意味着ADC的一个输入端连接到待测信号,而另一个输入端(通常是内部的或外部的参考地)保持固定。

HAL_ADCEx_Calibration_Start(&hadc4,ADC_DIFFERENTIAL_ENDED);

//校准差分端ADC采样(用于采样多个输入端)

差分模式:在差分模式中,ADC测量两个输入端之间的电压差。这种模式对于抑制共模噪声非常有效,因为两个输入端都会受到相同的噪声影响,而差分测量会消除这种共模成分。


ADC函数调用的步骤:

  1. 启动ADC芯片(外设)开始工作
  2. 等待转换(需要转换时间)
  3. 获取转换结果
  4. 停止ADC

对应的函数:

HAL_ADC_Start(&hadc4);//启动adc转换HAL_ADC_PollForConversion(&hadc4,100); //等待转换完成,第二个参数表示超时时间(ms)int value=HAL_ADC_GetValue(&hadc4); //获取ADC转换结果HAL_ADC_Stop(&hadc4); //停止

实验:采集VBAT电压

VBAT是单片机上的一个引脚名

本实验VBAT可由核心板的3.3V或者外部的纽扣电池提供

真实的电压值=value*4*3.3/4095

7.ADC多通道采集 

为保证采集数据的准确性,我们可以采集完一轮后重新关闭开启ADC。

DMA

1.简介

数据搬运工(从哪搬?搬到哪?搬多少?)

DMA(Direct Memory Access,直接内存(存储器)访问)是一种内存访问技术,允许某些硬件设备独立地、直接地访问主内存,而不需要通过中央处理器(CPU)的介入DMA传输是将数据从一个地址空间搬到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。

CPU无时不刻的在处理着大量的事务,但有些事情却没有那么复杂,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,能够更好的利用CPU的资源。因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,直接让数据由A拷贝到B 不经过CPU的处理

DMA作用:

DMA的传输方式无需CPU参与,可以直接控制传输。

DMA给外部设备和内存开辟了一条直接数据传输的通道。(DMA总线

目的:给CPU节省资源,使CPU的工作效率提高

 2.DMA主要特性

1)同一个DMA模块可以有多个优先级请求:很高、高、中等、低

2)每个通道有3个事件标志: DMA半传输、DMA传输完成、 DMA传输出错

3)数据源 目标 数据传输宽度对齐 传输数据 字节(8位) 半字(16位) 全字(32位 )

4)双向的AHB主端口,GPDMA:2个端口

5)内存映射数据从源到目标的传输:

外设到内存

内存到外设

内存到内存或外设到外设

6)在睡眠和停止模式下自主数据传输

8)并发DMA通道

8)GPDMA 有 16 个通道

3. DMA增量或循环模式

1)增量:外设搬移到存储器的时候 ,不希望覆盖上一个数据,会将内存设置为增量模式

2)循环:DMA不停循环的搬移数据,一组的数据传输完成时,计数寄存器将会自动地被恢复成配置该通道时设置的初值。

DMA的增量或循环模式是指在进行连续数据传输时,DMA可以选择以递增的方式访问源和目标地址,或者以循环的方式重复访问相同的地址。

在增量模式下,DMA控制器在每次传输完成后,会自,外部设备可以连续地读写数据,而不需要额外的指令干预。

4.CubeMX配置

配置发送端

配置接收

DMA接收搬运

DMA做发送搬运

http://www.xdnf.cn/news/16303.html

相关文章:

  • kafka的部署和jmeter连接kafka
  • 守护汽车“空中升级“:基于HSM/KMS的安全OTA固件签名与验证方案
  • JavaScript 立即执行函数(IIFE)运行时行为分析笔记
  • 建筑施工场景下漏检率↓76%!陌讯多模态融合算法在工程安全监控的落地实践
  • 上证50指数分红和股指期货有什么关系?
  • Sklearn 机器学习 数值指标 entropy熵函数
  • Qt 与 WebService 交互开发
  • 配置nodejs
  • 【CTF-WEB-SQL】SQL注入基本流程-错误注入(sql-labs的Less5)(updatexml)
  • DOM元素添加技巧全解析
  • 如果在分支A上修改了内容,想要提交更新内容的话,如何与develop上的主分支的最新的代码拉齐
  • 面试问题总结——关于OpenCV(二)
  • GStreamer与OpenCV集成
  • 网络基础19--OSPF路由业务多区域
  • 解决VSCode中Github Copilot无法登陆的问题
  • HTTPS的基本理解以及加密流程
  • 掌握JavaScript函数封装与作用域
  • 学习随笔录
  • C#与C++交互开发系列(二十四):WinForms 应用中嵌入C++ 原生窗体
  • 达梦[-2894]:间隔表达式与分区列类型不匹配
  • [硬件电路-93]:模拟器件 - 晶体管的静态工作点,让晶体管工作在其放大电路舞台的中央!!!
  • MyBatis Plus 对数据表常用注解
  • ​机器学习从入门到实践:算法、特征工程与模型评估详解
  • 计算机中的单位(详细易懂)
  • 关于数据库表id自增问题
  • MySQL存储引擎深度解析与实战指南
  • 告别虚函数性能焦虑:深入剖析C++多态的现代设计模式
  • 数组相关学习
  • 基于深度学习的胸部 X 光图像肺炎分类系统(五)
  • 解决笔记本合盖开盖DPI缩放大小变 (异于网传方法,Win11 24H2)