2024-10-10 12:18
132 次阅读|
0 个评论
01 概述 掉电检测和保护电路:就是对系统电压进行监测,当系统电压值下降到低压警戒值时,电路会发现并做出反应,发出一个警告信号,处理器接收到警告信号之后马上进行数据保存等操作,防止系统数据丢失。 在物联网行业中,大多数设备都需要联网,和服务器进行通信。那么掉电瞬间,如何让主控芯片有一定的时间将报警信息通过网络发送给服务器? 02 什么是超级电容 超级电容又叫法拉电容,超级电容的容量比普通的电容器大得多。由于其容量很大,对外表现和电池相同,因此也有称作“电容电池”。超级电容属于双电层电容器,它是世界上已投入量产的双电层电容器中容量最大的一种,其基本原理和其他种类的双电层电容器一样,都是利用活性炭多孔电极和电解质组成的双电层结构获得超大的容量。 03 超级电容的特点 (1)充电速度快,充电10s~10min可达到其额定容量的95%以上; (2)循环使用寿命长,深度充放电循环使用次数可达50万次,没有记忆效应; (3)大电流放电能力超强,能量转换效率高,过程损失小,大电流能量循环效率:90%; (4)功率密度高,可达300W/kkg-5000 Wkg,相当于电池的5-10倍; (5)产品原材料构成、生产、使用、储存以及拆解过程均没有污染,是理想的绿色环保电源; (6)充放电线路简单,无需充电电池那样的充电电路,安全系数高,长期使用免维护; (7)超低温特性好,温度范围宽达-40℃-+70℃; (8)检测方便,剩余电量可直接读出; (9)单体容量范围通常在0.1F~1000F。 04 掉电检测 掉电检测采用简单的电阻分压,用于检测系统电压,一旦外部电压低于系统设定的最低电压值,掉电检测信号就会产生一个中断信号,从而使能掉电报警。这里需要注意的是分压电阻尽量选大一点,以减少漏电流,本文选择的是200 kQ\100k2。 在掉电瞬间,超级电容依然可以在一定时间内给系统提供电源,主控芯片检测到中断后,立即停止当前工作,上报报警信息给服务器。 05 组件的使用 1 Gitee链接地址 Demo位于amaziot_bloom_os_sdk\sample\libraries\8.2_power_alarm Gitee源码地址:https://gitee.com/ning./hongdou Github源码地址:https://github.com/ayumid/hongdou 编译指令:.\build.bat -l .\amaziot_bloom_os_sdk\sample\libraries\8.2_power_alarm 2 组件功能介绍 本组件实际为GPIO输入检测,应用于空开等设备,当需要断电报警时,使用这个组件。实现该功能需要硬件上做一些处理(增加超级电容,保证断电后设备还可以检测到断电,之后上报到服务器)。 3 代码讲解 1 lib_power_alarm_irq_handler_alarm 功能:该函数用于,产生hisr。在gpio初始化是注册到gpio结构体中。 参数:无 返回值:无 示例: config.isr = lib_power_alarm_irq_handler_alarm; 2 lib_power_outage_alarm_handler 功能:该函数用于,gpio中断回调函数,启动搞一个定时器,去抖用。 参数:无 返回值:无 示例: Os_Create_HISR(&ty_sw_alarm_hisr_alarm, "Gpio_Hisr", lib_power_outage_alarm_handler, 2); 3 lib_power_outage_alarm_cbk 功能:该函数用于,定时器回调函数,去抖完毕。 参数:无 返回值:无 示例: OSATimerStart(ty_sw_alarm_ref_alarm, 40, 0, lib_power_outage_alarm_cbk, 0); 4 lib_power_outage_alarm_init 功能:该函数用于,断电报警初始化。 参数:无 返回值:无 示例: lib_power_outage_alarm_init(); 4 Demo实战 4.1 创建一个Demo 复制3.2-inter_at示例工程,到同一个文件夹下,修改文件名为8.2_power_alarm,如图: 4.2 修改makefile 增加文件组件所在目录头文件路径,和源文件路径,如图: 4.3 增加头文件 使用代码编辑器,将新建的工程文件加入代码编辑器中,打开main.c,修改main.c,加入am.h等头文件,如图: 4.4 修改代码 在Phase2Inits_exit 创建一个任务,如图: 4.5 宏定义介绍 sample_power_alarm_uart_printf 输出日志到DEBUG 串口,日志比较少,可以输出到这个串口,如果日志比较多,需要输出到usb口,以免不必要的问题出现 sample_power_alarm_catstudio_printf 输出日志到USB 串口,使用catstudio查看,catstudio查看日志需要更新对应版本mdb.txt文件,软件打开filtter过滤日志,只查看用户输出的日志 SAMPLE_GPIO_TASK_STACK_SIZE 栈空间宏定义 4.6 全局变量介绍 sample_gpio_task_stack 任务栈空间,本例使用动态内存实现,用户在做项目时,可以预先估算下当先任务需要的大致栈空间,OS没有提供可以查看栈空间使用情况的API sample_gpio_task_ref 任务指针 4.7 函数介绍 Phase1Inits_enter 底层初始化,本例空 Phase1Inits_exit 底层初始化,本例空 Phase2Inits_enter 底层初始化,本例空 Phase2Inits_exit 创建主任务,初始化消息队列,定时器,任务等。 代码片段: int ret; OS_STATUS status; /*creat message*/ status = OSAMsgQCreate(&am_ty_sw_alarm_msgq, "am_ty_sw_alarm_msgq", SAMPLE_MSGQ_TASK_MSGQ_MSG_SIZE, SAMPLE_MSGQ_TASK_MSGQ_QUEUE_SIZE, OS_FIFO); ASSERT(status == OS_SUCCESS); ret = OSATaskCreate(&sample_gpio_task_ref, sample_gpio_task_stack, SAMPLE_GPIO_TASK_STACK_SIZE, 120, "sample_gpio_task_gpio", sample_gpio_task_gpio, NULL); ASSERT(ret == OS_SUCCESS); sample_power_alarm_uart_printf("Phase2Inits_exit\n"); app_ty_sw_send_msgq 消息队列发送。 代码片段: data); } ret = -1; } return ret; sample_gpio_task_gpio 主任务,接收报警信号,并通过串口输出信息,使用时可以根据需求执行相应操作。 代码片段: OS_STATUS status; app_ty_sw_msgq_msg sdkMsg = {0}; lib_power_outage_alarm_init(); while(1) { status = OSAMsgQRecv(am_ty_sw_alarm_msgq, (void *)&sdkMsg, SAMPLE_MSGQ_TASK_MSGQ_MSG_SIZE, OSA_SUSPEND); if (status == OS_SUCCESS) { sample_power_alarm_uart_printf("%s: sdkMsg msgId: %d\n", __FUNCTION__, sdkMsg.msgId); } if (sdkMsg.data) free(sdkMsg.data); } 4.8 编译 在SDK根目录打开命令行,输入命令.\build.bat -l .\amaziot_bloom_os_sdk\sample\libraries\8.2_power_alarm\ 1.270(MB)| |------------------------------------------------------------------------------------| cp_1606L.axf cp_1606L.bin cp_1606L.map gnumake: Leaving directory `F:/3.asr-b/cat.1-asr1606/1.software/BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF/amaziot_bloom_os_sdk/sample/libraries/8.2_power_alarm' "copy NEZHAC_CP_CNR_MIFI_TX.bin to ./ " 已复制 1 个文件。 4.9 生成固件 参考入门中开发工具,生成工具。 4.10 测试 测试步骤: 参考编译教程,和文档开头的编译指令,进行编译 按照编译教程选择对应的选项 烧录 4.11 固件 上电后,debug串口会打印出计算出的数据; 本文章源自奇迹物联开源的物联网应用知识库Cellular IoT Wiki,更多技术干货欢迎关注收藏Wiki: Cellular IoT Wiki 知识库(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf) 注:本文部分内容来源于网络,如有侵权,请及时联系我们。