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

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

Пн апр 13, 2020 16:10:11

Модуль 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 бакса... :)

Изображение
Последний раз редактировалось КРАМ Пн апр 13, 2020 17:24:38, всего редактировалось 2 раз(а).

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

Пн апр 13, 2020 16:13:23

:hunger:

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

Пн апр 13, 2020 17:26:37

Чем это лучше обычного ЦАПа? Хотя судя по описанию это больше похоже на ШИМ с переменной скважностью.

КРАМ писал(а):При использовании новейших PIC18F25Q43 с DMA и осциллятором 64 МГц описанная задача станет фоновой и не требующей от ядра МК вообще никаких ресурсов кроме нескольких строк в прерывании от DMA один раз на период синтезируемого сигнала. К слову, отпускная стоимость упомянутого PIC18 у Микрочипа, как неожиданно выяснилось - менее 1 бакса
Ну если так считать, можно взять STM32F030F4P6 стоимостью 0.25$ работающий на 48 МГц (разгоняется до 96 МГц) и имеющий DMA и 32-ух битный таймер. А дальше DMA + Timer PWM решают задачу.

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

Пн апр 13, 2020 17:31:43

Чем это лучше обычного ЦАПа? Хотя судя по описанию это больше похоже на ШИМ с переменной скважностью.
.....
....А дальше DMA + Timer PWM решают задачу.

Судя "по описанию", Вы ни хрена ничего не поняли. Учите матчасть.
На STM32 за четверть доллара тоже можно сделать DDS. Только он займет практически все ресурсы МК. И дело тут не в PWM или DAC. Последние вообще в процедуре прямого синтеза лишь преобразуют код в аналог. Основная задача создать генератор этого кода с разрешением (перестройкой) по частоте в доли процента.
ЗЫ. К слову, последнюю неделю переделывал один из наших (в смысле нашей компании) проектов с STM32F051 на упомянутый выше PIC18. Ну то есть такое ощущение, что я пересел с запорожца на мерседес. А задач по сути было две. Синтезировать синус 80...180 Гц и измерять ЧМ сигнал с центральной частотой 8 МГц и изменяемой девиацией от нуля до 2 МГц. Измерять нужно девиацию, частоту модуляции и центральную частоту. Все аппаратно.

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

Пн апр 13, 2020 17:54:07

Там еще всякая интересная периферия добавлена в новых PICах: https://www.microchip.com/design-center ... ndependent

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

Пн апр 13, 2020 18:01:22

Вот я как раз для измерений ЧМ сигнала и воспользовался SMT модулем. Плюс к этому полный "коммунизм" с синхронизациями всего от всего, кучей CLC и PWM-ов со своими таймерами, практически неограниченый ремап периферии на пины - ограничения незначительны настолько, что я на двух УАРТах, SPI, SMT, таймере взятом наобум, и так же наобум выбранном PWM угадал на 100% подключение пинов. Расположение которых я взял так, как это было удобно в топологии довольно плотной платы.

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

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

Вот мы и наблюдаем результат эволюционного развития "стандартных" семейств в ответ на АРМ технологии...
Давно уже про то говорено было.
:beer:

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

Вт апр 14, 2020 05:54:46

Каждое переполнение модуля NCO помимо генерации импульса настроенной длительности, генерируется прерывание, в котором и следует перегрузить очередное значение сигнала из таблицы в PWM или DAC.

----
При использовании новейших PIC18F25Q43 с DMA и осциллятором 64 МГц описанная задача станет фоновой и не требующей от ядра МК вообще никаких ресурсов кроме нескольких строк в прерывании от DMA один раз на период синтезируемого сигнала.


Когда тебе и гонюбесов показали то же самое на stm32 - причем полностью аппаратное , без каких либо прерываний , да и выхлоп БЫЛ 3Хфазного синуса. Напомни мне, кто воротил носом и презрительно фыркал?

http://mcu.goodboard.ru/viewtopic.php?id=31
На STM32 за четверть доллара тоже можно сделать DDS. Только он займет практически все ресурсы МК.

Наглое вранье.

BOB51, оно тебе не надо, так и будет валяться... :)))

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

Вт апр 14, 2020 06:43:08

dosikus писал(а):...

BOB51, оно тебе не надо, так и будет валяться... :)))

Точно как и STM32!
:)))

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

Вт апр 14, 2020 09:31:45

Когда тебе и гонюбесов показали то же самое на stm32 - причем полностью аппаратное , без каких либо прерываний , да и выхлоп БЫЛ 3Хфазного синуса. Напомни мне, кто воротил носом и презрительно фыркал?

Ты это о ком? :shock:

Наглое вранье.

Пацан сказал - пацан сделал... :)))
Но тебе и делать не требуется. Все что требуется, это рассказать как ты реализуешь, скажем, сетку синусоид с частотами от 100 до 100,99 Гц с шагом в 0,01Гц.
Не нужно код. Просто принцип.
:tea:
Может ты забыл, но я напомню, речь идет о DDS с цифровой перестройкой, а не о простом синтезе какой то синусоиды...

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

Вт апр 14, 2020 11:01:42

Может и не с такой точностью, но уж звездеть о том что DDS сожрет все ресурсы- не надо.
А принцип тебе уже выше на пальцах изложили - Реквесты DMA от 32х битного таймера +PWM (до 4х каналов == до 4х фаз )
Последний раз редактировалось dosikus Вт апр 14, 2020 11:16:02, всего редактировалось 1 раз.

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

Вт апр 14, 2020 11:13:46

А принцип тебе уже выше на пальцах изложили - DMA +PWM на 32х битном таймере.

Ты видимо совсем не в теме... :facepalm:
Досикус, зачем ты лезешь в тему, в которой ВООБЩЕ некопенгаген? Просто позвиздеть ни о чем?
Какое отношение PWM имеет к обсуждаемому вопросу? Какое отношение DMA имеет к обсуждаемому вопросу?
Способ вывода в ЦАП (PWM или потенциальный DAC - неважно), как и сам этот ЦАП тут не обсуждался. От слова вообще.

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

Вт апр 14, 2020 11:23:57

Не уподобляйся местным хомячкам.
Причем здесь DMA ?

При использовании новейших PIC18F25Q43 с DMA и осциллятором 64 МГц описанная задача станет фоновой и не требующей от ядра МК вообще никаких ресурсов кроме нескольких строк в прерывании от DMA один раз на период синтезируемого сигнала.


Однако это твое.

Переброс массива таблицы синуса через DMA в модуль PWM таймера.
У тебя 20битный NCO, в прерывании( о боже) заносится в PWM из таблицы.
Здесь реквест от 32х битного таймера пинает DMA, занося одновременно 4( Карл, 4) значения для 4х PWM выхлопов.
И все это чисто аппаратно - и " задача станет фоновой" и даже без прерываний.
Ну и кто некопенгаген?

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

Вт апр 14, 2020 11:34:16

Ну и кто некопенгаген?

Досикус, ты настолько самоуверен, что продолжаешь нести ахинею и даже не возьмешь за труд ИЗУЧИТЬ вопрос.

Мое упоминание о DMA было ОПЦИОНАЛЬНЫМ, во первых, а во вторых, без АППАРАТНОГО модуля NCO, который собственно и формирует сетку частот высокого разрешения, DMA нахер не нужен... Ну то есть вообще в нем нет никакого смысла. Патамушта при софтверной реализации NCO КАЖДОЕ прерывание от тактирующей накачки потребует вычисления новой суммы, правого сдвига на маскируемое число разрядов для определения указателя на ROM, и лишь потом пересылку из ROM в DAC/PWM. Это классический DDS. Еще хуже будет с софтверным повторением NCO и пересылкой значений по переполнению аккумулятора NCO.
Учи матчасть, Досикус... :)))

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

Вт апр 14, 2020 11:45:21

Ну и алаверды . Ты видимо уверовал в свою чушь и ее неповторимость...
Ты несешь полную хрень и твой NCO и на не упал.
Вся "сетка частот" формируется таймерами аппаратно и твои "софтверные повторения нахренненужного NCO" и на не упали.
Получаем действительно полностью аппаратное решение супротив жалкого суррогата на пЫк18.
Так что прежде сам RTFM...

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

Вт апр 14, 2020 11:49:33

Вся "сетка частот" формируется таймерами аппаратно...

Ну так в чем проблема, Досикус? Расскажи нам, убогим, как сформировать сетку частот 100 Гц...100,99 Гц с шагом 0,01 Гц?
А то ты юлишь, чего то там несешь про PWM, хотя о нем речи вообще не идет.
PS Ладно, Досикус, ты уже достаточно облажался... Читай THEORY OF OPERATION в даташите на
AD9837

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

Вт апр 14, 2020 12:08:46

Патамушта при софтверной реализации NCO КАЖДОЕ прерывание от тактирующей накачки потребует вычисления новой суммы, правого сдвига на маскируемое число разрядов для определения указателя на ROM, и лишь потом пересылку из ROM в DAC/PWM. Это классический DDS.

Зачем ждать следующего прерывания чтобы сложить пару чисел и взять из таблицы нужное значение? Можно за раз заполнить буфер произвольного размера, что заметно быстрее, а DMA потом из этого буфера будет гнать данные в DAC/PWM.

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

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

Зачем ждать следующего прерывания чтобы сложить пару чисел и взять из таблицы нужное значение? Можно за раз заполнить буфер

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

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

Вт апр 14, 2020 12:16:59

PS Ладно, Досикус, ты уже достаточно облажался...


Ну ты и юморист. Описываешь, с щенячьим восторгом свои розовые мечты, позиционируя как убер способности и прерогативу пык.
А когда тебя тыкают носом в то, что уже давно подобное реализовано на stm32 - обвиняешь оппонента в тупости и некомпетентности.

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

Вт апр 14, 2020 12:25:27

А когда тебя тыкают носом в то, что уже давно подобное реализовано на stm32

Подобное на STM? Ты вообще о чем? Ты меня потчуешь каким то говном вообще из другой оперы.
Еще раз предлагаю не молоть всякую пустопорожнюю пургу, а просто и со вкусом объяснить нам о том, каким образом с помощью таймера АППАРАТНО организовать сетку частот 100 Гц с шагом 0,01 Гц.
И не нужно меня никуда отсылать. Просто расскажи своими словами. Можешь даже только для двух частот: 100,00Гц и 100,01 Гц, например.
Ответить