ADC多通道+DMA采样求均值

发布者:吉州古玩斋最新更新时间:2022-04-21 来源: eefocus关键字:ADC  多通道  DMA 手机看文章 扫描二维码
随时随地手机看文章

一、硬件配置

本实验采用STM32F103RB nao开发板

在这里插入图片描述

使用PA0/1/2 引脚,即ADC1的IN0/1/2三个通道,分别测量GND/VCC/VR三处电压。

接线为:

PA0 → GND

PA1 → VCC

PA2 → VR


二、CubeMX配置

1.配置时钟


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

打开HSE、LSE,配置为内外部时钟,主频配置为72MHz,ADC时钟默认为12MHz。


2.配置串口

这里使用USART1,等会重定向Printf用于打印测量信息。

在这里插入图片描述

选择USART1,配置为异步模式,参数无需调整。


3. 配置ADC

在这里插入图片描述

在模拟器件中选择ADC1

使能ADC1的三路通道 IN0/1/2 ,右侧可见 PA0/1/2 引脚被配置

在下面ADC参数配置中选择独立模式

使用3个规则通道

三路通道 IN0/1/2 分别配置为规则通道的序列1/2/3

ADC配置为数据右对齐(16位寄存器位,12位有效),扫描模式(会依次检测三个通道),连续转换(ADC会一直工作)


4.配置DMA

在这里插入图片描述

选择DMA Settings进入DMA配置界面

点击Add添加ADC1 DMA功能,方向为外设到内存

模式为Circluar循环模式,外设不自增,内存自增

外设和内存的传输数据类型均为半字(12位ADC)

5. 生成工程


三、程序编写

1. printf重定向

勾选Use MicroLIB

在这里插入图片描述

在usart.c文件中加入以下代码,并在usart.h文件中添加include


#include


int fputc(int ch, FILE *stream)

{

    /* 堵塞判断串口是否发送完成 */

    while((USART1->SR & 0X40) == 0);


    /* 串口发送完成,将该字符发送 */

    USART1->DR = (uint8_t) ch;


    return ch;

}


2. 主函数

在这里插入图片描述

注意检查CubeMX生成的初始化代码,部分版本的CubeMX初始化顺序不对。正确初始化顺序应为GPIO→DMA→ADC1。

在这里插入图片描述

启动ADC,已DMA模式工作,根据前面的配置,ADC将 连续 扫描 检测PA0/1/2的电压值。并将其存在二维数组 ADC_ConvertedValue [100], [3]中;

调用函数GetAverage() 计算各通道的100个电压数据的平均值;

打印各通道电压平均值


3. GetAverage函数

