|
Измерение периода AVR микронтроллером |
|
|
|
May 24 2008, 15:09
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 17-05-08
Из: Питер
Пользователь №: 37 575

|
Вопрос заключается в следующем. Необходимо измерить малый период с достаточно высокой точностью, используя микроконтроллер. Просмотрев литературу на эту тему пришел к выводу, что лучше всего это было бы реализовать с помощью усреднения на некотором интервале времени. Но к сожалению не нашел алгоритмов расчета среднего значения для микроконтроллеров. Все что удалось мне найти - это алгоритмы для микропроцессоров с ПЗ и ФЗ. Кто-нибудь мог бы мне посоветовать какие-нибудь интернет-ссылки или литературу на эту тему???
|
|
|
|
|
May 24 2008, 15:55
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 17-05-08
Из: Питер
Пользователь №: 37 575

|
Цитата(domowoj @ May 24 2008, 19:38)  Малый период??? с достаточно высокой точностью??? Измеряемый период примерно составляет 400 нс и его желательно оцифровать 16 разрядным кодом. Время измерения должно составлять где-то 1-1.5 минуты ПЗ и ФЗ - вычисления с плавающей запятой и с фиксированной
|
|
|
|
|
May 24 2008, 16:07
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(lex_84 @ May 24 2008, 17:55)  Измеряемый период примерно составляет 400 нс и его желательно оцифровать 16 разрядным кодом. О это волшебное заклинание "AVR!!!!". Не поможет - ну не действует оно всегда и везде. Не действует. Moderator: Тему перенес.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 24 2008, 17:06
|
Местный
  
Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929

|
Вообще то поможет, только криво.
Можно померять интервал времени для 0x2000 измеряемых импульсов. 400нс - это всего лишь 2,5MHz. Вообщем надо один из 16-битных счетчиков тактировать от внешнего измеряемого сигнала, а саму AVR запустить от 16MHz кварца. Второй 16-бит таймер тактируем от 16MHz.
Теперь на счетчик 2,5MHz ставим прерывание по переполнению, и записываем в него (0xFFFF - 0x2000). сразу же обнуляем второй таймер.
В момент возникновения прерывания, значение в TIMER2 будет соответствовать количеству периодов 16MHZ, уместившихся в 0x2000 периодов 2,5MHZ измеряемого сигнала.
Только результат может быть неправидльным, тоестьокругленным, если 2,5MHz сигнал имеет джиттер.
|
|
|
|
|
May 24 2008, 18:08
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 17-05-08
Из: Питер
Пользователь №: 37 575

|
Цитата(zltigo @ May 24 2008, 21:36)  А с 16бит разрешением это "всего лишь" в шестьдесят пять тысяч пятьсот трицать пять раз больше... Сколько это будет в Гигагерцах? Если я не ошибся в расчетах - 40 Цитата(zltigo @ May 24 2008, 20:07)  О это волшебное заклинание "AVR!!!!". Не поможет - ну не действует оно всегда и везде. Не действует. Moderator: Тему перенес. Я на форуме не давно. Но правила читал  Поэтому тему разместил в этом разделе, т.к. реализацию этого устройства желательно провести на AVR. У которых фиксированная архитектура и команды. Цитата(Amper25 @ May 24 2008, 21:06)  Вообще то поможет, только криво.
Можно померять интервал времени для 0x2000 измеряемых импульсов. 400нс - это всего лишь 2,5MHz. Вообщем надо один из 16-битных счетчиков тактировать от внешнего измеряемого сигнала, а саму AVR запустить от 16MHz кварца. Второй 16-бит таймер тактируем от 16MHz.
Теперь на счетчик 2,5MHz ставим прерывание по переполнению, и записываем в него (0xFFFF - 0x2000). сразу же обнуляем второй таймер.
В момент возникновения прерывания, значение в TIMER2 будет соответствовать количеству периодов 16MHZ, уместившихся в 0x2000 периодов 2,5MHZ измеряемого сигнала. Только результат может быть неправидльным, тоестьокругленным, если 2,5MHz сигнал имеет джиттер. Спасибо! Идея мне понравилась. Но это было бы слишком просто. Просто я не правильно сформулировал задачу. Длительность импульса 400 нс, но частота следования 1 Гц. Вот в чем проблема. Поэтому и нужно осреднение и статистическая обработка. Цитата(zltigo @ May 24 2008, 20:07)  О это волшебное заклинание "AVR!!!!". Не поможет - ну не действует оно всегда и везде. Не действует. Moderator: Тему перенес. Хотя чувствую как бы не пришлось бы применять Пентиум-шментиум или 486 для измерения...
|
|
|
|
|
May 24 2008, 18:09
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(lex_84 @ May 24 2008, 21:03)  Если я не ошибся в расчетах - 40 Ошиблись - 2.5mHz * 65535 = 163.8 ГГц нереальная частота. Цитата Просто я не правильно сформулировал задачу. Длительность импульса 400 нс, но частота следования 1 Гц. Вот в чем проблема. Поэтому и нужно осреднение и статистическая обработка. А можно поинтересоваться зачем измерять его длительность если Вы и так знаете что длительность == 400нс? Цитата Хотя чувствую как бы не пришлось бы применять Пентиум-шментиум или 486 для измерения... не поможет. вот простенькая, но резвая CPLD, была бы кстати.
|
|
|
|
|
May 24 2008, 18:16
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 8-03-08
Пользователь №: 35 744

