реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> STM32F407 RTC, Работа с миллисекундами
mantech
сообщение Feb 3 2014, 11:05
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Приветствую.

Есть одна нетривиальная задача - нужен таймер с разрешением 0.01 сек

Посмотрел хитрый блок часов в стм, и понял что не все так просто crying.gif

Во первых - кварц с частотой 32768 на 100 нацело не делится.

Во вторых, счетчик RTC_SSR прибавляется на 1 каждые 1\256 сек, что тоже не то-не се.

Вопрос - как-то можно сделать что-то более-менее похожее, исходя из всего этого, или решение только одно - надо где-то искать кварц на 36КГц?
Go to the top of the page
 
+Quote Post
adnega
сообщение Feb 3 2014, 11:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(mantech @ Feb 3 2014, 15:05) *
Есть одна нетривиальная задача - нужен таймер с разрешением 0.01 сек

Таймеров в STM много. Разрешение - хоть микросекунды. Причем тривиально!
Или Вы что-то не договариваете?
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Feb 3 2014, 11:17
Сообщение #3


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(mantech @ Feb 3 2014, 15:05) *
...нужен таймер с разрешением 0.01 сек...искать кварц на 36КГц?


я что то не догоняю или....

у Вас камень кварцованный(в правильном раскладе) с частотой (вдумайтесь) 168 милионов раз в секунду.
Точность какая при этом у Вас получается? Свои 0,01 Вы сможете смело и достаточно точно получить на любом(практически) таймере поделив
всё это хозяйство на нужное число.будет у вас константа смещение на какую нить там сотую миллионную - Вы такую точность
даже не выбирете ничем - ни каналами ввода выовода, ни пинами, ни мат обработкой...

или???
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 3 2014, 11:25
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(kolobok0 @ Feb 3 2014, 15:17) *
я что то не догоняю или....


А в курсе, что камень на своих 168мегах.... в выкл. состоянии не работает?? А часы идут от батарейки? wink.gif

Вот и мне нужно, чтоб они шли не только, когда есть питание..

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

ЗЫ. Сейчас почитал даташит повнимательнее - оказывается там регистр синхронного делителя 15 бит и плюс еще асинхронный 7 бит (я раньше думал, что он - это старшая часть синхроного biggrin.gif )

Отсюда вопрос - зачем вообще этот асинхронный делитель? Может сделать проще - задать его значение=1 (0 там помоему нельзя), итого получаем на входе синхронного 16384КГц, я так понимаю, и на счетчик миллисекунд будет поступать эта частота, а ее потом уже и делим на соотв. коефф. чтоб получить мс?

Сообщение отредактировал mantech - Feb 3 2014, 11:55
Go to the top of the page
 
+Quote Post
adnega
сообщение Feb 3 2014, 12:27
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(mantech @ Feb 3 2014, 15:25) *
А в курсе, что камень на своих 168мегах.... в выкл. состоянии не работает?? А часы идут от батарейки? wink.gif
Вот и мне нужно, чтоб они шли не только, когда есть питание..
Ясень пень, что на обычном таймере я могу получить любую выдержку, только она будет несинхронна со встроенными часами.

Думаю, Вам стоит еще раз аккуратно объяснить чего Вы желаете.
Нужны энергонезависимые часы с шагом 0.01 сек?
От кварца с частотой 32768Гц не получите, ибо делитель должен быть дробный!
Еще вопросы?
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 3 2014, 12:46
Сообщение #6


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(adnega @ Feb 3 2014, 16:27) *
Думаю, Вам стоит еще раз аккуратно объяснить чего Вы желаете.
Нужны энергонезависимые часы с шагом 0.01 сек?
От кварца с частотой 32768Гц не получите, ибо делитель должен быть дробный!
Еще вопросы?



Хорошо, попробую biggrin.gif

1) нужны часы, которые идут от батарейки

2) разрешающая способность 0.01 сек (точность +-10мс)

Я попробовал так - поставил асинхр. делитель в 0, а синхр в 32767. В рез-те получил тот же 1 Гц на выходе, и декремент регистра миллисек с частотой кварца. рассогласование частоты при делении - 68Гц,
т.е. абс. точность получается при частоте 32700Гц, в принципе - сойдет.

