实验(六):ADC应用:独立模式单通道采集实验

这篇具有很好参考价值的文章主要介绍了实验(六):ADC应用:独立模式单通道采集实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验目的与任务

实验目的:

1. 学习对ADC基础功能的使用;

2. 掌握KEIL5的仿真与调试。

任务:

1.   根据要求编写程序,并写出原理性注释;

2. 将检查程序运行的结果,分析一下是否正确;

3. 完成所建工程的验证调试。

二、实验要求

贴片滑动变阻器的动触点通过连接至STM32 芯片的ADC 通道引脚。当我们使用旋转滑动变阻器调节旋钮时,其动触点电压也会随之改变,电压变化范围为0~3.3V,亦是开发板默认的ADC 电压采集范围。

三、实验内容及步骤

1. 软件设计

① 实验新建文件步骤:

运行Keil 5开发环境。编写两个ADC 驱动文件,AD.c 和 AD.h,用来存放ADC 所用IO 引脚的初始化函数以及ADC 配置相关函数。

② 编程要点:

  • 初始ADC 用到的GPIO;
  • 设置ADC 的工作参数并初始化;
  • 设置ADC 工作时钟;
  • 设置ADC 转换通道顺序及采样时间;
  • 配置使能ADC 转换完成中断,在中断内读取转换完数据;
  • 使能ADC;
  • 使能软件触发ADC 转换。

ADC 转换结果数据使用中断方式读取,这里没有使用DMA进行数据传输。

2. 实验步骤

(1)运行Keil uVision5开发环境,建立一个项目工程。

(2)在工程中添加main.c文件,因需要用到OLED显示屏,所以将之前实验写好的OLED文件移植到该工程中,然后在main.c中调用,如图1所示。

实验(六):ADC应用:独立模式单通道采集实验,单片机,单片机,stm32,嵌入式硬件

图1 移植程序

(3)在工程中添加ADC转换相关文件,因此需要创建AD.c文件,初始化ADC通道配置,同时在文件内编写功能函数AD_GetValue(),获取AD转换值,如图2所示。

实验(六):ADC应用:独立模式单通道采集实验,单片机,单片机,stm32,嵌入式硬件

图2 编写AD.c代码

(4)编写AD.h程序,方便以后工程文件以移植,使项目工程工具有移植性,如图3所示。

实验(六):ADC应用:独立模式单通道采集实验,单片机,单片机,stm32,嵌入式硬件

图3 AD.h程序

(5)编写main.c程序,调用AD_GetValue()函数获取数据,然后将其转换成实际的电压值,如图4所示。

实验(六):ADC应用:独立模式单通道采集实验,单片机,单片机,stm32,嵌入式硬件

图4 main.c程序

运行并调试成功并无错误和警告。

3. 调试验证及结果

(1)将开发板连接到电脑上,使用STLINK将程序烧录到STM32中。

(2)当电位器位于中间时,观察当前测得数据,如图5所示:

实验(六):ADC应用:独立模式单通道采集实验,单片机,单片机,stm32,嵌入式硬件

图5 电位器位于中间

(3)当电位器位于最下方时,观察当前测得数据,如图6所示:

实验(六):ADC应用:独立模式单通道采集实验,单片机,单片机,stm32,嵌入式硬件

图6 电位器位于最下方

(4)当电位器位于任意位置时,观察当前测得数据,如图7所示:

实验(六):ADC应用:独立模式单通道采集实验,单片机,单片机,stm32,嵌入式硬件

图7 电位器位于任意位置

四、实验代码分析

(1)ADC初始化程序:

void AD_Init(void){
	//开启时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	//选择规则组的输入通道
	ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);
	//初始化ADC
	ADC_InitTypeDef ADC_InitTypeDefstructure;
	ADC_InitTypeDefstructure.ADC_DataAlign = ADC_DataAlign_Right;//对齐方式
	ADC_InitTypeDefstructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//触发源选择
	ADC_InitTypeDefstructure.ADC_Mode = ADC_Mode_Independent;//配置ADC工作模式
	ADC_InitTypeDefstructure.ADC_ContinuousConvMode = DISABLE;//连续转换
	ADC_InitTypeDefstructure.ADC_ScanConvMode = DISABLE;//扫描转换
	ADC_InitTypeDefstructure.ADC_NbrOfChannel = 1;//通道数目
	
	ADC_Init(ADC1,&ADC_InitTypeDefstructure);
	
	//开启ADC
	ADC_Cmd(ADC1,ENABLE);
	//校准ADC
	ADC_ResetCalibration(ADC1);//复位校准
	while(ADC_GetResetCalibrationStatus(ADC1) == SET);//等待校准完成
	ADC_StartCalibration(ADC1);//复位校准
	while(ADC_GetCalibrationStatus(ADC1) == SET);
	
}

