【原创】基于MC9S08LL16的水表气表设计
0赞MC908ll16是飞思卡尔最近推出的面向低功耗应用的新款处理器,该款处理器内置lcd驱动电路可以实现8x24或者4x28lcd显示。这篇博文将重点介绍使用mc9s08ll16完成水表气表设计。
MC908LL16的主要功能
MC908LL16 是Freescale 基于HCS08 核的8 位单片机。具有极低功耗,内置LCD驱动及丰富的外围接口。LL16 的主要特性如下:
• 低工作电压1.8V-3.6V
• 最大总线频率10Mhz
• 内置琐频环电路FLL
• 16K FLASH 程序空间
• 2K 字节RAM
• 2 个16 位定时器
• 实时时钟计数器 TOD
• 8 路12 位A/D
• 模拟比较器
• 内置LCD 驱动,可配置为8*24 或4*28
• 1 个外部中断和8 个外部键盘中断KBI
• 内部RC 振荡器的看门狗
• 低电压检测电路LVI
• 1 个SPI,I2C,SCI
MC9S08LL16的低功耗特性
在水表气表中的应用中, 都是电池供电, 所以低功耗是设计中首要考虑的因素。系统功耗由两部分组成: 单片机本身的功耗和外部电路的功耗。 由于外部电路的功耗基本上是固定的,因此选用低功耗的单片机至关重要。LL16 是目前业界功耗最低的单片机之一。 单片机本身的功耗包括正常运行时的功耗和睡眠时的功耗。 在水表气表中的应用中, 由于平时大部分时间工作于睡眠状态, 因此睡眠时的电流至关重要, 睡眠时的功耗主要决定系统的平均功耗。下图为LL16 各种模式下的电流参数表:
从表中看出, 睡眠3(STOP3 )模式的电流为 400nA, 睡眠2(STOP2 )模式的电流为 350nA。由于STOP2 与STOP3 功耗相差不大,但是STOP2 下可以保持工作的外设很少,并且从STOP2 唤醒的条件严格得多,从STOP2 唤醒后,程序也会从起点处重新执行,且所有寄存器设置会回到默认状态, 因此建议采用STOP3 模式。在水表气表中的应用中, 进入睡眠时, LCD 屏需要常亮, 外部32.768 kHz 的晶振不能停振,因为TOD 模块采用外部32.768 kHz 的晶振作为时钟源实现软时钟。 把这些模块的功耗考虑进去, 那么进入睡眠状态时, LCD 常亮, TOD 模块工作(定时唤醒MCU),外部32.768 kHz 的晶振工作, MCU 本身的功耗仅为2uA 左右。另外有一个参数对系统功耗的影响也非常重要, 即从睡眠模式唤醒的时间。 唤醒时间越短越好, 因为唤醒的过程中, 功耗会比较大。 LL16 从睡眠3(STOP3 )模式唤醒的时间非常短, 只有6uS, 大大低于业界的大部分同类产品。下面将以LL16 在预付费IC 卡气表中的应用为例, 介绍各模块的使用。
IC卡气表的原理框图
下图为预付费IC 卡气表的原理框图:
电源电路
气表和水表采用电池供电,气表一般采用碱性电池或锂电池。 如果采用碱性电池,一般使用四节。 因此电池电压需经LDO 降压到3V 供给MCU。 由于IC 卡有5V工作的或3V 工作的,如果采用5V 的IC 卡, 电池电压需经另一LDO 降压到5V。水表普遍采用锂电池供电, 电池电压可以不需需经LDO 降压直接供给MCU。下图为采用四节碱性电池供电, 5V 工作的IC 卡的电源电路:
晶振电路
LL16 内部有琐相环电路可以把MCU 运行的总线频率倍频上去, 最高可以倍频到20Mhz。 同时LL16 内部有RC 振荡器, 校准后的精度可以达到±2%(全温度范围最大误差。常温下该精度为±0.2%)。 由于在本参考设计中使用软时钟, 所以选择外接32.768k 的晶振, 以保证时钟的精度。时钟模块的初始化程序如下:
EEPROM接口电路
由于在气表水表应用中,需要不断地保存信息,例如:时间,当前用气/水量,剩余用气/水量,等。因此需要EEPROM来保存这些数据。虽然LL16 的FLASH 可以用来模拟EEPROM, 但LL16 FLASH 的擦写次数有限,为10 万次,可能 满足不了气表水表应用的需求。 因此需外接EEPROM。下面以外接24LC64 为例介绍它的接口应用, 硬件接口电路如下:
为了降低功耗, 24LC64 的电源通过I/O 口 PTB6 控制。当需要读写24LC64 时,PTB6 输出高电平, 给24LC64 供电,否则输出低电平, 关闭24LC64 的电源。
IC卡接口电路
在气表应用中,根据存储介质的不同有CPU 卡,IC 卡,RF 卡等。由于IC 卡具有保密性强, 数据容量大,使用方便, 成本低等特点, 因此在预付费卡表普遍应用。 目前普遍采用的是SLE442。 这里以SLE4442 为例,介绍IC 卡如何与LL16 进行接口及操作。
SLE4442 是西门子公司推出的内置256 字节智能IC, 具有写保护和安全代码可编程等特点。 由于LL16 工作在3V, 如果采用5V 的SLE4442,需要电平转换。下图为LL16 与SLE4442 的接口电路图。
PTA1,A2 与数据线DATA 相连, PTA0 与时钟线CLK 相连, PTC7 与复位脚RST 相连。 PTA3 控制SLE4442 的电源。 对SLE4442 的操作主要包括读写SLE4442的主存储器, 保护区存储器和安全区存储器。 对SLE4442 写操作之前,必须先进行安全认证。 如果连续三次认证失败, 则IC 卡被作废, 再也无法使用。PTA5,A4 用于插卡检测, 检测IC 卡是否插入卡座。 可以采用定时查询的方式或中
断方式。
下面以读主存储器起始地址为0x20 的3 个字节为例说明它的编程:
电池电压检测
由于气表采用电池供电, 因此需对电池电压进行监测, 在电池耗尽之前, 报警提醒用户更换电池。 虽然LL16 内部有掉电检测电路LVI, 但使能该模块将消耗较大的电流, 所以不宜采用。 可以利用LL16 内部模拟比较器或A/D 模块监测电池电压,A/D 模块或内部模拟比较器会消耗一定的功耗, 为了降低功耗, 可以采用定时检测的方法, 因为电池电压是缓慢下降的。
在水表中, 如果采用锂电池直接供电, 这里介绍一种简便的方法用于电池电压检测:在LL16 的内部ADC 模块上,已经包含了一个1.2V 的带隙基准电压,其输出直接连接到ADC 的一个输入通道;同时,VREFH 也作为ADC 的另一个输入通道,因此可以不用借助外部电路,定时采样基准电压的输出,由此换算出电池电压。这种方法的好处是,不需要外部任何器件, 既节省成本又节省空间,而且可以获知当前准确的电池电压。
另外,该基准电压也可以在芯片内部作为模拟比较器的同相输入,可以利用该功能实现低电压报警。
电机驱动电路
在气表应用中,采用直流电机来开关阀门。 其驱动电路普遍采用H 桥电路, 如下图。此电路成本低,可靠性高。
当PTC3,PTC4 同时输出高电平或低电平时, 电机不工作。 当PTC3 输出高,PTC4 输出低时, 电机向一个方向转动。 当PTC3 输出高, PTC4 输出低时, 电机向反方向转动。 PTC2 用作电机到位检测。
软时钟的实现
由于在气表水表应用中, 对时钟的要求并不是特别精确, 因此可以利用LL16 的TOD 模块方便地实现软时钟, 从而省去外部的实时时钟芯片, 降低系统成本。 TOD模块使用非常简单, 下图为它的内部结构图:
TOD 的时钟源有三个, 即内倍的1 kHz RC 振荡器, ICSIRCK 时钟及外部晶振时钟。考虑到精度因素, 所以选用外部32.768k 晶振作为时钟源。 TOD 模块对时钟源进行计数,可产生1S 或1/4S 中断。 因此可利用这1 秒钟一次的中断实现软时钟。 同时此中断把CPU 从睡眠模式唤醒, 用来查询IC 卡座, 流量脉冲计数,以及电池电压检测等。TOD 的初始化如下:
LCD 驱动
LL16 内部有LCD 驱动模块, 可配置为24*8,或28*4。 LCD 与I/O 复用, 多余的段可设为普通I/O。注意,所有和LCD 驱动复用的GPIO,在作为I/O 功能使用时,其输出模式为开漏,需要外接上拉电阻。LCD 驱动是LL16 的一大特色, 具有许多优越的性能。
• 低功耗, LCD 模块仅消耗900nA 的电流
• 可配置为24*8 即8COM端驱动模式, 从而节省更多的I/O 口
• COM 和SEGMENT 可随意配置, 方便布线, 从而提高EMC 性能。
• 具有频率可调的闪烁功能, MCU 在睡眠模式仍然工作, 从而达到更省电的目的。
• 内置电荷泵, 产生LCD 驱动所需的偏置电压
• 内置可调的稳压电压源, 此稳压电压源可作为LCD 的输入电压, 通过内置电荷泵, 产生LCD 驱动所需的偏置电压。 当电池电压降低时, 可保证LCD 的对比度不受影响, 这一点对水表设计非常有用。
• LCD 的输入电压有多个选择, 可支持3V 或5V 的LCD 屏
LCD 的外部电路非常简单,只需几个电容, 见下图。
如果采用四节干电池供电, 由于6V 的电源电压经过LDO 产生稳定的3V 作为MCU 的电源, 所以LCD 的输入电源可选为VLL3=VDD。LCD 驱动模块的初始化如下:
如果采用锂电池直接供给MCU, LCD 的输入电源可选为来自于MCU 内部的稳压电源,这样的好处是, 对比度不会因为电池电压的降低而受影响。LCD 驱动模块的初始化如下:
流量脉冲检测:
目前普遍采用双干簧管进行流量检测,其缺点是没有霍尔传感器稳定。 但霍尔传感器功耗相对要大,成本要高。 随着成本的逐渐减低,将来霍尔传感器有取代双干簧管的趋势。 双干簧管把流量信号转换成脉冲信号, 因此利用I/O 口可以很方便地检测流量脉冲信号。 为了降低功耗, 检测电路的电源通过IO 口进行控制。 由于气/水表的流量脉冲信号之间的间隔比较长, 因此可以采用定时查询来计数脉冲个数, 也可以接到键盘中断口利用中断方式检测。下图为接口电路图。其中:PTB7 用做断线检测。 PTC0,PTC1 用做流量脉冲的检测。
蜂鸣器电路
蜂鸣器电路如下:
总结:
由于LL16 具有超低功耗, 内置LCD 驱动及丰富的外围接口, 性价比高等特点, 因此非常适合于在水表气表中的设计应用。欢迎大家交流。谢谢啦