Генератор сигналов на arduino

Содержание

цифровая электроника вычислительная техника встраиваемые системы

Генератор сигналов своими руками на Arduino

Каждый инженер, который любит поработать с электроникой, в какой-то момент времени захочет иметь собственную лабораторию. Мультиметр, осциллограф, измеритель LCR, функциональный генератор, двухрежимный источник питания и автоматический трансформатор – это минимальное оборудование для достойной лаборатории. В то время как все они могут быть приобретены, мы также можем легко собрать самостоятельно несколько приборов, таких как генератор функций и двухрежимный источник питания.

В этой статье мы узнаем, как быстро и легко мы можем создать собственный генератор сигналов с помощью Arduino. Этот генератор может создавать прямоугольный сигнал или меандр (5 В / 0 В) с частотой от 1 Гц до 2 МГц, частоту сигнала можно контролировать с помощью регулятора, а скважность (обратная рабочему циклу) жестко закодирована на 50%, но ее легко изменить в программе. Кроме того, генератор может также производить управление частотой.

Ниже приведена полная принципиальная схема этого генератора сигналов на основе Arduino. Как вы можете видеть, у нас есть Arduino Nano, который действует как мозг нашего проекта и ЖК-дисплей 16×2 для отображения значения частоты, которая в настоящее время генерируется. У нас также есть угловой кодер, который поможет нам установить частоту. Подача питания осуществляется от USB-порта самого Arduino.

Схема довольно проста; мы создаем прямоугольный сигнал на выводе D9, который может быть использован как таковой, частота этого прямоугольного сигнала контролируется поворотным кодером. Затем, чтобы получить синусоидальную волну, мы получаем сигнал SPWM (синусоидальная ШИМ) на выводе D5, частота этого сигнала должна быть связана с частотой PWM (ШИМ), поэтому мы заводим этот сигнал ШИМ на контакт D2, чтобы он действовал как прерывание, а затем используем ISR для управления частотой.

