ADC数模转换器

一、ADC(Analog-Digital Converter)模拟-数字转换器

1、ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路数字电路的桥梁

2、12位逐次逼近型ADC,1us转换时间

3、输入电压范围:0~3.3V,转换结果范围:0~4095

4、18个输入通道,可测量16个外部2个内部信号源

5、规则组注入组两个转换单元

6、模拟看门狗自动监测输入电压范围

7、STM32F103C8T6 ADC资源:ADC1、ADC2,10个外部输入通道

8、逐次逼近型ADC

9、ADC框图

10、ADC基本结构

11、转换模式

        (1)单次转换,非扫描模式

        (2)连续转换,非扫描模式

        (3)单次转换,扫描模式

        (4)连续转换,扫描模式

12、数据对齐

13、转换时间

(1)AD转换的步骤:采样,保持,量化,编码

(2)STM32 ADC的总转换时间为:     

                TCONV = 采样时间 + 12.5个ADC周期

(3)例如:当ADCCLK=14MHz,采样时间为1.5个ADC周期     

              TCONV = 1.5 + 12.5 = 14个ADC周期 = 1μs

14、校准

(1)ADC有一个内置自校准模式。校准可大幅减小内部电容器组的变化造成的准精度误差。校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差

(2)建议在每次上电后执行一次校准

(3)启动校准前, ADC必须处于关电状态超过至少两个ADC时钟周期

15、硬件电路

二、AD单通道

1、按照以下接线方式连接,并将STLINK插到电脑上

2、AD转换函数驱动模块

(1)ADCCLK的配置函数(在RCC中)

(2)ADC相关库函数功能

(3)AD.c

#include "stm32f10x.h"                  // Device headervoid AD_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);		//开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);						//配置ADCCLK 72MHz/6=12MHzGPIO_InitTypeDef GPIO_InitStructure;					//配置GPIOGPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模拟输入,在AIN模式下,GPIO口是无效的,断开GPIO,防止GPIO口的输入输出对模拟电压造成干扰,AIN模式就是ADC的专属模式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);	//采用周期:55.5 转换周期:固定为12.5  一共68个周期	//选择规则组的输入通道ADC_InitTypeDef ADC_InitStructure;											//结构体初始化ADCADC_InitStructure.ADC_ContinuousConvMode=DISABLE;//连续转换模式ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//数据对齐ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//触发控制ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;ADC_InitStructure.ADC_NbrOfChannel=1;//通道数目,在扫描模式下会用到几个通道ADC_InitStructure.ADC_ScanConvMode=DISABLE;//扫描转换模式ADC_Init(ADC1,&ADC_InitStructure);		ADC_Cmd(ADC1,ENABLE);														//开启AC电源ADC_ResetCalibration(ADC1);							//复位校准				//ADC校准while(ADC_GetResetCalibrationStatus(ADC1) == SET);	//返回复位校准的状态ADC_StartCalibration(ADC1);							//开始校准while(ADC_GetCalibrationStatus(ADC1) == SET);		//获取校准状态		
}uint16_t AD_GetValue(void)
{ADC_SoftwareStartConvCmd(ADC1,ENABLE);while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);	//等待时间:1/12MHz*(55.5+12.5)=5.6usreturn ADC_GetConversionValue(ADC1);//读取后自动清除标志位
}

(4)AD.h

#ifndef __AD_H
#define __AD_Hvoid AD_Init(void);
uint16_t AD_GetValue(void);#endif

