学习硬件测试05:NTC(ADC)+正弦波(DAC)+DMA(ADC+DAC)(P73、P76、P78)

2024-09-07 18:20

本文主要是介绍学习硬件测试05:NTC(ADC)+正弦波(DAC)+DMA(ADC+DAC)(P73、P76、P78),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章以下内容全部为硬件相关知识,鲜有软件知识,并且记的是自己需要的部分,大家可能看不明白。

一、NTC(ADC)

1.1实验现象

本实验用 NTC 采集温度,数码管实时显示温度数据(整数),左下角 USB 小串口每隔 1S 打印温度信息。

1.2硬件电路

NTC 电阻是一个模拟温度传感器,随着温度的升高,电阻值逐渐减小。电路简单介绍如下:

  1. 电源滤波电容
  2. 在 25℃ 室温下 NTC 电阻的阻值为 10K ,故上面有一个与之匹配的电阻 10K 。
  3. 滤波电容,稳定测量点电压
  4. RC 滤波,进一步稳定输出电压

1.3 ADC

(请由我来拙劣的介绍一下 ADC )

1.3.1模拟量

问:NTC 电阻采集到的是电压信号量,为模拟信号量,怎么转换成“数字量”呢?

答:第一步 自制 NTC 温度数据表。制作时最重要的公式只有下面:

\frac{V}{Value}=\frac{3.3v}{4095}

数据变换:模拟量 → 数字量 → 整形 → 数组 → 列表

1.3.2 ADC 

12 位 ADC 是一种主次逼近型模拟数字量转换器,一共有 18 个通道,其中16 个外部通道,2 个内部通道(STM32 内部温度和基准电压),一共有 4 种模式:

  1. 单次模式:只对 1 路通道进行一次 ADC 转换(本次实验采用)
  2. 连续模式:对 1 路 通道进行一次 ADC 转换后结束就马上开始另一次转换,往往需要搭配 DMA(后续讲解)
  3. 扫描模式:用来检测一组(多路)模拟通道
  4. 间断模式:根据设置一次检测 N 个,比如有 12 个通道,依次检测 3 个,一次检测 3 个,循环反复。

注意:ADC 的时钟信号不可以超过 14MHz,这在 Cubemx 配置中如果超过会自动显示为红色。

ADC 转换的过程,个人觉得主要是 数据手册中的 ADC 框图,局部框图如下:

以上过程就可以将模拟电压信号转换成数字信号,被地址/数据总线读取,当然这个过程也可以通过中断模式、查找模式和 DMA 模式(用的最多,后续讲解)。

当然以上过程还需要软件编程的配合,我没有涉及。

二、正弦波(DAC)

2.1实验现象

上电后在示波器上输出正弦波,通过触摸按键 1 调整正弦波频率。

通过触摸按键 1 来改变周期。

放大看波形细节,波形不是很光滑的原因是一个周期一共选取了 32 个采样点, 不是很光滑。

2.2硬件电路

将单片机中的两路 DAC 输出(PA4、PA5)都引出来,接到了单片机板子上 SPI 的接口上,就是将相应的接口进行映射和复用。

在实际的板子中两个 DAC 接口是 6 个相连排针中的两个。

2.3 DAC

数字/模拟转换模块(DAC)是12位数字输入(0~4095,这个范围可以对应到 0 ~ 参考电压,参考电压一般是 3.3V),电压输出的数字/模拟转换器。DAC 可以配置为 8 位或 12 位模式(我觉得这里的位数主要是指输出的位数,位数多少主要是根据外设,单片机采集设备数据,设备可能是 8 位的也可能是 12 位的,采集后再输出模拟电压),也可以与DMA控制器配合使用。

(1)上图中①先写入数据,如果②启动触发的功能,就在触发后才会转换;如果不启用触发的功能,就直接转换。故可以有数据缓存的功能,也可以没有。
应用:可以将数据先写入,然后设置一定周期来触发,就可以输出有规律的波形、数据等。

(2)输出一般在 0~3.3V ,想要输出更大的电压的范围(来控制需要大电压的外设),下图是一个放大电路的参考,可以和 DAC 配合使用。

2.4显示过程

正弦波是一个模拟量。刚开始一直不;理解正弦波为什么会是一个模拟量,后来才知道这个正弦波不是在和单片机相连的显示屏上显示,而是在示波器上显示,就是测得一点的电压是正弦波的波形,这自然是模拟量。

假设先输出的正弦波是一个负半轴翻转到正半轴的正弦波,最低点的电压为 0V(对应数字 0 ),最高点的电压为 3.3V (对应数字 4095)。

在正弦波上进行取样,取样的点越多,波形越逼真,一个周期(π)中可以取样 36 个点,一个点对应一个电压,一个电压对应一个值,做出一张一一对应的表格。只要将表格中的数字量循环的DAC  就可以输出对应的模拟量,然后就可以在示波器中显示正弦波

三、DMA(P73、P76、P78)

3.1实验现象

1、数码管显示 PCB 板温度;

2、SPI 扩展接口的 CS 管脚  (DAC_OUT1)输出 1kHz 的正弦波

3、触摸按键调整正弦波频率,在1 00Hz,1kHz,10kHz,100kHz,1MHz 间切换;

4、串口打印温度信息与调整后的正弦波频率;

3.2 硬件电路

就是上面两题讲解的 ADC 与 DAC 。

3.3 DMA

直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传 输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。

举例:(内存到内存)如果 RAM 和 Flash 之间需要传输 1K 字节数据,如果是 51 单片机就要用 for 循环,一个字节一个字节的传输,需要 CPU 参与。STM32 中有 DMA 功能,CPU 只需要给 DMA 发送一个指令,DMA 就自动将需要传输的数据进行传输,该过程由 DMA 完成,无需 CPU 的参与,DMA 传输完成后(或者中间过程)会向 CPU 报告传输进展,这样可以节约 CPU 的资源。

举例:(内存到外设)比如串口向 RAM 传输数据,传统模式需要 CPU 一个字节一个字节的处理或者每传输一个产生一次中断,用 DMA 功能的话,每传输一个,DMA 处理一个,当传输完成之后,DMA 通知 CPU 来处理数据,同样也可以节约资源。

在STM32F103 中一共有两个 DMA 控制器有 12 个通道(DMA1有 7 个通道,DMA2 有 5 个通道),每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。


 注意:软件部分我都是简单学习,涉及到一些过程操作,我都写的比较简洁,如果需要请自行购买硬件家园相关课程。

本文推荐:硬件家园公众号

本文参考:资料汇总 - STM32物联网实战项目 (qq.com)

这篇关于学习硬件测试05:NTC(ADC)+正弦波(DAC)+DMA(ADC+DAC)(P73、P76、P78)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145802

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测