На коробке с модулем часов напечатано «±2 ppm», и годами я проходил мимо этой строчки, не понимая, хорошо это или плохо. Пять ppm — много? А двадцать? Цифра ровным счётом ничего не говорит, пока её не переведёшь в секунды, а перевод — простое деление, которому даташиты не учат. Свой первый пересчёт я сделал на кухонной салфетке: 2 ppm — это пять секунд в месяц, полминуты в год — и только тогда стало ясно, почему настольные часы на DS3231 за полгода не съехали видимо ни на минуту. Вечер с калькулятором сэкономил мне потом десятки перезаводок: теперь паспорт модуля превращается в секунды за месяц за десять секунд, прямо у прилавка.
Разберём единицу по винтикам: откуда взялось число 32768, что именно измеряет ppm и как переводить его в секунды часа, месяца и года. В прошлом уроке я раскладывал, откуда у дешёвых часов берутся секунды ухода — здесь отвечаю на вопрос «и сколько же это будет в моём расписании». Калькулятор в симуляторе — та же арифметика, которой я пользуюсь сам.
С обещаниями вообще полезно держать ухо востро: у одного и того же модуля их обычно два слоя. Первый — даташит чипа: DS3231 обещает ±2 ppm, и это про его внутренний термокомпенсированный генератор. Второй — реальность конкретной платы: маркировка DS3231M, MEMS-резонатор с ±5 ppm, выглядит на шелкографии почти так же и продаётся по той же цене неосторожным покупателям. Лупа рядом с ящиком модулей — не для паяния, а для чтения корпуса: минута взгляда экономит месяц разочарований.
Кварц 32768 Гц: почему именно это число
Внутри каждого RTC — и внутри наручных часов — тикает один и тот же кварц на 32768 герц. Число подобрано не из нумерологии: 32768 — это два в пятнадцатой степени. Пятнадцать каскадов-делителей пополам превращают 32768 герц ровно в один герц — в ту секунду, из которой собраны все часы мира. Заодно и размер удобный: на частоты вокруг 32 килогерц кварцевые кристаллы выходят маленькими и копеечными.
PPM — миллионная доля. Часы с уходом 20 ppm за каждую реальную секунду насчитывают либо 0,999998, либо 1,000002 своей секунды — знак зависит от конкретного кристалла. Кварц спешит — часы убегают вперёд, кварц ленив — отстают. Переводной курс жёсткий: 1 ppm — это 0,0864 секунды в сутки (в сутках ровно 86 400 секунд), 2,59 секунды за тридцать дней и 31,5 секунды за год. Проверка на здравый смысл: за один час даже дешёвые часы уходят меньше чем на десятую долю секунды — если ваш прибор «убежал» за вечер, ищите не ppm, а сбой питания или пропавший контакт.
Теперь паспортные строки читаются бегло. DS3231 с его ±2 ppm — до 5,2 секунды в месяц, около минуты за год. M-версия с MEMS-резонатором при ±5 ppm — до 13 секунд в месяц, и для журналов это уже ощутимо. Дешёвый кварц с допуском ±20 ppm — до 52 секунд в месяц, а экземпляры с кривой обвязкой уходят и за сотню ppm — минуты в месяц. Кормушке из урока про расписание на серво хватает и двадцати ppm с подводкой, а вот журналам — нет.
Пара практических деталей про деление. Каскады — обычные триггеры: каждый делит частоту ровно пополам, поэтому структура секунды одинакова у всех часов, а качество кристалла влияет только на то, сколько герц прячется в этой секунде. Тот же генератор на DS3231 выведен наружу ногой 32K — если пригодится частотный эталон для внешней схемы, он уже под рукой. Компенсация при этом не мешает: подстройки на доли ppm секунду не растягивают видимым образом.
| ppm по паспорту | Секунды в сутки | Секунды за 30 дней | Минуты за год |
|---|---|---|---|
| 1 — отборный экземпляр | 0,09 | 2,6 | 0,5 |
| 2 — DS3231 | 0,17 | 5,2 | 1,05 |
| 5 — DS3231M с MEMS-резонатором | 0,43 | 13 | 2,6 |
| 20 — типовой дешёвый кварц | 1,7 | 52 | 10,5 |
| 50 — рассогласованная обвязка | 4,3 | 130 | 26 |
Формула перевода помещается в одну строку: секунды = ppm × 86 400 × дни / 1 000 000. За час даже 20 ppm набирают всего 72 миллисекунды, за сутки — 1,7 секунды, за неделю — 12. Дрейф — дисциплина длинных дистанций: в час он невидим, в неделю заметен, в месяц неприятен. Поэтому оценка «точный/неточный» без окна лишена смысла: за один час и DS1307, и DS3231 неотличимы от эталона, а за квартал между ними — пропасть в десять раз. Спрашивайте у паспорта всегда одно: «за какой срок».
Калькулятор полезен и в обратную сторону — от замера к ppm. Формула переворачивается: ppm = секунды / (дни × 86 400) × 1 000 000, что на салфетке равно «секунды поделить на дни и умножить на 11,57». Модуль ушёл на десять секунд за неделю — 16,5 ppm. На четыре минуты за месяц — 93 ppm, вдвое хуже паспорта, здравствуйте, рассогласованные конденсаторы из прошлого урока. Так тетрадный журнал сверки превращается в паспорт вашего конкретного экземпляра — с ним и выбор модуля, и график подводок перестают быть гаданием. Знак учитывайте сразу: спешащий модуль подводят назад, отстающий — вперёд, и перепутать направление обиднее всего.
Что делать с переведённым числом — зависит от задачи, и тут работает мой прикид. Тумблерным часам на DS1307 и кормлению кота хватает ±20 ppm с подводкой раз в месяц; само подключение такого модуля с батарейкой я показывал в уроке про DS1307. Для журналов и слотов, где минуты ломают смысл, беру только ±2 ppm с термокомпенсацией, а остаточный перекос экземпляра лечится регистром aging offset — про него и про компенсатор в целом я писал в уроке про точность DS3231. Подводка по интернету — это NTP: готовый скетч с configTime на ESP32 сделает её сам, пока вы спите.
Калькулятор дрейфа
В симуляторе — тот самый прикид. Движок печатает курс для стартового значения 2 ppm: секунды за час, сутки и тридцать дней плюс минуты за год. Число из монитора порта меняет паспорт — таблица пересчитывается; отрицательное значение означает, что часы спешат, и уход уходит в минус. Принимать числа из порта так, как это делает калькулятор, мы учились в уроке про числа из Serial. Арифметика здесь чистая, без таймеров, поэтому движок считает её честно — меняйте значения хоть каждые десять секунд. Отдельный плюс чистой арифметики — крайние случаи: введите паспорт 100 ppm и посмотрите, как за месяц набегает 260 секунд, почти четыре с половиной минуты, — это уже хроническое опоздание, и такой модуль в мой прибор не попадёт.
Проверьте два якоря. Введите 20 — получите 51,84 секунды за месяц, ровно те же цифры, что и в гонке прошлого урока: два расчёта сходятся, потому что формула одна. Затем введите 63 — и увидите, что обещание «минута в год» эквивалентно примерно двум ppm. На этой паре удобно ловить маркетинг: если в описании модуля «высокая точность» без ppm, считайте, что вам предлагают угадать. Для сравнения: честно указанные ±10 ppm — это 26 секунд в месяц, и уже по цифре видно, что модуль для журналов не лучший выбор.
// Kalkulyator dreyfa: perevod ppm v sekundy// Podstav'te v PPM fakticheskiy uhod svoego modulyaconst float PPM = 2.0; void pechat(String imya, float sekund) { Serial.print(imya); Serial.print(" = "); Serial.print(sekund, 2); Serial.println(" s");} void setup() { Serial.begin(9600); Serial.print("Dreyf pri "); Serial.print(PPM, 1); Serial.println(" ppm:"); pechat(" chas", PPM * 3600.0 / 1000000.0); pechat(" sutki", PPM * 86400.0 / 1000000.0); pechat(" 30 dnej", PPM * 30.0 * 86400.0 / 1000000.0); pechat(" god", PPM * 365.0 * 86400.0 / 1000000.0); Serial.println("Kak izmerit uhod: sverka s telefonom raz v nedelyu,"); Serial.println("ppm = raznica_sek / (7 * 86400) * 1000000");} void loop() { delay(1000);}- Введите 0,5 и посчитайте, за сколько месяцев такой экземпляр накопит секунду: пригодится для поливочного таймера, где минута ничего не значит.
- Сравните 5 ppm (DS3231M) и 2 ppm (DS3231): разница за год — полторы минуты; решите, стоит ли смотреть маркировку под лупой.
- Пересчитайте свой хвост: модуль уполз на 4 минуты за 30 дней — поделите 240 на 2,59 и получите фактический ppm экземпляра, около 93.
- Соберите калькулятор из кода-блока на настоящей плате и сверьте его таблицу с симулятором: числа обязаны совпасть до сотых.
- 32768 Гц = 2 в пятнадцатой степени: пятнадцать делителей пополам дают ровно 1 Гц — тот же кварц стоит в наручных часах
- 1 ppm = 0,0864 с в сутки = 2,6 с за 30 дней = 31,5 с за год
- ±2 ppm (DS3231) — 5,2 с в месяц; ±20 ppm (дешёвый кварц) — 52 с в месяц; знак зависит от экземпляра
- Формула: секунды = ppm × 86 400 × дни / 1 000 000 — считается в уме без калькулятора
- Отрицательный ppm — часы спешат; обещание «минута в год» эквивалентно примерно 2 ppm
- 1. Почему часовой кварц делает именно 32768 Гц?
- 2. Сколько секунд набирает уход 1 ppm за 30 дней?
- 3. Модуль с паспортным уходом 20 ppm отработал месяц. Что показывают его часы?
- 4. DS3231M с MEMS-резонатором (±5 ppm) за год уйдёт примерно на…
- 5. Ваш DS1307 отстал на 4 минуты (240 секунд) за 30 дней. Его фактический уход?
Паспорта больше не врут: любая цифра переводится в секунды вашего расписания в уме, за десять секунд и без форумов. Дальше по разделу — скормить этим часам интернет-время на ESP32 и хранить расписание в памяти, которая не боится отключения питания; а если вы пришли сюда с серво-кормушкой, вернитесь к ней с новым правилом: сначала ppm модуля, потом слоты.
Частые вопросы по теме урока
- Почему часовой кварц делает именно 32768 Гц?
- Степень двойки позволяет собрать секунду цепочкой из пятнадцати триггеров-делителей: дёшево, стабильно и одинаково во всех часах мира, от наручных до настенных. 32768 = 2^15: пятнадцать делений пополам дают ровно 1 Гц
- Сколько секунд набирает уход 1 ppm за 30 дней?
- 86 400 × 30 / 1 000 000 = 2,59 с. База прикидки: любое ppm умножается на 2,6 — и вы знаете его месяц. 2,6
- Модуль с паспортным уходом 20 ppm отработал месяц. Что показывают его часы?
- Допуск двусторонний: кристалл бывает быстрым или ленивым, и угадать знак по цифре на коробке нельзя. Сверка с точным источником нужна в любом случае. Могут и отставать, и спешить — знак зависит от конкретного экземпляра
- DS3231M с MEMS-резонатором (±5 ppm) за год уйдёт примерно на…
- 5 ppm — это 2,59 с в месяц, за год около 158 секунд, то есть 2,6 минуты. Поэтому «минута в год» к M-версии не относится. 2,6 минуты
- Ваш DS1307 отстал на 4 минуты (240 секунд) за 30 дней. Его фактический уход?
- 240 / 2,59 ≈ 93 ppm — вчетверо хуже паспорта. Именно так выглядит модуль, чью обвязку собирали без подгонки под кристалл. Около 93 ppm