Часы реального времени 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 и микроконтроллер питаются от одной шины 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):
Ёмкость линии: 10 пФ у DS3231, 5 пФ у вывода STM32F103 (DS5319, табл. 36) плюс дорожки и провода модуля — примем 50 пФ. Тогда Rmax = 7,08 кОм. Калькулятор предлагает середину диапазона, 2,7 кОм; мы берём 4,7 кОм — фронт 199 нс, ток в нуле 0,62 мА, то есть меньше потребление, когда шина активна. Для длинной шины или нескольких модулей пересчитайте:
Исходные данные
обычно 3,3 или 5 В
до 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 мА·ч. Оценка срока по наибольшему току:
Это оценка сверху по ёмкости и снизу по току. Три поправки:
- Energizer меряет ёмкость до 2,0 В при 21 °C, а DS3231 работает от 2,3 В — часть ёмкости недоступна.
- Обращение к часам по I²C при питании от батареи поднимает ток до 70 мкА (IBATA): шину включают только при основном питании.
- Батарея рассчитана на −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 В на работающем выходе тратила бы в среднем
Частоту 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 с — это
и в регистр записывают +15 (0Fh). Новое значение применяется, когда изменится измеренная температура или после преобразования по команде; чтобы увидеть результат сразу, запускают преобразование битом CONV (19-5170, с. 14). Подстройку делают при той температуре, при которой часы работают, — на краях диапазона цена единицы другая.
Чем отличается DS1307
| Параметр | DS3231 | DS1307 |
|---|---|---|
| Питание | 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 и микроконтроллеров — на странице «Кварцевый генератор».
Детали
| Позиция | Деталь | Примечание |
|---|---|---|
| DA1 | DS3231SN | −40…+85 °C; DS3231S — 0…+70 °C |
| C1 | 0,1 мкФ | у вывода VCC |
| GB1 | CR2032 | с держателем |
| R1, R2 | 4,7 кОм | подтяжки SCL, SDA; от 967 Ом до 7,08 кОм при 50 пФ |
| R3 | 10 кОм | подтяжка 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».
Источники
- 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
- 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
- Energizer. CR2032 Lithium Coin product datasheet — 3,0 В, типичная ёмкость 235 мА·ч до 2,0 В на нагрузке 15 кОм при 21 °C; обратный ток заряда не больше 1 мкА; −30…+60 °C; саморазряд около 1 % в год
- 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 кГц
- 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 пФ
Нашли ошибку?
Смотрите также
- DS3231 и DS1307Часы реального времени I²C: питание, точность, батарея, регистры
- Подтягивающие резисторы I²CДиапазон Rp по напряжению, скорости и ёмкости шины
- I²CSDA и SCL, START/STOP, ACK, адреса, скорости, расчёт подтяжек
- RTCСчётчик времени в режимах сна: источники такта, счётчик и календарь
- ppm — миллионная доляМиллионная доля: 1 ppm = 10⁻⁶ = 0,0001 %
- Открытый стокВыход только с транзистором к земле, единицу даёт подтяжка
- Кварцевый генератор микроконтроллераСхема Пирса, C1 и C2 по CL, запас по усилению, часовой кварц, разводка