Перейти к содержанию

Часы реального времени DS3231: подключение к микроконтроллеру

DS3231 — часы реального времени с термокомпенсированным кварцем внутри: от 0 до 40 °C они уходят не больше чем на ±2 ppm, около минуты в год. Разбираем подключение к микроконтроллеру на 3,3 В по даташиту Maxim (теперь Analog Devices): подтяжки шины, батарея и сколько она проживёт, прерывание от будильника, вывод 32 кГц, который по умолчанию включён и зря тратит ток, и подстройка хода регистром старения.

Обновлено Редакция GAW

DS3231 — часы реального времени с шиной I²C, у которых кварц на 32 768 Гц и схема термокомпенсации встроены в корпус. Раз в 64 секунды микросхема меряет температуру и подстраивает ёмкость нагрузки кварца (19-5170, с. 10), поэтому ход нормирован как ±2 ppm от 0 до 40 °C — около минуты в год. Регистры, будильники и код чтения времени разобраны в статье «DS3231 и DS1307»; здесь — схема подключения и расчёт её элементов.

Коротко

Питание VCC и VBAT
2,3–5,5 В
Адрес I²C
1101000 (0x68), до 400 кГц
Ток от батареи
0,84 мкА тип., 3,0 мкА макс.
Точность
±2 ppm (0–40 °C), ±3,5 ppm (−40–85 °C)
INT/SQW, 32kHz
открытый сток, подтяжка до 5,5 В
Регистр старения
≈ 0,1 ppm на единицу при 25 °C

Схема

Подключение DS3231 к STM32F103 по I²C с батареей CR2032Микросхема DS3231 питается от шины 3,3 В через вывод VCC (2), рядом с ним — конденсатор C1 0,1 мкФ на общий провод. К выводу VBAT (14) подключён плюс батареи GB1 CR2032, минус — на общий провод. Выводы SCL (16) и SDA (15) соединены с PB6 и PB7 микроконтроллера STM32F103 и подтянуты к 3,3 В резисторами R1 и R2 по 4,7 кОм. Выход INT/SQW (3) с открытым стоком подтянут резистором R3 10 кОм к 3,3 В и подключён к входу PB5 с внешним прерыванием. Выводы 32kHz (1) и RST (4) не подключены. Вывод GND (13) и неиспользуемые выводы 5–12 соединены с общим проводом. Вертикальные провода подтяжек пересекают линии SCL и SDA без соединения — в местах пересечения линии обходят их дугой.+3,3 ВC10,1 мкФ+GB1CR2032DA1DS3231SNVCC2VBAT14SCL16SDA15INT/SQW332kHz1RST4GND13N.C.5–12R14,7 кОмR24,7 кОмR310 кОмне подключённе подключёнSTM32F103PB6 I2C1_SCLPB7 I2C1_SDAPB5 EXTI5

DS3231 и микроконтроллер питаются от одной шины 3,3 В. Выводы — по корпусу SO-16 (19-5170, с. 9):

  • VCC (2) — основное питание, рядом конденсатор 0,1–1 мкФ.
  • VBAT (14) — батарея. Если батарея не нужна, вывод соединяют с общим проводом.
  • SCL (16), SDA (15) — шина I²C, подтяжки обязательны. На STM32F103 это PB6 и PB7, выводы I2C1 (DS5319, табл. 5).
  • INT/SQW (3) — прерывание от будильника или меандр, открытый сток.
  • 32kHz (1) — выход опорной частоты, открытый сток.
  • RST (4) — выход сброса и вход кнопки, внутри подтянут к VCC резистором 50 кОм; внешнюю подтяжку ставить нельзя.
  • N.C. (5–12) — у микросхемы в корпусе SO-16 все соединяют с общим проводом, так требует даташит.

На готовых модулях с DS3231 подтяжки и конденсатор обычно уже стоят — проверьте, чтобы не получить параллельно две пары подтяжек.

Расчёт

Подтяжки шины

Наименьшее сопротивление ограничено током, который выдерживает вывод в нуле: DS3231 гарантирует 0,4 В при 3 мА (19-5170, с. 2), как и спецификация I²C. Наибольшее — временем нарастания: в режиме 400 кГц не больше 300 нс (UM10204, разд. 7.1):

Rmin=3,3−0,43 мА=967 Ом,R_\text{min} = \frac{3{,}3 - 0{,}4}{3\ \text{мА}} = 967\ \text{Ом},
Rmax=300 нс0,8473⋅Cb.R_\text{max} = \frac{300\ \text{нс}}{0{,}8473 \cdot C_b}.

