Часовой модуль — это электронный модуль, который обычно используется для измерения времени и даты. Обычно он включает в себя кварцевый генератор для генерации точного эталонного времени и имеет некоторые схемы управления для настройки и регулировки времени.
В случаях, когда требуется высокая точность часов, модули часов DS1302 и ds3231 могут удовлетворить основные потребности. Ниже я представлю вам определение, схему выводов, параметры, функции и программирование модуля часов ds3231.
Что такое модуль RTC DS3231?
Модуль DS3231 RTC — это популярный модуль реального времени (RTC), который широко используется в электронных проектах. Это небольшое недорогое устройство, обеспечивающее точные функции хронометража и календаря. Модуль DS3231 RTC основан на чипе DS3231, который представляет собой чрезвычайно точный RTC со встроенным кварцевым генератором с температурной компенсацией. Он способен предоставлять информацию о времени и дате с точностью до ±2 ppm.
Модуль DS3231 RTC широко используется в таких приложениях, как регистрация данных, временные метки и системы сигнализации. Он также часто используется в электронных устройствах, требующих точного отсчета времени, таких как камеры, аудиорекордеры и промышленные контроллеры. Модуль прост в использовании и может подключаться к микроконтроллерам, таким как Arduino и Raspberry Pi.
В целом, модуль DS3231 RTC является надежным и точным часовым модулем, который широко используется в различных электронных проектах.
Параметры модуля RTC DS3231
| Parameter | Value |
|---|---|
| Size | 38mm (length), 22mm (width), 14mm (height) |
| Weight | 8g |
| Working voltage | 3.3-5.5V |
| Clock accuracy | ±2ppm from 0°C to +40°C; ±3.5ppm from 40°C to +85°C |
| Calendar alarm clocks | 2 programmable |
| Square wave output | Yes |
| Real-time clock output | Seconds, minutes, hours, weekdays, dates, months and years |
| Leap year compensation | Up to 2100 |
| Temperature sensor | Built-in with ±3°C accuracy |
| Memory chip | AT24C32, 32K storage capacity, IIC bus interface |
| Memory chip features | Maximum transmission speed 400KHz, address can be modified |
| Battery backup | Yes, for continuous timing |
| Operating temperature | Commercial: 0°C to +70°C; Industrial: -40°C to +85°C |
| Power consumption | Low |
| Other features | Aging correction register, RST output, push button reset input |
| UL approved | Yes |
Структура микросхемы часов DS3231
Часовой чип DS3231 состоит из восьми модулей, разделенных на четыре функциональные группы: TCXO, управление питанием, кнопка сброса и RTC.

