DAC 數模轉換器¶
概要¶
本文講解了ESP32中的DAC資源的使用
keywords dac micropython-esp32
DAC是什么¶
DAC 英文全稱為Digital Analog Converter,是將數字信號轉換為模擬信號的轉換器。 這里主要對比DAC與PWM,DAC輸出的是模擬信號,PWM輸出的是數字信號。 DAC也可以控制LED亮度,而且亮度范圍更精細,因為DAC的輸出電壓是連續可變的,DAC控制LED也不存在PWM控制LED亮度那樣的頻閃問題,DAC可以實現比PWM更高精度的控制。另外PWM可以通過濾波器實現低精度的DAC功能。
DAC-常用API¶
DAC硬件資源¶
DAC在專用引腳上可用,可用的DAC引腳只有兩個。 可用引腳有:GPIO25, GPIO26,輸出的電壓模擬值范圍為0~3.3V
導入DAC類¶
導入DAC類與Pin類
from machine import DAC,Pin
DAC構造器¶
創建一個DAC的管腳Pin對象(聲明為輸出),然后傳入到DAC的構造器里面
dac_pin = Pin(26, Pin.OUT) dac = DAC(dac_pin)
ESP32的DAC分辨率只有8位,在MicroPython固件中12位的精度還未實現。
dac = DAC(Pin(26))
默認bits=8
,則dac的數值范圍為0-255
實際輸出電壓值為0-3.3v
,數值范圍映射到電壓范圍上。
DAC輸出¶
DAC輸出使用write
函數。 根據bits
的不同,寫入value
值的范圍也不同。
dac.write(value)
DAC資源的釋放¶
dac.deinit()
DAC實現呼吸燈效果¶
由于DAC只支持25,26兩個引腳,所以我們就無法繼續使用板載的藍色LED了,所以筆者使用了一個新的led模塊來演示以下的示例:
from machine import DAC from machine import Pin import utime, math dac = DAC(Pin(26,Pin.OUT), bits=12) def pulse(dac, period, gears): """呼吸燈函數 Arguments: dac {[DAC]} -- [DAC對象] period {[type]} -- [周期 ms] gears {[type]} -- [亮度檔位] """ for i in range(2 * gears): dac.write(int(math.sin(i / gears * math.pi) * 2000) + 2048) # 延時 utime.sleep_ms(int(period / (2 * gears))) # 呼吸十次 for i in range(10): pulse(dac, 2000, 100)
思考題¶
為什么不對比對比DAC和PWM這兩種方式實現的呼吸燈的效果有什么區別呢?
試著寫寫代碼,比較比較吧。