跳至内容
用户工具
登录
站点工具
搜索
工具
显示页面
修订记录
反向链接
最近更改
媒体管理器
网站地图
登录
>
最近更改
媒体管理器
网站地图
您在这里:
start
»
micropython
»
开发板
»
rpipico
»
demo
»
使用_pio_获取更多_sigma_delta_adc输入
您的足迹:
micropython:开发板:rpipico:demo:使用_pio_获取更多_sigma_delta_adc输入
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
来自:https://forum.micropython.org/viewtopic.php?t=9839&p=55065#p55065 PRP2040上的ADC输入通道比较少,下面的方法可以为提供更多的ADC通道,每个通道需要2个引脚,2个电阻和2个电容。 {{:micropython:开发板:rpipico:demo:pico_sigma_delta_adc.jpg?600|}} 两个电容的电荷由通过输入电阻R2和反馈电阻R1的电流平衡。PIO尝试将输入引脚上的电压保持在其低/高阈值之间。如果使用合适的输入电阻,则可以测量更高和更低的电压。 <code python> title= "pioAdcB" # by CWE # Adc sigma delta type from machine import Pin from rp2 import PIO, StateMachine, asm_pio from time import sleep maxTime=1_000_000 @asm_pio(sideset_init=PIO.OUT_LOW) def cap_prog(): mov(y, osr) # OSR must be preloaded with max mov(x, osr) label("test_pin") # jmp(pin, "is_set") jmp(y_dec, "not_set") # just count it 1 label("not_set") #nop() .side(1) jmp(x_dec,"test_pin") .side(1) # 2 jmp("save_result") label("is_set") # nop() .side(0) nop() # 1 jmp(x_dec,"test_pin") .side(0) #2 label("save_result") mov(isr, y) #.side(0) # save result; pin low push(noblock) class PIOCAP: def __init__(self, sm_id, outPin, inPin, max_count, count_freq): self._sm = StateMachine(sm_id, cap_prog, freq=2 * count_freq, sideset_base=Pin(outPin), jmp_pin=Pin(inPin,Pin.IN)) # Use exec() to load max count into ISR self._sm.put(max_count) self._sm.exec("pull()") #self._sm.exec("mov(isr, osr)") self._sm.active(1) self._max_count = max_count def getCap(self): #self._sm.exec("push()") return self._sm.get() cap = PIOCAP(0, 22, 17, max_count=(maxTime), count_freq=50_000_000) mittel=0 while True: onTime= maxTime-cap.getCap() mittel=(9*mittel+onTime)/10 #print(onTime, mittel, (onTime/maxTime)) print(onTime, 7.309-1.4369e-5*onTime) sleep(0.1) </code>
purge
随机主题
micropython/开发板/rpipico/demo/使用_pio_获取更多_sigma_delta_adc输入.txt
· 最后更改: 2021/02/28 23:13 (外部编辑) · 查看次数: 14531
页面工具
显示页面
修订记录
反向链接
回到顶部