项目总结——NB-IOT烟感报警器
一、概述
最近做了一个烟雾报警的项目,其中碰到一些问题,总结起来
二、项目介绍
项目主要包含stm8L151G6单片机,烟感检测,红外检测,蜂鸣器,LED,NB-IOT模块,烟感检测采用红外对管,红外对管并不是直接对射,而是通过烟雾漫反射来检测。这个项目主要在于低功耗。
三、问题汇总
1、唤醒问题
为了实现功耗,单片机采用RTC唤醒,在设置这个RTC寄存器的时候碰到幻想不了的问题,最后发现是有个寄存器设置顺序的问题。如下
T_S32 DRIVER_RTC_Open(T_VOID)
{
memset(&g_RtcCtl, 0, sizeof(g_RtcCtl));
g_RtcCtl.u32WakeInt = RTC_DEFAULT_WAKE_INT;
///*
CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);
CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1);
RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); //32768/16 = 2048
RTC_SetWakeUpCounter(2048 * g_RtcCtl.u32WakeInt); //这个要放在开中断前
//*/
/*
CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);
CLK_RTCClockConfig(CLK_RTCCLKSource_HSE, CLK_RTCCLKDiv_64); //250000
RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); //250000/16 = 15625
RTC_SetWakeUpCounter(15625);
*/
RTC_ITConfig(RTC_IT_WUT, ENABLE);
RTC_WakeUpCmd(ENABLE);
return RET_SUCCESS;
}
2、stm8 串口在唤醒后乱码
我主频本来是采用HSE的,但是在唤醒后,本来好的串口发送有问题。后来我把主频改成HSI就好了,这里具体什么原因还没分析清楚,后面再来看
3、NB-IOT模块
我们采用的m5310 的NB-IOT模块,模块在入网之后的电流还是挺小的只有3ua
4、串口
进入休眠时可以采取将串口置成输入口来降低功耗
5、报警
在蜂鸣器报警的时候,电流可能很大,这时候可能会影响通信芯片 的稳定性,所以看需要在通信模块电源旁边加上一个大点的电容
6、入网
对通信来说,一般都会存在入不了网的情况,所以需要一个比较合理的入网及检查过程来判断网络情况。
7、红外功耗
板子的功耗由两部分组成,1是静态功耗,2是间隔检测红外的功耗。我们本来板子静态功耗挺低的,只有4.7ua。整体平均功耗由200多ua,而泛海三江的只有16ua.。后来发现是我们的红外管打开时间过长,泛海三江的只打开100us。而我们的有10几ms。这里我程序其实打开时间很短的,但用示波器测就是有10几毫秒。后来发现是驱动电路有问题,我们采用MOS管控制红外的电源,这里会导致延时。
所以需要都改成三极管控制
8、NB IOT卡
nb模块实现低功耗是根据卡的接入点不同来设置的,不同的卡功耗会不一样,这里在买卡的时候要注意
9、弹簧天线
弹簧天线需要套热缩管,这样性能会更好