Регулировка для RTC Drift

AG123
Вт 27 ноября 2018 г. 15:38
редактировать:
Теперь у этого есть свои примеры и библиотека, размещенная на GitHub
https: // github.com/ag88/stm32duino_rtcadj
Подробнее здесь
ViewTopic.PHP?F = 18&T = 4365&начало = 10#p51483

Я случайно использовал эти 20 для кристаллов в долларах 32 тыс
https: // www.eBay.com/sch/i.HTML?_from = r ... 8&_SACAT = 0
И у меня есть/использую тот, который дрейфует, как часы дедушки, э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -собой дрейфы в день
На самом деле я думаю, что одна из причин дрейфа заключается в том, что я просто припаял кристалл на выводах PC14 и PC15 на моем Maple Mini - нет крышек
:ржу не могу:

Обратите внимание, что с лучшими кристаллами, у STM32F1X есть реестр, чтобы замедлить часы до 314 секунд в месяц (30 дней)
https: // www.ул.com/content/ccc/resource ... 167326.PDF
Это довольно хорошая калибровка для * хороших * кристаллов : D

Но если вы используете * дешевые * кристаллы, как я, и вам не нужна точность деталей на миллион
и
Вы питаете VBAT (Maple Mini имеет булавку для этого, я не слишком уверен, есть ли это синяя таблетка) на ячейке монеты

Вот как я «корректирую» этот дрейф моего RTC // this is the number of seconds for the stm32 rtc to drift 1 secs (faster) from an accurate time source #define DRIFT_DUR 3335 void setup() { time_t last; bkp_init(); last = getbktime(); if(last == 0) { setbktime(rt.getTime()); } else { /* adjust for time drift */ time_t now = rt.getTime(); if(now - last > 24 * 60 * 60) { int dur = now - last; int adj = dur / DRIFT_DUR; // number of sec to subtract now -= adj; // subtracting as the clock runs fast, change this if you are 'speeding up' the rtc rt.setTime(now); setbktime(now); } } } void mysettime(time_t time) { rt.setTime(time); setbktime(time); } void setbktime(time_t time) { bkp_enable_writes(); bkp_write(1, time & 0xffff); bkp_write(2, time >> 16); bkp_disable_writes(); } time_t getbktime() { time_t time; time = bkp_read(1); time |= bkp_read(2) << 16; return time; }

Zoomx
Ср 28 ноября 2018 г. 15:23
+1 У меня тоже есть этот дешевый кристалл!

Mrburnette
Ср 28 ноября 2018 г., 16:34
-1

Дешевые Xtals никогда не бывают хорошей покупкой я.М.О.
Я бы предпочел иметь 10 стабильных кристаллов, чем 100 отступлений!

Луча

Rogerclark
Ср 28 ноября 2018 г., 22:30
Интересный код

Интересно, можно ли это добавить в примеры в ядре Libmaple (так что это не теряется)

AG123
Чт 29 ноября 2018 г. 1:48
ржу не могу

@Ray
Я бы согласился с тем, что лучшие кристаллы должны иметь значение, еще одна причина, по которой мой Xtal Drift настолько сильно, заключается в том, что я просто припаял 32K Crystal к Maple Mini Pins без кепок

Я наткнулся на интересную статью о конденсаторе нагрузки
https: // www.Researchgate.net/profile/ha ... TN-021.PDF
Соответственно, без нагрузочного конденсатора кристалл просто колеблется на его естественной резонансной частоте, а использование нагрузочного конденсатора «потянет» эту резонансную частоту ниже. Использование большого нагрузочного конденсатора может иметь преимущество, что частота меньше «подтягиваемой»
Тем не менее, я прочитал несколько статей, включая собственное руководство STM «Начало работы»
https: // www.ул.com/content/ccc/resource ... 164185.PDF
2.2. LSE OSC Clock P13, которые предполагают Чтобы избежать превышения максимального значения C L1 и C L2 (15 pf), настоятельно рекомендуется использовать резонатор с емкостью нагрузки Cl ≤ 7 pf. Никогда не используйте резонатор с емкостью нагрузки 12.5 пф и причина может заключаться в том, что большой нагрузочный конденсатор может привести к тому, что кристалл не колеблется

