图 2是一个具有休眠功能的典型系统软件流程图。
系统初始化后进入休眠模式,经过一段时间的延时后唤醒扫描按键模块,进行按键扫描。如果有按键按下,软件判断是否有效。如果无效按键按下,那么系统继续进入休眠模式。如果软件判断按键有效,那么唤醒系统,触发任务处理进程。当处理完所有任务后,系统又重新进入休眠状态。这是个典型的具有休眠功能的系统工作流程图,它的优点就是此软件流程简单易懂、容易实现,一般可以满足大多数场合的应用。但是,如果系统任务处理消耗了较多的CPU处理时间,那么为了达到目标平均工作电流,就需要相应增加休眠时间。同时降低了按键扫描的频率,从而加长了系统唤醒的响应时间。因此,此方法适合比较简单的、系统任务不复杂的应用。
图 3是一个具有休眠功能的复杂系统软件流程图。
此方法是将以上方法中的任务处理进行分解,分为触发新任务,处理任务。目的就是减小在每个循环周期内部执行任务的所花费的CPU资源。与上一个方法的不同在于:系统唤醒扫描按键程序,当判断按键有效时,触发新任务,并不是将所有的任务处理完毕。在当前的循环周期内,触发的新任务可能没有处理完毕,需要下一个或者更多个系统循环的时间才可以完成。当判断按键无效时,不是马上进入休眠模式,而是判断是否有没有处理完毕的任务。如果有则继续处理;如果没有则进入休眠模式。此方法可以处理比较复杂的任务,能满足更多应用领域的需求。
如果没有有效按键触发,那么系统工作在最大的省电模式。不论哪种方法,系统平均工作电流可由公式2计算得出。
Iave =(Tscan * Iscan + Tsleep * Isleep) / (Tscan + Tsleep) 公式2
其中,Tscan是一次扫描按键所需时间,Iscan是按键扫描时的工作电流,Tsleep是休眠时间,Isleep是休眠时的工作电流。Isleep会远远小于Iscan。一般来说,为了保证一定的按键灵敏度,Iscan可调整的空间有限,因此较快的扫描速度,较小的休眠电流,较长的睡眠时间是降低系统功耗的关键。
在实际设计中,考虑的因素更为复杂,除了上述之外,还需考虑按键的响应时间和按键的灵敏度、等。最大休眠时间决定了系统的响应时间,对于相同的Iave,Iscan和Isleep,较长的Tscan会引起Tsleep的增加,从而无法满足系统的响应时间;如果减少扫描时间,可能会无法有效减少系统噪声影响,降低信噪比,影响按键的灵敏度。因此,低功耗触摸系统设计需要灵敏,可靠,快速的触摸按键扫描技术。
3. 基于CY8C22x45的低功耗设计实例
Cypress的CY8C22x45系列PSoC®芯片可以有效的实现上述目标。该系列芯片内部包含一个独立硬件实现的CapSense触摸按键扫描模块CSD2X[3],最多可以扫描37个触摸按键。该模块具有两个硬件扫描通道,可以同时完成位于两个通道上一对按键的扫描,提高了按键扫描速度。该模块包含内置的Cx充电电路,结合Cypress的按键基线算法[4],可以在快速扫描按键的同时,有效降低噪声影响。