3、编写main.c代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"uint16_t ADValue;
float Voltage;int main(void)
{OLED_Init();AD_Init();OLED_ShowString(1,1,"ADValue:");OLED_ShowString(2,1,"Voltage:0.00V");while(1){ADValue = AD_GetValue();Voltage = (float)ADValue/4095*3.3;	//AD值转换成电压OLED_ShowNum(1,9,ADValue,4);OLED_ShowNum(2,9,Voltage,1);OLED_ShowNum(2,11,(uint16_t)(Voltage*100)%100,2);Delay_ms(100);}
}

4、实现效果

AD单通道

5、单通道连续转换、非扫描模式

修改AD.c

三、AD多通道

1、按照以下接线方式连接,并将STLINK插到电脑上

2、AD转换函数驱动模块

(1)AD.c

#include "stm32f10x.h"                  // Device headervoid AD_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);		//开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);						//配置ADCCLK 72MHz/6=12MHzGPIO_InitTypeDef GPIO_InitStructure;					//配置GPIOGPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模拟输入,在AIN模式下,GPIO口是无效的,断开GPIO,防止GPIO口的输入输出对模拟电压造成干扰,AIN模式就是ADC的专属模式GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);ADC_InitTypeDef ADC_InitStructure;											//结构体初始化ADCADC_InitStructure.ADC_ContinuousConvMode=DISABLE;//连续转换模式
//	ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//连续转换模式ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//数据对齐ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//触发控制ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;ADC_InitStructure.ADC_NbrOfChannel=1;//通道数目,在扫描模式下会用到几个通道ADC_InitStructure.ADC_ScanConvMode=DISABLE;//扫描转换模式ADC_Init(ADC1,&ADC_InitStructure);		ADC_Cmd(ADC1,ENABLE);														//开启AC电源ADC_ResetCalibration(ADC1);							//复位校准				//ADC校准while(ADC_GetResetCalibrationStatus(ADC1) == SET);	//返回复位校准的状态ADC_StartCalibration(ADC1);							//开始校准while(ADC_GetCalibrationStatus(ADC1) == SET);		//获取校准状态	//	ADC_SoftwareStartConvCmd(ADC1,ENABLE);		//软件触发}uint16_t AD_GetValue(uint8_t ADC_Channel)
{ADC_RegularChannelConfig(ADC1,ADC_Channel,1,ADC_SampleTime_55Cycles5);	//采用周期:55.5 转换周期:固定为12.5  一共68个周期	//选择规则组的输入通道ADC_SoftwareStartConvCmd(ADC1,ENABLE);while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);	//等待时间:1/12MHz*(55.5+12.5)=5.6usreturn ADC_GetConversionValue(ADC1);//读取后自动清除标志位
}

(2)AD.h

#ifndef __AD_H
#define __AD_Hvoid AD_Init(void);
uint16_t AD_GetValue(uint8_t ADC_Channel);#endif

3、编写main.c代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"uint16_t AD0,AD1,AD2,AD3;int main(void)
{OLED_Init();AD_Init();OLED_ShowString(1,1,"AD0:");OLED_ShowString(2,1,"AD1:");OLED_ShowString(3,1,"AD2:");OLED_ShowString(4,1,"AD3:");while(1){AD0 = AD_GetValue(ADC_Channel_0);AD1 = AD_GetValue(ADC_Channel_1);AD2 = AD_GetValue(ADC_Channel_2);AD3 = AD_GetValue(ADC_Channel_3);OLED_ShowNum(1,5,AD0,4);OLED_ShowNum(2,5,AD1,4);OLED_ShowNum(3,5,AD2,4);OLED_ShowNum(4,5,AD3,4);Delay_ms(100);}
}

4、实现效果

AD多通道

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/337917.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle dblink 发现Network 等待事件的分析 enq: KO - fast object checkpoint

所有的sql 通过dblink 查询全部等待中, 同一个SQL 20多个session 在跑,等待事件network,可能怀疑是不是网络断开了,导致没有返回 执行sql 如下: BEGIN Xdblink ; END; 去到dblink 所在的db,发现20多个sql在…

远程继电器模块实现(nodemcu D1 + 继电器)

前言 接下来将实现一个远程继电器,实时远程控制和查询的开关状态。用 5v 直流电控制 220v 交流电。 硬件上: 使用 nodemcu D1 和 JQC-3FF-S-Z 继电器。 软件上: 使用 nodejs 作为服务端,和 html 作为客户端。 在开始之前在电脑…

基于Qt GraphicView 解析 CIM/G 电力接线图文件

本文讲述了如何使用Qt的框架来渲染展示标准的CIM/G格式的图形文件,也就是公用信息模型(common information model,CIM)中的G文件部分的内容。这是一种电力系统图形的交换规则,用于电网图形交换。 [by amjieker] CIM/G …

⌈ 传知代码 ⌋ 命名实体识别

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

vue3组件传值---vue组件通过属性,事件和provide,inject进行传值

通过属性传值(父传子) vue的组件具有props自建属性(自定义名称,类似于class,id的属性),通过这个属性,父组件可以向子组件传递参数,从而实现组件之间的信息传递&#xff0…

深入探讨npm、Yarn、pnpm和npx之间的区别

前端生态系统是一个快速发展的领域,充满了各种工具和技术。对于开发人员来说,跟上这些创新可能是一项艰巨的挑战。 在本文中,我们将深入探讨npm、Yarn、pnpm和npx之间的区别,帮助你理解每个工具的不同之处。 包管理器比较 npm …

原码一位乘法(计算机组成原理)

算法原理 每次将1位乘数所对应的部分积与原部分积的“累积和”相加,并移位 设置寄存器 存放部分积累积和、乘积高位存放被乘数存放乘数、乘积低位 法则 乘积的数值位俩数绝对值之积;符号位 位 俩数符号位进行异或,即 p x ⊕ y 步骤 设…

你认识nginx吗,nginx是做什么的,nginx可以做什么 --1)nginx介绍

