IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ESP32学习:AD/DA数模转换 -> 正文阅读

[嵌入式]ESP32学习:AD/DA数模转换

一、概念介绍:

1.数字信号和模拟信号:

? ? ? ? ?在显示生活中,我们经常遇到的如温度、压力、图像等都是模拟量,电子线路中的模拟电压和模拟电流等也都是模拟信号,它是一种连续变化的信号。而数字信号,通常我们无法看到,它通常存储在芯片内,如单片机、计算机、硬盘等。数字信号是离散的信号。

特点幅度变化信号传输方式保密性抗干扰能力处理和存储信号难易
模拟信号在时间上和数值上都是连续变化的信号幅度的取值是连续的用模拟量的电压或电流来表示保密性差,通信信号很容易被窃听弱,很容易受到干扰
数字信号在时间上和数值上不连续变化的信号幅度的取值是离散的通过0和1的数字串所构成的数字流数字信号保密性较强,可加密-传输-解密再变换还原成模拟信号抗干扰能力强简单

?2.数字信号和模拟信号相互转换的示例

? ? ? ? ?上图是一个打电话的过程,首先,我们通过手机内部的ADC将声音信号(模拟信号)转化为数字信号,然后通过天线将数字信号转换出去,对方手机接收到我们的数字信号之后,通过DAC转换为模拟信号(声音),双方就可以通话了。

? ? ? ? 下图为AD/DA相互转换的示意:

3. 模拟信号转数字信号:

  • 最低有效位(Least Significant Bit)LSB?: 表示ADC芯片最小的一位所代表的模拟量的数值。

?步骤:

  1. 采样:在时间轴上对信号数字化。按照固定的时间间隔抽取模拟信号的值,采样后就可以使一个时间连续的信号波变为在时间上取值数目有限的离散信号。
  2. 保持
  3. 量化
  4. 编码

奈奎斯特采样定理:采样频率fs.max大于或等于有效信号最高频率fmax的两倍,采样值就可以包含原始信号的所有信号,被采样信号就可以不失真的还原成原始信号。

混叠效应:不同的信号频率在相同的采样频率下,可以得到相同的采样波形。

? ? ? ? ?上图1为原始信号,但是,在混叠效应之下,根据采样点还原原始信号,可以有多种不同频率的信号(如图2)。因此AD转换时需要添加一个抗混叠滤波器,将一些高频谐波干扰杂波过滤掉。只采样需要的波形。

3.1 采样

采样过程示例

?3.2 量化

? ? ? ? 上图为一个三位的ADC,即其所能能表示的分辨率位2的3次方,从000~111

  • 分辨率:ADC的分辨率指的是对于允许范围内的模拟信号,它能输出离散数字信号值的个数。例如,12位的ADC分辨率即为12位,或者说分辨率为满刻度的1/(2^12)。一个10V满刻度的12位ADC能分辨输入电压变化最小值为:

10V? X? 1/(2^12) = 2.4mV

  • ?转换误差:转换误差通常是以输出误差的最大值形式给出。表示A/D转换器实际输出的数字量和理论上输出的数字量之间的差别。
  • ?转换速率:ADC的转换指的是每秒转换的次数

?4 ADC转换方式

?4.1 逐次逼近:

4.2 双积分式ADC?

二、ESP32 模数转换

? ? ? ? ?ESP32集成了两个12位SAR(逐次逼近寄存器)的ADC,并支持18通道(支持模拟的引脚)的测量。

? ? ? ? ADC驱动器API支持ADC1(8个通道,连接到GPIO 32-39)和ADC2(10个通道,连接到GPIO 0、2、4、12-15和25-27)。但是,ADC2的使用对应用程序有一些限制:

  • Wi-Fi驱动程序使用了ADC2。因此,应用程序只能在未启动Wi-Fi驱动程序时使用ADC2。
  • 在一些开发板中ADC2引脚用作捆绑引脚(GPIO 0、2、15),因此不能自由使用。例如GPIO0:用于选择运行方式

?ADC配置:

  1. 精度设置:
    typedef enum {
        ADC_WIDTH_BIT_9  = 0, /*!< ADC capture width is 9Bit*/
        ADC_WIDTH_BIT_10 = 1, /*!< ADC capture width is 10Bit*/
        ADC_WIDTH_BIT_11 = 2, /*!< ADC capture width is 11Bit*/
        ADC_WIDTH_BIT_12 = 3, /*!< ADC capture width is 12Bit*/
        ADC_WIDTH_MAX,
    } adc_bits_width_t;
    
    

    ESP32内置12位ADC,可以在9位到12位的精度之间调整。

  2. 衰减倍数:
    typedef enum {
        ADC_ATTEN_DB_0   = 0,  /*!<The input voltage of ADC will be reduced to about 1/1 */
        ADC_ATTEN_DB_2_5 = 1,  /*!<The input voltage of ADC will be reduced to about 1/1.34 */
        ADC_ATTEN_DB_6   = 2,  /*!<The input voltage of ADC will be reduced to about 1/2 */
        ADC_ATTEN_DB_11  = 3,  /*!<The input voltage of ADC will be reduced to about 1/3.6*/
        ADC_ATTEN_MAX,
    } adc_atten_t;
    

    不同的衰减倍数对应不同的检测电压范围

三、程序编写

void adc_Init(){
	adc1_config_width(ADC_WIDTH_12Bit); //设置为12位的ADC 2^12=4096
	//设置ADC1通道6,参考电压为1.1V
	adc1_config_channel_atten(ADC1_CHANNEL_6 ,ADC_ATTEN_11db);
}


void app_main(void){
    adc_Init();
	int read_raw; //ADC值
	while(1)
    {
      read_raw=adc1_get_raw(ADC1_CHANNEL_6); //采集ADC1 6通道的ADC值
      printf("adc=%d,%dmv\r\n",read_raw, (read_raw*1100)/4096); //ADC值以及mV计算
      vTaskDelay(1000/portTICK_PERIOD_MS);
    }
}

四、结束

? ? ? ? 本文介绍了ADC模数转换的一些基本内容,并编写程序实现ESP32模数转换功能。

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:21:45  更:2021-12-26 22:23:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:21:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码