|
Цитата(lex_84 @ May 24 2008, 21:08)  Если я не ошибся в расчетах - 40 Я на форуме не давно. Но правила читал  Поэтому тему разместил в этом разделе, т.к. реализацию этого устройства желательно провести на AVR. У которых фиксированная архитектура и команды. Спасибо! Идея мне понравилась. Но это было бы слишком просто. Просто я не правильно сформулировал задачу. Длительность импульса 400 нс, но частота следования 1 Гц. Вот в чем проблема. Поэтому и нужно осреднение и статистическая обработка. Хотя чувствую как бы не пришлось бы применять Пентиум-шментиум или 486 для измерения...  но в начале ж написано "малый период"!!! Представляю что написали бы в "телесистемах!
|
|
|
|
|
May 24 2008, 18:18
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 17-05-08
Из: Питер
Пользователь №: 37 575

|
Цитата(defunct @ May 24 2008, 22:09)  Ошиблись - 2.5mHz * 65535 = 163.8 ГГц нереальная частота. А можно поинтересоваться зачем измеряться его длительность если Вы и так знаете что длительность == 400нс?
не поможет. вот простенькая, но резвая CPLD, была бы кстати. Я не то число написал - это для 14 разрядов "оцифровать период"- я под этим подразумевал, что период сигнала меняется от 0 до 400 нс. Насчет CPLD - хороший вариант, но я не знаю таких CPLD которые бы бегали под 163 ГГц Повторюсь, я ознакомился с теорией этой проблемы и мне представляется, что нужно либо реализовать на CPLD такое извращение, как нониусный метод, либо использовать стат. обработку. Но примеров практической реализации подобных устройств я не нашел... И я думаю что стат обработку на МК реализовать проще, чем нониусный метод на ПЛИС.
|
|
|
|
|
May 24 2008, 18:35
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(zltigo @ May 24 2008, 20:07)  О это волшебное заклинание "AVR!!!!". Не поможет - ну не действует оно всегда и везде. Не действует. Автору нужно было указать не AVR а ARM в качестве базовой платформы, причем желательно LPC(NXP), тогда бы и отношение было более серьезным Ну а если по серьезному, ну вполне такая задачка, только 16бит для 1-1.5 минуты выглядит не реалистично, Цитата Я не то число написал - это для 14 разрядов но и после этой корекции все равно не реалистично а вот это: Цитата Просто я не правильно сформулировал задачу. Длительность импульса 400 нс, но частота следования 1 Гц. Вот в чем проблема. убивает всякие идеи на корню, за 1.5 минуты при частоте 1Гц будет всего 90 измерений, получить из них 14бит не представляется возможным...
|
|
|
|
|
May 24 2008, 18:37
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 17-05-08
Из: Питер
Пользователь №: 37 575

|
Цитата(_Ivan_33 @ May 24 2008, 22:27)  использовать прерывания по фронту и спаду сигнала - нада форму импульса... и счетчик тама.... А какая частота тактирования для микроконтроллера при этом будет не подскажете??? Вах! Для ПК найти алгоритм численных методов не составляет ни какого труда. Тот же самый Рунге Кут. А для микроконтроллеров полный завал Нашел книжку "Прикладные задачи микропроцессорных систем" Байкова, так она расчитана на МП и арифметику с ПЗ и ФЗ.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|