|
STM32F407 RTC, Работа с миллисекундами |
|
|
|
Feb 3 2014, 11:05
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Приветствую. Есть одна нетривиальная задача - нужен таймер с разрешением 0.01 сек Посмотрел хитрый блок часов в стм, и понял что не все так просто Во первых - кварц с частотой 32768 на 100 нацело не делится. Во вторых, счетчик RTC_SSR прибавляется на 1 каждые 1\256 сек, что тоже не то-не се. Вопрос - как-то можно сделать что-то более-менее похожее, исходя из всего этого, или решение только одно - надо где-то искать кварц на 36КГц?
|
|
|
|
|
Feb 3 2014, 11:17
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(mantech @ Feb 3 2014, 15:05)  ...нужен таймер с разрешением 0.01 сек...искать кварц на 36КГц? я что то не догоняю или.... у Вас камень кварцованный(в правильном раскладе) с частотой (вдумайтесь) 168 милионов раз в секунду. Точность какая при этом у Вас получается? Свои 0,01 Вы сможете смело и достаточно точно получить на любом(практически) таймере поделив всё это хозяйство на нужное число.будет у вас константа смещение на какую нить там сотую миллионную - Вы такую точность даже не выбирете ничем - ни каналами ввода выовода, ни пинами, ни мат обработкой... или???
|
|
|
|
|
Feb 3 2014, 11:25
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(kolobok0 @ Feb 3 2014, 15:17)  я что то не догоняю или.... А в курсе, что камень на своих 168мегах.... в выкл. состоянии не работает?? А часы идут от батарейки? Вот и мне нужно, чтоб они шли не только, когда есть питание.. Ясень пень, что на обычном таймере я могу получить любую выдержку, только она будет несинхронна со встроенными часами. ЗЫ. Сейчас почитал даташит повнимательнее - оказывается там регистр синхронного делителя 15 бит и плюс еще асинхронный 7 бит (я раньше думал, что он - это старшая часть синхроного  ) Отсюда вопрос - зачем вообще этот асинхронный делитель? Может сделать проще - задать его значение=1 (0 там помоему нельзя), итого получаем на входе синхронного 16384КГц, я так понимаю, и на счетчик миллисекунд будет поступать эта частота, а ее потом уже и делим на соотв. коефф. чтоб получить мс?
Сообщение отредактировал mantech - Feb 3 2014, 11:55
|
|
|
|
|
Feb 3 2014, 12:27
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(mantech @ Feb 3 2014, 15:25)  А в курсе, что камень на своих 168мегах.... в выкл. состоянии не работает?? А часы идут от батарейки? Вот и мне нужно, чтоб они шли не только, когда есть питание.. Ясень пень, что на обычном таймере я могу получить любую выдержку, только она будет несинхронна со встроенными часами. Думаю, Вам стоит еще раз аккуратно объяснить чего Вы желаете. Нужны энергонезависимые часы с шагом 0.01 сек? От кварца с частотой 32768Гц не получите, ибо делитель должен быть дробный! Еще вопросы?
|
|
|
|
|
Feb 3 2014, 12:46
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(adnega @ Feb 3 2014, 16:27)  Думаю, Вам стоит еще раз аккуратно объяснить чего Вы желаете. Нужны энергонезависимые часы с шагом 0.01 сек? От кварца с частотой 32768Гц не получите, ибо делитель должен быть дробный! Еще вопросы? Хорошо, попробую 1) нужны часы, которые идут от батарейки 2) разрешающая способность 0.01 сек (точность +-10мс) Я попробовал так - поставил асинхр. делитель в 0, а синхр в 32767. В рез-те получил тот же 1 Гц на выходе, и декремент регистра миллисек с частотой кварца. рассогласование частоты при делении - 68Гц, т.е. абс. точность получается при частоте 32700Гц, в принципе - сойдет. Правильно-ли я все понял, и если дел-ль=0 это нормально, или так делать нельзя?
|
|
|
|
|
Feb 3 2014, 14:39
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(mantech @ Feb 3 2014, 16:46)  Хорошо, попробую 1) нужны часы, которые идут от батарейки 2) разрешающая способность 0.01 сек (точность +-10мс) Я попробовал так - поставил асинхр. делитель в 0, а синхр в 32767. В рез-те получил тот же 1 Гц на выходе, и декремент регистра миллисек с частотой кварца. рассогласование частоты при делении - 68Гц, т.е. абс. точность получается при частоте 32700Гц, в принципе - сойдет. Правильно-ли я все понял, и если дел-ль=0 это нормально, или так делать нельзя? Фраза "When both prescalers are used, it is recommended to configure the asynchronous prescaler to a high value to minimize consumption." из UM говорит, что если используются оба делителя, то рекоментуется в асинхронный заносить бОльшие значения для уменьшения энергопотребления. Надеюсь, на Ваш вопрос ответил. Хотя мне до сих пор не понятно кому "нужны идущие от батарейки часы" с такой чремерной разрешающей способностью и "никакой" точностью?
|
|
|
|
|
Feb 3 2014, 15:15
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(SyncLair @ Feb 3 2014, 18:55)  в чём проблема? просыпайтесь каждые 1/256 секунды высчитывайте прошла ли 0.01 алгоритмически и делайте что вам надо, у вас же написано : НЕ ХУЖЕ! а не точно каждые 0.01 сек. И 1/128 будет достаточно. Вариант уж очень прожорливый, хотя об этой стороне вопроса (энергопотребление) автор темы тоже умалчивает. Возможно, автор хочет сделать секундомер с выводрм сотых долей, причем не хочет заниматься "всем этим матаном" по пересчету 1/128 в 0.01. Зачем это надо автор отказывается объяснять. Почему бы не запустить RTC с обычным секундным интервалом и алгоритмически вычислять сотые на основании RTC->SSR? Что за "величины" будут в RTC->TR и RTC->DR и что с ними можно сделать вопрос тоже открытый?
|
|
|
|
|
Feb 3 2014, 16:34
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(adnega @ Feb 3 2014, 18:39)  Фраза "When both prescalers are used, it is recommended to configure the asynchronous prescaler to a high value to minimize consumption." из UM говорит, что если используются оба делителя, то рекоментуется в асинхронный заносить бОльшие значения для уменьшения энергопотребления. Странно однако, это я про делитель... А второе - что значит с никакой точностью? Я написал - погрешность не более 0.01 сек, как-то подругому писать? Да, часы должны работать от батарейки, потребление, конечно, чем меньше-тем лучше, высчитывать миллисекунды из 1\128 это как? Можете объяснить? Цитата(adnega @ Feb 3 2014, 19:15)  Почему бы не запустить RTC с обычным секундным интервалом и алгоритмически вычислять сотые на основании RTC->SSR? Что за "величины" будут в RTC->TR и RTC->DR и что с ними можно сделать вопрос тоже открытый? Он именно так и работает - с секундным интервалом, иначе сами часы будут считать неправильно, логично? Просто с точки зрения математики - чем большее число делить на 100, тем точнее результат, например 32768 \ 100 получаем 327 Для проверки 327*100 = 32700, т.е. неточность 68Гц. Если делитель сделаем больше , скажем 16, до частоты 2048Гц, то получаем 2048 \ 100 = 20 проверяем 20*100*16 = 32000, т.е. мы "отстаем " уже на 768Гц, разница ощутима? Цитата(adnega @ Feb 3 2014, 19:15)  Зачем это надо автор отказывается объяснять. В смысле зачем? Нужны часы для спортивных тренировок. Цитата(adnega @ Feb 3 2014, 18:39)  из UM говорит, что если используются оба делителя, то рекоментуется в асинхронный заносить бОльшие значения для уменьшения энергопотребления. Замерил потребление, как было 1.5 мкА, при асинхр. делителе 128(по умолчанию), так и при полностью откл. делителе.
|
|
|
|
|
Feb 3 2014, 17:51
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(Golikov A. @ Feb 3 2014, 21:29)  вопрос в том насколько плавает кварц, и насколько он изначально расходиться... причем у вас нет накопления ошибки, погрешность прибора с ценой деления 0.01 по умолчанию +- 0.005, а через 128 отсчетов у вас будет честная 1, и следующий круг без какой либо накопленной погрешности. Но что-то мне говорит что точность кварца в температуре будет сильно хуже.... Это все понятно, заказчик не согласен ставить какие-то более качественные кварцы, пусть будет так. А на счет делителя, если на потреблежку от батареи не сильно влияет, больше тут никаких "подводных камней" нет? Если нет - то я так и оставляю, как делал. Все эти деления по точности дают худший результат, плюс округления и пр...
|
|
|
|
|
Feb 3 2014, 19:25
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(mantech @ Feb 3 2014, 21:51)  Это все понятно, заказчик не согласен ставить какие-то более качественные кварцы, пусть будет так. А на счет делителя, если на потреблежку от батареи не сильно влияет, больше тут никаких "подводных камней" нет? Если нет - то я так и оставляю, как делал. Все эти деления по точности дают худший результат, плюс округления и пр... Для тренеровок сгодится любой часовой кварц. Насчет точности +-10мс было требование. Можно доказать, что "деления и всякие округления" дадут точность не хуже +-4мс. Делайте так ((RTC->SSR * 100) >> 8) - так будут Вам сотые доли секунды с заявленной точностью при минимальном потреблении.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|