由于需要弄智能井盖,采集甲烷CH4传感器及水位信息等,通过蓝牙手机APP及4G模块将数据发送至服务器,采用电池远端供电 ,要求2200mA电池使用达三年之久,所以,功耗就是越低越好,最开始由于硬件设计的从12V降低至5V,再从5V降低至3.3V的DCDC原因,引起单片机处的电流倒灌,怎么都无法降低至10mA以下,通过逐级拆卸,找到问题症结并解决,有以下几个关键点是需要注意的:
1.低功耗一定在设计之初考虑硬件,没有硬件的配合,再如何调试软件都是白塔的;(最初弄STM8的低功耗也是)
比如采集电池电压的分压电阻,越大越好,最好达到M级,包含DCDC的反馈电阻网络、P沟道的上拉电阻等等;
2.ADC是最耗电的,尤其需要关注与禁用;
3.STM32F103如果需要采用内部LSE的低功耗,就必须其RTC引脚供电与32.768K晶振设计上,否则无效;
4.低功耗一定要仔细阅读STM32的DATASHEET,将不用的GPIO口线都浮空(非上下拉),其他根据需要浮空;
5.最关键是:你可以测量GPIO在低功耗期间,对应的电阻是否在耗电,如果没有电位差,就是OK的;
这里贴一个所有的禁用的函数:
void Power_Ctrl(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
CLI();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD ,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_Init(GPIOD, &GPIO_InitStructure);
USART_DeInit(USART1);
USART_DeInit(USART2);
USART_DeInit(USART3);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1|RCC_AHBPeriph_FSMC, DISABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_ADC1, DISABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2|RCC_APB1Periph_DAC|RCC_APB1Periph_TIM4
|RCC_APB1Periph_TIM3, DISABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF |
RCC_APB2Periph_GPIOG,DISABLE);
SEI();//
}
逐步记录曾经走过的路,让技术越来越影响更多的人!