ESP32学习:ADDA数模转换

ESP32学习:ADDA数模转换
⼀、概念介绍:
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模数转换功能。

本文发布于:2024-09-25 14:24:24,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/145893.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:信号   采样   数字信号   电压   转换
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议