![**

*强调文本* _强调文本_

定义三个float量存放计算出的三通道平均值

对DMA存放数组中每个通道的100个数据求和,取平均值,再转换为模拟电压值。


四、实验效果

在这里插入图片描述

通道0输出始终为0;

通道1输出始终为3.3V;

通道2输出随电位器调节而变化

————————————————

关键字:ADC  多通道  DMA 引用地址:ADC多通道+DMA采样求均值

上一篇:STM32中ADC的使用/printf函数重定向串口显示内部温度传感器测量值
下一篇:CUBEMX移植RTTHREAD步骤

推荐阅读最新更新时间:2024-11-04 19:05

高精度串行模数转换器MAX1032的应用
1 概述 MAX1032是Maxim公司最新推出的一种多通道、多量程、低功耗、分辨率为14位的串行输出模数转换器。该器件具有转换速率高、功耗低、接口方便等优点,特别适合在航空电子、数据采集、工业控制、多媒体、机器人等领域的应用。 2  MAX1032的特性和结构 2.1  MAX1032的特性 (1)输入通道:八个单端或四个差分模拟输入; (2)输入范围:由软件编程确定(每通道独立), 单端输入范围为0V到+6V、 -6V到0V、 0V到+12V、-12V到0V、 ±3V、±6V及± 12V,;差分输入范围为±6V、±12V及±24V ; (3)接口特性:数据和信号接口电平与SPITM/QSPITM/MICROWIRETM兼容,可
[电源管理]
高精度串行<font color='red'>模数转换器</font>MAX1032的应用
MSP430F5438 ADC12学习笔记
1.前言 这几天实践了MSP430的ADC12功能,虽然片内AD功能比较简单但是还学出了点“门道”来,这个“门道”便是MSP430F5438A和MSP430F5438的区别。这里通过一个例子说明片内ADC的使用,首先实现UART和定时器1S溢出的功能,在上述功能的基础上每1S打印一次AD转换结果,转换通道定向到通道11,该通道对应AVCC和AVSS插值的一半,由于AVCC和LDO的输出之间只有一个电感连接,可以理解转换的结果为LDO输出电压的一般,若扩大两倍便是LDO的实际输出结果,在本文所用的开发板LDO输出为3.3V,所有打印的结果越接近3.3V越好。 2.代码实现和输出结果 代码实现 // 时钟默认情况 //
[单片机]
MSP430F5438 <font color='red'>ADC</font>12学习笔记
STM32 ADC模拟看门狗应用演示过程
我们在做ADC应用时,有些场合需要精确测量出待测信号的数据,有时可能并不关心ADC结果多准确,只要满足某个范围即可,这时我们就可以考虑使用STM32ADC看门狗功能了。 STM32 ADC基本上都支持模拟看门狗功能,即ADC模块对被检测的模拟通道的转换结果基于硬件对其合法性、安全性进行监测。我们可以设置被监测通道的转换结果合法性检查的上下阈值,若结果处于阈值之外则视为异常,并可以触发中断。 尤其有些场合,我们可能使用到数个ADC通道,8个、10个甚至更多,同时程序还需要基于各通道的转换结果进行合法性或安全性监测,此时使用ADC模拟看门狗功能就很方便。我们可以先让模拟看门狗做第一步把关,只有出现异常数据时才去进一步检查确认。
[单片机]
STM32 <font color='red'>ADC</font>模拟看门狗应用演示过程
基于STM32单片机ADC连续采集和DMA循环转换
描述:用ADC连续采集11路模拟信号,并由DMA传输到内存。ADC配置为扫描并且连续转换模式,ADC的时钟配置为12MHZ。在每次转换结束后,由DMA循环将转换的数据传输到内存中。ADC可以连续采集N次求平均值。最后通过串口传输出最后转换的结果。 程序如下: #i nclude “stm32f10x.h” //这个头文件包括STM32F10x所有外围寄存器、位、内存映射的定义 #i nclude “eval.h” //头文件(包括串口、按键、LED的函数声明) #i nclude “SysTickDelay.h” #i nclude “UART_INTERFACE.h” #i nclude #define N 50 //每通道
[单片机]
【STM32Cube_22】使用ADC读取电压值
本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的ADC外设,读取DAC输出引脚的电压值。 1. 准备工作 硬件准备 开发板 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi): 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码; 准备一个串口调试助手,这里我使用的是Serial Port Utility; Keil MDK和串口助手Serial Port Utility 的安装包都可以在文末关注公众号获取,回复关键字获取相应的安装包: 2.生成MDK工程 选择芯片型号 打开STM32CubeMX,打开MCU选择器
[单片机]
【STM32Cube_22】使用<font color='red'>ADC</font>读取电压值
DC-DC转换器与ADC电源接口
在前面的文章中,我们讨论了关于ADC电源输入的各种话题;现在,让我们顺着这个方向,略为扩充一下我们的话题。 目前为止,我们讨论了各种不同类型的ADC电源输入,以及驱动它们的一些方法。 我们主要偏重于使用LDO,但也看出来,这并不总是最好的方法。 取决于系统的限制因素和性能规格,采用其它拓扑可能会更好。 因此之故,让我们看看使用DC-DC转换器(有时也称为开关调节器)以及LDO来驱动ADC电源输入的情况(见图1)。 图1. 至ADC电源输入 采用DC-DC转换器和LDO驱动ADC电源输入 使用DC-DC转换器时,重要的是需确保输出LC滤波器经适当设计,满足设计的电流要求以及DC-DC转换器的开关频率要求。 此外同样重要的是
[电源管理]
DC-DC转换器与<font color='red'>ADC</font>电源接口
使用运算放大器来驱动高精度ADC
大多数高精度模数转换器 (ADC) 都没有高阻抗输入。输入信号直接通过一个开关连接到一个采样电容器。这种负载存在一些有趣的挑战。 有人试图通过直接连接一个电位计到输入来验证其ADC的运行,如图1所示。这样做的结果通常让人失望,因为获得的结果并不理想。这种情况下,在ADC输入上看到的信号呈现出巨大的峰值,因为大输入阻抗从采样电容器吸取电流,从而导致对电容器充电需要大量的电流。如果在转换器的采集时间tACQ内稳定下来,便不会出现问题。但是,如果没有在tACQ内稳定到0.5最低有效位 (LSB) 以下,则会损耗精度。 图2显示了驱动一个高精度ADC的建议电路。CSH为ADC内部的采样电容,而RSW为采样开关的导通电阻(通
[模拟电子]
STM32 DMA彻底研究
typedef struct { u32 DMA_PeripheralBaseAddr; u32 DMA_MemoryBaseAddr; u32 DMA_DIR; u32 DMA_BufferSize; u32 DMA_PeripheralInc; u32 DMA_MemoryInc; u32 DMA_PeripheralDataSize; u32 DMA_MemoryDataSize; u32 DMA_Mode; u32 DMA_Priority; u32 DMA_M2M; } DMA_InitTypeDef; DMA_InitTypeDef 定义于文件“stm32f10x_dma.h” DMA_PeripheralBaseA
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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