QuecPython+ADC:ADC-模数转换+应用示例

ADC 原理和常见用法

模拟信号指在时域上数学形式为连续的信号,不同时间点位置的信号值是连续变化的。所传达的信息是连续变化的物理量,如温度、湿度、压力、长度、电流等等。不同的数据必须转换为相应的信号才能进行传输。
数字信号指自变量和因变量都是离散的信号,可以理解为在时域和幅值上都是离散的,不连续的。数字信号在计算机中以二进制的方式进行存储。

以一个工作电压为3.3V的处理器为例,其工作过程中始终伴随着要么是0V(逻辑0),要么是3.3V(逻辑1)的矩形波电信号。物理世界中一个电压为1V的电信号,是不能直接被CPU识别到的,其必须由一个叫做ADC的器件,将其转换为数字信号后,方能被CPU识别。
ADC全称Analog-to-Digital Converter,即模拟至数字信号转换器,作用是将物理世界中计算机无法直接识别的模拟信号,转换为能够识别的二进制数字信号。
ADC的基本工作原理是采样和量化。首先,ADC对模拟信号进行采样,即在一定的时间间隔内测量模拟信号的值。然后,采样的模拟信号被量化,即将连续的模拟信号离散化为一系列离散的数字值。这些数字值通常使用二进制表示。

ADC的分辨率表示其能够量化模拟信号的精度,它是指ADC能够表示的离散数值的数量。分辨率通常以位(bit)为单位表示,例如8位、10位、12位等。因此,一个8位的ADC可以将输入范围分成2的8次方(256)个不同的离散级别,而一个12位的ADC可以将输入范围分成2的12次方(4096)个离散级别。较高的分辨率意味着ADC可以更精确地量化模拟信号。
ADC的采样率是指在一秒钟内进行采样的次数。采样率越高,得到的离散数字信号对真实模拟信号波形的还原度越高。根据奈奎斯特采样定理,采样率至少是待测量信号最大频率的2倍,才可能保证采样后的波形不失真。在实际应用中,采样频率往往高达待采样信号最大频率的10倍甚至更大。

ADC的输入电压范围指的是它能够接受的模拟信号的电压范围。它通常以电压表示,例如0V至5V或-5V至+5V。确保输入信号不超过ADC的输入范围,以避免信号失真或损坏。
ADC的触发方式通常分软件触发和硬件触发,软件触发当设置开始转换时ADC会立即启动转换,硬件触发则需要等待指定的外部事件发生时ADC才会启动转换。ADC广泛应用于各种领域,如数据采集、传感器接口、音频处理、通信系统等。它们是将模拟信号转换为数字信号的关键组件,使得模拟信号能够与数字系统进行交互和处理。

各平台ADC说明

ADC通常位于PMU上,位于Analog IP中,PMU的典型结构图如下:

应用场景

光敏传感器

准备材料:Quectel EC600U模组,光敏电阻(如GL5528)

原理:光敏电阻的电阻值随着光照强度的变化而变化。当光敏电阻受到光照时,其电阻值下降;当光照减弱或完全没有光照时,其电阻值增加,从而影响测试点的电压值。通过读取ADC电压值来计算出光敏电阻的阻值,再根据光敏电阻的光照强度和阻值关系可以知道光照的强弱。

硬件连接:如下图进行连接。R2为光敏电阻,R1为10K,根据具体光敏电阻参数选择R1的值,ADC port为测试点,连接到模组的ADC管脚。

本例程通过打印ADC测量的电压值和光敏电阻的阻值来观察不同光亮对光敏电阻的影响。

from misc import ADC
import utime 
import _thread

# unit as kΩ
def Voltage_to_Resistance(Volt):
    resistance = (10 * Volt)/(1000 - Volt)
    return resistance

def Photoresistor_thread(delay, retryCount):
    	# creat a adc device
    	AdcDevice = ADC()
    	while retryCount:
            retryCount = retryCount - 1
            # get ADC.ADC0 value
            adcvalue = AdcDevice.read(ADC.ADC0)
            print("get ADC.ADC0 Voltage value as {0}mv".format(adcvalue))
            # Converted to resistance
            resistance = Voltage_to_Resistance(adcvalue)
            print("Photoresistor resistance as {0}Ω".format(resistance * 1000))
            utime.sleep(delay)
    	pass
    	
if __name__ == "__main__":
    	# creat a thread Convert ADC to Voltage
    	_thread.start_new_thread(Photoresistor_thread, (1, 10))
    	print("main thread has exit")

常见问题

ADC 电压范围

  1. 每个 ADC 接口引脚的输入电压不能超过其允许的电压范围,当被测电压大于输入电压范围时,先进行电阻分压缩小后再接入模组ADC管脚;
  2. 在模块 VBAT 不供电的情况下,为了避免损坏模组,ADC 接口不允许直接输入任何输入电压。

ADC位宽

ADC位宽指ADC转换结果以多少位数据表示,位宽越大分辨率越高,采集越精准,例如1V电压经过10位位宽的ADC转换,每一位表示1/1024V;模组ADC返回的是处理后的电压值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值