0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >基础知识 > DS17887 3V/5V实时时钟

DS17887 3V/5V实时时钟

来源:
2025-04-15
类别:基础知识
eye 5
文章创建人 拍明芯城

一、引言

DS17887是由Maxim Integrated(原Dallas Semiconductor)生产的一款高性能3V/5V实时时钟(RTC)模块。它集成了实时时钟功能、非易失性存储器(NV RAM)、电源控制电路以及多种增强特性,广泛应用于工业控制、医疗设备、网络接入设备、笔记本电脑等领域。本文将详细介绍DS17887的功能、特点、引脚分配、工作原理、应用实例以及相关的驱动开发等内容。

image.png

二、DS17887概述

DS17887是DS17x87系列实时时钟模块中的一员,该系列还包括DS17287和DS17487。这些模块被设计为行业标准DS12885和DS12887的后续产品,提供了更强大的功能和更高的性能。DS17887采用24引脚DIP封装,集成了石英晶体、锂电池以及必要的时钟电路,构成了一个完整的、自包含的计时模块。

  产品详情

  DS17285, DS17485, DS17885, DS17287, DS17487以及DS17887实时时钟(RTC)是工业标准的DS12885和DS12887的后续产品。DS17285,DS17485和DS17885 (下文以DS17x85代替)提供一个实时时钟/日历,一个定时闹钟,三个可屏蔽中断(共用一个中断输出),可编程方波输出和114字节的电池备份NV SRAM。DS17x85还集成了许多增强特性,例如硅序列号,电源开/关控制电路,和2K、4K或8K字节的电池备份NV SRAM。DS17287,DS17487和DS17887 (下文以DS17x87代替)在24引脚DIP模块封装内集成了晶振和锂电池。DS17x85和DS17x87的电源控制电路允许系统通过外部激励开启电源,例如键盘或时间和日期(唤醒)闹钟。/PWR输出引脚可被任一此类事件触发,并可用于开启外部电源。/PWR引脚受软件控制,以便在某个任务完成后,能够接着关断系统电源。

  对于所有少于31天的月份,所有器件的日期都能够在月末自动调整,并带有闰年补偿。该器件可配置为24小时或12小时格式,并且带有AM/PM指示。精确的温度补偿电路用于监控VCC。一旦检测到主电源失效,器件可以自动切换到备用电源。钮扣式锂电池可以连接到DS17x85的VBAT输入引脚,在主电源掉电时保持有效的时间和日期。DS17x85和DS17x87还包括了VBAUX输入,用于电源辅助功能,例如/PWR控制。该器件通过一个复用的、字节宽度接口访问。

  应用

  嵌入式系统

  网络集线器、桥接器和路由器

  安全系统

  电表

  特性

  集成了工业标准的DS12887 PC时钟外加增强特性

  RTC计算秒、分、时、星期、日期、月份和年,并且具有闰年补偿,有效期至2099年

  可选的+3.0V或+5.0V工作电压

  SMI恢复堆栈

  64位硅序列号

  电源控制电路,支持系统通过日期/时间闹钟或键盘开启电源

  晶体选择位,允许RTC工作于6pF或12.5pF晶体

  12小时或24小时时钟,具有带AM和PM指示的12小时模式

  114字节通用、电池备份NV SRAM

  扩展的电池备份NV SRAM

  2048字节(DS17285/DS17287)

  4096字节(DS17485/DS17487)

  8192字节(DS17885/DS17887)

  RAM清除功能

  中断输出,带6个独立的可屏蔽中断标志

  闹钟可设置为每秒一次至每天一次

  时钟终止刷新周期标志

  可编程方波输出

  自动电源失效检测和切换电路

  可选择PDIP、SO或TSOP封装(DS17285,DS17485,DS17885)

  可选择集成晶体和电池的DIP模块封装(DS17287,DS17487,DS17887)

  可选择工业级温度范围

  通过UL认证

三、主要功能与特点

1. 实时时钟功能

DS17887能够精确计时,包括秒、分、时、日、月、年,并且具有闰年补偿功能,其计时算法的有效期至2100年。这确保了时钟在长时间运行中的准确性。

2. 多电源支持

DS17887支持+3V或+5V的工作电压,使其能够兼容多种不同的电源系统。此外,它还具备电源控制电路,允许系统通过外部激励(如键盘输入或时间和日期报警)来开启电源。

3. 非易失性存储器

该模块内置了114字节的用户NV RAM以及额外的8kB NV RAM,用于存储关键数据。这些数据在主电源掉电时仍能保持不变,确保了数据的完整性和可靠性。

4. 增强特性

DS17887还具备多种增强特性,如64位硅序列号、SMI恢复堆栈、世纪寄存器、日期报警寄存器等。这些特性使得DS17887在复杂的应用场景中能够发挥更大的作用。

5. 灵活的时间格式

DS17887支持12小时或24小时的时间格式,并且在12小时模式下还具备AM/PM指示功能。这为用户提供了更加灵活的时间显示方式。

6. 精确的温度补偿

