登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

PIC低功耗系统开发过程中的一些问题。

作者:johnly 栏目:单片机
PIC低功耗系统开发过程中的一些问题。
在下用16C926做的一个系统,对低功耗要求甚高。一段时间做下来,发现离要求还有一段距离。睡眠后的系统功耗还是挺高。:((这里面既有MCU的功耗也有外围电路的功耗。)每次烧写片子来试,成本实在太高了。^_^。。。。

* - 本贴最后修改时间:2003-6-25 14:48:35 修改者:johnly

2楼: >>参与讨论
johnly
看了精华区的贴后
于SLEEP
martin 发表于 2002-1-12 18:36:10 PIC 单片机 ←返回版面    

PIC单片机在执行SLEEP指令后进入睡眠省电模式。进入SLEEP模式后,主振荡停止,如果看门狗在烧写时打开了,看门狗定时器将被清并保持运行。I/O口,周边模块和内部RAM将保持原来状态,所以如果要求睡眠后有很低功耗,应该在进入SLEEP前把IO口置为高阻抗的输入状态,不用的模块也要关闭。另有些周边模块与主时钟有关,如在异步模式下的USART,将不工作。
唤醒SLEEP的条件有很多,如IO口电平变化,AD转换结束,外部复位、看门狗溢出等,具体请参考数据手册。
当执行SLEEP指令时,PC+1的指令被预取指,当器件被一个中断条件唤醒时(这个中断的应是已使能的),如果GIE(全局中断使能位)为0,器件将继续执行SLEEP指令下面的指令。如果GIE为1,器件将执行已预取的PC+1指令后跳到0004H的中断入口。所以建议SLEEP后面紧跟着的一条指令最好是个NOP。
外部手动复位MCLR将唤醒器件并RESET,表示状态的标志位含义详见数据手册。
看门狗定时器在SLEEP下溢出将唤醒器件,然后执行SLEEP下面的指令,也有标志位指示状态。
说得不够详尽,所以最好还是仔细看看数据手册。




3楼: >>参与讨论
johnly
一点想法
看了精华区的贴后。收获不少。但还有一点细节性的东西,大家说一下。
一。进入SLEEP后,主振荡停振,和主振荡相关的模块都会停止工作,A/D .液晶驱动。看门狗等模块还是要在SLEEP指令执行之前关闭的。这样功耗才会最低。
二。关于I.O口。在16C926的DATA SHEET里,还是说到了一些。我的理解是,所有的I/O口,都有确定的接VDD或者VSS,而不能悬空。进入SLEEP前,所有的I/O应该置为输入口。接上拉或下拉。
三。对于PORTB口有内部上拉功能的应该选择不上拉。

以上是我的一点理解,请大家指正。另外有一个问题,进入SLEEP后,不用的中断依然使能,是否会消耗电流?

* - 本贴最后修改时间:2003-6-25 14:52:06 修改者:johnly

4楼: >>参与讨论
highend
低功耗,使用低功耗MCU,不要用PIC.
 
5楼: >>参与讨论
martin
要求如何?请举出具体参数
926可以做到几个微安以内

6楼: >>参与讨论
johnly
徐工
你说的几个微安应该是指MCU的功耗了。我现在的整个系统的功耗是250微安,不知道MCU的功耗是多少,没有测,我都是把电流表穿在电池里测的系统功耗,目标是整个系统功耗在50微安以内。现在用的片子不是低功耗的926、现在是把前面提到的一些方法都用上了,电流还是250微安。太高了!!

* - 本贴最后修改时间:2003-6-25 14:55:32 修改者:johnly

7楼: >>参与讨论
张明峰
关闭芯片的BOD功能
再测功耗是多少。

8楼: >>参与讨论
sh_tony
16LC926
你用的芯片是16C926还是16LC926,如果你做低功耗系统应该用16LC926,我用16LC926也设计了一个产品,我的功耗做到了12UA。这是本人一点体会。
首先,你要确定你所测到电流全部消耗在单片机内部。单片机不对外供电。
你可以用万用表穿在单片机的VCC脚上和GND的脚上,看从VCC流入的电流是否等于从GND流出的电流。如果相等,说明你的管脚设置没问题,如果从GND流出的电流小于从VCC流入的电流。这就说明你的管脚设置有问题。
如果你的系统有EEPROM,特别要注意与它相连的管脚(SDA,SCL)设置。

9楼: >>参与讨论
johnly
:)
张工:我在烧写的时候,把看门狗,还有BOD等都关闭了。测得的电流是250UA。
我觉得可能还是在I/O口的设置上有问题。我现在的做法:进入睡眠前,把所有的口都改为输入口(包括液晶驱动的口)A B C D E F G口,其中A B C D E 断口寄存器全部清零。硬件上,没有用的口全部拉地。在唤醒的中断程序中把I/O口改为正常设置。。。。。。这样做是不是有问题?

