|
Высокоточное задание больших интервалов времени, какие есть методы? |
|
|
|
Sep 19 2005, 10:55
|
Участник

Группа: Новичок
Сообщений: 25
Регистрация: 21-04-05
Пользователь №: 4 363

|
Господа, вопрос такой: Есть микроконтроллер Silabs 100МГц. Есть необходимость в высокоточном задании интервалов времени, чтобы точность была 10^-8 - 10^-7, а сами интервалы времени - до 1 секунды. Причем хотелось бы иметь возможность генерировать до 5-ти событий на этом интервале. Прямой счет аппаратными счетчиками не годится, слишком большой интервал. Какие варианты? Мне приходит в голову написании программы и тупого счета пустой команды в цикле. Или же счет PCA от переполнения Timer0, а того в свою очередь заставить работать в Auto-Reload. А как поступают более опытные люди?
|
|
|
|
|
Sep 19 2005, 11:23
|
Участник

Группа: Новичок
Сообщений: 25
Регистрация: 21-04-05
Пользователь №: 4 363

|
Цитата(Vic1 @ Sep 19 2005, 14:09) Микроконтроллер, к сожалению, не знаю. Но более стандартный путь - с использованием обработки прерывания по таймеру (точность генерации фактически определяется из времени обработки реакции на прерывание микроконтроллера). Считать количество переполнений и на последней итерации с дробной частью - просто запускать счетчик на Compare?
|
|
|
|
|
Sep 19 2005, 13:20
|
Профессионал
    
Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960

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

Профессионал
    
Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264

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

Группа: Новичок
Сообщений: 25
Регистрация: 21-04-05
Пользователь №: 4 363

|
Цитата(BVU @ Sep 19 2005, 15:31) Можно воспользоваться внешним генератором импульсов (подавая на вход прерывания) для 'заполнения' Вашего временного интервала. Это будет более прецизионное измерение, т.к. генератор можно сделать с довольно большой точностью и стабильностью. А чем это будет отличаться от того, что в качестве тактового для микропроцессора я буду использовать внешний высокостабильный? Так или иначе заполнив мой интервал точными импульсами, я не смогу прямым счетом вывернуться, разрядности не хватит. Я так себе представляю, что надо временной интервал делить на целую часть (количество переполнений\перезагрузок счетчика) и дробную (по окончании которой генерируется искомый импульс). И еще вопрос, а какие компании производят высокточные генераторы?
|
|
|
|
|
Sep 20 2005, 06:09
|

Профессионал
    
Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264

|
Цитата(amoralex @ Sep 20 2005, 09:35) А чем это будет отличаться от того, что в качестве тактового для микропроцессора я буду использовать внешний высокостабильный? А на генераторном узле своего контроллера и не пытайтесь сделать подобный генератор (не добьетесть стабильности...). Цитата(amoralex @ Sep 20 2005, 09:35) Так или иначе заполнив мой интервал точными импульсами, я не смогу прямым счетом вывернуться, разрядности не хватит. Регистровая разрядность тут не причем, необходимо в теле прерывания завести счетчик, как переменную типа long double и подсчитывать количество импульсов (длительностью -10^7...-10^8), которые войдут в измеряемый интервал. При тактовой частоте процессора в 100MHz все должно успеваться + другие задачи (конечно при условии выполнения 1 команды процессором за 1-2 такта).
--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
|
|
|
|
|
Sep 20 2005, 06:53
|
Участник

Группа: Новичок
Сообщений: 25
Регистрация: 21-04-05
Пользователь №: 4 363

|
Цитата(BVU @ Sep 20 2005, 09:09) Регистровая разрядность тут не причем, необходимо в теле прерывания завести счетчик, как переменную типа long double и подсчитывать количество импульсов (длительностью -10^7...-10^8), которые войдут в измеряемый интервал. При тактовой частоте процессора в 100MHz все должно успеваться + другие задачи (конечно при условии выполнения 1 команды процессором за 1-2 такта). Спасибо. Все вроде бы ясно. Только вот еще хорошо до 5 событий генерировать во время интервала... Такими же импульсами как и самый последний по окончанию интервала. Надо подумать
|
|
|
|
|
Sep 20 2005, 07:08
|
Участник

Группа: Новичок
Сообщений: 25
Регистрация: 21-04-05
Пользователь №: 4 363

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