模块内部集成了精确的温度补偿电路,能够监控VCC的状态。一旦检测到主电源失效,DS17887会自动切换到备用电源(如锂电池),确保时钟和数据的持续运行。

四、引脚分配与功能描述

DS17887采用24引脚DIP封装,其引脚分配如下:


引脚号引脚名称功能描述
1PWR电源输出引脚,用于触发外部电源开启
2X1晶振输入引脚
3X2晶振输出引脚
4-11AD0-AD7复用的地址/数据总线引脚
12GND地引脚
13VCC主电源输入引脚(+3V或+5V)
14SQW方波输出引脚,提供32kHz的方波信号
15VBAUX辅助电池输入引脚,用于驱动辅助功能
16RCLRRAM清零输入引脚,用于清除RAM中的数据
17VBAT电池输入引脚,连接锂电池以维持时钟和数据运行
18IRQ中断请求输出引脚,低电平有效
19KSKickstart输入引脚,用于初始化时钟
20RD读数据选通引脚,低电平有效
21GND地引脚
22WR写数据选通引脚,低电平有效
23ALE地址选通输入引脚,高电平有效
24CS片选输入引脚,低电平有效


五、工作原理

DS17887的工作原理主要基于其内部的实时时钟电路、电源控制电路以及非易失性存储器。以下是对其工作原理的详细介绍:

1. 实时时钟电路

DS17887内部的实时时钟电路由石英晶体振荡器、分频器、计数器以及校准电路等组成。石英晶体振荡器产生稳定的振荡信号,经过分频器分频后得到秒、分、时等时间单位。计数器则对这些时间单位进行计数,从而得到当前的时间。校准电路用于对时钟进行校准,确保时钟的准确性。

2. 电源控制电路

电源控制电路负责监测主电源和备用电源的状态,并根据需要切换电源。当主电源正常时,电源控制电路将主电源提供给模块内部的各个电路。当主电源失效时,电源控制电路会自动切换到备用电源(如锂电池),确保时钟和数据的持续运行。

3. 非易失性存储器

非易失性存储器用于存储关键数据,如时间、日期、报警设置等。这些数据在主电源掉电时仍能保持不变,因为非易失性存储器具有掉电保持功能。当主电源恢复时,这些数据可以被重新读取并使用。

六、应用实例

DS17887因其强大的功能和可靠性而被广泛应用于各种领域。以下是一些典型的应用实例:

1. 工业控制

在工业控制系统中,DS17887可以用于记录设备的工作时间、故障时间等关键信息。这些信息对于设备的维护和管理至关重要。同时,DS17887的电源控制电路还可以实现设备的远程唤醒功能,提高系统的灵活性和可靠性。

2. 医疗设备

在医疗设备中,DS17887可以用于记录患者的治疗时间、用药时间等关键信息。这些信息对于医生的治疗决策和患者的康复至关重要。此外,DS17887的高精度时钟还可以确保医疗设备的精确运行。

3. 网络接入设备

在网络接入设备中,DS17887可以用于记录设备的上线时间、下线时间等关键信息。这些信息对于网络管理员的网络管理和优化至关重要。同时,DS17887的实时时钟功能还可以确保网络接入设备的精确同步。

4. 笔记本电脑

在笔记本电脑中,DS17887可以用于记录系统的启动时间、关机时间等关键信息。这些信息对于用户了解系统的使用情况以及进行系统维护至关重要。此外,DS17887的电源控制电路还可以实现笔记本电脑的定时开关机功能,提高用户的使用体验。

七、驱动开发

为了使用DS17887实时时钟模块,需要开发相应的驱动程序。以下是一个基于C语言的DS17887驱动开发示例:


#include <stdint.h>

#include <stdbool.h>



// 定义DS17887对象类型

typedef struct Ds17887Object {

uint8_t ctlReg[4];  // 控制寄存器

uint16_t dateTime[6];  // 读取的系统时间

void (*SetCtlPin[6])(bool value);  // 控制引脚操作

void (*WriteByte)(uint16_t data);  // 写一个字节

uint16_t (*ReadByte)(void);  // 读一个字节

void (*SetBusDirection)(bool direction);  // 设置总线方向

void (*Delayus)(volatile uint32_t nTime);  // 延时操作

} Ds17887ObjectType;



// 初始化DS17887对象

void InitDs17887(Ds17887ObjectType *ds17887) {

// 初始化控制寄存器

for (int i = 0; i < 4; i++) {

ds17887->ctlReg[i] = 0;

}

// 初始化系统时间

for (int i = 0; i < 6; i++) {

ds17887->dateTime[i] = 0;

}

// 初始化控制引脚操作函数指针

for (int i = 0; i < 6; i++) {

ds17887->SetCtlPin[i] = NULL;

}

// 初始化读写字节函数指针

ds17887->WriteByte = NULL;

ds17887->ReadByte = NULL;

// 初始化设置总线方向函数指针

ds17887->SetBusDirection = NULL;

// 初始化延时操作函数指针

ds17887->Delayus = NULL;

}



// 从DS17887读数据

