在一些智能充电器中,单片机要一直监测电池的电压,一旦超过某一数值,就由恒流充电切换到恒压充电。撇开充电器制作相关的各种知识和概念不说我们集中注意力来考察:当电压接近那个设定的临界值时发生的一些事情。
当电压接近临界值的时候,系统还处于恒流充电状态,于是电压开始朝突破临界值的方向上升……在某一时刻,电压突破了临界值,程序检测到了这一数值变化,立即将充电状态由恒流切换为恒压。然而,由于恒流状态时加载在电池上的电压要远远高于恒压时所保持的电压,所以几乎在同一瞬间,单片机监测到的电池电压又跳回了临界值以下——于是,系统又头脑简单地将工作模式切换回了恒流状态……如此反复,在电池电压处于该临界值附近的时候,这样的事情会频繁地发生许多次,直到彻底切换为恒压状态。
以上是从微观角度所假想发生的事情,实际情形也许要更为复杂一些。不过从宏观角度来看,可能发生的现象是:表明充电器充电模式的指示灯频繁地交替闪烁——这不是我们需要的效果。
有什么方法能避免这种令人头痛的事情发生呢?说来很简单,将切换工作模式的临界电压值由一个变为上下两个门限。从恒流切换到恒压状态需要一个较高的门限,这个“较高”是相对原先的单个门限值来说的;从恒压再跳回恒流状态,需要实际电压低于一个相对原先单门限更低的值——高低门限之间的差值至少要大于“当充电器在两种充电模式间切换时造成的前后电压差值的典型大小”。 这里应用的改变充电器充电状态的触发特性,叫做施密特特性。采用软件方式实现这种双门限的触发方式,就称为“软件施密特触发器”。
编写“软件施密特触发器”的要点是:明确“两态”、“两限”。“两态”是指当前状态处于两种状态中的哪一种。数值当前正从小变大或是从大变小,这都是随机和局部的,并不能以此作为决定当前状态的依据。唯一有资格决定当前状态的就是上一次的状态。根据记录的当前状态决定下一步的监测对象,这是最可靠的方法。简单打个比方来说,假设我们处于恒压状态,那么现在我们需要监测的就是下门限;一旦电压低于了下门限,我们的当前状态就变成了恒流状态。于是,我们只要执着于上门限就可以了。而这里说的“两限”就是上下两个门限。