sh_tony老兄的方法不错,我也试试,不过我没有两个这样的电流表啊:(。。

我想知道的是,对于I/O口的设置,有没有一般的原则,这样的通常做法是不是最好的。

10楼: >>参与讨论
ecaibird
没经验
我也在做低功耗的,奉劝楼主不要用PIC的。我也发现PIC论坛现在是越来越差了,回答问题的热心人真是少啊!!

11楼: >>参与讨论
ecaibird
用日立的
我用日立做到10微安以内。呵呵呵 。。。。

12楼: >>参与讨论
张明峰
你行啊,一菜
不过10uA不算什么,随便找颗PIC都能实现。

每个系统都有特定的功能实现,不考虑这个前提,随手比一个指标,那是在瞎耽误工夫。

不过你还是行的,不算菜了(可以改名了)。

13楼: >>参与讨论
张明峰
说正事
johnly,你的线路板上有电阻,对吧?有空用万用表量每个电阻上的电压降,看看那些电阻在耗电,然后想想他需要耗电吗?如果不需要,怎样消除他的耗电?

等你做到每个电阻上的压将都为0但系统功耗仍偏大,再发帖。

切记:最低功耗设计并不要求所有IO引脚为输入模式。

14楼: >>参与讨论
sosomj
我的一点看法.
这种情况我认为一个系统里的功耗大多是外围器件产生的,单片机的SLEEP的功耗是比较的小的,我用的PIC16C926要开WDT,LCD休眠的时候还要显示,外围还有一些消耗电流的电阻,也有时钟,EEPRO等器件在工作,这个冬冬还没有经过全面的分析和参数选择,休眠时的整个系统的功耗也就是60到70微安的.
开始作的时候系统的功耗还是4个毫安呢,改进一下外围电路的参数,关掉b口上拉,不用的I/O口设为输入,等等的措施,就变成了60到70毫安的功耗了,
随便的说说的,单片机可能不是你的系统的最大的消耗品,很多的时候可能一个电阻的消耗就会超过单片机很多倍的.

15楼: >>参与讨论
johnly
多谢各位
楼上二位好建议,十分赞同!

* - 本贴最后修改时间:2003-6-17 13:52:03 修改者:johnly

16楼: >>参与讨论
johnly
各位
现在系统功耗70微安,(睡眠时TMR1接外部晶振工作。)

* - 本贴最后修改时间:2003-6-25 14:58:46 修改者:johnly

17楼: >>参与讨论
johnly
这样是不是好点了
现在地功耗是。。。20微安。;))在这里向前面回帖的网友表示感谢!!
不过离martin说的几个微安还有好大的差距。。:))
还有一点疑问,对于没有用的LCD的驱动的输出口,软硬件上如何处理?比如G口 F 口等。中断使能位睡眠时依然使能是否会消耗电流?

* - 本贴最后修改时间:2003-6-25 15:00:22 修改者:johnly

18楼: >>参与讨论
ecaibird
别指望了
我看楼主要失望了,,想做到10微安以内我看是没什么指望了。

19楼: >>参与讨论
ecaibird
有一招
你把所有没有用的液晶驱动口连到一起,但不接地也不接高,试试看

我看PIC的人都该换换了。。:)其实张先生你还是不错的。是PIC太S了!!

20楼: >>参与讨论
张明峰
ecai鸟你也不错,但不要出损招
把所有没有用的液晶驱动口连到一起?你要别人死翘翘?

你的低功耗设计是上层次了,有空再研究研究LCD驱动原理吧。

21楼: >>参与讨论
sosomj
johnly,可以把你的心得说说吗?
我的冬冬和你的比较的相似,可是功耗好像比你的要大许多,说说看,指点一下了.

22楼: >>参与讨论
johnly
TO:ALL
我现在地系统功耗是18微安。。呵呵
有几点经过验证的:
一。不是所有的口都要设置成输入的(张明峰),,有些口设置成输出可能功耗更低,比如一个口接LED的,睡眠时就可以设置成输出低。
二。单片机SLEEP功耗很低,可能一个电阻的功耗就超过单片机了(SOSOMI)
我前面的大电流确实来自外围电路的电阻。
三。把没有用的LCD驱动口连到一起,既不接地也不接高(ecaibird),我试着做了一下,发现电流确实小了一点!!!:)但听张SIR的意思好像有问题,我看了一下DATASHEET,没有发现问题。是不是可以请张SIR解释一下这个问题。为什么电流会有下降?不可以这样做的理论基础又在那里?
四。我看到TI的430做的一个表系统,静态功耗只有3个微安!!!如果是指系统功耗的话,我就太佩服了!!不知道是不是吹得。。。:))不知道我的这个926的系统能不能做到这样???现在18微安,要下降发现已经很难了。

