打印
[DemoCode下载]

LPADC 数据超标唤醒MCU

[复制链接]
673|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuotuzi|  楼主 | 2024-8-21 15:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pad, dc, MCU, ADC, AD
M2L31系列的MCU在休眠状态下LPADC自主工作、定期采样,并且每次与设定阈值比较,若数值超标就唤醒MCU,否则不唤醒MCU。

M2L31有一些外设在MCU休眠状态仍可保持工作,如LPTimer、LPADC和LPUART等。本例程配置LPTimer周期性的触发LPADC启动转换,转换结果若超标就唤醒MCU、代码处理后续事情;转换结果若不超标,MCU保持休眠状态。此代码实现了在最低功耗下保持对传感器的监测。

配置M2L31的LPTIMER为周期计数模式,在NPD4休眠模式保持工作,溢出时触发LPADC启动转换。
配置M2L31的LPADC在NPD4休眠模式保持工作,并LPADC数据每次与指定阈值比较,超标就唤醒NPD4模式下的MCU。


如果LPADC数据超过指定值(代码中是2048),MCU被唤醒,PC14上的红色LED会闪一下,然后MCU再次进入NPD4休眠模式。LPADC数据不超标LED不会闪。
可将LPADC输入引脚PB2连到VDD或地,观察红色LED是否闪烁,或用示波器测量LED控制引脚PC14的波形,验证代码执行正常。可用微安表测量LED不闪时MCU的电流。


使用特权

评论回复
沙发
zhuotuzi|  楼主 | 2024-8-21 15:38 | 只看该作者
为进一步降低功耗,CPU时钟使用MIRC并配置为1 MHz,LPTimer0和LPADC的时钟也使用MIRC。
LPADC的初始化代码如下,前三句配置LPADC单端模式,由LPTimer0触发启动转换。中间两句配置LPADC的数值比较器,数值超过0x800后唤醒MCU。最后两句使能中断。

LPADC如果被唤醒,还需要把唤醒标志清 0,才能再次进入休眠模式。此代码在中断里。

Main函数里配置完时钟和引脚,配置了LPTimer0,修改LPTimer0计数值就可改变LPADC的数据流快慢,最后LED闪两下,表明代码在执行了,后面LPADC数据若不超标LED就不会再亮。

使用特权

评论回复
板凳
zhuotuzi|  楼主 | 2024-8-21 15:40 | 只看该作者

主循环里让MCU进入休眠,若被唤醒就让LED亮20us,能目测到一点亮光,示波器能测到波形。

将 PB2连到VDD,红色LED会因LPADC数据超标连续闪烁,PB2接地LED不会闪。

使用特权

评论回复
地板
zhuotuzi|  楼主 | 2024-8-21 15:40 | 只看该作者
en-us--EC_M2L31_LPADC_ResultMonitor_Wakeup_NPD4_V1.00.zip (1.54 MB)
最后奉上代码和工程等相关文件。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

185

主题

3239

帖子

7

粉丝