ESP32(MicroPython) 两个ADC程序

  最近对ESP32的ADC功能进行了详细测试,下面提一下具体结果,并给出相应的两个程序。

  先提一下更早得出的一个结论:ADC通过定时器中断检测更准确。具体原理尚不明确。

  通过串口输出ADC检测结果速度较快。经测试,3ms输出一次可以正常输出而不会出现明显延时。要注意的是,输出速度快可能导致程序不能正常停止,因此尽量直接运行,不要烧录。

程序如下(为了提高速度,电压没有进行换算,也未对换算电压对输出速度的影响进行测试)

'''
接线: ADC-->(34)  
'''

#导入Pin模块
from machine import Pin
from machine import ADC
from machine import Timer

#定义ADC控制对象
adc=ADC(Pin(34))
adc.atten(ADC.ATTN_11DB)  #开启衰减,量程增大到3.3V

#定时器0中断函数
def time0_irq(time0):
    print(adc.read())
    
#程序入口
if __name__=="__main__":
    time0=Timer(0)  #创建time0定时器对象
    time0.init(period=3,mode=Timer.PERIODIC,callback=time0_irq)
    while True:
        pass

  之前提到过4路ADC不能正常运行的情况,经过详细测试,实际上是36引脚的ADC不能正常运行,可能是硬件故障或MicroPython库bug。33、32、35、34、39引脚可用。使用以上5路ADC每10ms输出一次可以正常输出。

程序如下(电压未换算)

#导入Pin模块
from machine import Pin
from machine import ADC
from machine import Timer

#定义ADC控制对象
adc1=ADC(Pin(32))
adc1.atten(ADC.ATTN_11DB)  #开启衰减,量程增大到3.3V
adc2=ADC(Pin(33))
adc2.atten(ADC.ATTN_11DB)  #开启衰减,量程增大到3.3V
adc3=ADC(Pin(34))
adc3.atten(ADC.ATTN_11DB)  #开启衰减,量程增大到3.3V
adc4=ADC(Pin(35))
adc4.atten(ADC.ATTN_11DB)  #开启衰减,量程增大到3.3V
adc5=ADC(Pin(39))
adc5.atten(ADC.ATTN_11DB)  #开启衰减,量程增大到3.3V

#定时器0中断函数
def time0_irq(time0):
    print(adc1.read(),adc2.read(),adc3.read(),adc4.read(),adc5.read())
    
#程序入口
if __name__=="__main__":
    time0=Timer(0)  #创建time0定时器对象
    time0.init(period=10,mode=Timer.PERIODIC,callback=time0_irq)
    while True:
        pass

你可能感兴趣的:(ESP32,嵌入式硬件,单片机,python)