当前位置:首页 > 单片机 > 单片机
[导读] 由于产品为移动设备,所以功耗要求是比较严格的。目前采用了大MCU+小MCU的方式实现,小MCU主要是控制大MCU的电源,以实现系统的最低功耗。当然也就要求小单片机也在不工作的时候,进入低功耗状态。大MC

由于产品为移动设备,所以功耗要求是比较严格的。目前采用了大MCU+小MCU的方式实现,小MCU主要是控制大MCU的电源,以实现系统的最低功耗。当然也就要求小单片机也在不工作的时候,进入低功耗状态。

大MCU目前采用的是LPC1788,掉电模式理论最低功耗为65uA,但是实际调试并没有达到那么小(因为外设没有完全断电)。所以用小MCU来控制大MCU的电源,在需要的时候,在给大MCU供电。

小MCU采用的是LPC111x(lpc1112/28pin),深睡眠模式的理论值约为6uA(这个。)。

Lpc1112在不接外设的情况下,首先对深睡眠功耗进行测试,目前达到了5uA左右。

以下为源代码:

#include "nxplpc11xx.h"

#include "pmu.h"

#define NVIC_LP_SLEEPDEEP 1<<2

extern int key_value;

void WAKEUP6_IRQHandler(void)

{

//PMU->PCON = (1<<8); //清除标志

SYSCON->STARTRSRP0CLR = 1<<6; /*清除唤醒中断标志 */

__nop();

key_value=2;

}

void WAKEUP5_IRQHandler(void)

{

//PMU->PCON = (1<<8); //清除标志

SYSCON->STARTRSRP0CLR = 1<<5; /*清除唤醒中断标志 */

__nop();

key_value=1;

}

void config_ios(void);

void PMU_DeepSleep(void)

{

//reset IOs

config_ios();

/* Specify peripherals to be powered up again when returning from deep sleep mode */

SYSCON->PDAWAKECFG = SYSCON->PDRUNCFG;

SYSCON->PDRUNCFG |=(1<<3); //BOD power down

/* Switch MAINCLKSEL to IRC */

SYSCON->MAINCLKSEL = 0;

SYSCON->MAINCLKUEN = 0;

SYSCON->MAINCLKUEN = 1;

while (!(SYSCON->MAINCLKUEN & 0x01));

/* Ensure DPDEN is disabled in the power control register */

PMU->PCON = (1<<11); //Clear DPDFLAG if it was set

/* Clear the Deep Sleep Flag */

PMU->PCON = (1<<8);

/* All OFF */

//SYSCON->PDSLEEPCFG = 0x000018FF;

SYSCON->PDSLEEPCFG = 0x0000ffFF;

/* Specify peripherals to be powered up again when returning from deep sleep mode */

//SYSCON->PDAWAKECFG = SYSCON->PDRUNCFG;

///GPIO0-6

IOCON->PIO0_6 &= ~0x07;

IOCON->PIO0_6 |= 0x20;

GPIO0->DIR &= ~(0x01 << 6);

IOCON->PIO0_5 &= ~0x07;

IOCON->PIO0_5 |= 0x20;

GPIO0->DIR &= ~(0x01 << 5);

/* Only edge trigger. activation polarity on P0.5 p0.6 is FALLING EDGE. */

SYSCON->STARTAPRP0 &=~(1<<6|1<<5); //0x00000000;

/* Clear all wakeup source */

SYSCON->STARTRSRP0CLR |=(1<<6|1<<5); //0xFFFFFFFF;

/* Enable Port 0.4 as wakeup source. */

SYSCON->STARTERP0 = (0x1<<6|1<<5);

NVIC_ClearPendingIRQ(WAKEUP6_IRQn);

NVIC_EnableIRQ(WAKEUP6_IRQn); // P0.6 as wakeup

NVIC_ClearPendingIRQ(WAKEUP5_IRQn);

NVIC_EnableIRQ(WAKEUP5_IRQn); // P0.5 as wakeup

SCB->SCR = NVIC_LP_SLEEPDEEP; //0x04

/* Enter Deep Sleep mode */

__wfi();

}

