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模数转换功能。

 

  • 0
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在烧录固件时出现的错误"PermissionError: [Errno 13] Permission denied: '/dev/ttyUSB0'"是由于对于USB设备的访问权限不足所导致的。为了解决这个问题,有两种方法可以尝试。 方法一是在程序的终端中输入以下指令来解决本次使用中USB连接不上的问题: 1、在终端中输入:sudo chmod -R 777 /dev/ttyUSB0 这条指令将会为/dev/ttyUSB0设备分配更高的访问权限。 方法二是采取永久性方案来解决这个问题: 1、在终端中输入:sudo usermod -aG dialout [用户名] 将[用户名]替换为你的用户名,这条指令将会将你的用户添加到dialout组中。 2、重启系统,这样更改才能生效。 这两种方法都可以解决esp32 idf PermissionError: [Errno 13] Permission denied: '/dev/ttyUSB0'的问题。同时,请确保在程序运行的终端中输入指令,而不是Linux系统的终端。这样才能使更改生效。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ESP32 学习笔记【1】:Ubuntu+linux+VScode+ESP-IDF+ESP32-WROOM-32+固件烧录+USB连接错误](https://blog.csdn.net/qq_44133335/article/details/117658560)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【问题解决】ESP32报错:could not open port /dev/ttyUSB0: [Errno 13] Permission denied: ‘/dev/ttyUSB...](https://blog.csdn.net/p1279030826/article/details/111691205)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [esp32-idf-sqlite3:用于esp-idf(esp32)框架SQLite库](https://download.csdn.net/download/weixin_42124743/18466824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值