Это своего рода замаскированное благословение, которое я паял кристалл 32 тыс. Кристаллин
:ржу не могу:

@Роджер
Я бы оставил это вам, так как это может быть просто примером использования резервных регистров. Я на самом деле все еще проверяю свои коды
Это, вероятно, поможет в тех случаях, когда дрейф большой, поскольку меньший дрифт STM фактически имеет еще один резервный регистр BKP_RTCCR, который может быть настроен на замедление RTC
https: // www.ул.com/content/ccc/resource ... 167326.PDF
BKP_RTCCR позволяет замедлить RTC на мелодию до 314 секунд за 30 дней (месяц) и является настройкой «один раз отключен»
который необходим для каждой новой замены ячейки монеты, поскольку BKP_RTCCR - это резервный регистр, работающий на VBAT

AG123
Пт 30 ноября 2018 г. 9:13
Однако просто обновление, коды работают довольно хорошо, однако, при определении drift_dur
Одним из способов является контроль дрейфа в течение определенного периода времени E.глин.
  • синхронизировать RTC до точного времени в начале мониторинга << Я сделал это вручную, обратите внимание на это время, когда мониторинг дата начала/время
  • elapsed_time = дата окончания монитора/время - дата запуска/время монитора << в сек
  • дрейф <- общее количество секундов дрейфа измеряется в точное время << Я измерил это вручную, так как RTC синхронизируется в начале мониторинга, после прошедшего времени RTC ушел от точного времени часов, поэтому я наблюдаю время RTC и минус вручную времени, то есть дрейф в секунды
  • Drift_dur = elapsed_time / drift
Проблема состоит в том, что если продолжительность мониторинга короткая, дрейф в SECS, вероятно, будет низким, и, поскольку я измеряю вручную, проверяя время от времени, синхронизированного в отношении NTP, то, что я могу измерить,- это +/- 1 секунды. Будьте больше, и если дрейф в секунды, скажем, 1 секунды, от 1 до 2 секунд-разница в 50% на drift_dur !
Следовательно, нужно было бы контролировать в течение более длительного времени для накопления более крупного дрейфа, если вы измеряете вручную, другие автоматизированные способы могут потребовать программирования, поэтому я рассчитывал на это вручную

Я также отметил, что дрейф варьируется в довольно большом диапазоне. В моем случае я получаю от 21 секунды в день до 25 секунд в день дрейфа, это довольно вариация.
Я предполагаю, что это может быть отчасти связано с температурами и, скорее всего, по мере того, как я чередуются между тем, чтобы сбежать с ячейки монеты и подключения к питанию, только различия в напряжении /мощности могут изменить ситуацию

Но, учитывая изменение, эта корректировка в лучшем случае перенесет ее в среднее более низкое смещение, а не имеет большое систематическое смещение.
Я думаю, что использование правильных крышек и т. Д. Но если кто -то готов потратить немного, хороший кристалл может быть всем, что необходимо, чтобы сохранить RTC на точке, не требуется корректировки :ржу не могу:

Mrburnette
Пт 30 ноября 2018 г., 15:14
"Хороший кристалл..."

Наконец, вы приходите к истине.

Луча

Grumpyoldpizza
Вторник 04 декабря 2018 г. 15:23
[Mrburnette - Пт 30 ноября 2018 г. 15:14] - "Хороший кристалл..."

Наконец, вы приходите к истине.

Луча
На самом деле, смешная вещь. На Murata Cmwx1zzabz у вас есть кристалл 32768 Гц и 32 МГц TCXO. Я добавил код в Arduinocore-STM32L0 для регулировки дрейфа/периода RTC с использованием 32 МГц TCXO (который имеет 2PPM, в отличие от кристалла 32768 Гц, который имеет 20 частей на час), который имеет 20ppm). Сделал все возможное в мире.

