|||
本次项目产品(电动汽车仪表)开发使用的单片机是MC9S08LL8(以下简称LL8),这个芯片的性能还是非常的棒!开发产品主要是考虑成本(在满足性能指标的前提下),并且尽可能有效利用单片机内部的资源,例如:产品需要用到A/D,RTC,液晶驱动,EEPROM数据存储等,在选型的时候看是否有满足所有条件的,不过全部满足一般都很难,取最主要的。言归正传,开发完产品后,体会到MC9S08LL8的妙处,我用到了它的flash模拟EEPROM、RTC、A/D和液晶驱动等功能。产品最终的功耗做得很小,在STOP3模式下功耗小于1uA,并且此时TOD是工作的(32.768kHz处于低功耗工作模式),25°左右环境,3.0V工作电源。现总结如下:
一、 低功耗处理:
众所周知,对于电池设备来说,功耗是个重要的技术参数,如何让MCU运行的功耗最低,需要在设计电路是仔细考虑MCU的每一个引脚。对于MCU来说,其功耗主要和电源电压及工作总线频率有关。电源电压越低,功耗越低(功耗与电压是成平方关系);总线频率越低,功耗越低,当然MCU运行速度(指令执行的快慢)也变慢了,所以需要折中考虑。LL8的低功耗主要从以下4个方面考虑:
1)选择停止模式:
本次开发的产品有2个电源供电,外部供电和电池CR2032供电。在外部供电的情况下可以基本上不考虑单片机功耗,但是在外部断电的情况下,要尽可能降低它的功耗。从LL8的封装和电气说明PDF手册上查到(飞思卡尔的芯片手册分为2个pdf文档,一个是芯片内部资源的详细说明,一个是封装和电气特性说明),如图1.1所示:
图1.1 停止模式的电流特性
LL8有2种停止模式,STOP2和STOP3。虽然STOP3在停止模式下(同等温度、电源电压条件下)功耗比STOP2略高一点,但是STOP3的唤醒启动速率快,手册上说6us!,并从图1.2上可以看出,STOP2情况下flash电也断了,唤醒的程序将相当于重启。并且产品有个实时时钟,也就是说在外部供电停止的情况下,实时时钟需要继续运行,将由电池供电。因此,如果产品设计在停止模式下外部32.768kHz晶振需要继续运行的话,建议用STOP3模式。坦白说,STOP2模式基本用不着,因为进入STOP2模式,只是RAM有电,并且单片机不做任何的事情,也就用不着电池供电,所以可以直接让单片机上电重启,不需要唤醒。
图1.2 模式选择
2)单片机外围I/O电路的设计
这个部分其实很关键,需要对单片机每一个引脚的精雕细琢,因为其中一个引脚处理不当,可能就是几十个uA以上。我在调试的过程中,也吃过不少苦头。其实处理单片机的引脚可以按照以下几种方式:(原则只有一个:让单片机的每个引脚都有确定的电平,并让每个引脚的压差为0,即无任何电流包括不可预知的电流和通过I/O口倒流的电流)
① 悬空引脚:
单片机某个引脚未接任何电路,相当于这个引脚的电平是处于不定状态,需要通过程序给他一个固定的电平,一般采取内部上拉并输出1即可(或者输出0),这样既保证了引脚压差为0,又保证了引脚有个确定的电平。
②有外部上拉的输入或输出:
这种情况是指:掉电情况下仍是外部上拉,因为必须注意到产品是否有2路电源供电,若是电池供电,则掉电情况下仍然属于外部上拉,如果是外部供电,则掉电后就不再是外部上拉了,这个情况需要分开处理。在有外部上拉的情况下,则让此I/O输出高电平1可以实现理论上的0电流。对于外部电源供电的上拉,可以通过一个整流硅二极管后再上拉,如图1.3:
图1.3 I/O口处理
这样可以通过程序将此I/O口设置为输出,并输出0,可以实现0电流。
③输出(无外部上拉):
单片机本来就是做输出功能的引脚,可以直接设置为输出并且输出0。
④输入(无外部上拉):
单片机可以设置成输出,并输出0。
以上4情况可以总结为:大部分I/O口可以直接设置为输出,并输出0,只有有外部上拉的情况下,才需要特殊考虑。
3)单片机电源的处理:
主要针对双电源供电,一般来说需要用整流二极管反向实现,如图1.4
图1.4 电源供电
如果需要考虑几个uA功耗的话,D200必须用硅二极管,如IN4148,不可用1N5819。由于IN4148的压降近似0.7V,所以电源采用3.6V,这样单片机的工作电源就只有2.9V左右了,也将导致电池电压降到2.9V左右功耗将小于1uA。我开始用的电源是3.3V的,D200用的是IN5819,结果在STOP3模式下常温的功耗有8uA左右,而我拔掉这个IN5819就小于1uA。经查手册发现,一般肖特基二极管的反向最大漏电流有几十个uA,甚至mA级别(和反向电压和温度有关)。所以这里我选择了1N4148,一般硅二极管的最大漏电流也只有0.1uA。
对于电池经过1N5819后到单片机电源,很多资料说二极管压降太大,采用三极管或者其他方案,这个容易误导大家,因为二极管的压降也和其流过的电流有关,在电流为几个uA的情况下,压降几乎为0。我也试过飞思卡尔官网上关于电表方案对电池部分的处理,为了不要有0.3V左右的压降(二极管的压降),它就是采用三极管电路,但我经过试验发现,这个电路不是很合理,因为在掉电的情况下有二十几个uA,电流出现倒流了,此电路可能需要进一步的改进。
4)关掉不用的外设:
这个对于降低功耗也很关键,其中也包括单片机运行时的功耗。每一款单片机可能不一样,像AVR系列的ATMEGA88PA其模拟比较器是默认打开的,而如果电路里面没有用到的话,则可以通过软件将其关闭,以减小功耗。所以,软件里面需要考虑到哪些模块是默认打开的,默认打开的模块有没有用到,若没有用到就通关软件设置将其关闭,以减少没必要的功耗。LL8里面的LVD功能默认在停止模式下是继续工作的,而这个功能在停止模式下消耗的电流在100uA以上,所以停止模式必须将其关闭,以节省功耗。