Правильно-ли я все понял, и если дел-ль=0 это нормально, или так делать нельзя?
Go to the top of the page
 
+Quote Post
adnega
сообщение Feb 3 2014, 14:39
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(mantech @ Feb 3 2014, 16:46) *
Хорошо, попробую biggrin.gif

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 говорит, что если используются оба делителя, то
рекоментуется в асинхронный заносить бОльшие значения для уменьшения энергопотребления.

Надеюсь, на Ваш вопрос ответил. Хотя мне до сих пор не понятно кому "нужны идущие от батарейки часы"
с такой чремерной разрешающей способностью и "никакой" точностью?
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Feb 3 2014, 14:55
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



в чём проблема? просыпайтесь каждые 1/256 секунды высчитывайте прошла ли 0.01 алгоритмически и делайте что вам надо, у вас же написано : НЕ ХУЖЕ! а не точно каждые 0.01 сек.


--------------------
Go to the top of the page
 
+Quote Post
adnega
сообщение Feb 3 2014, 15:15
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 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 и что с ними можно сделать вопрос тоже открытый?
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 3 2014, 16:34
Сообщение #10


Гуру
******

Группа: Участник
Сообщений: 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 сек, как-то подругому писать? biggrin.gif

Да, часы должны работать от батарейки, потребление, конечно, чем меньше-тем лучше, высчитывать миллисекунды из 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(по умолчанию), так и при полностью откл. делителе.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 3 2014, 17:29
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



вопрос в том насколько плавает кварц, и насколько он изначально расходиться...

из 1/128 сделать 0.01 примерно так
1/128 = 0.0078125 === 0
2/128 = 0.015625 === 0.01
3/128 = 0.0234375 === 0.02
4/128 = 0.03125 === 0.03

причем у вас нет накопления ошибки, погрешность прибора с ценой деления 0.01 по умолчанию +- 0.005, а через 128 отсчетов у вас будет честная 1, и следующий круг без какой либо накопленной погрешности. Но что-то мне говорит что точность кварца в температуре будет сильно хуже....
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 3 2014, 17:51
Сообщение #12


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Golikov A. @ Feb 3 2014, 21:29) *
вопрос в том насколько плавает кварц, и насколько он изначально расходиться...
причем у вас нет накопления ошибки, погрешность прибора с ценой деления 0.01 по умолчанию +- 0.005, а через 128 отсчетов у вас будет честная 1, и следующий круг без какой либо накопленной погрешности. Но что-то мне говорит что точность кварца в температуре будет сильно хуже....


Это все понятно, заказчик не согласен ставить какие-то более качественные кварцы, пусть будет так.

А на счет делителя, если на потреблежку от батареи не сильно влияет, больше тут никаких "подводных камней" нет? Если нет - то я так и оставляю, как делал.

Все эти деления по точности дают худший результат, плюс округления и пр...
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 3 2014, 18:27
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



да можно делить на сколько угодно больше 100
Просто потом из числа насчитанных тактов правильно перевести в 0.01 секунды.

Go to the top of the page
 
+Quote Post
adnega
сообщение Feb 3 2014, 19:25
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(mantech @ Feb 3 2014, 21:51) *
Это все понятно, заказчик не согласен ставить какие-то более качественные кварцы, пусть будет так.
А на счет делителя, если на потреблежку от батареи не сильно влияет, больше тут никаких "подводных камней" нет? Если нет - то я так и оставляю, как делал.
Все эти деления по точности дают худший результат, плюс округления и пр...

Для тренеровок сгодится любой часовой кварц.
Насчет точности +-10мс было требование. Можно доказать, что "деления и всякие округления" дадут точность не хуже +-4мс.
Делайте так ((RTC->SSR * 100) >> 8) - так будут Вам сотые доли секунды с заявленной точностью при минимальном потреблении.
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 3 2014, 19:42
Сообщение #15


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(adnega @ Feb 3 2014, 23:25) *
Делайте так ((RTC->SSR * 100) >> 8)


Это при синхр. делителе 256?
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th July 2025 - 11:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01502 секунд с 7
ELECTRONIX ©2004-2016