Также одурачил с использованием PPS GNSS для перекрестия выравнивания RTC. Несколько менее успешные были попытки скорректировать период RTC через GNSS ... Оказывается, коррекция TCXO была лучше на практике ...

Mrburnette
Ср. 05 декабря 2018 г. 12:46
[Grumpyoldpizza - Вторник 04 декабря 2018 г. 15:23] - ...
Оказывается, коррекция TCXO была лучше на практике ...
Впервые я увидел что-то вроде этого, было много лет назад с V-USB:
https: // форумы.Обдев.AT/ViewTopic.PHP?T = 1836

Вышесказанное было 10 лет назад... И я подозреваю, что первоначальная реализация была ранее.

Луча

гиперион
Солнце 09 декабря 2018 г., 4:34
привет. У меня слишком плохой кристалл, и я ищу решение, как его использовать. Нашел этот метод.
Я не понимаю, почему #define drift_dur 3335
Если результат функции получается в секундах, почему каждый день мы берем 3335 секунд, а не 30 секунд?
Здесь результат сейчас и последних переменных в выводе консоли Now: 1544354802 Last: 1544354671

AG123
Солнце 09 декабря 2018 г., 6:54
Привет, гиперион

Drift_dur - это количество секунд для RTC, чтобы дрейфовать 1 секунду * быстрее *, чем точное время
Чтобы определить drift_dur, я сделал это так:
ViewTopic.PHP?F = 18&T = 4365#P51200

Обратите внимание, что если ваш RTC дрейфует менее чем на 5 минут быстрее в месяц, у STM есть реестр, чтобы вы могли замедлить RTC, возможно, более простым и более точным способом
https: // www.ул.com/content/ccc/resource ... 167326.PDF

Я написал этот код, так как мой RTC дрейфует намного больше, чем 5 минут в месяц

гиперион
Солнце 09 декабря 2018 г. 15:27
мой RTC Drift 10-15 минут в месяц, поэтому внутренняя калибровка RTC не работает для меня тоже :(
Спасибо за ссылку. Теперь я понимаю, как это работает :)

AG123
Солнце 09 декабря 2018 г. 20:07
Поскольку казалось, что я не единственный, у кого паршивые кристаллы 32 тыс., Я решил сделать этот эскиз / демонстрацию в значительной степени со своей собственной «мини -библиотекой» для тех, кто хочет использовать этот код : D

Вы можете найти эскиз (и мини -библиотеку) самостоятельно
https: // github.com/ag88/stm32duino_rtcadj
Использование «мини -библиотеки» несколько проще и «одетый», чем необработанные концепции здесь, я сделал Readme.MD, отформатированный с Marckdown на GitHub Web : D
В быстром резюме:
  • в setup () call AdmeTime (); - Admemtime () делает корректировки каждый раз, когда сбрасывается плата. Но я поместил несколько кодов в AdmeMime (), чтобы корректировки происходили не меньше, чем один раз за 24 часа, чтобы уменьшить совокупные ошибки
  • функция void synctime (time_t time_now); Устанавливает RTC и устанавливает ту же дату / время, что и последняя скорректированная дата / время. Последняя скорректированная дата/время сохраняется в резервном регистре 8 и 9.
  • Функция void calibratertc (time_t time_now) вычисляет продолжительность дрейфа - количество секунд для RTC STM32 для дрейфа 1 секунды (быстрее) и сохранить в резервном регистре 7
Чтобы выполнить калибровку
  • Первый вызов Synctime (time_t Time_now) с точным временем часов, чтобы установить RTC и последнюю дату / время регулировки / время
  • Через день или два вызовут void calibratertc (time_t time_now) с точным временем часов во время калибровки, и это будет вычислять продолжительность дрейфа и сохранить его в резервном регистре 7
Сам эскиз (демонстрация) имеет последовательные команды для выполнения шагов синхронизации и калибровки, следовательно, вы можете попробовать это, просто запустив эскиз

Я проверил это на своем Maple Mini, но еще не запустил его на любых других досках.

