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

Arduino 如何使用esp32 ulp中断脉冲计数器和定期唤醒深度睡眠模式,arduino,esp32,Arduino,Esp32,我正在尝试使用dds353电度表测量用电量。这个仪表有脉冲输出。我对使用esp32感兴趣,因为我可以定期通过internet将数据发送到Nodeed dashboard。我还对在低功耗模式下使用esp32以及定期唤醒通过mqtt发送数据非常感兴趣。我已经尝试过使用espressif idf的例子,但我不介意使用arduino等效物。我想做硬件中断,当其中一个rtc gpio引脚变高时,计数器会递增,同时运行一个单独的计时器中断,偶尔会唤醒从rtc获取数据并发送过来的主要xtensia内核。我已经

我正在尝试使用dds353电度表测量用电量。这个仪表有脉冲输出。我对使用esp32感兴趣,因为我可以定期通过internet将数据发送到Nodeed dashboard。我还对在低功耗模式下使用esp32以及定期唤醒通过mqtt发送数据非常感兴趣。我已经尝试过使用espressif idf的例子,但我不介意使用arduino等效物。我想做硬件中断,当其中一个rtc gpio引脚变高时,计数器会递增,同时运行一个单独的计时器中断,偶尔会唤醒从rtc获取数据并发送过来的主要xtensia内核。我已经看过脉冲计数器的例子,仅凭我有限的知识,无法判断中断是在ulp处于睡眠模式时触发的,还是仅在ulp处于开启状态时触发的。如果有人能告诉我如何基本上使用ulp计算脉冲,即使是在睡眠模式下,也能定期唤醒主内核,我会非常高兴。我可以使用IDF或arduino示例

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

因为你已经付出了,它应该非常接近你所需要的。唯一的区别似乎是,示例设置为在给定数量的脉冲后醒来,而不是固定的时间量。但是,通过启用深度睡眠从计时器唤醒,应该很容易改变这一点。
对于
一些附加信息:
ULP没有GPIO中断。因此,您可以使用deep sleep wake stub(在深度睡眠之后,在将应用程序从闪存加载到RAM之前立即运行的一小段代码),增加pulse counter变量,然后再次进入睡眠状态。通过这种方式,在短时间内运行尾波存根(约13mA)时,可以在脉冲之间获得低功耗(~5uA)和中等功耗。

因此,这取决于您对特定场景的实验

非常感谢,我想澄清一下。唤醒存根函数在主内核上运行,对吗?我发现这个例子使用了尾流存根。如果我只是像使用ULP一样将深度睡眠和定时器唤醒与gpio中断结合使用,我是否仍能获得优异的低功耗性能?或者我仍然可以使用ULP进行定时唤醒,并像往常一样在主核心处理器上处理唤醒存根。我在这里的困惑是,哪个处理器应该做什么来确保最佳和稳定的性能。我在文中写下了每种方法的测量功耗,你必须为你的项目决定什么是可行的。如果超低功耗和计数器没有GPIO交互(仍然能够读取/计数脉冲),则使用ULP并仅在发送时唤醒。