如何使用esp32 ulp中断脉冲计数器和定期唤醒深度睡眠模式

时间:2020-04-28 15:57:54

标签: arduino esp32

我正在尝试使用dds353 kWh电表测量电源使用情况。该仪表具有脉冲输出。我对使用esp32感兴趣,因为我可以定期通过Internet将数据发送到节点仪表板。我也对在低功耗模式下使用esp32并定期唤醒以通过mqtt发送数据非常感兴趣。我已经使用espressif idf从github中尝试了一些示例,但是我不介意与arduino等效。我想做一个硬件中断,当rtc gpio引脚之一变高时,计数器会增加,同时运行单独的计时器中断,并偶尔唤醒主要的xtensia内核,这些内核从rtc获取数据并将其发送出去。我查看了脉冲计数器示例,但由于我有限的知识,我无法确定当ulp处于睡眠模式时还是仅在其打开时才触发中断。如果有人能告诉我如何基本使用ulp对脉冲进行计数,即使它处于睡眠模式并定期唤醒主内核,我也将非常高兴。我可以使用IDF或arduino示例

1 个答案:

答案 0 :(得分:0)

如果要在深度睡眠时对脉冲进行计数,请使用ULP。当板卡唤醒并进入正常功耗模式时,ULP上的代码将继续执行。因此,当它苏醒时,它将继续在ULP处理器上运行计数器,除非您停止ULP定期唤醒定时器,否则在主CPU处于活动状态时,ULP将继续唤醒并运行。

正如您已经给过checked with this example一样,它应该非常接近您的需求。唯一的区别似乎是该示例设置为在给定数量的脉冲后而不是固定的时间后唤醒。但是,通过启用从计时器唤醒的深度睡眠,应该很容易对此进行更改。
对于Arduino you could check
一些其他信息:
ULP没有GPIO中断。因此,您可以使用深度睡眠唤醒存根(一小段代码,在深度睡眠之后立即运行,在将应用程序从闪存加载到RAM之前),您可以递增脉冲计数器变量,然后再次进入睡眠状态。这样,您可以在很短的时间内运行唤醒存根(大约13mA)时,获得脉冲之间的低功耗(〜5uA)和适度的功耗。
因此,您可以根据自己的具体情况进行试验。