簡體   English   中英

如何使用 esp32 ulp 中斷脈沖計數器和周期性喚醒深度睡眠模式

[英]how to use esp32 ulp interrupt pulse counter and periodic wake up deepsleep mode

我正在嘗試使用 dds353 kWh 表測量用電量。 本表有脈沖 output。 我對使用 esp32 很感興趣,因為我可以通過互聯網定期將數據發送到節點儀表板。我也對在低功耗模式下使用 esp32 並定期喚醒以通過 mqtt 發送數據非常感興趣。 我已經使用 espressif idf 嘗試了github中的示例,但我不介意 arduino 等效項。 我想做硬件中斷,當其中一個 rtc gpio 引腳變高時,計數器會增加,而單獨的定時器中斷運行,偶爾會喚醒從 rtc 獲取數據並將其發送過來的主要 xtensia 內核。 我查看了脈沖計數器示例,但以我有限的知識無法判斷中斷是在 ulp 處於睡眠模式時觸發還是僅在開啟時觸發。 如果有人能告訴我如何基本使用 ulp 來計算脈沖,即使它處於睡眠模式並定期喚醒主內核,我真的會很高興。 我可以接受 IDF 或 arduino 示例

如果您想在深度睡眠時計算脈沖數,請使用 ULP。 當電路板喚醒並進入正常電源模式時,ULP 上的代碼會繼續執行。 因此,當它喚醒時,它仍會在 ULP 處理器上運行計數器,除非您停止 ULP 定期喚醒定時器,否則 ULP 將在主 CPU 處於活動狀態時繼續喚醒並運行。

正如您已經使用此示例檢查過的那樣,它應該非常接近您的需要。 唯一的區別似乎是該示例設置為在給定數量的脈沖后喚醒,而不是固定的時間量。 但是,通過啟用深度睡眠從定時器喚醒應該很容易改變這一點。
對於Arduino 你可以檢查
一些附加信息:
ULP 沒有 GPIO 中斷。 因此,您可以使用深度睡眠喚醒存根(深度睡眠后立即運行的一小段代碼,在將應用程序從 flash 加載到 RAM 之前),您可以增加脈沖計數器變量,並讓 go 再次睡眠。 通過這種方式,您可以在很短的時間內運行喚醒存根(約 13mA)時獲得脈沖之間的低功耗(~5uA)和適度的功耗。
因此,由您來試驗您的特定場景。

您可以使用 ESP32 中的脈沖計數器(PCNT)功能來計算背景中的脈沖數,通過使用相同的理解,您可以進行一些周期性喚醒並讀取計數.. 也可以在計數時配置事件達到一定的門檻,有很多選擇,

有關脈沖計數器 (PCNT) 的信息和可用接口和 API,請點擊以下鏈接, https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/pcnt.html

最初我遇到了很多問題,使脈沖計數器(PCNT)在 Adrino IDE 中為 ESP-32 工作,經過多次嘗試,我使它工作,並且相同的示例代碼上傳到 GitHub 以供參考。 我沒有使用官方文檔中的所有 API,但使用了其中的一些並且正在工作..

我已經為水流量計創建了示例程序,我們還使用它來獲取需要計數以測量水流量的脈沖,理解類似於 kWh 計。

GitHub 示例代碼路徑:- https://github.com/Embedded-Linux-Developement/Arduino_Sample_Programs/tree/main/ESP_32/Water_Flow_Pulse_counter_WithOut_Interrupt_Using_PCNT

我沒有將代碼放在這里,因為它在 GitHub 中,而不是直接用於提出的問題,而是類似於一個並且可以使用它。 它是我在硬件中測試的工作代碼。

希望它有幫助,問候,傑里詹姆斯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM