1.配置PYB内部ADC
2.配置PYB内部DAC(这里由于NANO没有DAC这里就不贴出代码操作了)
1.putty
2.pyb nano
ADC (模拟信号转换为数字量)是嵌入式中最常用的功能之一,在MicroPython 同样也提供了相应的函数,可以直接读取 ADC 转换的结果。在pyboard中,我们需要先导入ADC模块,再指定一个ADC使用的GPIO,然后就可以读取指定GPIO上ADC转换的结果了:
from pyb import ADC
v = ADC(Pin.cpu.A0) #定义ADC对象
v.read() #读取ADC结果
通过read()函数读取的ADC结果是12位的,数值范围为0~4095。
这个方法非常简单,但是不够灵活,不能设置 ADC 转换的参数。因此在pyboard 中,还另外提供了一种使用 ADC 的方法,它先用ADCAll 函数设置ADC的转换位数,然后read_channel()函数读取指定通道的ADC转换结果。
from pyb import ADCAll
adc = pyb.ADCAll(12) #可以设置8/10/12
adc.read_channel(0) #读取通道0 PA0
adc.read_channel(2) #读取通道2 PA2
pyb.ADCAll()函数会影响所有的ADC端口,因此这两种ADC的方法不要混合使用。
在不需要高精度ADC时,可以通过降低ADC的位数来提高转换速度,还可以通过pyb.ADCALLL()读取内部传感器。上面介绍的第二种ADC方法还有一个优点,就是可以读取芯片内部的温度传感器、vbat电压和基准电压等参数。
read_core_temp -- <function>
read_core_vbat -- <function>
read_core_vref -- <function>
read_vref -- <function>
注意读取内部传感器时,尽量将ADC位数设置高一些,这样转换结果的误差才比较小。
pyb.ADC(pin):通过GPIO定义一个ADC
pyb.ADCAll(resolution):定义ADC的分辨率,可以设置为8/10/12
==adc.read()==读取adc的值,返回值与adc分辨率有关,8位最大255,10位最大1023,12位最大4095
adc.read_channel(channel):读取指定adc通道的值
adc.read_core_temp():读取内部温度传感器
adc.read_core_vbat():读取vbat电压
vback = adc.read_core_vbat() * 1.21 / adc.read_core_vref()
adc.read_core_vref():读取vref电压(1.21V参考)
3V3 = 3.3 * 1.21 / adc.read_core_vref()
adc.read_timed(buf, timer):以指定频率读取adc参数到buf
buf,缓冲区 timer,频率(Hz)
注:使用这个函数会将ADC的结果限制到8位,这个函数是阻塞式的,会延时 len(buf)/timer