一.Nginx 介绍 Nginx(发音同engine x)是一个异步框架的 Web 服务器,也可以用作反向代理,负载平衡器 和 HTTP 缓存。该软件由 Igor Sysoev 创建,并于2004年首次公开发布。同名公司成立于2011年,以提供支持。…

【原型模式】详解

一.概念 原型模式是一种创建型设计模式,它的主要思想是通过复制现有对象来创建新对象,而不是通过实例化一个类来创建。在原型模式中,我们称被复制的对象为原型(Prototype),新创建的对象为克隆体&#xff0…

Redis缓存(笔记一:缓存介绍和数据库启动)

目录 1、NoSQL数据库简介 2、Redis介绍 3、Redis(win系统、linux系统中操作) 3.1 win版本Redis启动 3.2 linux版本Redis启动 1、NoSQL数据库简介 技术的分类:(发展史) 1、解决功能性的问题:Java、Jsp、RDBMS、Tomcat、HTML、…

IC开发——VCS基本用法

1. 简介 VCS是编译型verilog仿真器,处理verilog的源码过程如下: VCS先将verilog/systemverilog文件转化为C文件,在linux下编译链接生成可执行文件,在linux下运行simv即可得到仿真结果。 VCS使用步骤,先编译verilog源…

【计算机毕业设计】388微信小程序足球赛事及队伍管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

开发一个comfyui的自定义节点-支持输入中文prompt

文章目录 目标功能开发环境实现过程翻译中文CLIP编码拓展仓库地址完整代码目标功能 目前comfyui的prompt提示词输入节点 CLIP Text Encode 只支持输入英文的prompt,而有时候我们需要自己制定一些prompt,所以就得将我们想要的提示词翻译为英文后再复制粘贴到该节点的输入框中…

Java的JDK环境变量配置(Windows)

只写了需要配置的环境变量 注:从JDK1.5开始,配置Java环境变量时,不再需要配置CLASSPATH,只需要配置JAVA_HOME和Path 1、配置JAVA_HOME 找到自己的JDK位置,我这里是 C:\dev\java\jdk-17.0.119在环境变量-系统变量中&…

ubuntu系统下安装mysql的步骤详解

一、下载安装包 下载地址: https://dev.mysql.com/downloads/repo/apt 跳转到这个页面: 直接点击Download。 直接点击最下面的开始下载安装包即可。 二、将安装包下载到ubuntu系统中 先将用户切换成root用户,把下载好的安装包复制到桌面上&…

互联网简史-分久必合,合久必分

六一儿童节,给孩子们讲讲互联网的历史。 任何当代技术都是古老技术的重组,这是真的。我从电话网络开始,两幅图完事。电波可以承载语音作为最开始,后面的事自然而然: 说实话,网络这种事,它的 …

各大平台取消一年期免费SSL证书后,如何申请超长期免费SSL证书

一:为什么一定要用SSL证书 SSL证书是一种提供网络安全的协议,主要作用是提供对用户和服务器的认证以及确保传送的数据进行加密和隐藏,从而保证数据的完整性和安全性。网站安装SSL证书后就可以实现HTTPS访问,消除网站访问不安全提…

从0开始制作微信小程序

目录 前言 正文 需要事先准备的 需要事先掌握的 什么是uniapp 平台应用的分类方式 什么是TypeScript 创建项目 项目文件作用 源码地址 尾声 🔭 Hi,I’m Pleasure1234🌱 I’m currently learning Vue.js,SpringBoot,Computer Security and so on.&#x1…

一、大模型推理

https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md https://github.com/hiyouga/LLaMA-Factory/blob/main/examples/README_zh.md 安装 v7.1 https://github.com/hiyouga/LLaMA-Factory/releases/tag/v0.7.1 git clone --depth 1 https://github.com/hiyoug…

TS38.300中的切换流程(很一般)

本文根据3GPP R18 TS 38.300第9.2.3节整理 切换(Handover)是移动终端(UE)进入RRC_CONNECTED状态后在不同服务小区(Cell)之间保持与网络联系唯一手段,期间首先通过控制面(C-Plane)进行无线测量、切换协商及触发等;为此3GPP在TS38.300中定义如下。 RAN系统…