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

я сделал програмный RTC с часовым кварцем. проверил все работает и успокоился. но появилось требование калибровать RTC так как за год может набежать весомая погрешность.

я решил сделать что то вроде этого:

подсоеденить точный рефересный осцилятор к пину прерывания или к таймеру в режиме каунтер, скажем осцилятор = 1мега (1us). значит за десять тиков часового кварца он должен насчитать 30.5(us) * 10 = 305 раз. если насчитал то все хорошо. а вот если посчитал с ошибкой как коректировать эту ошибку в коде?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я сделал програмный RTC с часовым кварцем. проверил все работает и успокоился. но появилось требование калибровать RTC так как за год может набежать весомая погрешность.

я решил сделать что то вроде этого:

подсоеденить точный рефересный осцилятор к пину прерывания или к таймеру в режиме каунтер, скажем осцилятор = 1мега (1us). значит за десять тиков часового кварца он должен насчитать 30.5(us) * 10 = 305 раз. если насчитал то все хорошо. а вот если посчитал с ошибкой как коректировать эту ошибку в коде?

 

Убердевайс-то эксплуатируется при постоянной температуре ? А то частота дешевых часовых кварцев хорошо от нее зависит.

Если температура постоянна, то можно что-то придумать, а если она скачет туда-сюда, то фиг чего накомпенсируешь. Недаром в нормальных RTC типа DS3231 унутре кроме кварца есть еще и термометр.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Убердевайс-то эксплуатируется при постоянной температуре ? А то частота дешевых часовых кварцев хорошо от нее зависит.

Если температура постоянна, то можно что-то придумать, а если она скачет туда-сюда, то фиг чего накомпенсируешь. Недаром в нормальных RTC типа DS3231 унутре кроме кварца есть еще и термометр.

да я думал сделать какой нибудь lookup table по температуре. ну а если принять во вниманее что часовой кварц качественный? он кстати такой и есть.

температура скачет - прибор не всегда стоит в помещении с контролируемой температурой.

 

посмотрел в даташит зависимость ppm от температуры. скажем для -10 градусов погрешность -40ppm. я должен отнять 32768-40 и перегрузить новое значение в compare register?

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поставить DS32KHZ термокомпенсированный кварцевый генератор, и будет вам счастье.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поставить DS32KHZ термокомпенсированный кварцевый генератор, и будет вам счастье.

да уж...а цена? а футпринт? народ не согласиться со мной. побьют.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если термокомпенсированный дороговат, то можно и копеечный M41T00, и по таблице корректировать погрешность. Ну или да, то же самое реализовать в своем программном RTC (что-то типа дробной коррекции, тик таймера вперед или назад через вычисляемый интервал).

 

Для калибровки - я бы сформировал секундный интервал, а уж его внешний частотомером в режиме измерения периода измерял (вполне подойдет микроконтроллер с тактированием от TCXO, имеющий захват таймера), 1E-7 тривиально, и с большим запасом по разрешению и точности. Кстати, не забывайте не только о температурном дрейфе, но и о естественном старении. И, заодно, о правильном выборе нагрузочных емкостей.

 

А вообще с программными RTC надо осторожнее, иногда можно ожидать пакостей от таймера, работающего в асинхронном режиме (как, например, у AVR).

Изменено пользователем rx3apf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

посмотрел в даташит зависимость ppm от температуры. скажем для -10 градусов погрешность -40ppm. я должен отнять 32768-40 и перегрузить новое значение в compare register?

ppm = parts per million, или миллионные части, 10-6. Погрешность 40ppm - значит, 40*10-6. На каждый миллион импульсов надо добавить или отнять 40 импульсов.

 

часовой кварц качественный? он кстати такой и есть.

 

Часовые кварцы, даже качественные, имеют погрешность 20ppm. Это означает уход примерно на 45 секунд в месяц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да уж...а цена? а футпринт? народ не согласиться со мной. побьют.

 

А может вы озвучите сначала требования к точности ? А то зная ваши попытки соптимизировать все по скорости выполнения программы (даже в тех местах, где особенно не надо), можно продположить, что вы хотите добиться ошибки RTC в 1 секунду за год там, где это нафиг не сдалось, причем программными методами на дешевом китайском кварце...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если термокомпенсированный дороговат, то можно и копеечный M41T00, и по таблице корректировать погрешность. Ну или да, то же самое реализовать в своем программном RTC (что-то типа дробной коррекции, тик таймера вперед или назад через вычисляемый интервал).

 