DS3231 TCXO
TCXO включает в себя датчик температуры, генератор и логику управления. Контроллер считывает выходные данные датчика температуры на микросхеме, использует таблицу поиска для определения требуемой емкости, добавляет поправку на старение из регистра AGE, а затем устанавливает регистр выбора емкости. Новые значения, включая изменения в регистре AGE, загружаются только при изменении температуры или по завершении инициированного пользователем преобразования температуры. Значение температуры считывается при включении питания VCC, а затем каждые 64 секунды.
Управление питанием DS3231
Функция управления питанием обеспечивается температурно-компенсированным эталоном напряжения (VPF) и компараторной схемой, которая контролирует уровень VCC. Когда VCC выше VPF, DS3231 питается от VCC. Когда VCC ниже VPF, но выше VBAT, DS3231 по-прежнему питается от VCC. Когда VCC ниже VPF и ниже VBAT, DS3231 питается от VBAT. Для защиты батареи генератор не запускается при первом подключении VBAT к устройству, если VCC не загружен или в устройство не записан действительный адрес I2C. Типичное время запуска генератора составляет менее 1 секунды. После включения питания VCC или записи действительного адреса I2C устройство измеряет температуру один раз и калибрует генератор, используя рассчитанное значение коррекции, примерно через 2 секунды. После запуска генератор продолжает работать, пока питание (VCC или VBAT) является действительным. Устройство измеряет температуру и калибрует частоту генератора каждые 64 секунды.
Кнопка сброса DS3231
DS3231 имеет функцию кнопочного переключателя, подключенную к выводу RST. Если DS3231 не находится в цикле сброса, он непрерывно контролирует нисходящий фронт сигнала RST. При обнаружении перехода фронта DS3231 завершает дебаунсинг переключателя, опуская RST вниз. После истечения времени внутреннего таймера DS3231 продолжает контролировать сигнал RST. Если сигнал остается на низком уровне, DS3231 продолжает контролировать сигнальную линию для обнаружения нарастающего фронта. Как только кнопка отпускается, DS3231 принудительно устанавливает RST в низкий уровень и поддерживает tRST. RST также может использоваться для индикации сигналов тревоги о сбое питания. Когда VCC ниже VPF, генерируется внутренний сигнал тревоги о сбое питания, и RST переводится в низкий уровень. Если генератор не работает при нагрузке VCC, tREC пропускается, и RST немедленно переходит в высокий уровень.
DS3231 Часы и календарь RTC
Информацию о часах и календаре можно получить, прочитав соответствующие байты регистра. Данные часов и календаря можно установить или инициализировать, записав соответствующие байты регистра. Содержимое регистров часов и календаря представлено в двоично-десятичном кодированном формате (BCD). DS3231 работает в 12-часовом или 24-часовом режиме. Шестой бит регистра часов определяет выбор 12-часового или 24-часового режима. Когда этот бит имеет высокий уровень, выбирается 12-часовой режим. В 12-часовом режиме пятый бит является битом индикатора AM/PM, который имеет высокий логический уровень для PM.
Внутренние регистры и функции DS3231
Адреса регистров DS3231 — 00h~12h, которые используются для хранения секунд, минут, часов, недель, дат и информации о настройках будильника соответственно. При многобайтовом доступе, если адрес достигает 12h в конце пространства ОЗУ, происходит перемотка. В это время происходит переход в начальную позицию, которая является единицей 00h.
Информация о времени и календаре DS3231 устанавливается и инициализируется путем чтения соответствующих регистров. Вспомогательный буфер пользователя используется для предотвращения возможных ошибок при обновлении внутренних регистров. При чтении регистров времени и календаря буфер пользователя находится в любом состоянии START. Или синхронизируйте с внутренним регистром, когда указатель регистра возвращается в нулевое положение.
Информация о времени считывается из этих вспомогательных регистров, и часы продолжают работать в это время, так что можно избежать повторного считывания регистров, когда обновление главного регистра происходит во время операции чтения. На примере регистра управления (адрес 0EH) можно управлять часами реального времени, будильником и выходом прямоугольных импульсов.
Схема выводов DS3231

| Pin Name | Function |
|---|---|
| 32 kHz | 32 kHz frequency output |
| VCC | Used for the DC pin of the main power supply |
| /INT/SQW | Low-level active interrupt or square wave output |
| RST | Reset pin |
| N.C. | Indicates no connection; the external must be grounded |
| GND | Ground |
| VBAT | Backup power input |
| SDA | Serial data input and output |
| SCL | Serial clock input |
Блок-схема DS3231

Программирование модуля RTC DS3231 с Arduino Uno
Необходимые инструменты:
- Arduino Uno x1
- Модуль RTC DS3231 x1
- Перемычка (линия DuPont)
Инструкции по подключению

