<button id="ssm6u"><optgroup id="ssm6u"></optgroup></button>
  • 跳轉至

    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這兩種方式實現的呼吸燈的效果有什么區別呢?

    試著寫寫代碼,比較比較吧。


    韩国精品无码一区二区三区,精品无码一区二区三区AV,欧洲丰满美熟女乱又伦AV,亚洲午夜久久久影院伊人