static uint16_t ReadDataFromDS17887(Ds17887ObjectType *ds17887, uint16_t address) {

// 将片选信号置位,失能片选

ds17887->SetCtlPin[DS17887_CS](true);

// 将RD与WR置位

ds17887->SetCtlPin[DS17887_WR](true);

ds17887->SetCtlPin[DS17887_RD](true);

ds17887->Delayus(2);

// 置位ALE

ds17887->SetCtlPin[DS17887_ALE](true);

// 将地址数据总线的模式改为输出

ds17887->SetBusDirection(true);

// 写寄存器地址

ds17887->WriteByte(address);

// 将片选信号置位,使能片选

ds17887->SetCtlPin[DS17887_CS](false);

ds17887->Delayus(2);

// 复位ALE

ds17887->SetCtlPin[DS17887_ALE](false);

ds17887->Delayus(2);

// 复位RD

ds17887->SetCtlPin[DS17887_RD](false);

ds17887->Delayus(10);

// 将地址数据总线的模式改为输入

ds17887->SetBusDirection(false);

ds17887->Delayus(40);

// 读取数据

uint16_t readData = 0;

readData = ds17887->ReadByte();

ds17887->Delayus(4);

// 将RD置位,并将CS信号置位,失能芯片

ds17887->SetCtlPin[DS17887_RD](true);

ds17887->SetCtlPin[DS17887_CS](true);

ds17887->Delayus(4);

return readData;

}



// 向DS17887写数据

static void WriteDataToDS17887(Ds17887ObjectType *ds17887, uint16_t address, uint16_t data) {

// 将片选信号置位,失能片选

ds17887->SetCtlPin[DS17887_CS](true);

// 将RD与WR置位

ds17887->SetCtlPin[DS17887_WR](true);

ds17887->SetCtlPin[DS17887_RD](true);

ds17887->Delayus(2);

// 置位ALE

ds17887->SetCtlPin[DS17887_ALE](true);

// 将地址数据总线的模式改为输出

ds17887->SetBusDirection(true);

// 写寄存器地址

ds17887->WriteByte(address);

// 将片选信号置位,使能片选

ds17887->SetCtlPin[DS17887_CS](false);

ds17887->Delayus(2);

// 复位ALE

ds17887->SetCtlPin[DS17887_ALE](false);

ds17887->Delayus(2);

// 写数据

ds17887->WriteByte(data);

ds17887->Delayus(40);

// 将WR置位

ds17887->SetCtlPin[DS17887_WR](true);

ds17887->Delayus(4);

// 将CS信号置位,失能芯片

ds17887->SetCtlPin[DS17887_CS](true);

ds17887->Delayus(4);

}



// 获取当前时间

void GetCurrentTime(Ds17887ObjectType *ds17887) {

// 读取时间寄存器

for (int i = 0; i < 6; i++) {

ds17887->dateTime[i] = ReadDataFromDS17887(ds17887, TIME_REGISTER_BASE + i);

}

}



// 设置当前时间

void SetCurrentTime(Ds17887ObjectType *ds17887, uint16_t *timeData) {

// 写入时间寄存器

for (int i = 0; i < 6; i++) {

WriteDataToDS17887(ds17887, TIME_REGISTER_BASE + i, timeData[i]);

}

}

八、总结

DS17887是一款功能强大、性能可靠的3V/5V实时时钟模块。它集成了实时时钟功能、非易失性存储器、电源控制电路以及多种增强特性,能够满足各种复杂应用场景的需求。通过开发相应的驱动程序,可以方便地实现对DS17887的控制和数据读写操作。在未来的发展中,随着物联网、智能家居等领域的不断兴起,DS17887等实时时钟模块的应用前景将更加广阔。

责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

资讯推荐
云母电容公司_云母电容生产厂商

云母电容公司_云母电容生产厂商

开关三极管13007的规格参数、引脚图、开关电源电路图?三极管13007可以用什么型号替代?

开关三极管13007的规格参数、引脚图、开关电源电路图?三极管13007可以用什么型号替代?

74ls74中文资料汇总(74ls74引脚图及功能_内部结构及应用电路)

74ls74中文资料汇总(74ls74引脚图及功能_内部结构及应用电路)

芯片lm2596s开关电压调节器的中文资料_引脚图及功能_内部结构及原理图_电路图及封装

芯片lm2596s开关电压调节器的中文资料_引脚图及功能_内部结构及原理图_电路图及封装

芯片UA741运算放大器的资料及参数_引脚图及功能_电路原理图?ua741运算放大器的替代型号有哪些?

芯片UA741运算放大器的资料及参数_引脚图及功能_电路原理图?ua741运算放大器的替代型号有哪些?

28nm光刻机卡住“02专项”——对于督工部分观点的批判(睡前消息353期)

28nm光刻机卡住“02专项”——对于督工部分观点的批判(睡前消息353期)

拍明芯城微信图标

各大手机应用商城搜索“拍明芯城”

下载客户端,随时随地买卖元器件!

拍明芯城公众号
拍明芯城抖音
拍明芯城b站
拍明芯城头条
拍明芯城微博
拍明芯城视频号
拍明
广告
恒捷广告
广告
深亚广告
广告
原厂直供
广告