PYB操作-ADC操作

學習內容

1.配置PYB內部ADC
2.配置PYB內部DAC(這裏由於NANO沒有DAC這裏就不貼出代碼操作了)

開發環境

1.putty
2.pyb nano

ADC模數轉換

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章