Ёмкость линии: 10 пФ у DS3231, 5 пФ у вывода STM32F103 (DS5319, табл. 36) плюс дорожки и провода модуля — примем 50 пФ. Тогда Rmax = 7,08 кОм. Калькулятор предлагает середину диапазона, 2,7 кОм; мы берём 4,7 кОм — фронт 199 нс, ток в нуле 0,62 мА, то есть меньше потребление, когда шина активна. Для длинной шины или нескольких модулей пересчитайте:

Исходные данные

В

обычно 3,3 или 5 В

Режим (максимальная частота SCL)
пФ

до 10 пФ на вывод каждого устройства плюс дорожки и провода

Результат

Рекомендуемый Rp
2,7 кОм
ряд E24, середина допустимого диапазона
Минимум Rp
967 Ом(3,3 В − 0,4 В) / 3 мА
Максимум Rp
7,08 кОм300 нс / (0,8473 · 50 пФ)
Подходят из ряда E24
1 кОм … 6,8 кОм, всего 21
Время нарастания с 2,7 кОм
114 нснорма до 300 нс
Ток ключа при VOL = 0,4 В
1,1 мАдопустимо до 3 мА

DS3231 допускает подтяжку SDA и SCL к напряжению до 5,5 В независимо от VCC, но порог единицы — 0,7 · VCC самой микросхемы. Поэтому питать DS3231 от 5 В при шине 3,3 В нельзя: единица 3,3 В будет ниже порога 3,5 В.

Батарея

DS3231 переходит на батарею, когда VCC падает ниже порога VPF (2,45–2,70 В) и ниже напряжения батареи (19-5170, табл. 1). Ток хранения времени от батареи — 0,84 мкА типично и не больше 3,0 мкА при 3,63 В; в нём уже учтены температурные измерения раз в 64 секунды. Energizer даёт для CR2032 типичную ёмкость 235 мА·ч. Оценка срока по наибольшему току:

235 мА⋅ч3,0 мкА≈78 000 ч≈9 лет.\frac{235\ \text{мА·ч}}{3{,}0\ \text{мкА}} \approx 78\,000\ \text{ч} \approx 9\ \text{лет}.

Это оценка сверху по ёмкости и снизу по току. Три поправки:

  1. Energizer меряет ёмкость до 2,0 В при 21 °C, а DS3231 работает от 2,3 В — часть ёмкости недоступна.
  2. Обращение к часам по I²C при питании от батареи поднимает ток до 70 мкА (IBATA): шину включают только при основном питании.
  3. Батарея рассчитана на −30…+60 °C — в машине на солнце или на улице зимой её срок сокращается.

Если часы не нужны до момента установки, бит EOSC = 1 останавливает генератор на батарее, и ток падает до 100 нА — это режим хранения на складе.

Подзаряд. CR2032 — не аккумулятор: Energizer допускает обратный ток не больше 1 мкА. DS3231 сам батарею не заряжает (Maxim пишет, что защита от обратного заряда подтверждена UL), но если на модуле стоит цепь подзаряда от VCC — резистор и диод к VBAT, — с CR2032 её разрывают.

INT/SQW: прерывание от будильника

После включения питания вывод INT/SQW работает как выход прерывания, будильники выключены (INTCN = 1). При совпадении времени с будильником микросхема ставит флаг A1F или A2F и, если будильник разрешён битом A1IE или A2IE, тянет вывод в ноль. Ноль держится, пока программа не сбросит флаг записью нуля.

Подтяжка R3 10 кОм к 3,3 В даёт ток 0,33 мА, пока вывод в нуле; это допустимо (до 3 мА при 0,4 В). Вход PB5 настраивают на прерывание по спаду. Если INTCN = 0, тот же вывод выдаёт меандр 1 Гц, 1,024, 4,096 или 8,192 кГц — по битам RS2, RS1.

При питании от батареи вывод по умолчанию отключён: с BBSQW = 0 он переходит в высокоимпедансное состояние, когда VCC ниже VPF (19-5170, с. 13). Чтобы будить выключенное устройство будильником от батареи, этот бит нужно установить, а подтяжку — питать от источника, который при этом есть.

Вывод 32kHz

Вывод выдаёт 32 768 Гц от того же термокомпенсированного генератора и включён сразу после подачи питания (EN32kHz = 1). Если он не нужен, его оставляют свободным — так разрешает даташит — или выключают битом EN32kHz. Подтяжка 10 кОм к 3,3 В на работающем выходе тратила бы в среднем

3,3 В10 кОм⋅0,5≈0,17 мА.\frac{3{,}3\ \text{В}}{10\ \text{кОм}} \cdot 0{,}5 \approx 0{,}17\ \text{мА}.

