【问题标题】:What is consuming power with PIC18?PIC18 的功耗是多少?
【发布时间】:2013-10-31 03:48:39
【问题描述】:

我有一个非常简单的代码,可以在终端上打印一些内容,然后直接进入睡眠状态。

由于某种原因,设备在睡眠模式下消耗更多电流。它正在绘制 0.24 mA 但我知道它应该小于这个值。如果没有睡眠,它会消耗 4.32 mA。我已经运行了最基本的软件,而且肯定缺少一些东西。

请问影响功耗的因素有哪些?我真的需要降低功耗,但我不知道是什么导致它这么高。为了您的方便,这里是Datasheet

/*  
     File: main.c
     Date: 2011-SEP-4
     Target: PIC18F87J11
     IDE: MPLAB 8.76
     Compiler: C18 3.40

 */  
 #include <p18cxxx.h>
 #include <usart.h>

     #pragma config FOSC = HSPLL, WDTEN = OFF, WDTPS = 4096, XINST = OFF 

 #define FOSC (4000000UL)
 #define FCYC (FOSC/4UL)

 #define BAUD 9600UL
 #define SPBRG_INIT (FOSC/(16UL*BAUD) - 1)

 void main(void)
 {   
     /* set FOSC clock to 4MHZ */
     OSCCON = 0x70;

     /* turn off 4x PLL */
     OSCTUNE = 0x00;

     /* make all ADC inputs digital I/O */
     ANCON0 = 0xFF;
     ANCON1 = 0xFF;


     /* test the simulator UART interface */
     Open1USART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, SPBRG_INIT);
     putrs1USART("PIC MICROCONTROLLERS\r\n");
     Close1USART();

     /* sleep forever */
     Sleep();

 }   

提前致谢!


更新 1:我注意到添加以下代码将其降低到 0.04 mA

TRISE = 0;
PORTE = 0x0C; 

如果我将PORTE 更改为以下值,它会增加到 0.16 mA。

PORTE = 0x00; 

但我真的不明白所有这些意味着什么......或者功耗是如何下降的。我必须在代码中遗漏一些东西,但我不知道它是什么。

更新 2: 这段代码给了我不稳定的电流消耗。有时为 2.7 mA,有时为 0.01 mA。我怀疑WDTCONbits.REGSLP = 1;的问题

Download Code

【问题讨论】:

  • 要查找的常见内容(不是 PIC 特定的)包括仍以高频运行的振荡器、不需要的外围设备上电以及由上拉/下拉电阻驱动的信号。此外,浮动输入可能比完全高或低的输入消耗更多的功率。最后请注意,您的测量方案可能会因电流通过编程器接口的数据引脚、串行数据连接等泄漏或泄漏而失真。

标签: embedded sleep microcontroller pic


【解决方案1】:

当 OP 更改端口输出的设置时,电流消耗从 0.24 mA 下降到 0.04 mA。

这在典型设计中是预期的,输出控制各种电路。示例:通过驱动high,输出可能会打开 LED(1),额外消耗 0.20 mA。在另一种设计中,通过驱动的输出可以打开 LED。在第三种设计中,不开车可能会打开 LED。

OP 需要咨询原理图或设计人员以确定哪些设置会导致低功耗。此外,在低功耗模式下可能/可能不允许某些组合。

最后,在各种设计元素上降低功耗、禁用等的顺序可能很重要。关闭事物的顺序通常与使它们重新上线相反。

@Chris Stratton 在发布的评论中有好主意。


(1) 一个 电源 LED。

【讨论】:

  • 在设计方面,高电平开启输出。我禁用了所有外围设备,使所有引脚输出,并将它们分配为低电平,但这没有帮助。我仍然不知道什么消耗更多电流,我迷路了!
  • 调查思路:我不太确定你的外设全部禁用或者可以禁用。尝试禁用所有外围设备 - 不要睡眠,只是循环 - 并注意电流消耗。然后尝试禁用所有外围设备,然后关闭 4X PLL。你的新电流应该是 1/4。如果没有,您有一些外围设备不是您的时钟速度的函数。即使您睡觉(将时钟调至 0),这种差异也应该保持不变。
  • UART 想法:您的帖子并未表明您将串行 I/F 置于低功耗模式(如果可能)在发送测试消息之后that I/F 是 RS-232 接口,具有 +V 和 -V 电平吗?您需要禁用该 I/F 的驱动程序以使其进入低功耗模式。简单不发送数据不是低功耗,但可能是你能得到的最好的。
  • 我禁用了所有外围设备并保持设备处于运行模式,电流消耗为 0.14 mA。然后我禁用了所有外围设备并使设备进入睡眠状态,电流消耗为 0.04 mA。关于UART,我不再使用它了,我从代码中删除了它。
  • @Ammar 删除代码不会从电路中删除串行接口 - 无论您是否使用它,它仍然会消耗电力。你有能力禁用串行发射器吗?这可能是剩余的 0.04 mA 使用量。
猜你喜欢
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
相关资源
最近更新 更多