Люди, которые используют Arduino, могут быть знакомы с тем, что Arduino может генерировать сигналы ШИМ, просто используя функцию аналоговой записи. Но эта функция ограничивается только контролем рабочего цикла сигнала ШИМ, а не частоты сигнала. Но для генератора сигналов нам нужен сигнал ШИМ, частота которого может контролироваться. Это можно сделать, непосредственно управляя таймерами Arduino и переключая на него контакт GPIO. Но есть некоторые готовые библиотеки, которые делают то же самое и могут использоваться как таковые. Библиотека, которую мы используем, является библиотекой настройки частоты Arduino PWM Frequency Library (https://code.google.com/archive/p/arduino-pwm-frequency-library/downloads).

Есть и некоторые недостатки в этой библиотеке, потому что библиотека изменяет настройки Timer 1 и Timer 2 по умолчанию в Arduino. Следовательно, вы больше не сможете использовать серво-библиотеку или любую другую библиотеку, связанную с таймером. Также функция аналоговой записи на контактах 9,10,11 и 13 использует таймер 1 и таймер 2, поэтому вы не сможете создавать SPWM на этих контактах.

Преимущество этой библиотеки в том, что она не мешает таймеру 0 вашего Arduino, который более важен, чем таймер 1 и таймер 2. Из-за этого вы можете без проблем использовать функцию задержки и функцию millis(). Также контакты 5 и 6 управляются таймером 0, поэтому у нас не будет проблем с использованием аналоговой записи или управления сервомотором на этих контактах.

Поскольку мы знаем, что микроконтроллеры – это цифровые устройства, и они не могут генерировать синусоидальную волну простым кодированием. Но есть два популярных способа получения синусоидальной волны от микроконтроллера – это использование ЦАП и создание синусоидального ШИМ сигнала (SPWM). К сожалению, платы Arduino (кроме Due) не поставляются со встроенным ЦАП для создания синусоидальной волны, но вы всегда можете создать свой собственный ЦАП, используя простой метод R2R, а затем использовать его для создания приличной синусоидальной волны. Но для уменьшения аппаратной работы лучше использовать более оптимальный метод создания сигнала SPWM и затем преобразовать его в синусоидальную волну.

Сигнал SPWM очень похож на PWM, но для него рабочий цикл управляется таким образом, чтобы получить среднее напряжение, подобное напряжению синусоидальной волны. Например, при 100%-ном рабочем цикле среднее выходное напряжение будет 5 В, а для 25% мы будем иметь 1,25 В, таким образом, управляя рабочим циклом, мы можем получить предварительно определенное переменное среднее напряжение, которое является ничем иным, как синусоидальной волной. Этот метод обычно используется в инверторах.

В приведенном выше изображении синим сигналом является сигнал SPWM. Обратите внимание, что рабочий цикл волны изменяется от 0% до 100%, а затем обратно до 0%. График строится в диапазоне напряжения от -1,0 до + 1,0 В, но в нашем случае, поскольку мы используем Arduino, масштаб будет составлять от 0 до 5 В.

Преобразование SPWM в синусоидальную волну требует наличие H-мостовой схемы, которая состоит из минимум 4 коммутаторов питания. Мы не будем углубляться в его принцип работы, поскольку мы не используем его здесь. Эти схемы H-мостов обычно используются в инверторах. Они используют два сигнала SPWM, где один сдвинут по фазе от другого, и оба сигнала применяются к переключателям питания в H-мосте, чтобы включить и выключить диагональные противоположные ключи в одно и то же время. Таким образом, мы можем получить волновую форму, которая похожа на синусоидальную волну, но она будет зашумленная. Чтобы получить чистый результат, мы должны использовать фильтр, подобный фильтру нижних частот, который состоит из катушки индуктивности и конденсатора.

Однако в нашей схеме мы не будем обеспечивать на выходе столь чистый синусоидальный сигнал, поэтому обойдемся простым RC-фильтром. Вы также можете попробовать LC-фильтр для получения лучших результатов, но здесь мы выберем RC для простоты. Значение резистора составляет 620 Ом, а конденсатор – 10 мкФ. На приведенном выше рисунке показан сигнал SPWM (желтый) с вывода 5 и синусоида (синий), который был получен после прохождения через RC-фильтр.

Ниже приведен код программы для создания генератора сигналов на основе Arduino. Он довольно прост и содержит комментарии, но перед компиляцией убедитесь, что вы добавили библиотеку Arduino PWM Frequency Library, иначе вы получите ошибку во время компиляции.

Соберите свое оборудование по схеме и загрузите код. Теперь вы готовы проверить свой проект. Было бы намного проще, если у вас есть осциллограф, но вы также можете проверить его с помощью светодиода.

Подключите щуп к выводу квадратного сигнала и выводу синусоидального сигнала. Используйте два светодиода на этих двух контактах, если у вас нет осциллографа. Включите схему, и вас поприветствует вводное сообщение на ЖК-дисплее. Затем поверните вал энкодера и установите требуемую частоту, чтобы вы могли наблюдать прямоугольную волну и синусоидальную волну, как показано ниже. Если вы используете светодиод, вы должны заметить, что светодиод мигает с разными интервалами в зависимости от частоты, которую вы установили.

ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ

Блог технической поддержки моих разработок

Урок 37. Широтно-импульсная модуляция в Ардуино.

В уроке узнаем о широтно-импульсной модуляции, о реализации этого способа управления в контроллерах Ардуино, о режимах и функциях работы с ШИМ в Ардуино.

Прервемся на урок от разработки контроллера холодильника, для того чтобы научиться работать с широтно-импульсным модулятором Ардуино.

В нашей разработке используется именно такой способ регулирования мощности на элементе Пельтье.

Широтно-импульсная модуляция.

Широтно-импульсная модуляция (ШИМ) это способ управления мощностью на нагрузке с помощью изменения скважности импульсов при постоянной амплитуде и частоте импульсов.

Можно выделить две основные области применения широтно-импульсной модуляции:

  • Во вторичных источниках питания, различных регуляторах мощности, регуляторах яркости источников света, скорости вращения коллекторных двигателей и т.п. В этих случаях применение ШИМ позволяет значительно увеличить КПД системы и упростить ее реализацию.
  • Для получения аналогового сигнала с помощью цифрового выхода микроконтроллера. Своеобразный цифро-аналоговый преобразователь (ЦАП). Очень простой в реализации, требует минимума внешних компонентов. Часто достаточно одной RC цепочки.

Принцип регулирования с помощью ШИМ – изменение ширины импульсов при постоянной амплитуде и частоте сигнала.

На диаграмме можно увидеть основные параметры ШИМ сигнала:

  • Ui амплитуда импульсов ;
  • Ton – время активного (включенного) состояния сигнала;
  • Toff – время отключенного состояния сигнала;
  • Tpwm – время периода ШИМ.

Даже интуитивно понятно, что мощность на нагрузке пропорциональна соотношению времени включенного и отключенного состояния сигнала.

Это соотношение определяет коэффициент заполнения ШИМ:

Он показывает, какую часть периода сигнал находится во включенном состоянии. Может меняться:

  • от 0 – сигнал всегда выключен;
  • до 1 сигнал все время находится во включенном состоянии.

Чаще используют процентный коэффициент заполнения. В этом случае он находится в пределах от 0 до 100%.

Среднее значение электрической мощности на нагрузке строго пропорционально коэффициенту заполнения. Когда говорят, что ШИМ равен, например, 20%, то имеют в виду именно коэффициент заполнения.

Формирование аналогового сигнала.

Если сигнал ШИМ пропустить через фильтр низких частот (ФНЧ), то на выходе фильтра мы получим аналоговый сигнал, напряжение которого пропорционально коэффициенту заполнения ШИМ.

В качестве ФНЧ можно использовать простейшую RC цепочку.


Из-за неидеальной характеристики такого фильтра частота среза должна быть минимум на порядок меньше частоты ШИМ. Для простого RC фильтра частота среза вычисляется по формуле:

  • При повышении частоты среза ФНЧ на выходе фильтра увеличиваются пульсации с частотой ШИМ.
  • При уменьшении частоты среза фильтра снижается время реакции выходного аналогового сигнала на изменения ширины импульсов.

Из этого вытекает главный недостаток широтно-импульсной модуляции. Метод способен синтезировать только достаточно медленные аналоговые сигналы или требует применения фильтров низких частот с высокой добротностью, сложных в реализации.

Я бы рекомендовал:

  • В случае, когда к быстродействию аналогового сигнала жестких требований нет выбирать заведомо заниженную частоту среза фильтра.
  • Если необходимо оптимизировать быстродействие аналогового преобразователя, то лучше промоделировать схему.

Даже простейшие моделирующие программы вычисляют уровень пульсаций достаточно точно. Вот результаты моделирования на SwCAD для ШИМ частотой 500 Гц и RC фильтрами с частотами среза 500 Гц, 50 Гц и 5 Гц. Зеленым цветом показана диаграмма ШИМ, синим – напряжение на выходе RC фильтра.

Частота среза 500 Гц (10 кОм, 32 нФ).

Частота среза 50 Гц (10 кОм, 320 нФ).

Частота среза 5 Гц (10 кОм, 3,2 мкФ).

Точность преобразования широтно-импульсных модуляторов определяется погрешностью амплитуды импульсов (т.е. стабильностью питания микроконтроллера) и значением падения напряжения на ключах цифровых выходов микроконтроллера. Как правило, точность ШИМ микроконтроллеров невысока. Добиться высокой точности ШИМ преобразования можно с помощью дополнительной схемы с аналоговыми ключами и источником опорного напряжения.

К недостаткам использования широтно-импульсных модуляторов в качестве ЦАП также следует отнести высокое выходное сопротивление. Оно определяется сопротивлением резистора RC фильтра и не может быть низким из-за малой нагрузочной способности выходов микроконтроллера.

Широтно-импульсные модуляторы в Ардуино.

Платы Ардуино на базе микроконтроллеров ATmega168/328 имеют 6 аппаратных широтно-импульсных модуляторов. Сигналы ШИМ могут быть сгенерированы на выводах 3, 5, 6, 9, 10, 11.

Управление аппаратными ШИМ осуществляется с помощью системной функции analogWrite().

void analogWrite(pin, val)

Функция переводит вывод в режим ШИМ и задает для него коэффициент заполнения. Перед использованием analogWrite() функцию pinMode() для установки вывода в режим “выход” вызывать необязательно.

  • pin – номер вывода для генерации ШИМ сигнала.
  • val – коэффициент заполнения ШИМ. Без дополнительных установок диапазон val от 0 до 255 и соответствует коэффициенту заполнения от 0 до 100 %. Т.е. разрядность системных ШИМ в Ардуино 8 разрядов.

analogWrite(9, 25); // на выводе 9 ШИМ = 10%

Частота ШИМ Ардуино 488,28 Гц.

Для генерации ШИМ используются все три таймера Ардуино.

Таймер Используется для генерации ШИМ на выводах
Таймер 0 выводы 5 и 6
Таймер 1 выводы 9 и 10
Таймер 2 выводы 3 и 11

Если таймер используется для других целей, например для прерывания, то параметры ШИМ соответствующих выводов могут не соответствовать указанным выше.

Поэтому, при использовании библиотек MsTimer2, TimerOne или им подобных некоторые выводы в качестве ШИМ сигналов использовать нельзя.

Увеличение частоты и разрядности ШИМ Ардуино.

Система Ардуино устанавливает на всех выводах ШИМ параметры:

  • частота 488,28 Гц;
  • разрешение 8 разрядов (0…255).

Очень низкая частота. Для большинства приложений совершенно не допустимая.

В разработке контроллера элемента Пельтье, начатой в предыдущем уроке, частота ШИМ должна быть не менее 30-50 кГц. В интернете достаточно много предложений по увеличению частоты ШИМВо всех описываются методы увеличения частоты до 31 кГц. В принципе приемлемый вариант, но мне захотелось большего.

Я разобрался с Таймером 1 микроконтроллера ATmega168/328, перевел ШИМ в быстродействующий режим и добился частоты ШИМ Ардуино до 62,5 кГц. Заодно я научился менять разрядность ШИМ. Чтобы в следующий раз не копаться в документации на микроконтроллеры ATmega168/328 я свел всевозможные варианты ШИМ для таймера 1 в таблицу.

Строчки из правого столбца для выбранного варианта необходимо написать в функции setup().

Варианты параметров ШИМ на выводах 9 и 10 Ардуино (таймер 1).

Разрешение Частота ШИМ Команды установки режима
8 бит 62 500 Гц TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09;
7 812,5 Гц TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0a;
976,56 Гц TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0b;
244,14 Гц TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0c;
61,04 Гц TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0d;
9 бит 31 250 Гц TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x09;
3 906,25 Гц TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x0a;
488,28 Гц TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x0b;
122,07 Гц TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x0c;
30,52 Гц TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x0d;
10 бит 1 5625 Гц TCCR1A = TCCR1A & 0xe0 | 3;
TCCR1B = TCCR1B & 0xe0 | 0x09;
1 953,13 Гц TCCR1A = TCCR1A & 0xe0 | 3;
TCCR1B = TCCR1B & 0xe0 | 0x0a;
244,14 Гц TCCR1A = TCCR1A & 0xe0 | 3;
TCCR1B = TCCR1B & 0xe0 | 0x0b;
61,04 Гц TCCR1A = TCCR1A & 0xe0 | 3;
TCCR1B = TCCR1B & 0xe0 | 0x0c;
15,26 Гц TCCR1A = TCCR1A & 0xe0 | 3;
TCCR1B = TCCR1B & 0xe0 | 0x0d;

Следующий скетч генерирует на выводе 9 ШИМ с частотой 62,5 кГц и коэффициентом заполнения примерно 10 %.

Это максимально возможная частота ШИМ Ардуино для большинства плат (с частотой генератора 16 мГц).

В следующем уроке вернемся к разработке контроллера элемента Пельтье.

Две схемы инвертора 12 -220 вольт на ардуино

Теория
Достижение выхода синусоидальной волны довольно сложно и не может быть рекомендовано для инверторов, потому что электронные устройства обычно не “любят” экспоненциально возрастающие токи или напряжения. Поскольку инверторы в основном изготавливаются с использованием твердотельных электронных устройств, синусоидальная форма волны обычно исключается.

Электронные силовые устройства при работе с синусоидальными волнами дают неэффективные результаты, так как устройства, как правило, греются по сравнению при работе с прямоугольными импульсами.

Таким образом, лучший вариант для реализации синусоидальной волны на инверторе это ШИМ, что означает широтно-импульсную модуляцию или PWM .

PWM-это усовершенствованный способ (цифровой вариант) выставления экспоненциальной формы волны через пропорционально изменяющиеся квадратные ширины импульсов, чистое значение которых вычисляется точно в соответствии с чистым значением выбранной экспоненциальной формы волны, здесь “чистое” значение относится к СРЕДНЕКВАДРАТИЧЕСКОМУ значению. Поэтому вычисленная ШИМ со ссылкой на данную синусоидальную волну может использоваться в качестве идеального эквивалента для репликации данной синусоиды. Кроме того, PWMs будет идеально совместимым с электронными приборами силы (mosfets, BJTs, IGBTS) и позволяет использование их с минимальным тепловыделением.

Что такое SPWM
Самый обычный метод производить PWM sinewaver (синусоидную волну) или SPWM, путем подачи нескольких экспоненциально изменчивых сигналов к входу операционного усилителя для необходимой обработки. Среди двух входных сигналов один должен быть намного выше по частоте по сравнению с другим.

Использование двух входных сигналов
Как упоминалось в предыдущем разделе, процедура включает подачу двух экспоненциально изменяющихся сигналов на входы операционного усилителя.
Здесь операционный усилитель сконфигурирован как типичный компаратор, поэтому мы можем предположить, что операционный усилитель мгновенно начнет сравнивать мгновенные уровни напряжения этих двух наложенных сигналов в тот момент, когда они появляются или применяются к его входам.

Для того чтобы операционный усилитель мог правильно реализовать необходимые синусоидальные ШИМ на своем выходе, необходимо, чтобы один из сигналов имел гораздо более высокую частоту, чем другой. Более медленная частота здесь-та, которая должна быть синусоидальной волной образца, которая должна имитироваться (реплицироваться) PWMs.

В идеале, оба сигнала должны быть синусоидальными (один с более высокой частотой, чем другой), однако то же самое может быть реализовано путем включения треугольной волны (высокая частота) и синусоидальной волны (выборочная волна с низкой частотой). Как видно на следующих изображениях, высокочастотный сигнал неизменно подается на инвертирующий вход ( ) операционного усилителя, в то время как другой более медленный синусоидальный сигнал подается на не инвертирующий ( + ) вход операционного усилителя. В худшем случае оба сигнала могут быть треугольными волнами с рекомендуемыми уровнями частоты, как описано выше. Тем не менее, это поможет в достижении достаточно хорошего эквивалента PWM sinewave.

Сигнал с более высокой частотой называется несущим сигналом, в то время как более медленный сигнал выборки называется модулирующим входом.

Создание SPWM с треугольной и сухожильной волной
Обращаясь к приведенному выше рисунку, возможно ясно визуализировать через нанесенные точки различные совпадающие или перекрывающиеся точки напряжения двух сигналов в течение заданного промежутка времени. Горизонтальная ось показывает период времени формы волны, пока вертикальная ось показывает уровни напряжения тока 2 одновременно бежит, наложенной формы волны. Рисунок информирует нас о том, как операционный усилитель будет реагировать на показанные совпадающие мгновенные уровни напряжения двух сигналов и производить соответственно меняющуюся синусоидальную ШИМ на своем выходе. Операционный усилитель (ОУ) просто сравнивает, уровни напряжения тока волны быстрого треугольника меняя мгновенно синусоидальную волну (это может также быть волна треугольника), и проверяет случаи, во время которых напряжение тока формы волны треугольника может быть ниже, чем напряжение тока волны синуса и отвечает немедленно создавать высокую логику на своих выходах.

Это сохраняется до тех пор, пока потенциал волны треугольника продолжает быть ниже потенциала волны синуса, и момент, когда потенциал волны синуса обнаружен, чтобы быть ниже, чем мгновенный потенциал волны треугольника, выходы возвращаются с минимумом и выдерживают, пока ситуация не повторяется.

Это непрерывное сравнение мгновенных уровней потенциала двух наложенных друг на друга волновых форм на двух входах операционных усилителей приводит к созданию соответственно изменяющихся ШИМ, которые могут точно повторять синусоидальную форму, приложенную к не инвертирующему входу операционного усилителя.

Операционный усилитель и SPWM
На следующем рисунке показано моделирование вышеуказанной операции:

Здесь мы можем наблюдать, как реализуется практически, и именно так операционный усилитель будет выполнять то же самое (хотя и с гораздо большей скоростью, в МС).

Операция вполне очевидна и отчетливо показывает, как операционный усилитель должен обрабатывать синусоидальную волну ШИМ путем сравнения двух одновременно меняющихся сигналов на его входах, как описано в предыдущих разделах.

На самом деле операционный усилитель будет обрабатывать синусоидальные ШИМ гораздо более точно, чем показанное выше моделирование, может быть в 100 раз лучше, создавая чрезвычайно однородные и хорошо измеренные ШИМ, соответствующие подаваемому образцу. Синусоида.

Инвертор на ардуино две схемы

Конструкция на самом деле очень проста, как показано на следующем рисунке.

Pin#8 и pin#9 создают ШИМ альтернативно и переключают Мосфеты с такой же ШИМ.
Мосфет в свою очередь наводит на трансформатор сильно токовую форму волны SPWM, используя силу батареи, заставляя вторичку трансформатора произвести идентичную форму волны.

Предлагаемая схема инвертора Arduino может быть обновлена до любого предпочтительного более высокого уровня мощности, просто заменив Мосфеты и трансформатор соответственно, в качестве альтернативы вы также можете преобразовать это в полный мост или Н-мостовой синусоидальный инвертор
Питание платы Arduino

Поскольку плата Arduino будет производить выход 5V, это может быть не идеальное значение для непосредственного управления МОП-транзисторами.

Поэтому необходимо поднимать уровень строба к 12V так, что Мосфеты будут работать правильно без нагрева приборов.

Добавление автоматического регулятора напряжения
Так же, как и на любом другом инверторе, на выходе этой конструкции ток может подняться до небезопасных пределов, когда батарея полностью заряжена.

Чтобы контролировать это добавим автоматический регулятор напряжения тока.
Коллекторы BC547 должны быть подключены к основаниям левой пары BC547, которые подключены к Arduino через резисторы 10K.

Генератор сигналов DDS

Описание опубликовано в журнале «Радио» № 8 за 2009 г., стр. 15. 17 Лабораторный генератор сигналов на DDS.

Генератор синусоидального сигнала является одним из наиболее распространенных приборов в любой измерительной лаборатории. Генераторы сигналов промышленного производства имеют большие габариты, вес и довольно высокую стоимость. С появлением микросхем прямого синтеза частоты DDS (Direct Digital Synthesizer) появилась возможность изготовить генератор синусоидальных сигналов, имеющий довольно высокие параметры при относительно простой схеме и конструкции.

Генератор позволяет плавно перестраивать частоту в диапазоне 0,1 Гц. 6 мГц с шагом 0,1 Гц. 1 мГц, амплитуда может регулироваться от 0 до 7 В. Возможно смещение выходного напряжения относительно нуля в пределах до +/- 5 В. В генераторе использована одна из самых дешевых микросхем прямого синтеза частоты – AD9832 с тактовой частотой 25 мГц. Управляющий контроллер PIC16F84 или PIC16F628. Установленная частота и период отображаются на ЖКИ индикаторе.

Принципиальная схема лабораторного генератора сигналов на DDS показана на рисунке. Выходной сигнал с микросхемы DDS генератора проходит через пассивный LC фильтр c частотой среза 10 мГц, который улучшает спектр сигнала, фильтруя высшие гармоники. Поскольку микросхема DDS работает с однополярным питанием, необходима схема сдвига уровня. Она выполнена на «ОУ с активной обратной связью» типа AD8130. Кроме сдвига уровня на этом ОУ реализован активный фильтр нижних частот второго порядка с частотой среза 10 мГц и коэффициентом передачи 2, который дополнительно подавляет высшие гармоники.

Отфильтрованный и симметричный относительно нуля сигнал с выхода ОУ подается на регулятор амплитуды обычный переменный резистор. Применение обычного резистора, а не электронного аттенюатора обусловлено стремлением упростить и удешевить конструкцию. Да и в практической работе гораздо удобнее поворачивать ручку, а не заходить в меню, многократно нажимая кнопки. Хотя выходной ток AD8130 может достигать 40 мА, длительная работа с таким током приведет к перегреву и выходу из строя кристалла. Поэтому в схему введен дополнительный защитный резистор R26, который ограничивает выходной ток до безопасного уровня даже при длительном коротком замыкании выхода. При работе на низкоомную нагрузку этот резистор можно закоротить тумблером SA2.

Работой генератора прямого синтеза управляет микроконтроллер DD1. Индикатор HG1 – двухстрочный по 16 символов в строке на основе контроллера HD44780. В нижней строке отображается частота с точностью до 0,1 Гц. Ввод требуемого значения частоты осуществляется кнопками SB1…SB4. Можно плавно перестраивать DDS генератор в диапазоне частот 0,1 Гц. 6 мГц с любым шагом из ряда 0,1 Гц; 1 Гц; 10 Гц;. 1 мГц. В верхнюю строку индикатора выводится период в микросекундах для частот менее 300 Гц или в наносекундах для частот более 300 Гц.

Программа работает следующим образом. Вначале, исходя из введенной частоты, рассчитываются значения коэффициентов, загружаемых в DDS синтезатор. Затем по этому значению производится расчет периода генерируемой частоты. Результат, особенно на частотах менее 10 Гц, может несколько отличаться от того, который получился бы при расчете по формуле T=1/F. Это связано с тем, что частота в DDS синтезаторе может быть установлена не любая, а только с шагом FMCLK/2^32. Для тактовой частоты 25 мГц это около 0,006 Гц. Вопреки широко распространенному мнению о примитивности и несовершенстве системы команд PIC контроллеров двух килобайт внутренней памяти и 35 команд вполне достаточно для проведения всех расчетов без каких-либо упрощений и округлений. Поэтому точность установки частоты определяется только точностью и стабильностью тактового генератора DDS. Разработаны варианты программы для тактовой частоты 25 и 20 мГц.

Монитор питания DA1 использован не стандартно. В PIC контроллерах, в отличие от некоторых AVR, внутренняя память не склонна к искажению при медленном нарастании или снижении напряжения питания. Поэтому принимать специальные меры для внешнего сброса контроллера при включении и выключении нет необходимости. Монитор питания подключен к выводу порта RB0 и служит для подачи команды контроллеру на сохранение установленной частоты в EEPROM PIC при снижении напряжения питания ниже 4,7 В

В генераторе можно использовать как устаревший, но широко распространенный контроллер PIC16F84A, так и более новый, имеющий аналогичную цоколевку PIC16F628. Индикатор HG1 типа MT 16S2Q-2YLG производства фирмы МЭЛТ. Теоретический предел генерируемой частоты в DDS равен половине тактовой. На практике на частотах выше 1/4 тактовой начинается резкий спад амплитуды первой гармоники, который в какой-то степени можно скомпенсировать усложнением схемы фильтра. Но настройка генератора сигналов при этом резко усложняется, поэтому в данной конструкции верхняя частота принята равной 6 мГц. Однако, учитывая, что радиолюбители предпочитают реализовывать возможности своих приборов по максимуму, программно верхняя рабочая частота DDS генератора ограничена значением 11 мГц.

Генератор сигналов на arduino

Arduino удобная платформа быстрой разработки электронных устройств для новичков и профессионалов. Её применение дает широкие возможности радиолюбителям для реализации своих задумок. Несколько лет назад, создав несколько конструкций, я фактически “заболел” этим девайсом и воплотил несколько своих давних задумок в жизнь. Огромное количество разнообразных модулей и готовых программных библиотек открывает огромные перспективы именно для радиолюбителей. В Интернете много рассуждений о том, как применить Arduino. У многих хватает фантазии только на то, чтобы поморгать светодиодами и, в лучшем случае, собрать термометр или часы. Я тоже прошел через это и со временем поделюсь своими разработками.

Но сечас речь пойдет о синтезаторе частоты. Уверен, что вопрос о его применении перед радиолюбителем не стоит. Много лет назад я затратил огромное количество дискретных элементом и ещё больше нервов, чтобы создать “монстра”, работающего в небольшом диапазоне частот. Сейчас для этого понадобилось всего несколько модулей, небольшие познания в программировании и пару часов работы.

За основу был взят DDS модуль компании Analog Devices AD9850. За 10 долларов его без проблем можно приобрести на Aliexpress. Это самый дорогой компонент в конструкции. Кроме этого нам необходим сам Arduino, буквенно-цифровой индикатор и валкодер.

Я не стал изобретать велосипед и, поискав в Интернете, взял за основу отлаженную схему от AD7C (Rich Visokey). Оригинал его статьи можно посмотреть здесь: www.ad7c.com.

После пары часов работ с паяльником получилось вот такое компактное устройство.

Устройство собрано в виде “сэндвича”. Конструкция получается компактная и технологичная.

На макетной плате размером 50х70 мм распаяны разъемы для установки модулей. На этой кросс-плате устанавливаются LCD-дисплей, модуль Arduino Pro Mini и модуль синтезатора. Также там установлены валкодер, кнопка расстройки частоты и USB разъем для подключения питания. Такая конструкция позволяет легко менять модули и использовать их, при необходимости, в других конструкциях.

Вид с обратной сторны конструкции с установленными на плате модулями синтезатора и Ардуинкой.

В ваианте, который приводит автор (Rich Visokey AD7C) частота генератора изменяется от 1 до 30 МГц. В программе можно выставить другой диапазон. Я выставил диапазон от 100 КГц до 40 МГц. (смотрите ниже).

Привожу разводку кросс-платы, если кому интересно. Монтаж выполнен проводом с фторопластовой изоляцией (МГТФ).

Программа для Ардуино, схемы и библиотеки доступны для скачивания здесь: here.

В архиве имеются две версия программы.

AD9850_LCD_ROTARY_WMENUS.ino это основной вариант. Он используется для генрации выходного сигнала от 1 МГц до 30 МГц. Вы можете установить начальную частоту при включении прибора, изменяя эту строку: int_fast32_t гх = 7150000. На экране отбражается выходная частота.
Если у вас есть эталонный частотомер можно подкорретировать точно значение задающего генератора в строке “int32_t freq = frequency * 4294967295/125000000;“.

У вас будет очень точная настройка. При использовании этого варианта вам не нужны переключатель и резистор, подключеннные к PIN-A5 на Arduino.

Версия программы AD9850_LCD_ROTARY_WMENUS_IF.ino это вариант с вычетом промежуточной частотой. Он может быть использован для создания выходного сигнала от 1 МГц до 30 МГц, а также вычитает промежуточную частоту (ПЧ) из сигнала. Вы выставляете начальную частоту так же, как описано выше. При использовании этого варианта вам необходим переключатель и резистор на землю от PIN-A5 на Arduino. Промежуточная частота задается этой строкой программы: int_fast32_t iffreq = 4192000;.

Когда на PIN-A5 низкий уровень(земля) выходной сигнал и показания на дисплее равны. Когда на A5 уровень высокий надо учитывать, что показания на дисплее не совпадают с выходным сигналом (минус частота ПЧ).

Скетчи содержат подробные комментарии, поэтому в программу можно вносить необходимые Вам корректировки.

Версия программы Rev 2.0 (от 6 ноября 2013г.) умеет храненить в памяти (EEPROM) последнюю заданную частоту. Частота должна быть зафиксирована в течении 3-х секунд (настраивается в коде), прежде чем она запишется в память, чтобы не перегрузить EEPROM.

В дальнейшем я расскажу об использовании более дешевой микросхемы DDS Si5351. Кроме этого планирую поделиться опытом применения другого синтезатора компании Analog Devices AD9851. В свое время, мне совершенно бесплатно прислали две микросхемы (AD9850 и AD9851) из компании Analog Devices. Есть у них такой приятный сервис для предоставления “пробничков”, что собственно и сработало. Такое практикуют некоторые компании, просто надо поискать эту услугу на их сайтах. Ключево слово здесь sample. Не буду томить смотрите ссылочку.

Удачи и творческих успехов.
73!

Изменение частоты ШИМ (PWM) Ардуино

Широтно-импульсная модуляция Arduino ► выполняется с частотой 488,28 Гц с помощью функции analogWrite на аналоговых выводах, но частоту ШИМ можно изменить.

Широтно-импульсная модуляция (ШИМ) Arduino UNO и NANO работает на аналоговых выходах 3, 5, 6, 9, 10, 11 с частотой 488,28 Гц. С помощью функции analogWrite частота ШИМ изменяется в диапазоне 0 до 255 и соответствует коэффициенту заполнения импульса от 0 до 100 %. Для многих устройств частота PWM Arduino NANO слишком мала, поэтому ее требуется увеличить. Рассмотрим, как это правильно сделать.

Широтно-импульсная модуляция Arduino

ШИМ, по-английски Pulse-Width Modulation (PWM) — это управление мощностью на нагрузке с помощью изменения скважности (ширины) импульсов при постоянной частоте и амплитуде сигнала. На следующем графике видно, что при разных значениях в функции analogWrite , амплитуда импульсов остается постоянной, но меняется ширина импульсов. Мощность сигнала определяет коэффициент заполнения импульса.

График. Параметры сигнала, коэффициент заполнения ШИМ

Можно выделить две области применения широтно-импульсной модуляции:

1. PWM используется в источниках питания, регуляторах мощности и т.д. Применение ШИМ на Arduino Nano позволяет значительно упростить управление яркостью источников света (светодиодов, LED-ленты) и скоростью вращения двигателей.

2. PWM используется для получения аналогового сигнала. Цифро-аналоговый преобразователь (ЦАП) на Ардуино прост в реализации, так как требует минимума радиоэлементов — достаточно одной RC цепочки из резистора и конденсатора.

Изменение частоты ШИМ Ардуино (разрядности)

Платы Arduino Uno и Arduino Nano на базе ATmega168/328 имеют 6 аппаратных ШИМ модуляторов на аналоговых портах 3, 5, 6, 9, 10, 11. Управление ШИМ сигналом осуществляется с помощью функции analogWrite , которая генерирует на выходе аналоговый сигнал и задает коэффициент заполнения импульса. Arduino устанавливает на выводах частоту 488,28 Гц и разрешение 8 разрядов (от 0 до 255).

Схема. Широтно-импульсная модуляция для чайников

В Arduino на базе ATmega168/328 для ШИМ используются три таймера:

Таймер 0 — выводы 5 и 6
Таймер 1 — выводы 9 и 10
Таймер 2 — выводы 3 и 11

ШИМ Ардуино определяется интегральными компонентами, называемыми таймерами. Каждый таймер в платах Arduino Uno и Nano на базе микроконтроллера ATmega168/328 имеет по два канала, подключенных к выходам. Для изменения частоты PWM сигнала требуется изменение таймера, к которому он подключается. При этом PWM изменится и на аналоговых выходах, подключенных параллельно к этому же таймеру.

Как увеличить частоту и разрядность ШИМ Ардуино

Не существует способа изменить частоту ШИМ Arduino без прямого управления памятью на низком уровне. Рассмотрим далее, как изменить режим работы таймера, чтобы увеличить частоту (frequency) ШИМ Ардуино. Таймер 0 используется для расчета времени, т.е. функции delay и millis. Увеличение частоты на Таймер 0 приведет к нарушению функций сохранения времени, которые могут использоваться в скетче.

Чтобы увеличить разрядность Ардуино на 9 и 10 аналоговом выходе, изменим частоту Таймера 1 без библиотеки. Максимальная частота PWM может достигать на платах Ардуино Уно и Нано — 62 500 Гц. Для этого в процедуре void setup() необходимо добавить соответствующую команду из таблицы, которая приведена далее.


Источник: ooobask.ru