void config_ios(void)

{

/* Configure all IOs as GPIO w/o pull-up & pull-down resistors */

IOCON->RESET_PIO0_0 = 0xC8; // RST_BOOT/P0_0

IOCON->PIO0_1 = 0xC8; //0xC0; // CLKOUT/CT32B0_MAT2/USB_SOF

IOCON->PIO1_8 = 0xC8;

IOCON->PIO0_2 = 0xC8; // SSEL/CT16B0_CAP0 //Trigger input

IOCON->PIO0_3 = 0xC8; //

IOCON->PIO0_4 = 0x80; // PIO

IOCON->PIO0_5 = 0x80; // PIO

IOCON->PIO1_9 = 0xC8; // CT16B1_MAT0

IOCON->PIO0_6 = 0xC8; // SCK0

IOCON->PIO0_7 = 0xC8;

IOCON->PIO0_8 = 0xC8; //0xC0; // SSP_MISO/CT16B0_MAT0/TRACE_CLK; MISO

IOCON->PIO0_9 = 0xC8; //0xC0; // SSP_MOSI/CT16B0_MAT1/TRACE_SWV; MOSI

IOCON->PIO0_10 = 0xC8; // JTAG_CLK/P0_10/SSP_CLK/CT16B0_MAT2

//IOCON->PIO1_10 = 0xC8; // ADCIN6/CT16B1_MAT1

IOCON->PIO0_11 = 0xC9; // JTAG_TDI/P0_11/ADCIN0/CT32B0_MAT3

IOCON->PIO1_0 = 0xC9; // JTAG_TMS/P1_0/ADCIN1/CT32B1_CAP0

IOCON->PIO1_1 = 0xC9; // JTAG_TDO/P1_1/ADCIN2/CT32B1_MAT0

IOCON->PIO1_2 = 0xC9; // JTAG_TRST/P1_2/ADCIN3/CT32B1_MAT1

IOCON->PIO1_3 = 0xC9; // ARM_SWD/P1_3/ADCIN4/CT32B1_MAT2

IOCON->PIO1_4 = 0xC8; // ADCIN5/CT32B1_MAT3/WAKEUP

//IOCON->PIO1_11 = 0xC8; // ADCIN7

IOCON->PIO1_5 = 0xC9; // UART_DIR/CT32B0_CAP0

IOCON->PIO1_6 = 0xC9; // UART_RXD/CT32B0_MAT0

IOCON->PIO1_7 = 0xC9; // UART_TXD/CT32B0_MAT1

/* GPIOs at outputs */

GPIO0->DIR = ~0; //Trigger Pin input only

GPIO1->DIR = ~0; //WAKEUP Pin and PIO1_6/RXD input only

/* GPIO outputs to LOW */

GPIO0->DATA = 0x0;

GPIO1->DATA = 0X0;

/* GPIOs at inputs */

GPIO0->DIR = 0;

GPIO1->DIR = 0;

return;

}

1、 需要对io重新配置,函数config_ios:

a) 配置位普通的io口功能,并且是下拉

b) 将io设置为输出模式,并输出信号为0;

c) 再将io口设置为输入。(实验证明如果不再设置为输入模式,功耗将增加)

注意:对io口的配置,也是在lpc1788芯片上进行过实验的,通过以上操作会使功耗比较低。所以目前对单片机要进入低功耗状态,暂时对io配置都如上方式进行。

2、以上配置,并没有每一行代码进行调试,一些配置可能可以配置为其他值。

其中:

SYSCON->PDRUNCFG |=(1<<3); //BOD power down//

//SYSCON->PDSLEEPCFG = 0x000018FF;

SYSCON->PDSLEEPCFG = 0x0000ffFF;