Для калибровки - я бы сформировал секундный интервал, а уж его внешний частотомером в режиме измерения периода измерял (вполне подойдет микроконтроллер с тактированием от TCXO, имеющий захват таймера), 1E-7 тривиально, и с большим запасом по разрешению и точности. Кстати, не забывайте не только о температурном дрейфе, но и о естественном старении. И, заодно, о правильном выборе нагрузочных емкостей.

 

А вообще с программными RTC надо осторожнее, иногда можно ожидать пакостей от таймера, работающего в асинхронном режиме (как, например, у AVR).

а как скоректировать ошибку?

 

ppm = parts per million, или миллионные части, 10-6. Погрешность 40ppm - значит, 40*10-6. На каждый миллион импульсов надо добавить или отнять 40 импульсов.

 

 

 

Часовые кварцы, даже качественные, имеют погрешность 20ppm. Это означает уход примерно на 45 секунд в месяц.

миллион пульсов это 30.6 секунд. это значит я каждые 30.6 секунд должен проверять температуру и отнимать ошибку?

 

А может вы озвучите сначала требования к точности ? А то зная ваши попытки соптимизировать все по скорости выполнения программы (даже в тех местах, где особенно не надо), можно продположить, что вы хотите добиться ошибки RTC в 1 секунду за год там, где это нафиг не сдалось, причем программными методами на дешевом китайском кварце...

мне еще точные требования по точности не предъявили но я уже мылю ж...шею так как знаю с кем имею дело. :)

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

миллион пульсов это 30.6 секунд. это значит я каждые 30.6 секунд должен проверять температуру и отнимать ошибку?

Странная идея, как это вам прошло в голову такое? Если ошибка меряется в миллионных частях, это отнюдь не значит, что вас кто-то заставляет отсчитывать именно миллион импульсов.

 

Можете мерять температуру так часто, как вам удобно, например, раз в секунду. А коррекцию можете делать, например, тогда, когда отсчитаете столько импульсов, сколько их набегает в тот момент, когда изменение счетчика на единицу обнулит погрешность. То есть, для того, чтобы скомпенсировать на 40ppm отсчитайте 25000 импульсов и инкрементируйте/декрементируйте счетчик.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странная идея, как это вам прошло в голову такое? Если ошибка меряется в миллионных частях, это отнюдь не значит, что вас кто-то заставляет отсчитывать именно миллион импульсов.

 

Можете мерять температуру так часто, как вам удобно, например, раз в секунду. А коррекцию можете делать, например, тогда, когда отсчитаете столько импульсов, сколько их набегает в тот момент, когда изменение счетчика на единицу обнулит погрешность. То есть, для того, чтобы скомпенсировать на 40ppm отсчитайте 25000 импульсов и инкрементируйте/декрементируйте счетчик.

честно говоря не понял логику коррекции. почему 25000?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У STM по этой теме есть аппнота, где все разжёвано и код приведен. но вы не сказали какой мк.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У STM по этой теме есть аппнота, где все разжёвано и код приведен. но вы не сказали какой мк.

EFM32TG842F32 но я не думаю что есть большая разница. апнот поищу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

честно говоря не понял логику коррекции. почему 25000?

"Тоже мне, бином Ньютона"(с). Если 1 миллион разделить на 40, то будет 25000. Если у вас погрешность 40 ppm, то корректируя на +-1 после каждого 25-тысячного импульса, вы обнуляете погрешность.

 

я уже мылю ж...шею так как знаю с кем имею дело. :)

После ваших ответов, вспомнилось бессмертное от Козьмы Пруткова: "Не робей перед врагом. Злейший враг человека - он сам!".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Тоже мне, бином Ньютона"(с). Если 1 миллион разделить на 40, то будет 25000. Если у вас погрешность 40 ppm, то корректируя на +-1 после каждого 25-тысячного импульса, вы обнуляете погрешность.

 

 

После ваших ответов, вспомнилось бессмертное от Козьмы Пруткова: "Не робей перед врагом. Злейший враг человека - он сам!".

мда...мои мозги салбоваты для такой алгоритмики. :)

 

Трудно поспорить с Козьмой. просто есть люди которе хотят получить определенный результат, не важно позволяет это закон ома или нет. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...