Нужно синхронизировать входной TTL сигнал 20Гц..20кГц с внутренним генератором синуса в DSP и выдать синус на DAC (fs=48 Khz). Главное - ошибка синхронизации +/- 0.05Гц (некое подобие PID control для DC-моторов). Сама по себе разница в фазе не важна, важнее точность в частоте. Скорость изменения частоты входного сигнала 5Гц/сек. max. (линейно, sweep mode).
Слышал, что при подобающей мощности DSP возможен freqency lock до 80кГц. Но пока не совсем представляю, как это можно сделать моим DSP (ADSP21262). Хочу сделать полностью программно или большей частью программно.
Кое-что читал о PLL. Такие программные блоки: фазовый детектор (PFD, опережение-запаздывание) -> фильтр -> управление генератором (error signal) -> генератор (DDS) -> обратно на детектор.
Самую проблему представляет фазовый детектор. Для моего дизайна больше всего подходит PFD с серии x4046. Через ADC: одинаковые частоты дискретизации для входного и выходного сигналов -гут, но думаю, слишком медленно/для маленьких частот.
Через таймер: детектирую (INT) low-high входящего TTL и дальше???...Как я расчитаю время/момент, когда внутренний DDS проходит low-high, если фаза расчитывается раз 1/48кГц секунд. Получается, частота дискретизации входящего ТТЛ отличается от частоты дискретизации выходного синуса (идет на DAC) -как это уживется вместе?
Как лучше реализовать опережение-опаздывание? Как дискретизировать (ADC, timer) и запрограммировать? Может, кто-нибудь знает альтернативные методы?
Благодарю за внимание
|