23楼: >>参与讨论
sosomj
我的系统是这样的.
我的系统里有时钟,用存储器,还有pic16lc926,
这三个东西时在休眠的时候还要工作的.
应为没有外接晶振,所以看门狗打开,
现在我得功耗还是休眠时是60微安左右,调节不下去了
我的目的是在30微安左右就可以了,可是现在我不知道具体要怎样才可以降低我的系统的功耗.
在休眠的时候,到底一个I/O口是要设置为输入还是输出,到底是要置高还是置低,有什么讲究吗?
补充一下:我得系统在不用MCU时有1微安的功耗.
希望高手来指点.多谢!

24楼: >>参与讨论
张明峰
几点
1) 取决于LCD驱动的具体方式,COM/SEG上的电平在同一时刻是不同的。如果把所有未用到的LCD脚连在一起,很显然电流就要流进流出。

2)18uA的功耗下,系统状态如何?
   WDT  打开还是关闭?如果打开,溢出时间多长?
   TMR1 是否工作在外部32KHZ振荡?
   ADC  模块是否关闭(ADCON0.bit0 = 0)?
   LCD  偏置电压如何产生?
   LCD  Sleep时,显示模块是否工作?
   Vdd  几伏?
   芯片 是否为窗口片?如果是窗口片是否用黑纸把窗口盖严实?

25楼: >>参与讨论
sosomj
我接.
   WDT  打开,溢出时间设置为最大
   TMR1 否,暂时停用
   ADC  模块是否关闭(ADCON0.bit0 = 0)?,是
   LCD  内部电泵产生
   LCD  Sleep时,显示模块是否工作?,是
   Vdd  几伏?2.5-3.0v
   芯片 是否为窗口片?如果是窗口片是否用黑纸把窗口盖严实?
   芯片为otp.
   张大虾估算一下功耗吧?30微安可能达到吗?
   


26楼: >>参与讨论
张明峰
mj
Sleep时若LCD还要保持常亮,估计功耗会偏大,因为产生LCD显示偏压的内部充电泵一直在工作,LCD屏本身也要耗电。

1)试一下Sleep前LCD显示模块关闭,看看能省多少电流?在其他客户的设计中Sleep时关闭LCD功耗可以降到10uA以下;

2)LCD是否可以不用常显。比如说,按键唤醒电表,然后维持LCD显示若干时间;或持续显示1秒,关闭3秒,等等。(由Sleep+WDT唤醒实现定时)

3)选择的926芯片一定要是低功耗版本的。

