本文主要是介绍学习硬件测试05:NTC(ADC)+正弦波(DAC)+DMA(ADC+DAC)(P73、P76、P78),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章以下内容全部为硬件相关知识,鲜有软件知识,并且记的是自己需要的部分,大家可能看不明白。
一、NTC(ADC)
1.1实验现象
本实验用 NTC 采集温度,数码管实时显示温度数据(整数),左下角 USB 小串口每隔 1S 打印温度信息。
1.2硬件电路
NTC 电阻是一个模拟温度传感器,随着温度的升高,电阻值逐渐减小。电路简单介绍如下:
- 电源滤波电容
- 在 25℃ 室温下 NTC 电阻的阻值为 10K ,故上面有一个与之匹配的电阻 10K 。
- 滤波电容,稳定测量点电压
- RC 滤波,进一步稳定输出电压
1.3 ADC
(请由我来拙劣的介绍一下 ADC )
1.3.1模拟量
问:NTC 电阻采集到的是电压信号量,为模拟信号量,怎么转换成“数字量”呢?
答:第一步 自制 NTC 温度数据表。制作时最重要的公式只有下面:
数据变换:模拟量 → 数字量 → 整形 → 数组 → 列表
1.3.2 ADC
12 位 ADC 是一种主次逼近型模拟数字量转换器,一共有 18 个通道,其中16 个外部通道,2 个内部通道(STM32 内部温度和基准电压),一共有 4 种模式:
- 单次模式:只对 1 路通道进行一次 ADC 转换(本次实验采用)
- 连续模式:对 1 路 通道进行一次 ADC 转换后结束就马上开始另一次转换,往往需要搭配 DMA(后续讲解)
- 扫描模式:用来检测一组(多路)模拟通道
- 间断模式:根据设置一次检测 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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!