Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Вт апр 14, 2020 12:53:24

Точно так же как и у тебя здесь :
Для синтеза собственно сигналов произвольной формы нужно настроить синтезируемую частоту модуля на частоту ВЫБОРОК синтезируемого сигнала произвольной формы.
Например мы хотим синтезировать синус частотой 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-ов, естественно, нет такой возможности и единственная форма сигнала, которую этот модуль может генерировать - импульсы фиксированной длительности синтезируемой частоты следования.


Вновь работаешь на публику, думая что будут смотреть тебе в рот?

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Вт апр 14, 2020 12:58:22

:facepalm:
Это беда.... Милейший, возьмите за труд прочесть теорию, чтобы не писать пургу про заранее заполненный буфер...
Весь смысл DDS - это СКОЛЬЗЯЩАЯ ФАЗА. Это позволяет отказаться от кратности периода синтезируемого сигнала и периода накачки. Это какого же размера нужно иметь буфер, чтобы получить наименьшее общее кратное для частоты накачки и сигнала 100 Гц с шагом в 0,01 Гц? :))) :))) :)))

Так ты сам все написал... Каждое прерывание складываем пару чисел, сдвигаем на нужное число бит вправо, получаем адрес в ROM, берем оттуда очередное значение и пересылаем в DAC/PWM. А что мешает проделать эту операцию не дожидаясь следующего прерывания? Сумма чисел посчитанная в другое время будет отличаться или что? :)

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Вт апр 14, 2020 13:02:38

Только вместо тобойлюбимого NCO 32Х битный таймер.

Ты меня канешна извини, Досикус, но ты идиот? С каких пор таймер стал сумматором БОЛЕЕ, ЧЕМ НА 1?
На тебя что, коронавирус так действует?
В NCO нет никаких таймеров. NCO - это СУММАТОР. Он за один такт входной частоты суммирует содержимое инкрементного регистра с аккумулятором. И все. В задачу NCO не входит формирование самого сигнала. В его задачу входит формирование СОБЫТИЙ фиксированных фаз или расчет текущей ПРОИЗВОЛЬНОЙ ФАЗЫ.

Добавлено after 3 minutes 20 seconds:
А что мешает проделать эту операцию не дожидаясь следующего прерывания? Сумма чисел посчитанная в другое время будет отличаться или что? :)

Нет, не будет. Только какой смысл считать "в другое время", если КОЛИЧЕСТВО этих расчетов равно наименьшему общему кратному частоты накачки и синтезируемой частоты? Возьмите за труд посчитать это количество для приведенных ДВУХ частот с шагом в 0,01 Гц и у Вас пропадет желание предлагать глупости.
Последний раз редактировалось КРАМ Вт апр 14, 2020 15:00:32, всего редактировалось 1 раз.

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Вт апр 14, 2020 13:12:39

Нет, не будет. Только какой смысл считать "в другое время", если КОЛИЧЕСТВО этих расчетов равно наименьшему общему кратному частоты накачки и синтезируемой частоты? Возьмите за труд посчитать это количество для приведенных ДВУХ частот с шагом в 0,01 Гц и у Вас пропадет желание предлагать глупости.

Смысл в том, что каждое прерывание - это лишних 3 десятка тактов, если не больше. Можно рассчитать сразу сотню значений, сохранить в буфере и затем периодически его пополнять, таким образом вместо 100 прерываний останется 2, при этом в DAC данные выводятся при помощи DMA.

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Вт апр 14, 2020 13:20:38

Смысл в том, что каждое прерывание - это

Ну если Вы полагаете, что так будет быстрее, то можно и так, но это мало что меняет, на самом деле. Расчет останется критической секцией и будет пожирать основную производительность. Кстати, тактирование (в смысле реквестов транзакций) DMA с высокой частотой само по себе способно заблокировать CPU. А к тому же, нужно будет обеспечить когерентность расчета и выгрузки, чтобы не разрушить целостность данных в буфере.
Такшта особого выигрыша не ждите. Я по прежнему утверждаю, что реализация DDS на STM32F030 сожрет почти все его ресурсы. Нюансы с пересылкой в прерывании или из ДМА мало что решают.
Последний раз редактировалось КРАМ Вт апр 14, 2020 13:26:42, всего редактировалось 1 раз.

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Вт апр 14, 2020 13:24:22

Да хрен с ним, он видит лишь свое "неповторимое решение", с какого-то хрена экстраполируя таймеры пЫк на таймеры стм.
Пусть остается в своих розовых очках и в своем мирке...

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Вт апр 14, 2020 13:28:43

с какого-то хрена экстраполируя таймеры пЫк на таймеры стм.
В каком месте я говорил про ТАЙМЕРЫ ПИКов? :))) :))) :)))
Тебе пора на пенсию, Досикус... Неумение признавать свою неправоту - это очень серьезный баг для инженера...

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Вт апр 14, 2020 13:35:24

Ну так и соответствуй своим словам, признай свое фиаско.
Недавно ты заявлял ,что стм это запор и на нем все ресурсы сожрет, и с чего ты взял что твой NCO не реализовать на таймере стм?
Или вновь сольешься ?

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Вт апр 14, 2020 13:49:47

с чего ты взял что твой NCO не реализовать на таймере стм?

С того, что ты не можешь показать как это сделать. Да и невозможно это сделать на таймере. Или у тебя таймеры способны АЛУ заменять? :music:
Досикус, тебе не надоело смешить людей?

Добавлено after 9 minutes 52 seconds:
ты заявлял ,что стм это запор и на нем все ресурсы сожрет

Ну, во первых, не все. А почти все. И это будет сильно зависеть от частоты накачки DDS.
Простой пример. Собственно даже если не учитывать прерывания для загрузки буфера ДМА, сам по себе расчет ОДНОЙ ТОЧКИ синтезируемого сигнала с учетом блокировки шины самим ДМА понизит частоту тактирования МК к частоте тактирования DDS примерно раз в 20. Это при ПОЛНОЙ загрузке МК. Ну то есть 100%. А если попытаться получить продых хотя бы на 50% на другие задачи, то соотношение станет уже 50...60, с учетом переключения задач. А остальные каналы ДМА будут безнадежно блокированы...
Значит реально можно реализовать DDS c частотой накачки в 1 МГц. Не более того.
Вот такие обстоятельства... Досикус.

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Вт апр 14, 2020 14:15:29

. Или у тебя таймеры способны АЛУ заменять? .


Compare нас уже не устраивает, да ?
Или PWM mode,. Ты вааще таймеры стм щупал?
Тебе что , карантин на мозжечек давит?

То есть на стм32 ресурсы сожрет а на пЫк18 усе в шОколаде.
Какие дальше розовые мечты будут?

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Вт апр 14, 2020 15:03:27

Compare нас уже не устраивает, да ?
Или PWM mode?

:facepalm: Ты еще тупее, чем я полагал... Каким образом 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 бакса... :)

Изображение

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Ср апр 22, 2020 08:38:39

КРАМ прав на 100%.Если нечего делать, спорьте.

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Чт апр 23, 2020 08:03:22

Я так понял на PIC мы имеем одну таблицу и быстро меняя коэффициент в NCO - меняем частоту генератора
А с помощью простых (или не простых) таймеров надо перестраивать таблицу?

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Пт апр 24, 2020 01:56:55

Я так понял

Таблица всегда одна. Она не может быть разной.
А эта история не про таймеры. Это история про сумматор. Таймер, несмотря на то, что формально он выглядит как сумматор на 1 (-1), он никакого отношения к сумматорам не имеет. А весь смысл DDS состоит в том, что очень высокое разрешение по частоте (мелкий шаг перестройки при изменении частоты) получается как раз на циклическом суммировании константы высокой разрядности с аккумулятором высокой разрядности с последующим округлением. Округление тут - самый главный фактор.
Каждый такт входной частоты NCO вычисляет значение следующей фазы в формате fractional. Округление до целого может быть сделано ДВУМЯ способами. Либо ограничением числа младших разрядов сумматора поступающих на определяющий форму выходного сигнала ROM, либо выходным делителем, которым и является описанный мной метод, когда переполнение NCO генерирует последовательный выбор отсчетов.
Тут важно понимать, что ЛЮБОЙ DDS принципиально В ОБЩЕМ СЛУЧАЕ имеет джиттер, поскольку вычисляемая фаза округляется и мы получаем отсчеты с дрожанием относительно истинных значений по времени. Но чем больше соотношение общей разрядности к дробной части, тем ниже уровень джиттера. Так в DDS Analog devices при 28 разрядах аккумулятора фазы используется только 10..12 разрядов адресной шины ROM, что дает уровни немонохромных компонент ниже -60 дБ даже при применении простейшей однозвенной RC на выходе ЦАПа. Понятно, что уровень таких компонент будет гораздо ниже при кратных (или близких к кратным) соотношениях частоты накачки и синтезируемой частоты. Но не нужно обольщаться и относительно кратного деления частоты, поскольку нет особой разницы между шумом квантования по времени и шумом квантования по амплитуде. А спектр джиттера лежит выше частоты Найквиста и доступен для фильтрации на выходе в обоих вариантах синтеза.
ЗЫ. Кстати, в отличии от простых таймеров с регистром периода определяющем интервал счета и частоту на выходе переполнения, где частота ОБРАТНО ПРОПОРЦИОНАЛЬНА значению записываемому в регистр периода таймера, у NCO DDS частота ПРЯМО ПРОПОРЦИОНАЛЬНА значению в инкрементном регистре и связана с выходной частотой NCO очень простым коэффициентом равным отношению частоты накачки NCO к 2 в степени разрядности аккумулятора NCO.
Этот коэффициент и равен шагу частоты при перестройке.

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Ср май 13, 2020 15:20:25

Тем кто не в теме, полезно и эту брошюру почитать - "Core Independed Peripherals" http://ww1.microchip.com/downloads/en/D ... 41565d.pdf

Re: Модуль NCO в новых PIC-ах для DDS произвольной формы сиг

Ср май 13, 2020 15:56:34

Одно из не совсем стандартных применений CLC, к примеру, для аппаратного управления WS2812B: https://habr.com/ru/post/262285/
Ответить