Кроме того, я сделал запрос на привлечение к ядру Libmaple STM32F1 в рамках STM32F1/Libraries/RTCLOCK/Примеры/RTCADJ
https: // github.com/rogerclarkmelbourne/ ... 2/Pull/581

Rogerclark
Солнце 09 декабря 2018 г. 20:25
Спасибо

Я возьму меня в пиар

Fredbox
Пн 10 декабря 2018 г., 4:09
Используя метод в примечании AN2604, указанном несколько сообщений назад, должно быть простым, чтобы включить выход 512 герц и измерить период с использованием генератора 72 МГц. 1/период = частота. 512 Гц - 1.953 миллисекунд. Это дало бы вам представление о том, насколько плохим ваш кристалл на самом деле. Несколько ПФ на каждой стороне кристалла на землю могут вернуть его к приемлемому терпимость.

AG123
Пн 10 декабря 2018 г., 7:00 утра
не по теме и причудливые развлечения

*дешево*32K Кристалл может быть сделан из*еды*не*Quartz*
https: // rimstar.орг/материалы/пьезо/как ... Ристал.htm



Теперь мы могли бы догадаться, почему они так много дрейфовали из * реальных * кварцевых кристаллов


Если это предположение верно, общий дешевый PZT Piezo может производить (далеко) лучше (стабильно) и более точные колебания, чем 20 для кристаллов доллара 32K
https: // en.Википедия.org/wiki/ved_zirconate_titanate
https: // www.aliexpress.com/оптом?калифорнийский ... Текст = пьезо
Я предполагаю, что кристалл 8 МГц, на котором работает основные часы STM32, вероятно, на основе керамики PZT. Единственная проблема в том, что он не может убежать от VBAT
Если ваше приложение не нужно для запуска VBAT, использование HSE для RTC, возможно, хорошая альтернатива
:ржу не могу:

Стивестронг
Пн 10 декабря 2018 г. 9:11
Я думаю, что я помню пост, в котором был вызван очень сильный дрейф, вызванный чистым присутствием штифтов заголовка на PC14/15.
Так что, возможно, удаление их.

AG123
Пн 10 декабря 2018 г., 18:27
Упс исправил некоторые ошибки, и, кроме того, я испортился с аппаратными корректировками bkp_rtccr, как задокументировано в
AN2604 STM32F101XX и STM32F103XX RTC Калибровка

Теперь функция void -калибровая (время_T Time_now) Сначала вычислить продолжительность дрейфа и, если длительность дрейфа (которая в основном является ошибкой) составляет менее 1 на 1048576 /127 ~ 1 за 8256 секунды ~ 314 с (5 минут) в месяц, i Просто обновите bkp_rtccr и позвольте аппаратному обеспечению внести коррективы
Если это больше, чем 5 минут в месяц, я возвращаюсь к своим корректировкам программного обеспечения

Обновлено в обоих запросах
https: // github.com/rogerclarkmelbourne/ ... 2/Pull/581
и отдельное хранилище
https: // github.com/ag88/stm32duino_rtcadj
сделал раунд тестов на Maple Mini

Надеемся, что со всеми этими максимальными корректировками даже паршивые кристаллы 32K, сделанные из пищи, могут притвориться, по крайней мере, на какое -то время точнее на какое -то время
:ржу не могу:

Mrburnette
Пн 10 декабря 2018 г., 22:36
[AG123 - Пн 10 декабря 2018 г., 18:27] - ...
Надеемся, что со всеми этими максимальными корректировками даже паршивые кристаллы 32K, сделанные из пищи, могут притвориться, по крайней мере, на какое -то время точнее на какое -то время
:ржу не могу:
Я действительно не был готов к этому утверждению. С тех пор, как началась эта дешевая кристаллическая тема, я был в расстроении. .. Я осмотрел свою лабораторию и не смог найти ни одного (1) дешевого X-Tal. Это заставило меня задуматься; Какой человек купит только приличные кристаллы? Я элиталист X-Tal? Мне может понадобиться консультирование: я чувствую себя ужасно. Прошлой ночью у меня были кошмары над этим состоянием; Я мечтал, что выиграл лотерею Powerball за 900 млн долларов и потратил все в доверие, чтобы купить приличные кристаллы для нуждающихся. В этой мечте я был удостоен Нобелевской премии за гуманитарные усилия. Я проснулся в холодном.

