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

Поклонники продукции Microchip Technology Inc тусуются тут.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

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


Вновь работаешь на публику, думая что будут смотреть тебе в рот?
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

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

Так ты сам все написал... Каждое прерывание складываем пару чисел, сдвигаем на нужное число бит вправо, получаем адрес в ROM, берем оттуда очередное значение и пересылаем в DAC/PWM. А что мешает проделать эту операцию не дожидаясь следующего прерывания? Сумма чисел посчитанная в другое время будет отличаться или что? :)
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25118
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

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

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

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

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

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

Сообщение Reflector »

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

Смысл в том, что каждое прерывание - это лишних 3 десятка тактов, если не больше. Можно рассчитать сразу сотню значений, сохранить в буфере и затем периодически его пополнять, таким образом вместо 100 прерываний останется 2, при этом в DAC данные выводятся при помощи DMA.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25118
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

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

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

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

Сообщение dosikus »

Да хрен с ним, он видит лишь свое "неповторимое решение", с какого-то хрена экстраполируя таймеры пЫк на таймеры стм.
Пусть остается в своих розовых очках и в своем мирке...
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25118
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

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

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

Сообщение dosikus »

Ну так и соответствуй своим словам, признай свое фиаско.
Недавно ты заявлял ,что стм это запор и на нем все ресурсы сожрет, и с чего ты взял что твой NCO не реализовать на таймере стм?
Или вновь сольешься ?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25118
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

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

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

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

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

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

Сообщение dosikus »

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


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

То есть на стм32 ресурсы сожрет а на пЫк18 усе в шОколаде.
Какие дальше розовые мечты будут?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25118
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

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 бакса... :)

Изображение
const1105
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Сб мар 19, 2011 15:19:47
Откуда: Владивосток

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

Сообщение const1105 »

КРАМ прав на 100%.Если нечего делать, спорьте.
Аватара пользователя
Zikon
Встал на лапы
Сообщения: 92
Зарегистрирован: Вт фев 28, 2017 08:13:31
Откуда: Свердловская обл.

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

Сообщение Zikon »

Я так понял на PIC мы имеем одну таблицу и быстро меняя коэффициент в NCO - меняем частоту генератора
А с помощью простых (или не простых) таймеров надо перестраивать таблицу?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25118
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

Я так понял

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

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

Сообщение maxlab »

Тем кто не в теме, полезно и эту брошюру почитать - "Core Independed Peripherals" http://ww1.microchip.com/downloads/en/D ... 41565d.pdf
Девице - Device
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

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

Сообщение NStorm »

Одно из не совсем стандартных применений CLC, к примеру, для аппаратного управления WS2812B: https://habr.com/ru/post/262285/
Аватара пользователя
Sinus 50Hz
Родился
Сообщения: 12
Зарегистрирован: Пт июн 15, 2018 23:37:53

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

Сообщение Sinus 50Hz »

КРАМ, как сгенерировать сигнал произвольноу формы понятно,
в моём случае синус 50-60Гц, но вот как его синхронизировать с сетью ?
желательно от модуля ZCD вот это вопрос, может знаете какой простой
способ, вычислений по минимуму, чтоб Pic16-18 не сильно нагружать.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25118
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="Sinus 50Hz",url="/forum/viewtopic.php?p=4795547#p4795547"]как его синхронизировать с сетью ?[/uquote]
Смотря о какой точности синхронизации идет речь. Частота сети плавает. Пусть и совсем немного. Поэтому при обычном захвате нуля сети фиксированный синтез даст погрешность при завершении синусоиды. Таким образом нужно делать цифровую ФАПЧ чтобы избежать плавающей ступеньки.
Аватара пользователя
Sinus 50Hz
Родился
Сообщения: 12
Зарегистрирован: Пт июн 15, 2018 23:37:53

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

Сообщение Sinus 50Hz »

Точность условная, чтоб в фазе с сетью переключить на инвертор.
Тоесть когда появиться сеть инвертор подстроился и реле переключило
нагрузку на сеть.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25118
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="Sinus 50Hz",url="/forum/viewtopic.php?p=4795581#p4795581"]Точность условная, чтоб в фазе с сетью переключить на инвертор.
Тоесть когда появиться сеть инвертор подстроился и реле переключило
нагрузку на сеть.[/uquote]
Ну так и синхронизируйте синтезатор инвертора по переходу через ноль сети. Неплохо так же частоту сети тоже измерить и подогнать синтезатор под эту частоту.
После переключения можно синхронизацию отключить.
Кстати, если вы хотите безразрывного переключения, придется еще выровнять мгновенные значения. Это несколько более сложная задача.
Ответить

Вернуться в «PIC»