Частоту 32 кГц можно подать на вход таймера микроконтроллера, чтобы считать интервалы точнее его собственного генератора. Подавать её на OSC32_IN STM32F103 вместо кварца LSE затруднительно: ST требует фронты не длиннее 50 нс (DS5319, табл. 21), а фронт выхода с открытым стоком задаёт подтяжка. На ёмкости около 15 пФ (10 пФ вывода DS3231 и 5 пФ OSC32_IN) фронт по уровням 10–90 % — примерно 2,2 · R · C: 155 нс с 4,7 кОм и 330 нс с 10 кОм. Уложиться в 50 нс можно с подтяжкой около 1 кОм (33 нс), но это 3,3 мА в нуле — на пределе выхода, для которого DS3231 гарантирует 0,4 В при 3 мА.

Точность хода и регистр старения

УсловияОтклонениеВ суткиВ год
0…+40 °C±2 ppm±0,17 с±63 с
−40…0 °C и +40…+85 °C±3,5 ppm±0,30 с±110 с
Старение кварца, первый год±1 ppm±0,09 с±32 с
Старение кварца, 10 лет±5 ppm±0,43 с±158 с

Точность нормирована при регистре старения 00h и напряжении 3,3 В; от напряжения частота меняется типично на 1 ppm на вольт (19-5170, с. 3). Старение кварца в диапазон ±2 ppm не входит и по даташиту не проверяется в производстве.

Подстройка. Регистр старения 10h — число со знаком в дополнительном коде. Положительное значение добавляет ёмкость к кварцу и замедляет ход, отрицательное — ускоряет; при 25 °C единица регистра — примерно 0,1 ppm (при −40 °C — 0,7 ppm, при +85 °C — 0,8 ppm). Пример: за 30 суток часы ушли вперёд на 4 с — это

4 с30⋅86 400 с≈1,5 ppm,\frac{4\ \text{с}}{30 \cdot 86\,400\ \text{с}} \approx 1{,}5\ \text{ppm},

и в регистр записывают +15 (0Fh). Новое значение применяется, когда изменится измеренная температура или после преобразования по команде; чтобы увидеть результат сразу, запускают преобразование битом CONV (19-5170, с. 14). Подстройку делают при той температуре, при которой часы работают, — на краях диапазона цена единицы другая.

Чем отличается DS1307

ПараметрDS3231DS1307
Питание2,3–5,5 В4,5–5,5 В
Кварцвстроенный, с термокомпенсациейвнешний 32 768 Гц, CL 12,5 пФ
Точность±2 ppm (0–40 °C)определяется кварцем и разводкой
Ток от батареи0,84/3,0 мкА300/500 нА
Батарея2,3–5,5 В2,0–3,5 В

DS1307 при питании 3,3 В не работает вовсе, поэтому для схемы на 3,3 В выбор однозначен. Подробное сравнение — в статье «DS3231 и DS1307», кварц для DS1307 и микроконтроллеров — на странице «Кварцевый генератор».

Детали

ПозицияДетальПримечание
DA1DS3231SN−40…+85 °C; DS3231S — 0…+70 °C
C10,1 мкФу вывода VCC
GB1CR2032с держателем
R1, R24,7 кОмподтяжки SCL, SDA; от 967 Ом до 7,08 кОм при 50 пФ
R310 кОмподтяжка INT/SQW

Почему не работает

  • Время сбрасывается на 01.01.00 после каждого включения. Батарея села, не вставлена или VBAT соединён с общим проводом. Проверьте и флаг OSF: он показывает, что генератор останавливался.
  • Микросхема не отвечает на шине после сброса микроконтроллера. Сброс пришёлся на середину чтения, и DS3231 держит SDA в нуле. Даташит советует подать на SCL импульсы, пока SDA не отпустится, и затем сформировать START.
  • Будильник срабатывает один раз. Флаг A1F или A2F не сброшен — вывод INT/SQW так и остаётся в нуле.
  • Батарея садится за месяцы. Микроконтроллер обращается к часам, пока они на батарее (до 70 мкА), или на модуле стоит цепь подзаряда и светодиод питания.
  • Часы спешат или отстают на десятки секунд в месяц. Это больше нормы для 0–40 °C: проверьте маркировку микросхемы по даташиту и не стоит ли модуль у источника тепла. Мелкий уход подстраивают регистром старения.
  • Лишние 0,2 мА в спящем режиме. Работает выход 32kHz с подтяжкой. Выключите его битом EN32kHz.

Частые вопросы

Сколько проработает DS3231 от батарейки CR2032?

По наибольшему току хранения времени из даташита, 3,0 мкА при 3,63 В, батарея CR2032 ёмкостью 235 мА·ч продержится около 9 лет; по типичному 0,84 мкА — заметно дольше, и тогда срок ограничивает уже саморазряд батареи. Реальную ёмкость уменьшает то, что Energizer меряет её до 2,0 В, а DS3231 нужно от 2,3 В. И нельзя обращаться к часам по I²C, пока они работают от батареи: тогда ток вырастает до 70 мкА.

