概述
2019/2/21
现在单片机 STM32L151C8U6A+5311NB模块的电流 是 40uA左右
加速度 传感器的电流是 60uA左右,所以加起来差不多到100多uA了。
/** I2C Device Address 8 bit format if SA0=0 -> 0x31 if SA0=1 -> 0x33 **/
#define IIS328DQ_I2C_ADD 0x33
/** I2C Device Address 8 bit format if SA0=0 -> 0x31 if SA0=1 -> 0x33 **/
#define IIS328DQ_I2C_ADD 0x33
//以上这个引脚的电平是用于选择I2C器件地址的,如果为高 那么地址为 0x33 如果为低那么地址为0x31
//但是实际测试 知道 器件内部默认上拉了,如果外部还去下拉的话就会增加电流消耗,所以这个由于项目需要不
//能接下拉电阻,这个时候 传感器 IIS328DQ的功耗差不多在1Hz采集时候是10uA
上图当中注意 SA0不应该拉低,图上是错误的
现在程序将 功耗在100多uA-20多uA之间跳(这是由传感器的采集时候的功耗会上升,如果降低采集频率相应的功耗也会跳变的慢一些)。
在整个程序调试的过程当中 逻辑和功耗都出现了不少问题。这也是一些宝贵经验。单片机不管是软件还是硬件都很重要,有时候你明明觉得不是自己的问题,但是死后就是找不到原因。需要转换思路从多方面分析问题,一点点排查。
下面说一说此次项目的经历:
应用场景;消防栓塞帽。我们知道有时候户外的消防栓很多时候由于监管不及时,分散等原因。在出现故障,(例如被撞倒、被人为拧开、)很难即使发现,物联网出现很好的解决了这一问题。通过在消防栓上加装传感器和通信模块可以实现对消防栓状态的实时监控。防止意外事故的发生。废话说到这,下面谈一谈项目经历
首先说 NB模块 5311 的开发流程:
1.供电
void MY_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB, ENABLE);
//====================== 默认端口 ==================================
//PB5 用于A9500 开机
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1| GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
// GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//PA1 用于A9500 供电
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_12 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
// GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
上面这一段是初始化我的 开机脚和pwerkey脚,
供电:我们的控制电路利用单片机上啦相关引脚给模块供电
#define LS_7030_PWH (GPIO_SetBits(GPIOA, GPIO_Pin_1))
void NB_GONGdian(void)
{
LS_7030_PWH;
sysdelay(2000000);
}
2开机
开机是给NB模块的pwerkey 脚一个低电平脉冲
void NBM5311_start(void)
{
LS_7030_KEYH;
sysdelay(2000000);
LS_7030_KEYL;
sysdelay(2000000);
}
3 参数配置包括:
#define A9500_CLEAR_RECEIVE Usart2_Clear()
void Usart2_Clear(void)
{
memset(UART2_RX_BUF, '