Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Высокоточное задание больших интервалов времени
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
amoralex
Господа, вопрос такой:

Есть микроконтроллер Silabs 100МГц.
Есть необходимость в высокоточном задании интервалов времени, чтобы точность была 10^-8 - 10^-7, а сами интервалы времени - до 1 секунды.
Причем хотелось бы иметь возможность генерировать до 5-ти событий на этом интервале.
Прямой счет аппаратными счетчиками не годится, слишком большой интервал.

Какие варианты?
Мне приходит в голову написании программы и тупого счета пустой команды в цикле.
Или же счет PCA от переполнения Timer0, а того в свою очередь заставить работать в Auto-Reload.

А как поступают более опытные люди? huh.gif
Виктория
Микроконтроллер, к сожалению, не знаю. Но более стандартный путь - с использованием обработки прерывания по таймеру (точность генерации фактически определяется из времени обработки реакции на прерывание микроконтроллера).
Vic
Вне зависимости от контроллера, всегда делают на таймерах и по прерыванию считают. Т.к. пока таймер считает можно, что-нибудь другое поделать или поспать (экономя батарею) smile.gif
amoralex
Цитата(Vic1 @ Sep 19 2005, 14:09)
Микроконтроллер, к сожалению, не знаю. Но более стандартный путь - с использованием обработки прерывания по таймеру (точность генерации фактически определяется из времени обработки реакции на прерывание микроконтроллера).
*


Считать количество переполнений и на последней итерации с дробной частью - просто запускать счетчик на Compare?
Виктория
amoralex
Можно и не переполнения считать, а запрограммировать таймер на нужный интервал (дискретность отсчета интервала). Конечно, если у Вас она не совпадает с 10^-7 - 10^-8.

Vic
Приветствую тезку cheers.gif
BVU
Можно воспользоваться внешним генератором импульсов (подавая на вход прерывания) для 'заполнения' Вашего временного интервала. Это будет более прецизионное измерение, т.к. генератор можно сделать с довольно большой точностью и стабильностью.
vvs157
Цитата(BVU @ Sep 19 2005, 15:31)
Можно воспользоваться внешним генератором импульсов (подавая на вход прерывания) для 'заполнения' Вашего временного интервала. Это будет более прецизионное измерение, т.к. генератор можно сделать с довольно большой точностью и стабильностью.
*


А по другому даже 10E-7 не получится, так как стабильность генератора MK не лучше 10E-5 - 10E-6.
На 10E-8 генератор "на коленке" вряд ли получится
Владимир
Только что со стандорта приехал. там в осреднениях(100) для подобных интервалов достигли 50 пс. Я даже сам не ожидал.
Но реализация сложная, и специфичная по условям задания интервала времени.
BVU
Цитата(vvs157 @ Sep 19 2005, 17:20)
Цитата(BVU @ Sep 19 2005, 15:31)
Можно воспользоваться внешним генератором импульсов (подавая на вход прерывания) для 'заполнения' Вашего временного интервала. Это будет более прецизионное измерение, т.к. генератор можно сделать с довольно большой точностью и стабильностью.
*


А по другому даже 10E-7 не получится, так как стабильность генератора MK не лучше 10E-5 - 10E-6.
На 10E-8 генератор "на коленке" вряд ли получится
*



Ну это Вы батенька бросте 'сказки' расказывать. Можно сделать кварцевый генератор со стабильностью частоты до 9-го знака. Естественно с условиями его термостабилизации и прочее. Только надо не на 'коленке' делать, а с умом.
Все зависит от обоснованности поставленной задачи.
amoralex
Цитата(BVU @ Sep 19 2005, 15:31)
Можно воспользоваться внешним генератором импульсов (подавая на вход прерывания) для 'заполнения' Вашего временного интервала. Это будет более прецизионное измерение, т.к. генератор можно сделать с довольно большой точностью и стабильностью.
*


А чем это будет отличаться от того, что в качестве тактового для микропроцессора я буду использовать внешний высокостабильный?

Так или иначе заполнив мой интервал точными импульсами, я не смогу прямым счетом вывернуться, разрядности не хватит.
Я так себе представляю, что надо временной интервал делить на целую часть (количество переполнений\перезагрузок счетчика) и дробную (по окончании которой генерируется искомый импульс).

И еще вопрос, а какие компании производят высокточные генераторы?
BVU
Цитата(amoralex @ Sep 20 2005, 09:35)
А чем это будет отличаться от того, что в качестве тактового для микропроцессора я буду использовать внешний высокостабильный?
*

А на генераторном узле своего контроллера и не пытайтесь сделать подобный генератор (не добьетесть стабильности...).

Цитата(amoralex @ Sep 20 2005, 09:35)
Так или иначе заполнив мой интервал точными импульсами, я не смогу прямым счетом вывернуться, разрядности не хватит.
*