AG123, пожалуйста, пожалуйста, купите несколько приличных кристаллов. Напишите мне, если вам понадобится, и я отправлю вам отправку для разведения, чтобы вы никогда не остались без личного поставок. Вы будете спать лучше. Я буду спать лучше.


Луча

AG123
Вт 11 декабря 2018 г., 3:11
Привет, Рэй,

Не беспокойтесь об этом, все это «корректировка» - это чрезмерная попытка попробовать, что возможно на STM32
Интересно, что у STM32F1X есть все функции, чтобы сделать все эти «корректировки», несмотря на то, что он был довольно «маленьким» SOC

Я бы, наверное, попробовал один из тех Epson TXCO, чтобы увидеть, что на самом деле работает за * настоящий * * Quartz * Crystal
Но я согласен с тем, что * дешевые * кристаллы, вероятно, даже не стоят своей цены, если это правда, что они сделаны из Rochelle Salt

Это видео и то, что видео «Хрустальная фабрика Эпсона», вероятно, объясняет, почему некоторые из самых точных кварцевых часов приходят из Японии
https: // www.WatchReport.com/the-most-ac ... мир/
:ржу не могу:

Zoomx
Вт 11 декабря 2018 г. 8:49
Луча,

Я тоже думаю, что этот трюк RTC Drift - это просто упражнение того, что можно сделать с дешевыми кристаллами. Я купил их, но они все еще в полиэтиленовых пакетах, потому что я тоже думаю, что хороший RTC, может быть, как DS3231, достаточно дешево, так что эти кристаллы бесполезны.
Я так ленив, что я предпочитаю использовать NTP на ESP8266 или на любых подключенных платах, так как я получаю автоматическую регулировку при переходе на или из дневного времени, когда мне нужно регулировать все старые часы на запястье, камеры и другие устройства, которые не переключаются себя. Я также переключаюсь на стены радиоконтроллера и будильники по той же причине.

гиперион
Вт 11 декабря 2018 г. 8:59
RTC DS3231 Слишком большой для некоторых приложений. Так что настройка «плохой» кристалл для меня :) Я еще не полностью протестировал этот код. Но Excel скажет, что это работает :)

Ахулл
Вт 11 декабря 2018 г. 9:05
Я был в поисках одного из более старых «двойных кварц», которые на некоторое время наблюдает за «Сейко.
(Часы время от времени немного моей одержимости : P ).

Сейко SQ Twin Quartz, с кварцевым движением 9723A, хороша для +/- 20 с в год, а некоторые из более старых, менее известных моделей Seiko "Twin Quartz" появляются по разумным ценам на БЛАБЕР.

В то же время (сколько раз я могу подготовить слово «время» в этом посте, мне интересно).... Я сопротивляюсь стремлению разогнаться с глазном кусочком зарплаты моего месяца на Citizen Chronomaster и довольствоваться некоторыми из более чем более интересные и доступные вещи Я собрал на протяжении многих лет.

Изображение

В конце концов, где еще вы можете найти механический аналоговый компьютер с кинетической энергией с встроенным в 6 Гц генератора, способный отображать результат линейных вычислений месяца с точностью около 1 части в 10 000 ;)

AG123
Ср 12 декабря 2018 г., 6:49
Хорошие часы (ы), которые знают, однажды вы можете приземлиться с кусочком, которую вы подобрали по обычной цене и выступили на аукционе на Sotheby's за миллионы :ржу не могу:
Кажется, что гражданин Chronomaster может считаться * роскошными * часами
https: // www.Ходинки.com/статьи/the-c ... AB9000-61E
Я даже не могу найти его на доме продукта производителя
https: // www.CitizenWatch.ком/
О, тебе нужно пойти на японский домашний сайт, чтобы найти его
https: // citizen.JP/Product/The Citizen/ ... AB9000-61E
О, и казалось, что гражданин собирается ввести издания для солнечных батарей для этого, и эти столетные издания часы *не продаются * :ржу не могу:
https: // www.Ходинки.com/статьи/гражданин ... ntroducing