这两条代码不能去掉。

SYSCON->PDSLEEPCFG 配置为0x00000aff,也会增加功耗,配置位0x000018FF功耗较低,所以看了看寄存器,在没什么大问题的情况下,索性都配置为0x0000ffFF。

因为昨天才开始建工程,找资料,所以对LPC1112还不是很熟悉,但是基本能满足功耗要求,暂时先记录下来,后续还是需要对这款单片机低功耗配置进行更深入的了解。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

轮胎压力监测系统(TPMS)作为现代汽车安全的核心组件,通过实时监测胎压与温度数据,构建起全天候的轮胎健康监护网络。其算法设计需兼顾低功耗运行与高精度异常识别,尤其在直接式TPMS中,传感器需在纽扣电池供电下持续工作5年...

关键字: TPMS 低功耗

在智能家居系统中,无线传感器、控制器等设备对电源的稳定性与能效提出严苛要求。尤其在采用Zigbee协议的场景中,低功耗待机与智能唤醒机制成为延长设备续航、保障网络可靠性的核心设计要素。本文从电源架构设计、Zigbee模块...

关键字: Zigbee 低功耗

在现代快节奏的生活中,心脏健康问题日益受到人们的关注。心血管疾病已成为威胁人类健康的主要杀手之一,且呈现出年轻化的趋势。传统的心电图检测往往需要在医院进行,不仅耗时费力,而且难以实现日常的实时监测。如今,随着科技的飞速发...

关键字: 心电监测仪 低功耗 利器

在现代电子系统中,电源管理的重要性日益凸显。随着便携式设备、物联网(IoT)设备以及高性能芯片的不断发展,对电源稳压器提出了越来越高的要求。低压差线性稳压器(Low Dropout Regulator,LDO)因其能够在...

关键字: 低功耗 低压差 LDO

在当今数字化医疗与健康监测蓬勃发展的时代,生物电测量技术作为洞察人体生理状态的关键手段,正发挥着日益重要的作用。从常规的心电图(ECG)检测心脏电活动,到脑电图(EEG)捕捉大脑神经元的信号,生物电信号蕴含着丰富的人体生...

关键字: 脑电图 低功耗 前端芯片

在物联网设备与可穿戴产品向长续航、微型化演进的趋势下,STM32微控制器的超低功耗设计已成为决定产品竞争力的核心要素。通过深度优化STOP模式、RTC唤醒机制及电源管理策略,工程师可将系统待机电流从毫安级压缩至纳安级,使...

关键字: STM32 低功耗

正确理解技术详情数据表中指定的精度,明确测量需求以及避免使用需要在多个量程之间切换的仪器是关键因素。牢记这些要点将有助于您为开发项目选择合适的工具,并在测量过程中避免潜在问题,从而实现设备低功耗。

关键字: 物联网 电流精度 低功耗 测量仪表

在全球倡导绿色节能、可持续发展的时代背景下,延时继电器作为电气控制领域的关键元件,其发展方向正朝着低功耗设计与环保材料应用转变。这一转变不仅顺应了环保潮流,也为延时继电器行业带来了新的发展机遇。

关键字: 延时继电器 低功耗

随着物联网、可穿戴设备等领域的快速发展,对嵌入式系统的低功耗需求日益增长。STM32单片机作为一款性能卓越、功能丰富的微控制器,广泛应用于各种电子设备中。然而,在追求高性能的同时,如何降低其功耗成为了设计者面临的重要挑战...

关键字: STM32 低功耗

本文介绍了一种集成了自研电解质倾角传感器、无线模组(支持WiFi和4G)、温湿度、电池电压及振动监测模块的低功耗倾斜稳固性形变监测系统。该系统设计旨在通过高精度、低功耗的技术手段,实现对结构健康状态的实时监测与预警,特别...

关键字: 电解质传感器 低功耗 倾斜监测 形变监测 边缘计算 结构健康监测
关闭