Регистровая разрядность тут не причем, необходимо в теле прерывания завести счетчик, как переменную типа long double и подсчитывать количество импульсов (длительностью -10^7...-10^8), которые войдут в измеряемый интервал. При тактовой частоте процессора в 100MHz все должно успеваться + другие задачи (конечно при условии выполнения 1 команды процессором за 1-2 такта).
Alex11
Мне кажется, что лучше не заморачиваться с контроллером, а поставить FPGA приличную (как вариант - самый маленький Cyclone от Альтеры) и сделать в нем сколько надо счетчиков на 100 МГц - там нодо-то меньше 32 разрядов на каждый. Для удобства управления можно и контроллер сбоку прилепить, а можно и напрямую через RS-232 управлять, там места еще хватит.
amoralex
Цитата(BVU @ Sep 20 2005, 09:09)
Регистровая разрядность тут не причем, необходимо в теле прерывания завести счетчик, как переменную типа long double и подсчитывать количество импульсов (длительностью -10^7...-10^8), которые войдут в измеряемый интервал.  При тактовой частоте процессора в 100MHz все должно успеваться + другие задачи (конечно при условии выполнения 1 команды процессором за 1-2 такта).


Спасибо. Все вроде бы ясно.
Только вот еще хорошо до 5 событий генерировать во время интервала...
Такими же импульсами как и самый последний по окончанию интервала.
Надо подумать cool.gif
amoralex
Цитата(Alex11 @ Sep 20 2005, 09:24)
Мне кажется, что лучше не заморачиваться с контроллером, а поставить FPGA приличную (как вариант - самый маленький Cyclone от Альтеры)  и сделать в нем сколько надо счетчиков на 100 МГц - там нодо-то меньше 32 разрядов на каждый. Для удобства управления можно и контроллер сбоку прилепить, а можно и напрямую через RS-232 управлять, там места еще хватит.
*


Спасибо. Это вариант.
Заодно посмотрел - маленькие циклончики стоят приемлимо.
Но у меня интервал времени расчетный, по-любому микропроцессор нужен. Так зачем городить еще микросхему,если есть возможность обойтись всего одной!
mse
Блин. Да никаких проблем. Если есть ОГ с требуемой стабильностью. Как прально сказали, нужно считать кол-во переполнений таймера, а на последнем этапе работать по СОМ. Ессно, ни в чём себя ограничивать не надо, может выполняться что угодно и МК жыть своёй жызьнью. Для параноиков можно запретить работу на "дробном" этапе. У 51 есть нога разрешения работы таймера, от неё и пляшем. По СОМ аппаратно выставляем другой ногой результат. Фсё.
okela
Цитата(amoralex @ Sep 20 2005, 10:08)
Цитата(Alex11 @ Sep 20 2005, 09:24)
Мне кажется, что лучше не заморачиваться с контроллером, а поставить FPGA приличную (как вариант - самый маленький Cyclone от Альтеры)  и сделать в нем сколько надо счетчиков на 100 МГц - там нодо-то меньше 32 разрядов на каждый. Для удобства управления можно и контроллер сбоку прилепить, а можно и напрямую через RS-232 управлять, там места еще хватит.
*


Спасибо. Это вариант.
Заодно посмотрел - маленькие циклончики стоят приемлимо.
Но у меня интервал времени расчетный, по-любому микропроцессор нужен. Так зачем городить еще микросхему,если есть возможность обойтись всего одной!
*



Кстати говоря, в Циклоне есть синтезируемый процессор, так что все мона в одном флаконе собрать..
mse
"Кстати говоря, в Циклоне есть синтезируемый процессор, так что все мона в одном флаконе собрать.."

Ну ещё конфигуратор, как минимум, так что флаконов два. Хотя по цене, по сравнению с Силабом, будет приемлимо.
asdf
Цитата(mse @ Sep 20 2005, 14:40)
"Кстати говоря, в Циклоне есть синтезируемый процессор, так что все мона в одном флаконе собрать.."

Ну ещё конфигуратор, как минимум, так что флаконов два. Хотя по цене, по сравнению с Силабом, будет приемлимо.
*


Люди, да у нас покупной генератор с кратковременной стабильность 10^-8 будет в несколько раз дороже контроллера, а в остальном согласен с mse.
MosAic
Позвольте поднять эту тему еще раз.

Предположим, что внешний стабильный генератор уже есть. Насколько я понял задача следующая:
На базе 51 отсчитать заданное число импульсов генератора частотой 100 МГц и выдать сигнал завершения счета с точностью (относительно запускающего импульса) до одного периода генератора? Тогда здесь не было предложено удовлетворительного решения. Без внешних компонентов не обойтись, на мой взгляд.

Сообщите пожалуйста об успехах. wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.