Нужны ли подтягивающие резисторы на INT/SQW и 32kHz?

Да, если вывод используется: оба выхода с открытым стоком. Подтягивать можно к напряжению до 5,5 В независимо от питания самой микросхемы. Неиспользуемый вывод 32kHz лучше оставить свободным или выключить битом EN32kHz: после включения питания он работает, и подтяжка 10 кОм к 3,3 В зря тратила бы около 0,17 мА.

Можно ли подключить DS3231 к 5 В, а микроконтроллер к 3,3 В?

Питание DS3231 — 2,3–5,5 В, а уровни на SDA и SCL считаются от его собственного VCC: единица — от 0,7 · VCC. При VCC 5 В это 3,5 В, больше, чем даст шина на 3,3 В. Проще питать DS3231 от тех же 3,3 В, что и микроконтроллер; подтяжки шины — к 3,3 В.

Чем DS3231 лучше DS1307?

Кварц у DS3231 внутри и с термокомпенсацией: ход нормирован как ±2 ppm от 0 до 40 °C. У DS1307 кварц внешний, и точность зависит от него и разводки. Кроме того, DS1307 работает только от 4,5–5,5 В, а DS3231 — от 2,3 до 5,5 В. Зато DS1307 берёт от батареи меньше: до 500 нА против 3 мкА. Подробно — в статье «DS3231 и DS1307».

Источники

  1. Maxim Integrated (Analog Devices). DS3231: Extremely Accurate I2C-Integrated RTC/TCXO/Crystal (19-5170, Rev 10, 3/15) — с. 2 — VCC и VBAT 2,3–5,5 В; VIL/VIH SDA, SCL 0,3/0,7 · VCC; VOL 0,4 В при 3 мА на 32kHz, INT/SQW, SDA; ток с VCC в ожидании до 110 мкА при 3,63 В (32 кГц включён); VPF 2,45–2,575–2,70 В; с. 3 — ток от батареи при работе шины до 70 мкА при 3,63 В, при хранении времени 0,84 мкА типично и 3,0 мкА наибольший при 3,63 В; ±2 ppm от 0 до 40 °C, ±3,5 ppm от −40 до 0 и от 40 до 85 °C; 0,1 ppm на единицу регистра старения при 25 °C; старение кварца ±1 ppm за первый год и ±5 ppm за 10 лет; с. 4 — 400 кГц, нарастание до 300 нс, CB до 400 пФ, CI/O 10 пФ; с. 9 — выводы, 32kHz и INT/SQW с открытым стоком, подтяжка до 5,5 В независимо от VCC, VCC развязывают 0,1–1 мкФ, неиспользуемые выводы 5–12 — на общий провод, RST с внутренней подтяжкой 50 кОм; с. 10 — переключение на батарею, поправка частоты раз в 64 с; с. 13–14 — биты EOSC, BBSQW, INTCN, EN32kHz (после включения 1), OSF, регистр старения 10h
  2. Maxim Integrated (Analog Devices). DS1307: 64 x 8, Serial, I2C Real-Time Clock (REV: 3/15) — VCC 4,5–5,5 В, VBAT 2,0–3,5 В; ток от батареи 300/500 нА (тип./макс.), 480/800 нА с выходом 32 кГц; внешний часовой кварц с нагрузочной ёмкостью 12,5 пФ; порог переключения 1,25 · VBAT; батарея от 48 мА·ч держит часы больше 10 лет при 25 °C
  3. Energizer. CR2032 Lithium Coin product datasheet — 3,0 В, типичная ёмкость 235 мА·ч до 2,0 В на нагрузке 15 кОм при 21 °C; обратный ток заряда не больше 1 мкА; −30…+60 °C; саморазряд около 1 % в год
  4. NXP. UM10204 I2C-bus specification and user manual (Rev. 7.0, 1 October 2021) — разд. 7.1 — Rp(min) = (VDD − VOL)/IOL при 3 мА, Rp(max) = tr / (0,8473 · Cb); tr до 300 нс в режиме 400 кГц и до 1000 нс в режиме 100 кГц
  5. STMicroelectronics. STM32F103x8, STM32F103xB datasheet (DS5319 Rev 20, July 2025) — табл. 5 — PB6 I2C1_SCL, PB7 I2C1_SDA (FT); табл. 21 — внешний сигнал на OSC32_IN: 0,7 · VDD, фронты не длиннее 50 нс, заполнение 30–70 %; табл. 36 — ёмкость вывода 5 пФ

Нашли ошибку?