27楼: >>参与讨论
johnly
zhang sir
我的:
   WDT  关闭
   TMR1 SLEEP 时关闭
   ADC  模块关闭(ADCON0.bit0 = 0)?
   LCD  偏置电压内部泵产生
   LCD  Sleep时,显示模块不工作
   Vdd  2.5V-4V
   芯片 PIC161C926地功耗版本OTP
   BOD  功能关闭

   没有用的普通IO口接地,设置输入口
   使用的IO口视外围电路具体情况,SLEEP时设置成输入或者输出,原则是消耗电流最低
   没有使用的带有液晶驱动能力的IO口悬空,SLEEP时设置为输出低电平

   这样的系统功耗是8微安,但目标板一定要放在电脑机箱旁边或者放在手里!!!!!我ft....:((  如果放到其他地方,功耗马上变成80微安。。:(((。。。。。。
   是何道理!!难道是外围磁场的影响??如何解决??!!呵呵呵。。。

28楼: >>参与讨论
ecaibird
johnly
用PIC做到8微安已经可以了!还想什么呢?解决外围磁场干扰的办法是加屏蔽罩。

29楼: >>参与讨论
张明峰
johnly
看看Sleep时是否有引脚处于输入高阻且浮空状态。

“没有使用的带有液晶驱动能力的IO口悬空,SLEEP时设置为输出低电平”
-液晶引脚是无法设成输出态的,作为数字口只能输入。可能问题在这里。

30楼: >>参与讨论
Micropic
好贴
真是长知识!一口气看完,以前也做过低功耗,但是很失败。
好贴
顶!

31楼: >>参与讨论
johnly
这样
讲得对。这样做的:
硬件上,所有没有使用的IO拉地
软件上,睡眠之前,设置好LCDSE寄存器,选择使用的SEG/COM.没有使用的LCD驱动口在方向寄存器中设置为输入。端口寄存器清零。
比如使用了RF0-RF3为LCD驱动口
MOVLW B'11110000'
MOVWF TRISF
.......
CLRF  PORTF
.......

经过这样改动,系统静态功耗为1。8微安
其中:MCU所有模块功能全部关闭
      外部无EEPROM电路
      未加电源检测电路


32楼: >>参与讨论
电子小妹
尽量减少外围功耗,如果做的好的话可达到微安
 
33楼: >>参与讨论
张明峰
祝贺johnly的成功 - 1.8uA的静态功耗
低功耗的设计关键在与你对设计系统的深入理解,在加上一些软件/硬件的技巧,绝对不是唯芯片论,认为只有xxx芯片才能实现低功耗。芯片之间当然有差别,但相同档次的芯片间休眠时的功耗差别不大。

听多了“拉不出屎即马桶无吸力”的论调,也就懒得和别人争论。但如果大家诚心讨论技术问题,技术上没有先入为主的偏见,我也会乐于参加。

34楼: >>参与讨论
johnly
all
谢谢大家的帮忙,使我节省了许多的开发时间。

35楼: >>参与讨论
cason
用I/O直接作为电源,需要时开启
 
36楼: >>参与讨论
Micropic
johnly
如果外围电路上加EEPROM的话,就要注意了,可能电流要大点。

37楼: >>参与讨论
sqhuang
我正准备用16C923做一个产品,帮我估计一下可以去到多低...
我的系统与你们的不太一样,在睡眠时LCD也必须亮着,因为有实时时钟功能:
PIC16C923
3V供电
WDT OFF
按键唤醒
具有实时时钟,用TIMER1外接晶体产生
LCD需要常亮
输出只有LED之类的东西,没有其他外为的IC了.

请问这样一个系统在睡眠时最低可以做到多少功耗?


38楼: >>参与讨论
张明峰
楼上估计15-20uA左右
一般不会超过30uA。但是,千万不要用923,改用925/926。

39楼: >>参与讨论
wuyingjie
好热闹
我是打定用PIC的,除了价钱高了点。我们做技术的,只要市场认可,不必给自己定很高的指标,快速、可靠、低廉是市场要求的,如果有技术问题,大家交流是很好的,但现在闹得有点出格了。张先生似乎有些沉不住气,您不必太在意个别人的不合理意见,有多数人肯定就行啦!

40楼: >>参与讨论
sqhuang
用16C923有什么问题?
16C923和16C925都能满足我的系统的要求,只是925多了ADC,对我没有用.
这两款中哪一个更便宜些?


41楼: >>参与讨论
johnly
楼上的
我看你的系统这样设计有问题,当睡眠时,LCD虽然可以继续显示,但却不能实时显示时间。这一点你考虑了吗?


42楼: >>参与讨论
张明峰
923/924 vs 925/926
925/926为新设计,对低功耗专门做了优化。价钱也比923/924便宜。sqhuang你没有理由不用吧?

谢谢wuyingjie同志的关心和安慰。我只是对一些偏颇的观点感到可笑,逗逗他们而已,多数情形下是一笑了之。

此帖的情形在客户中有代表性,希望通过这些讨论让大家多掌握些方法技巧,多一些对问题的了解。

43楼: >>参与讨论
张明峰
johnly,TMR1溢出可以唤醒单片机
可以每隔1s唤醒单片机,唤醒后更新显示内容,然后休眠。

建议此类设计要重点解决的是主振荡器的起振问题。在唤醒后主振必须快速可靠地建立振荡,优先考虑外部RC振荡,其次用陶瓷谐振器,用晶体振荡必须仔细选择晶体品质和外部振荡移相电容。

44楼: >>参与讨论
sqhuang
多谢张先生,明白了!那我会选925!
顺便说一句,要是925/926有FLASH工艺的就更好了!


45楼: >>参与讨论
louis.liu
十几微安的电流早就有人用过
早就有人用16LC926作出12-13uA睡眠模式的功耗了。你用空板实验就可以依次测出各部分的功耗了。

46楼: >>参与讨论
zhjun
我得一点经验。。。
没用的端口应该设置成输出或者直接连到VCC或GND并设成输入,关闭其他万不设备,如BOD,比较器等,推荐使用MSP430,开发容易,一块JTAG板就搞定。

47楼: >>参与讨论
dramatic
收获不少,能提一个菜鸟问题吗?
谢谢各位大哥的发言,让我懂了不少,我想问问侧系统的功耗是直接测源地间电流吗?多谢指点。

参与讨论
昵称:
讨论内容:
 
 
相关帖子
Timer0启动的疑问请教
pic的c编译器那种比较好?
版主,PIC12F683现在是否已开始供货
我用MPLAB IDE编译C文件的时候,有如下提醒!
大虾,求救!!!!!
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号