引言
20世纪90年代以来,随着集成电路特征线宽的持续缩小以及芯片密度和工作频率的相应增加,降低功耗已经成为亚微米和深亚微米超大规模集成电路设计中的一个主要考虑因素。功耗的增加会带来一系列问题,例如电路参数漂移、可靠性下降、芯片封装成本增加等。因此,系统的功耗在整个系统设计中,尤其是在采用电池供电的系统中显得十分重要。
MICroChip公司PIC系列的单片机为设计高性能、低功耗的单片机系统提供了很好的解决方案。
1 低功耗设计方法
为使系统工作在低功耗状态,必须正确设置单片机的配置及工作方式。下面结合最常用的PIC12、PIC16等单片机介绍低功耗系统的设计方法。
1.1 基本设计方法
有许多技术可以降低系统的功耗,最常用的是Sleep模式。程序执行一条SLEEP指令,便进入了休眠(Sleep)模式。要Sleep模式下,晶振停止振荡,而此时单片机在3V电源条件下,只有1μA的电流。系统工作时,单片机可以采用看门狗或外部事件周期性地唤醒单片机,利用电子开关为系统提供电源,以减少系统待机功耗,延长电池使用时间。
单片机的工作频率和功耗的关系也很大,频率越高,功耗越大。在采用32kHz晶振、3V工作电压时,PIC12、PIC16等系列单片机的典型工作电流只有15μA;而采用4MHz晶振、5V工作电压时,单片机的典型工作电流达到几mA。在许多低功耗的场合,采用低速晶振实现低功耗非常有效。如果单片机采用RC振荡,还可以通过I/O口的操作改变振荡电阻,从而改变单片机工作频率,达到节能的目的。如图1所示,1个I/O引脚可以在等待状态下将并联电阻R1去掉,降低单片机工作频率。当单片机需要工作时,可将I/O引脚设置为输出并输出高电平,从而提高振荡频率。
1.2 振荡电路设计
在单片机系统设计中,振荡电路的设计是十分重要的一个环节。PIC系列单片机的典型振荡电路如图2所示。
一般情况下,设计人员按照厂家给出的参数表进行选择。如果系统能够正常工作,也就不再进行改进了。其实,这是不合适的。因为Microchip的单片机根据型号和版本的不同,工作电压在直流2.5~5.5V的范围内,汽车级温度可以在-40~-125℃范围内,而参数表中只给出了有限的几种情况,实际环境参数会对振荡电路的性能产生很大的影响。如高温、低电压可减小振荡环路增益,而从降低振荡频率或者难以启动;低温、高电压可以使环路增益变大,从而使晶振过驱动,产生损坏的潜在危险或者振荡电路工作的高次谐波频率上升,加大系统功耗。因此,如何正确设计系统的振荡电路十分必要。对于PIC系列单片机,一般的设计步骤如下:
①选择晶振。根据系统需要的振荡频率进行晶振的选择。此外,晶振的工作温度和频率稳定度也是十分重要的指标。
②选择振荡器类型。PIC系列单片机有RC、LP、XT、HS等振荡模式。除RC模式外,振荡模式的选择实际上就是环路增益的选择。低增益对应低振荡频率,高增益对应高振荡频率。一般根据实际需要的工作频率可参考数据手册来选择。
③选择C1、C2。理想的情况是,保证系统在高温和最低工作电压下能够正常工作,使得电容在数据手册推荐的范围内最小。同时选择C2比C1大一些以加大相移,使其有利于振荡电路的上电启动。
④选择Rs。在以上参数都已经选定后需要决定Rs的大小。简单的办法是让系统工作在最低温度和最大电压情况下,此时得到的应该是时钟电路最大输出幅度。用示波器观察引脚OSC2的输出波形(注意,示波器的探头将给电路引入一个电容,一般为几pF),如果发现正弦波的峰(接收Vdd处)和谷(接收Vss处)被削平或压扁,说明驱动过载,需要在OSC2和C2间加入1个电阻Rs,一般1kΩ左右或小于1kΩ。Rs不宜过大,过大将使得输入和输出产生隔离,从而产生较大的噪声。当发现需要一个较大的Rs才能消除过驱动时,可以增加负载电容C2来补偿。C2一般选择在15~33pF之间。
系统振荡电路的设计对系统的稳定性、功耗等影响很大。一般情况下,系统从Sleep状态下唤醒时,振荡电路最难启动(尤其系统工作在高温、低压、低频的情况下)。此时,电阻Rs有利于振荡电路的启动,因为廉价的碳膜电阻容易产生白噪声,从而帮助电路起振。此外,选择C2稍大于C1以增大相移,也有利于电路起振。
2 具体应用例子
2.1 系统组成及框图
系统主要由PIC单片机、双音频解码拔号电路、语音集成电路、接口电路、VCC电源控制电路、射频发射电路和EEPROM组成,可完成对家用电器的控制和对报警求援语音信息的自动传送,如图3所示。
2.2 控制器工作方式
*当与控制器相串闻的电话机(以下称为本地机)处于摘机时,电话线输入电压发生变化,引起CD40106的2脚输出电平变化,输入到CPU的RB0端口产生中断信号,唤醒CPU,控制器进入工作状态。通过本地机的拔号盘对控制器的各种功能进行控制。如控制电视、音响、照明灯等电器电源的开关。
*当控制器接收到振铃信号时,CD40106的4脚输出电平变化,输入CPU的RB6端口产生中断信号,唤醒CPU进入工作状态,并对振铃信号进行计数;达到设定铃声数后,使控制器进入电话接收状态,开始接收远程传输DTMF信号,经MT8880解调得到的信号通过IRQ向单片机发出中断信号,将数据存入寄存器,经CPU运行,对控制器的各种功能进行控制。
*当控制器作为报警器,并处于警备状态时,报警探头时刻检测防范区域的情况;当探头向控制器发出警情信息,输入CPU的RB5中断产生信号,控制器进入工作状态,从EEPROM芯片读出预先设置的报警电话号码,经MT8880转换为DTMF信号,自动拨号,以语音形式将信息传送给用户或直接报警。
2.3 应用电路
(1)电话接口电路
电话机与控制器采用控制器在前,电话机在后的串联方式,可实现电话机对控制器各种功能的控制。接口电路由过压保护电路、极性转换电路和中断请求电路组成,如图4所示。
①过压保护电路。在电话线回路上加入了一个压敏电阻R,它的作用是当它两端的电压大于其工作电压时呈短路状态,从而保护后级电路免受高压危害。当加到它的两端的电压小于其工作电压,压敏电阻呈开路状态,对后级电路的工作没有任何影响。在本设计中,压敏电阻的工作电压为220V。
②极性转换电路。由于在电话线上传输的是交流信号,为了使信号的极性固定,在电路中加入电桥,进行全波整流。
③中断请求电路。为延长电池工作时间,CPU在待机时处于休眠的省电状态,在实现远程电话机和本地机对控制器功能控制时,由中断请求电路将CPU唤醒。
(2)语音电路
语音电路如图5所示。它以ISD4000语音芯片为核心,主要是存储报警语音,输出经功率放大后传送到电话线上。
(3)MT8880与PIC单片机的接口电路
MT8880是Mitel公司的DTMF收发器,具有功能强、功耗低、工作稳定、可靠等性高优点,因此在DTMF信号调制的场合得到了广泛的应用。MT8880与PIC单片机的接口电路如图6所示。
①MT8880与单片机的接口电路。D0~D3为4根数据线,MT8880对经过前置处理的DTMF信号进行解调,将解调得的信号存入片内寄存器中,并通过IRQ向单片机发出中断信号。单片机相应中断请求后,在R、W、RS0、RD的控制下,通过D0~D3读出解调出的数据。
②DTMF信号放大电路。当微处理器将要发送的DTMF数据写入MT8880相应的寄存器时,MT8880从TONE引脚发出DTMF信号,信号经过放大电路放大后,送往变压器进行电压变化。
3 程序设计
程序在运行时:①为电器控制器,若是远程电话机对控制器进行操作,是根据电话的振铃声数来判断;若本地电话机对控制器进行操作,是根据本地电话机的摘机情况来判断。②为报警器,报警探头随时检测到警情并发出信号给控制器,而控制器则是根据用户的设置情况,是处于警备与否来判断是否拔出报警电话。图7是程序流程图。
下面主要介绍初始化程序、MT8880设置子程序和DTMF信号发送以及接收子程序。
;初始化寄存器
F0 EQU 0H
RTCCEQU 01H
PC EQU 02H
STATUS EQU 03H
FSR EQU 04H
RA EQU 05H
RB EQU 06H
RC EQU 07H
RD EQU 08H
RE EQU 09H
TRISAEQU 85H
TRISB EQU 86H