Для синтеза собственно сигналов произвольной формы нужно настроить синтезируемую частоту модуля на частоту ВЫБОРОК синтезируемого сигнала произвольной формы. Например мы хотим синтезировать синус частотой 1,111 кГц с дискретностью по времени в 256 отсчетов. Значит нам нужно настроить NCO модуль на частоту 284,416 кГц. Выбираем в качестве накачки NCO осциллятор МК с включенной PLL. Пусть это будет 32 МГц (8 MIPS). При 20-разрядном сумматоре модуля NCO код искомой частоты (значение инкрементного регистра NCO) будет: N=FoutDDS*2^20/Fosc=284416*2^20/32000000=9320. С учетом округления реальная частота составит: F=32000000*9320/2^20=284424 Гц, а синтезируемый синус будет иметь частоту 1111,03 Гц. Каждое переполнение модуля NCO помимо генерации импульса настроенной длительности, генерируется прерывание, в котором и следует перегрузить очередное значение сигнала из таблицы в PWM или DAC.
Только вместо тобойлюбимого NCO 32Х битный таймер.
Однако не понятно твою увиливания и отсыл к мануалу на AD9837 Ибо твое же :
Цитата:
В модулях NCO PIC-ов, естественно, нет такой возможности и единственная форма сигнала, которую этот модуль может генерировать - импульсы фиксированной длительности синтезируемой частоты следования.
Вновь работаешь на публику, думая что будут смотреть тебе в рот?
:facepalm: Это беда.... Милейший, возьмите за труд прочесть теорию, чтобы не писать пургу про заранее заполненный буфер... Весь смысл DDS - это СКОЛЬЗЯЩАЯ ФАЗА. Это позволяет отказаться от кратности периода синтезируемого сигнала и периода накачки. Это какого же размера нужно иметь буфер, чтобы получить наименьшее общее кратное для частоты накачки и сигнала 100 Гц с шагом в 0,01 Гц?
Так ты сам все написал... Каждое прерывание складываем пару чисел, сдвигаем на нужное число бит вправо, получаем адрес в ROM, берем оттуда очередное значение и пересылаем в DAC/PWM. А что мешает проделать эту операцию не дожидаясь следующего прерывания? Сумма чисел посчитанная в другое время будет отличаться или что?
Только вместо тобойлюбимого NCO 32Х битный таймер.
Ты меня канешна извини, Досикус, но ты идиот? С каких пор таймер стал сумматором БОЛЕЕ, ЧЕМ НА 1? На тебя что, коронавирус так действует? В NCO нет никаких таймеров. NCO - это СУММАТОР. Он за один такт входной частоты суммирует содержимое инкрементного регистра с аккумулятором. И все. В задачу NCO не входит формирование самого сигнала. В его задачу входит формирование СОБЫТИЙ фиксированных фаз или расчет текущей ПРОИЗВОЛЬНОЙ ФАЗЫ.
А что мешает проделать эту операцию не дожидаясь следующего прерывания? Сумма чисел посчитанная в другое время будет отличаться или что?
Нет, не будет. Только какой смысл считать "в другое время", если КОЛИЧЕСТВО этих расчетов равно наименьшему общему кратному частоты накачки и синтезируемой частоты? Возьмите за труд посчитать это количество для приведенных ДВУХ частот с шагом в 0,01 Гц и у Вас пропадет желание предлагать глупости.
Последний раз редактировалось КРАМ Вт апр 14, 2020 15:00:32, всего редактировалось 1 раз.
Нет, не будет. Только какой смысл считать "в другое время", если КОЛИЧЕСТВО этих расчетов равно наименьшему общему кратному частоты накачки и синтезируемой частоты? Возьмите за труд посчитать это количество для приведенных ДВУХ частот с шагом в 0,01 Гц и у Вас пропадет желание предлагать глупости.
Смысл в том, что каждое прерывание - это лишних 3 десятка тактов, если не больше. Можно рассчитать сразу сотню значений, сохранить в буфере и затем периодически его пополнять, таким образом вместо 100 прерываний останется 2, при этом в DAC данные выводятся при помощи DMA.
Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России.
На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.
Ну если Вы полагаете, что так будет быстрее, то можно и так, но это мало что меняет, на самом деле. Расчет останется критической секцией и будет пожирать основную производительность. Кстати, тактирование (в смысле реквестов транзакций) DMA с высокой частотой само по себе способно заблокировать CPU. А к тому же, нужно будет обеспечить когерентность расчета и выгрузки, чтобы не разрушить целостность данных в буфере. Такшта особого выигрыша не ждите. Я по прежнему утверждаю, что реализация DDS на STM32F030 сожрет почти все его ресурсы. Нюансы с пересылкой в прерывании или из ДМА мало что решают.
Последний раз редактировалось КРАМ Вт апр 14, 2020 13:26:42, всего редактировалось 1 раз.
Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO
подробнее>>
dosikus
Заголовок сообщения: Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг
Да хрен с ним, он видит лишь свое "неповторимое решение", с какого-то хрена экстраполируя таймеры пЫк на таймеры стм. Пусть остается в своих розовых очках и в своем мирке...
с какого-то хрена экстраполируя таймеры пЫк на таймеры стм.
В каком месте я говорил про ТАЙМЕРЫ ПИКов? Тебе пора на пенсию, Досикус... Неумение признавать свою неправоту - это очень серьезный баг для инженера...
Ну так и соответствуй своим словам, признай свое фиаско. Недавно ты заявлял ,что стм это запор и на нем все ресурсы сожрет, и с чего ты взял что твой NCO не реализовать на таймере стм? Или вновь сольешься ?
с чего ты взял что твой NCO не реализовать на таймере стм?
С того, что ты не можешь показать как это сделать. Да и невозможно это сделать на таймере. Или у тебя таймеры способны АЛУ заменять? Досикус, тебе не надоело смешить людей?
ты заявлял ,что стм это запор и на нем все ресурсы сожрет
Ну, во первых, не все. А почти все. И это будет сильно зависеть от частоты накачки DDS. Простой пример. Собственно даже если не учитывать прерывания для загрузки буфера ДМА, сам по себе расчет ОДНОЙ ТОЧКИ синтезируемого сигнала с учетом блокировки шины самим ДМА понизит частоту тактирования МК к частоте тактирования DDS примерно раз в 20. Это при ПОЛНОЙ загрузке МК. Ну то есть 100%. А если попытаться получить продых хотя бы на 50% на другие задачи, то соотношение станет уже 50...60, с учетом переключения задач. А остальные каналы ДМА будут безнадежно блокированы... Значит реально можно реализовать DDS c частотой накачки в 1 МГц. Не более того. Вот такие обстоятельства... Досикус.
Ты еще тупее, чем я полагал... Каким образом Compare сможет ЗА ОДИН ВХОДНОЙ КЛОК изменить содержимое таймера НА ПРОИЗВОЛЬНУЮ (определенную в некоем регистре) величину? Ты хоть думаешь над тем что пишешь или тебя вконец переклинило?
То есть на стм32 ресурсы сожрет а на пЫк18 усе в шОколаде?
Да, Досикус, именно так. Патамушта замена специализированного модуля на софтовую реализацию перегружает ядро по самый небалуй. Тебе же не придет в голову реализовывать софтовый таймер на частотах близких к тактовым CPU? Так что тебя удивляет в этом случае?
Подведу черту под мусором от Досикуса и повторю входное сообщение темы. =============== Модуль NCO (Numerically Controlled Oscillator) является ядром любой микросхемы DDS (прямого цифрового синтеза). Но в специализированных микросхемах старшие разряды (обычно 10...12 из 28...32) сумматора модуля подключены к ROM в которой прописана форма синтезируемого сигнала. То есть на каждый такт суммирования (опорной частоты DDS) генерируется один отсчет выходного сигнала. В модулях NCO PIC-ов, естественно, нет такой возможности и единственная форма сигнала, которую этот модуль может генерировать - импульсы фиксированной длительности синтезируемой частоты следования. Для синтеза собственно сигналов произвольной формы нужно настроить синтезируемую частоту модуля на частоту ВЫБОРОК синтезируемого сигнала произвольной формы. Например мы хотим синтезировать синус частотой 1,111 кГц с дискретностью по времени в 256 отсчетов. Значит нам нужно настроить NCO модуль на частоту 284,416 кГц. Выбираем в качестве накачки NCO осциллятор МК с включенной PLL. Пусть это будет 32 МГц (8 MIPS). При 20-разрядном сумматоре модуля NCO код искомой частоты (значение инкрементного регистра NCO) будет: N=FoutDDS*2^20/Fosc=284416*2^20/32000000=9320. С учетом округления реальная частота составит: F=32000000*9320/2^20=284424 Гц, а синтезируемый синус будет иметь частоту 1111,03 Гц. Каждое переполнение модуля NCO помимо генерации импульса настроенной длительности, генерируется прерывание, в котором и следует перегрузить очередное значение сигнала из таблицы в PWM или DAC. Таким образом, на крошечном и дешевом PIC10F322 можно сделать настоящий DDS. Правда из-за такого способа синтеза на выходе простейшей RC не обойтись, но даже простейший ФНЧ на ОУ даст очень неплохой результат. При использовании новейших PIC18F25Q43 с DMA и осциллятором 64 МГц описанная задача станет фоновой и не требующей от ядра МК вообще никаких ресурсов кроме нескольких строк в прерывании от DMA один раз на период синтезируемого сигнала. К слову, отпускная стоимость упомянутого PIC18 у Микрочипа, как неожиданно выяснилось - менее 1 бакса...
Я так понял на PIC мы имеем одну таблицу и быстро меняя коэффициент в NCO - меняем частоту генератора А с помощью простых (или не простых) таймеров надо перестраивать таблицу?
Таблица всегда одна. Она не может быть разной. А эта история не про таймеры. Это история про сумматор. Таймер, несмотря на то, что формально он выглядит как сумматор на 1 (-1), он никакого отношения к сумматорам не имеет. А весь смысл DDS состоит в том, что очень высокое разрешение по частоте (мелкий шаг перестройки при изменении частоты) получается как раз на циклическом суммировании константы высокой разрядности с аккумулятором высокой разрядности с последующим округлением. Округление тут - самый главный фактор. Каждый такт входной частоты NCO вычисляет значение следующей фазы в формате fractional. Округление до целого может быть сделано ДВУМЯ способами. Либо ограничением числа младших разрядов сумматора поступающих на определяющий форму выходного сигнала ROM, либо выходным делителем, которым и является описанный мной метод, когда переполнение NCO генерирует последовательный выбор отсчетов. Тут важно понимать, что ЛЮБОЙ DDS принципиально В ОБЩЕМ СЛУЧАЕ имеет джиттер, поскольку вычисляемая фаза округляется и мы получаем отсчеты с дрожанием относительно истинных значений по времени. Но чем больше соотношение общей разрядности к дробной части, тем ниже уровень джиттера. Так в DDS Analog devices при 28 разрядах аккумулятора фазы используется только 10..12 разрядов адресной шины ROM, что дает уровни немонохромных компонент ниже -60 дБ даже при применении простейшей однозвенной RC на выходе ЦАПа. Понятно, что уровень таких компонент будет гораздо ниже при кратных (или близких к кратным) соотношениях частоты накачки и синтезируемой частоты. Но не нужно обольщаться и относительно кратного деления частоты, поскольку нет особой разницы между шумом квантования по времени и шумом квантования по амплитуде. А спектр джиттера лежит выше частоты Найквиста и доступен для фильтрации на выходе в обоих вариантах синтеза. ЗЫ. Кстати, в отличии от простых таймеров с регистром периода определяющем интервал счета и частоту на выходе переполнения, где частота ОБРАТНО ПРОПОРЦИОНАЛЬНА значению записываемому в регистр периода таймера, у NCO DDS частота ПРЯМО ПРОПОРЦИОНАЛЬНА значению в инкрементном регистре и связана с выходной частотой NCO очень простым коэффициентом равным отношению частоты накачки NCO к 2 в степени разрядности аккумулятора NCO. Этот коэффициент и равен шагу частоты при перестройке.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения