打印
[技术问答]

N76E003 WKT自动唤醒后,功耗增大问题

[复制链接]
2976|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xtihc|  楼主 | 2018-9-16 22:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
该芯片应用于一个产品中,现在实现的功能为:待机一个星期都没有的操作,那么在一个星期后自动关闭电源。
所以用到了WKT定时器,10K时钟2048分频,每50秒溢出唤醒一次,平时工作于掉电模式。
现在问题是:进入掉电模式后,总工作电流约0.45mA。过了50秒自动唤醒后,工作电流增加到0.9mA。一直保持这个工作电源。当外部中断唤醒后,工作电流恢复0.45mA。WKT唤醒后电流又增加到0.9mA。
大家有碰到这个问题吗?是芯片的BUG,还是我的程序问题?
仔细研究了程序,看了多遍的datasheet。还是找不出原因。
沙发
玛尼玛尼哄| | 2018-9-16 22:32 | 只看该作者
进入低功耗前的哪些操作?有可能是WKT后那些设置恢复成了默认。而外部中断的是真的断电重启了。不过不太清楚,我都是瞎掰的

使用特权

评论回复
板凳
玛尼玛尼哄| | 2018-9-16 22:32 | 只看该作者
最好把整个代码都发来吧,让大神给你看看。

使用特权

评论回复
地板
神的棋子| | 2018-9-17 08:18 | 只看该作者
BOD关掉,相关IO口进入休眠前设置好高低电平。

使用特权

评论回复
5
tianxj01| | 2018-9-17 08:39 | 只看该作者
部分设备在WKT唤醒模式没有关闭,造成功耗偏大,比如LIRC.....

使用特权

评论回复
6
xtihc|  楼主 | 2018-9-17 11:17 | 只看该作者
神的棋子 发表于 2018-9-17 08:18
BOD关掉,相关IO口进入休眠前设置好高低电平。

进入掉电后到WKT自动唤醒都是没有端口操作的,因为CPU一直是挂起,WKT唤醒后进入KWT中断,中断程序就两句,1清WKT标记位,2置位一个标记位。退出中断后运行set_PD后面的程序。后面的程序就是根据标记位判断是否WKT唤醒的。如果是,将累计时间加一,直到约1个星期,关闭电源(将一个端口置低电平,单片机断电)。
板子上有一个接收头和按钮。接收头和按钮的操作都会外部中断唤醒。外部唤醒后理进入掉电又是正常的电流。
所以我怀疑是否芯片BUG。

使用特权

评论回复
7
xtihc|  楼主 | 2018-9-17 11:30 | 只看该作者
tianxj01 发表于 2018-9-17 08:39
部分设备在WKT唤醒模式没有关闭,造成功耗偏大,比如LIRC.....

WKT自动唤醒使用的时钟就是LIRC,所以LIRC不能关闭,另外,第一次进入掉电模式,补WKT唤醒再进入,也无外设和端口操作。所以实在无解。

使用特权

评论回复
8
xtihc|  楼主 | 2018-9-17 11:36 | 只看该作者
//WKT 自动唤醒定时器
        WKCON=B0000_0111;//时钟2048分频
        RWK=255-244;//50秒中断一次
        set_EWKT;//使能中断

//自动唤醒中断
void WKT_ISR (void) interrupt 17
{
        clr_WKTF;//中断清标记位
        wkt_f=1;//置中断标记
}

下面进入掉电和退出掉电的程序段。

clr_TR0;//关定时器0
        clr_TR2;//关定时器2
        //切换成LIRC,并关闭HIRC
        clr_EA;
        TA=0xaa;
        TA=0x55;
        CKSWT=B0000_0100;//切换成LIRC
        TA=0xaa;
        TA=0x55;
        CKEN=B0001_0000;//关闭HIRC
        set_EA;//恢复中断
        //
        set_WKTR;//启动WKT定时器
        
        set_PD;//进入掉电模式
        
        if(wkt_f==1)
        {//WKT中断唤醒,
                clr_WKTR;
                wkt_f=0;//清wkt中断标记
                wkt_t++;//wkt中断次加1
                if(wkt_t>12095) wkt_t=0,POWER=0; //12095个计数为一星期
        }
        else
        {//其它中断唤醒
                clr_EA;
                TA=0xaa;
                TA=0x55;
                CKEN=B0011_0000;//启动HIRC
                TA=0xaa;
                TA=0x55;
                CKSWT=B0000_0000;//切换到HIRC
                set_EA;
                clr_WKTR;//关WKT定时器
                set_TR0;//开定时器0
                idl_t=8;
        }
}

使用特权

评论回复
9
tianxj01| | 2018-9-17 15:05 | 只看该作者
xtihc 发表于 2018-9-17 11:30
WKT自动唤醒使用的时钟就是LIRC,所以LIRC不能关闭,另外,第一次进入掉电模式,补WKT唤醒再进入,也无外 ...

我看你描述的是唤醒后电流0.9mA啊,LIRC关闭的意思也是在这里唤醒后关闭啊,睡眠期间当然不能关闭。
难道是你描述的有问题?你到底是睡眠未唤醒期间电流大,还是唤醒后电流大,这个考虑起来完全不一样。

使用特权

评论回复
10
wsl_5631| | 2018-9-17 16:01 | 只看该作者
休眠时IO电平是否正确,我做的很低啊EA = 0;
        Init_IO();
             EA = 1;
             RWK = 256-46;       
             WKCON |= 0x08;
             ADCCON1 = 0X00;                                //关闭AD检测电路
             #ifdef  WATCHDOG
             WDTC();
             #endif
               PCON |= 0X02;
               nop();
               EA = 0;
               do
               {
                       TA=0XAA;
                        TA=0X55;
                        key = CKSWT;                        //选择内部时钟
                }while(!(key&0x20));
               EA = 1;
               WKCON &= ~0x08;

使用特权

评论回复
11
xtihc|  楼主 | 2018-9-17 17:42 | 只看该作者
tianxj01 发表于 2018-9-17 15:05
我看你描述的是唤醒后电流0.9mA啊,LIRC关闭的意思也是在这里唤醒后关闭啊,睡眠期间当然不能关闭。
难 ...

是我没有描述清楚。
情况是这样的:板子不工作待机时,执行set_PD进入掉电状态。此时工作电流为0.45mA。当WKT自动唤醒后,运行时间计数加一等操作后,再次执行set_PD进入掉电状态,此时电流增加到0.9mA。
不过现在问题解决了,是ADC问题。我在进入掉电前先把ADC关了。掉电状态电流就正常了。
感谢您的回复!

使用特权

评论回复
12
xtihc|  楼主 | 2018-9-17 17:43 | 只看该作者
tianxj01 发表于 2018-9-17 15:05
我看你描述的是唤醒后电流0.9mA啊,LIRC关闭的意思也是在这里唤醒后关闭啊,睡眠期间当然不能关闭。
难 ...

是我没有描述清楚。
情况是这样的:板子不工作待机时,执行set_PD进入掉电状态。此时工作电流为0.45mA。当WKT自动唤醒后,运行时间计数加一等操作后,再次执行set_PD进入掉电状态,此时电流增加到0.9mA。
不过现在问题解决了,是ADC问题。我在进入掉电前先把ADC关了。掉电状态电流就正常了。
感谢您的回复!

使用特权

评论回复
13
xtihc|  楼主 | 2018-9-17 17:45 | 只看该作者
wsl_5631 发表于 2018-9-17 16:01
休眠时IO电平是否正确,我做的很低啊EA = 0;
        Init_IO();
             EA = 1;

因为我电路中有个红外接收头,所在总的掉电电流就大了。
你的程序中ADCCON1=0x00.这句很重要。在执行set_PD前关ADC。电流就正常了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

13

帖子

0

粉丝