(2)ADC功能函数程序:

uint16_t AD_GetValue(void){
	ADC_SoftwareStartConvCmd(ADC1,ENABLE);//软件触发转换
	while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);//获取标志位状态
	return ADC_GetConversionValue(ADC1);//获取转换值
}

(3)main函数程序:

#include "stm32f10x.h"                  // Device header
#include "Delay.h" 
#include "OLED.h" 
#include "AD.h" 

uint16_t value;
float V;
int main(){
	OLED_Init();
	AD_Init();
	
	OLED_ShowString(1,1,"ADValue:");
	OLED_ShowString(2,1,"V:0.00V");
	while(1){
		value = AD_GetValue();
		V = (float)value /4095 * 3.3;
		OLED_ShowNum(1,9,value,4);
		OLED_ShowNum(2,3,V,1);
		OLED_ShowNum(2,5,(uint16_t)(V*100)%100,2);
		
	}
}

五、实验总结

本次实验的目的是学习ADC(模数转换器)的基础功能,并通过KEIL5进行仿真和调试。在实验中,我们使用了贴片滑动变阻器来模拟模拟信号,并通过ADC将其转换为数字信号进行采集和测量。以下是我对本次实验的实验总结和心得体会:

在实验中,我首先通过学习和了解ADC的基本原理和功能,对其工作原理有了清晰的认识。ADC是将连续的模拟信号转换为离散的数字值的设备,它对于嵌入式系统中的模拟信号采集和处理非常重要。通过实验,我学会了如何配置ADC的工作模式、通道和采样率等参数,以及如何读取和处理ADC转换的结果。

在编写程序的过程中,我充分运用了KEIL5的开发环境和工具。通过配置寄存器和调用库函数,我设置了GPIO引脚的功能和ADC的相关参数。同时,我也学会了使用KEIL5的仿真和调试功能,通过设置断点、单步执行和观察变量值等操作,逐步检查程序的运行情况,并找出可能存在的问题和错误。

在实验过程中,我遇到了一些挑战和困难。其中一个挑战是正确连接滑动变阻器的引脚和ADC通道引脚,确保信号能够正确地传输和采集。另外,我还需要注意ADC的采样率和精度,确保采集到的数据准确无误。通过仔细阅读芯片手册和参考资料,并结合实际的电路连接,我成功地克服了这些挑战。

在调试过程中,我发现一些常见的问题和错误。例如,未正确配置ADC通道引脚的功能,或者忘记使能ADC模块等。通过仔细检查代码和参考文档,我能够快速定位并解决这些问题。同时,我也学会了利用串口通信或其他外设来显示和输出ADC采集的数据,以验证程序的正确性和准确性。

通过本次实验,我不仅加深了对ADC的理解和掌握,还提高了我的编程和调试能力。我学会了如何使用嵌入式开发工具和硬件设备进行实验,将理论知识应用到实际的项目中。同时,我也意识到在实际开发中,仔细的电路连接和正确的配置非常重要,这对于确保系统的正常运行至关重要。

总而言之,本次实验让我更深入地了解了ADC的基础功能和应用,提高了我的嵌入式系统开发能力。通过实践和实验,我更加熟悉了开发流程和方法,对于将理论知识应用到实际项目中有了更好的把握。这将对我未来的学习和工作中的嵌入式系统开发起到积极的推动作用。我将继续不断学习和探索,提升自己在嵌入式系统开发领域的能力和水平。

源码:实验6文章来源地址https://www.toymoban.com/news/detail-557945.html