| Pin on DS3231 RTC Module | Pin on Arduino Uno |
|---|---|
| SCL | A5 |
| SDA | A4 |
| VCC | 5V |
| GND | GND |
Установка библиотеки RTClib
В этом примере используется библиотека RTClib, написанная Adafruit. Сначала установите эту библиотеку.
Проект — Загрузить библиотеки — Управление библиотеками — Введите «RTClib» в поле поиска.
Программирование DS3231
Сначала необходимо загрузить только что установленную библиотеку RTClib.
#include "RTClib.h"
После этого вы можете создать экземпляр DS3231 с именем rtc и вызвать функцию RTC_DS3231.
RTC_DS3231 rtc;
Для настройки времени используются функции rtc.adjust, например:
rtc.adjust(DateTime(to_year, to_month, to_day, to_hours, to_minute, to_second));
Он используется для rtc.now() получения времени DS3231, и возвращаемые данные имеют тип DateTime, который содержит данные года, месяца, дня, часа, минуты и секунды, например:
DateTime now = rtc.now();
// Display the current time of DS3231 through the serial port output
Serial.print(now.year(), DEC); // display the year in decimal
Serial. print('/');
Serial.print(now.month(), DEC);// Display the month in decimal
Serial. print('/');
Serial.print(now.day(), DEC);// Display the day in decimal
Serial. print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial. print(") ");
Serial.print(now.hour(), DEC);// display in decimal
Serial. print(':');
Serial.print(now.minute(), DEC);// Display minutes in decimal
Serial. print(':');
Serial.print(now.second(), DEC);// Display seconds in decimal
Serial. println();
Полный код программы
// by lingshunlab.com
// Load the library of DS3231
#include "RTClib.h"
// create rtc instance
RTC_DS3231 rtc;
String input_string; // Declare the variable input_string to store the data input by the serial port
// Declare a two-dimensional array variable daysOfTheWeek, which is used to match the corresponding week name through the index (index) of the array
char daysOfTheWeek[7][12] = {"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"};
// get serial port data function
void GetSerialStuff(String& input_string) {
String temp_string = ""; // Declare the variable temp_string to temporarily store the data input by the serial port
while(Serial.available()) { // When the serial port has data, loop execution
temp_string += (char)Serial.read(); // Combine the read serial data into the inStr variable one by one
delay(2);
}
input_string = temp_string; // Assign the reference pointer variable to tempStr
}
void setup() {
Serial.begin(9600);
// Initialize rtc,
if (! rtc.begin()) { // If initialization fails, then
Serial.println("Couldn't find RTC");
Serial. flush();
abort(); // program stops
}
}
void loop() {
GetSerialStuff(input_string); // Get the data of the serial port
if(input_string != "") { // If the serial port is not empty, then
int to_year = input_string.substring(0, 4).toInt(); // Intercept year data from string and convert to int data type
int to_month = input_string.substring(5, 7).toInt(); // Intercept the month data from the string and convert it to int data type
int to_day = input_string.substring(8, 10).toInt(); // Intercept the day data from the string and convert it to int data type
int to_hours = input_string.substring(11, 13).toInt(); // Intercept the hour data from the string and convert it to int data type
int to_minute = input_string.substring(14, 16).toInt(); // Intercept minute data from the string and convert it to int data type
int to_second = input_string.substring(17, 19).toInt(); // Intercept the second data from the string and convert it to int data type
// Reset the time of the DS3231 module
rtc.adjust(DateTime(to_year, to_month, to_day, to_hours, to_minute, to_second));
delay(100);
}
// Get the time of DS3231
DateTime now = rtc.now();
// Display the current time of DS3231 through the serial port output
Serial.print(now.year(), DEC); // display the year in decimal
Serial. print('/');
Serial.print(now.month(), DEC);// Display the month in decimal
Serial. print('/');
Serial.print(now.day(), DEC);// Display the day in decimal
Serial. print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial. print(") ");
Serial.print(now.hour(), DEC);// display in decimal
Serial. print(':');
Serial.print(now.minute(), DEC);// Display minutes in decimal
Serial. print(':');
Serial.print(now.second(), DEC);// Display seconds in decimal
Serial. println();
// Display the temperature sensor data of DS3231 through the serial port output
Serial. print("Temperature: ");
Serial.print(rtc.getTemperature());
Serial. println("C");
delay(1000);
}
DS3231 Применение
- Системы сбора данных
- Промышленные системы управления
- Резервное питание от аккумулятора
- Контроль температуры
- Системы контроля доступа
- Медицинские устройства