Вернувшись на тему, я сделал «корректировки» на моем MM по тем же причинам, что и Hyperion, адаптированы достаточные для того, чтобы сохранить вещи в течение некоторого времени, и я мог бы просто синхронизировать это с моим компьютером, когда я подключаюсь через USB снова. Я думаю, что большинство ОС, включая Windows, Linux, MacOS и т. Д. Сингнируются в NTP в наши дни, и время ПК обычно точно точнее время
Хорошо, что у STM32 есть встроенные встроенные функции RTC, я думаю, что не так много/все MCU имеют его

AG123
Солнце 30 декабря 2018 г., 17:26
Просто обновление, казалось, что из -за несчастного случая я получил несколько частей на миллион точности, «ручное» измерение показывает, что Maple Mini, работающий на ячейке монеты, и дешевые 20 за доллар 32K Crystal и без кепок (YUP 0PF , он колеблется, как неконтролируемый маховик/маятник) синхронизируется с синхронизацией моего ПК до NTP через 15 дней - дрейф в 0 секунды - это, в конце концов, «корректировки» - сделано кодом :)
Но я думаю, что это *стохастично *, дрейфы могут вернуться снова, так и случилось, что на данный момент он достигает значения нуля

продолжительность дрейфа (я.эн. Ошибка для этого кристалла экстремальна без заглушек) 1/2200, если моя математика в порядке, я думаю, что это делает его 32668 + 1/2200 ~ 32768 + 15 = 32782 Гц. В каждую секунду он дрейфует 15 частей 32768 быстрее

Возможно, это означает, что кристалл из пищи (соль Рошель) работает также, возможно, он не будет столь стабильным или длится как настоящий кварцевый кристалл :ржу не могу:
Между прочим, без этих заглушек это замаскированное благословение, оно облегчает колебание кристалла, но я предполагаю, что оно будет менее стабильным и, возможно, дрейфом, когда изменяется «среда». Я думаю, что дрейф, возможно, является проблемой точной производства, я.эн. Каждый кристалл вырезан немного отличается и не настроен, а «большая» крышка (E.глин. 10pf) указано, чтобы «потянуть» частоту ниже, оборудование без этого конденсатора, в конце концов, будет хорошей вещью


AG123
Пн 31 декабря 2018 г., 3:26 утра
Спасибо, Рэй
Казалось, вполне возможно, что без заглушек кристаллические замки на параллельном резонансе или даже частотах антикозона высокого сопротивления вблизи нулевых токов, следовательно, фиксированный дрейф до более высокой частоты, мое очень грубое/наивное понимание некоторых физиков
https: // электроника.Stackexchange.com/Q ... NCE-графы

Дэнниф
Солнце 06 января 2019 21:18
Также одурачил с использованием PPS GNSS для перекрестия выравнивания RTC. Я играл с чем-то подобным: GPS-дисциплинированный VC (TC) XO, довольно успешно. Основная идея состоит в том, чтобы использовать GPS, чтобы запрягать выход VCXO. Из этого вы можете определить ошибку времени, которая управляет генератором ШИМ через алгоритм управления, который связан с управляющим напряжением VCXO через LPF - или DAC, если ваш чип имеет его.

Прелесть в том, что вы можете 1) калибровать TCXO/VCXO, а 2) вы можете генерировать множество странных частот, не поддерживаемых GPS.

MCU по существу выполняет функцию частотного измерителя (используя сигнал GPS в качестве эталонных часов) и генератора напряжения. Его следует легко перенести в среду Arduino / STM32 - я изначально написал это для AVR / PIC.

Нажмите кнопку

Обратно