СБИС в смысле специализированных больших микросхем. А сколько там транзисторов - как в МП/МК или чуток поменьше - лишь бы больше, чем в "средней рассыпухе" было. Я исходил из простейшего варианта генератора меандра, без дополнительных супертаблиц. Так что там в принципе совсем мало надо. Единственно стабильность у DDS таки пониже, чем у счетчика... То уж выбираем чего нам удобнее - или примитив с высокой стабильностью и "грубым" шагом или навороченный "мягколапый" вариант с дополнительными фильтрами. Или уж совсем навороченный специализированный кристалл...
Не сложно, но медленно. Прикинь сколько времени будет выполняться обработчик прерывания на PIC учитывая, что CPU относительно STM32G0 медленнее в 8 раз только по тактовой... При этом для STM32 подобная работа по прерываниям будет раза в 3 медленнее, чем с DMA, т.к. дополнительно ~30 тактов тратятся на каждый вызов, а полезной работы в обработчике тактов на 10-15. Итого STM32 без NCO на генерации синуса будет в 5-10 раз быстрее PIC с NCO, что не так и удивительно.
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Не спорю на STM32 можно и 3-х канальный DDS - японский Чен делал на STM32F3 с интерполяцией
Цитата:
Коэффициент загрузки обработки функции DDS, сколько процессорного времени занимает служба прерывания DMA, составил всего 45% при частоте процессора 72 МГц, частоте дискретизации 1Msa/sec и одноканальной конфигурации. Двухканальная конфигурация потребляет 85% мощности ЦП, а в трехканальной конфигурации необходимо снизить частоту дискретизации до 720ksa/sec. Это неплохо, если учесть, что максимальная частота дискретизации ЦАП составляет 1Msa/sec. Поскольку большинство программных проектов DDS реализуются на 8-битном микроконтроллере с низкой вычислительной мощностью, форма волны синтезируется без какой-либо интерполяции данных LUT (дробная часть значения фазы просто округляется). В этом проекте DDS реализован на мощном 32-битном микроконтроллере, так что он может получить плавную форму волны за счет использования интерполяции даже с короткой (грубая выборка) волновой таблицей.
Для генерации меандра с помощью DDS таблица в принципе не требуется. Достаточно инверсии выхода ири переполнении на удвоенной частоте или "виртуальной таблицы" из 0 и 1, возможно в ОЗУ. А это значительно снижает нагрузку на программу и ее размер.
Цифровой вычислительный синтезатор (ЦВС), известный еще как схема прямого цифрового синтеза (DDS) — электронный прибор, предназначенный для синтеза сигналов произвольной формы и частоты из единственной опорной частоты, поставляемой генератором тактовых импульсов. Характерной особенностью ЦВС является то, что отсчеты синтезируемого сигнала вычисляются цифровыми методами, после чего передаются на цифро-аналоговый преобразователь (ЦАП), где и происходит их преобразование в аналоговую форму (напряжение или ток).
т.е. без ЦАП будет не совсем DDS. А на ЦАП проще имхо из таблички во флэше. В ОЗУ сформировать еще надо, это хоть и не значительно, но повышает нагрузку на программу и ее размер
В STM большой расход времени на вход/выход в прерывание. Можно попробовать крутить DDS в основном цикле синхронизируясь с каким нибудь таймером, следить за битом UIF например. В прерывании обрабатывать уставки. Естественно в этот момент генерация будет срываться. Может получится и более 2Мсемпл/сек (менее 36 тактов на круг). На AVR c прерываниями у меня уходило 38 тактов. Таблица в ОЗУ. Пробовать нужно.
у Чена DDS на STM32F3, 72Мгц тактовая - успевает в прерывании еще и синтезировать форму сигнала
Цитата:
ЦА преобразование запускается выходом таймера и дает выходной сигнал без дрожания. DAC может генерировать прерывание или запрос DMA при каждом преобразовании, чтобы получить следующие данные для вывода. Поскольку скорость преобразования ЦАП до 1 Msa/sec (72 такта ЦП на передачу) слишком высока для обработки прерывания, в этом проекте данные ЦАП передаются с помощью контроллера DMA. Контроллер DMA выбирает значение выборки из буферной памяти и записывает его в регистр DAC при каждом запросе DMA. Контроллер DMA настроен в циклическом режиме для перезапуска передачи данных с вершины буфера, когда он достигает конца буфера. Он также генерирует прерывание на половину передачи и последнюю передачу. Подпрограмма обслуживания прерывания DMA синтезирует форму волны и каждый раз заполняет половину буфера DMA. Таким образом, контроллер DMA используется в качестве буфера FIFO для потоковой передачи данных формы волны в ЦАП.
Так мне ж и меандра достаточно. Собственно сам принцип "наращивания" для малоразрядного таймера берем из DDS, только "расширения" табличного не делаем. И запускаем два генератора - один на Т1 (классика), второй на Т0 (извращенный DDS)... Воть попробую чего нашкарябать для тиньки2313 из интереса...
Ага! И больше нихрена с того МК не плучить - основной цикл единственный (если охота хоть чуток стабильности). А прерывание и приклеенные к ним прожки будут "портить картинку".
Для меандра как раз один только NCO без проблем выдаст частоту переполнения своего аккумулятора вплоть до задающей, например 32МГц от внутреннего генератора, с независимым от ядра дерганьем вывода порта каждое переполнение, выдавая 16МГц меандр. Также вместо меандра можно выдавать импульсы.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
И больше нихрена с того МК не плучить - основной цикл единственный
дык так и сделаны DDSы на AVR (примеры выше были) - установка новой частоты кнопкой или по юарт в прерывании это джиттер, потом устаканивается. На слух, если это tone, этот джиттер можно и не услышать. Надо круче - используйте типа RTOS или спец. микроконтроллеры или внешние, так называемые СБИС.
Вот например в G030 я не смог обычную фоновую обработку с DMA для выдачи сигнала подружить с АЦП для обработки захвата. Вешался модуль АЦП. Пока отложил.
Так речь не о полноценном DDS, а о варианте с всего-то генератором меандра с минимизированным шагом перестройки частоты. Вообще-то весьма интересное решение напрашивается - НО... требует проверки... Так что пока отвлекусь на "тест нашкрябать"...
занесли в Z адрес TBL+T (где Т - величина, определяющая длительность полупериода), вычисленный по нужному значению ПОЛУПЕРИОДА требуемого меандра, и переходим на LOOP, начинается генерация меандра на PORTB1. теперь в прерываниях перерасcчитываем Z - и период меняется. максимальная частота будет F_CPU/12, шаг изменения периода 2/F_CPU, минимальная частота зависит только от количества памяти, занятой NOP-ами
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Сейчас этот форум просматривают: Google Adsense [Bot] и гости: 8
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения