[an error occurred while processing this directive]
|
|
В имитаторе датчика, который я сделал для этих экспериментов, сделано так: сигнал от внешнего генератора подается на вход Capture 16-битного таймера, работающего во free-running режиме от 10-мгц кварца, то есть генератора ступенчатой цифровой пилы с периодом в 6.5536 мс. Каждый рабочий фронт сигнала вызывает защелкивание текущего значения таймера в регистр Capture и генерит прерывание, по которому это значение по быстрому SPI выплевывается в мой же обработчик - именно так производится оцифровка периода в реальном датчике. В обработчике я для экспериментирования выставляю такую длительность цикла, которая гарантированно меньше периода пилы, например, 5 мс. И, разумеется, для своего же удобства я использую "бесплатный" аппаратный сумматор, которым по совместительству является таймер - чтобы получить сумму 1000 отсчетов, мне не нужно их суммировать, я всего лишь вычитаю (игнорируя знак и перенос) из текущего значения таймера то, что было записано 1000 выборок назад. И ни при аппаратном, ни при програмном суммировании никогда никаких дыр не замечалось. 24- или 32-битный счетчик был бы удобнее, но при известной длительности цикла измерений старшие биты смело и корректно заменяются константой (вместо предложенного вами програмного подсчета переполнений). Генератор, кстати, тоже пришлось склепать самому, так как заводские показали отвратительные шумовые и фазовые свойства. Сделан был за пару дней аппаратик на 32-битном DDS (AD9835) и AVR (2313), с дисплейчиком 16х2, программируемым свипом и другими удобствами.
Так что железо и МК, уж извините, я знаю досконально - это, собственно, мой хлеб. А вот в обработке сигналов действительно не силен, поэтому и пристал тут к вам.
E-mail: info@telesys.ru