Micropython——关于PICO中ADC和PWM结合起来的使用

1、什么是ADC?

ADC是一种将模拟信号转换成数字信号的电路,称为模数转换器(简称A/D转换器或ADC,Analog to Digital Converter),其作用是将时间连续、幅值也连续的模拟信号转换为时间离散、幅值也离散的数字信号。

2、ADC转换的基本原理?

其基本原理是将输入的模拟信号按照规定的时间间隔进行采样,并与一系列的标准电压进行比较,使其对应的二进制数值逐次收敛,直至输入电压与内部电压一致时为止,然后该输出代表该电压的二进制值。

3、常见ADC的分类?

逐次逼近型ADC:是逐个产生比较电压,逐次与输入电压分别比较,以逐渐逼近的方式进行模数转换的。

特点:速度中等,精度较高,较为常见。

并联比较型ADC:由于并联比较型ADC采用各量级同时并行比较,各位输出码也是同时并行产生,所以转换速度快是它的突出优点,同时转换速度与输出码位的多少无关。

缺点:成本高、功耗大。

优点:速度较快,精度较低,适用于高速、低分辨率的场合。


machine.ADC(id)    #为ADC对象构造函数,其作用为初始对应的ADC通道。id可以使用为GPIO对象,也可以使用ADC通道,当id使用为GPIO对象时,其所指定的GPIO对象需要支持ADC功能。

ADC.read_u16(id)     #读取对应的通道ADC数值。返回数值不是直接返回ADC读取的数值,而是经过处理的数值。返回的数值范围的0-65535


电压计算公式为:   V =  (3.3*ReadData)/65535

#这里我们所展示的效果是当电压高于1.4V时,Pico上的LED灯会点亮,电机停止转动。反之,则相反。


from machine import Pin,PWM,ADC
import utime

led = Pin(25,Pin.OUT)
motor = Pin(19,Pin.OUT)
p1 = PWM(motor)
adc_voltage = ADC(Pin(26))
temp = ADC(4)


def cw():
    led.value(1)
    p1.duty_u16(0)
def ccw():
    led.value(0)
    p1.duty_u16(65535)
def start(ratation):
    p1.freq(1000)
    if ratation <= 1.4:
        cw()
    elif ratation >1.4:
        ccw()
    
while True:
    read_voltage = adc_voltage.read_u16()*3.3/65535
    read_temp_voltage = temp.read_u16()*3.3/65535
    temperature = 27-(read_temp_voltage-0.706)/0.001721
    start(read_voltage)
    print("ADC voltage = {0:.3f}V \t\t temperature = {1:.3f}°C \r\n".format(read_voltage,temperature))
    utime.sleep(1)

posted @ 2022-03-26 12:22  Xa_L  阅读(435)  评论(0编辑  收藏  举报