到了这里,关于实验(六):ADC应用:独立模式单通道采集实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM-32:ADC模数转换器—ADC单通道转换/ADC多通道转换

    ADC(Analog-Digital Converter),意即模拟-数字转换器,简称模数转换器。ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。与ADC相对应,从数字电路到模拟电路的桥梁即DAC(Digital-Analog Convertor),数模转换器。 DAC不是唯一可以

    2024年02月09日
    浏览(39)
  • STM32ADC单通道转换

    ADC功能初始化主要分三部分,GPIO初始化、ADC模式初始化与NVIC初始化。 1.1初始化GPIO 1.2 初始化ADC模式 1.3 初始化NVIC 中断函数命名为ADC1_2_IRQHandler即可,换ADC通道的话名字也要换。

    2024年03月09日
    浏览(51)
  • STM32入门笔记08_ADC模数转换器+案例: ADC单通道&ADC多通道

    ADC(Analog-Digtal Converter) 模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量, 建立模拟电路到数字电路的桥梁 12位逐次逼近型ADC, 1us转换时间 输入电压范围: 0~3.3V, 转换结果范围: 0~4095 18个输入通道, 可测量16个外部和2个内部信号源 规则组和注入组

    2024年02月04日
    浏览(42)
  • STM32CubeMX教程13 ADC - 单通道转换

    开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 野火DAP仿真器 XCOM V2.6串口助手 1个滑动变阻器 使用STM32CubeMX软件配置STM32F407开发板的 ADC实现单通道ADC采集 ,具体为使用ADC1_IN5通道通过软件/定时器触发采集滑动变阻

    2024年02月02日
    浏览(45)
  • HAL库配置ADC_1_单通道配置

    💦在使用ADC外设前,先查看下芯片手册,看下ADC的特点。 💦ADC的使用,一定是有参考电压的,在使用时要注意,芯片手册上关于ADC参考电压的范围。 通常正参考电压VREF+连接到VCC,负参考电压VREF-连接到GND 💦通过框图可以了解ADC的工作流程。   下面是ADC比较常用的参数说

    2024年02月04日
    浏览(33)
  • STM32 hal库使用笔记(五)ADC—单通道/双通道DMA传输

    实现目的:利用ADC采集光敏传感器/烟雾传感器的值,并利用串口打印 实验平台:正点原子精英版 一、简介 1.DMA的介绍 参考:STM32 hal库使用笔记(四)DMA—内存到内存/内存到外设_乱码小伙的博客-CSDN博客 2.ADC简介      ADC(Analog-Digital Converter)模拟-数字转换器 ADC可以将引脚

    2024年02月03日
    浏览(49)
  • 基于 VITA57.4 标准的单通道 6GSPS 12 位采样 ADC,单通道 6GSPS 16 位采样 DAC 子卡模块

    概述 FMC147 是一款单通道 6.4GSPS(或者配置成 2 通道 3.2GSPS)采样率的 12 位 AD 采集、单通道 6GSPS(或配置成 2 通道 3GSPS) 采样率 16 位 DA 输出子卡模块,该板卡为 FMC+标准,符合 VITA57.4 规范,该模块可以作为一个理想的 IO 单元耦合至 FPGA 前端,ADC 数字端通过 16lane 通道的 JE

    2023年04月16日
    浏览(43)
  • OpenCV 将单通道转换为三通道

    项目有个需求:图片传至图像算法库处理完成后需要返回结果图像进行再加工。 目前的情况是相机拍下来的图像是灰度图 传送图像指针给算法处理,算法处理完后将检测结果(eg. ok,ng)写入一张三通道图,只有这样才可以显示彩色文字 然后现在需要回传此三通道图片的指针

    2024年02月11日
    浏览(33)
  • python图像三通道和单通道互转

    三通道转单通道 三通道转单通道很简单,使用cv2读取图像的时候指定读取图像格式为 cv2.IMREAD_GRAYSCALE 就可以,但是用imwrite进行存图 下面是关于cv2.imread()函数的参数 单通道转三通道 expand_dims(img,axis=0) 下面是关于这个函数axis插入纬度的一些理解 当处理是一纬数组时,可以插

    2024年02月05日
    浏览(33)
  • pytorch保存单通道灰度图片

    前言 pytorch中通常如上使用torchvision.utils.save_image来保存图片,但是在保存单通道灰度图片时,该函数保存后的图片会是3通道的,虽然每个通道上的数据一样,视觉上也是灰度图片,但后续输入单通道的网络会报错。 方案 此时我们可以用将图片转换成PIL,用它提供的save()方法来

    2024年02月11日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包