Модуль DS3231 RTC

Часовой модуль — это электронный модуль, который обычно используется для измерения времени и даты. Обычно он включает в себя кварцевый генератор для генерации точного эталонного времени и имеет некоторые схемы управления для настройки и регулировки времени.

В случаях, когда требуется высокая точность часов, модули часов DS1302 и ds3231 могут удовлетворить основные потребности. Ниже я представлю вам определение, схему выводов, параметры, функции и программирование модуля часов ds3231.

Что такое модуль RTC DS3231?

Модуль DS3231 RTC — это популярный модуль реального времени (RTC), который широко используется в электронных проектах. Это небольшое недорогое устройство, обеспечивающее точные функции хронометража и календаря. Модуль DS3231 RTC основан на чипе DS3231, который представляет собой чрезвычайно точный RTC со встроенным кварцевым генератором с температурной компенсацией. Он способен предоставлять информацию о времени и дате с точностью до ±2 ppm.

Модуль DS3231 RTC широко используется в таких приложениях, как регистрация данных, временные метки и системы сигнализации. Он также часто используется в электронных устройствах, требующих точного отсчета времени, таких как камеры, аудиорекордеры и промышленные контроллеры. Модуль прост в использовании и может подключаться к микроконтроллерам, таким как Arduino и Raspberry Pi.

В целом, модуль DS3231 RTC является надежным и точным часовым модулем, который широко используется в различных электронных проектах.

Параметры модуля RTC DS3231

ParameterValue
Size38mm (length), 22mm (width), 14mm (height)
Weight8g
Working voltage3.3-5.5V
Clock accuracy±2ppm from 0°C to +40°C; ±3.5ppm from 40°C to +85°C
Calendar alarm clocks2 programmable
Square wave outputYes
Real-time clock outputSeconds, minutes, hours, weekdays, dates, months and years
Leap year compensationUp to 2100
Temperature sensorBuilt-in with ±3°C accuracy
Memory chipAT24C32, 32K storage capacity, IIC bus interface
Memory chip featuresMaximum transmission speed 400KHz, address can be modified
Battery backupYes, for continuous timing
Operating temperatureCommercial: 0°C to +70°C; Industrial: -40°C to +85°C
Power consumptionLow
Other featuresAging correction register, RST output, push button reset input
UL approvedYes

Структура микросхемы часов DS3231

Часовой чип DS3231 состоит из восьми модулей, разделенных на четыре функциональные группы: TCXO, управление питанием, кнопка сброса и RTC.

DS3231 RTC Chip Schematic Diagram
DS3231 RTC Chip Schematic Diagram

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

DS3231 Pin Diagram
DS3231 Pin Diagram
Pin NameFunction
32 kHz32 kHz frequency output
VCCUsed for the DC pin of the main power supply
/INT/SQWLow-level active interrupt or square wave output
RSTReset pin
N.C.Indicates no connection; the external must be grounded
GNDGround
VBATBackup power input
SDASerial data input and output
SCLSerial clock input

Блок-схема DS3231

DS3231 Block Diagram
DS3231 Block Diagram

Программирование модуля RTC DS3231 с Arduino Uno

Необходимые инструменты:

  • Arduino Uno x1
  • Модуль RTC DS3231 x1
  • Перемычка (линия DuPont)

Инструкции по подключению

Connect DS3231 RTC Module with Arduino Uno
Pin on DS3231 RTC ModulePin on Arduino Uno
SCLA5
SDAA4
VCC5V
GNDGND

Установка библиотеки 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 Применение

  • Системы сбора данных
  • Промышленные системы управления
  • Резервное питание от аккумулятора
  • Контроль температуры
  • Системы контроля доступа
  • Медицинские устройства

Поделиться:

Прокрутить вверх

Instant Quote