Генератор на ардуино с энкодером

Генератор частоты до 225 МГц на Arduino и китайском модуле Si5351

Опубликовано чт, 18/11/2021 — 21:46 пользователем Гость (не проверено)

В статье мы разглядим создание генератора перестраиваемой частоты на основе платы Arduino и модуля Si5351, работающего в диапазоне 10 кГц — 225 МГц. Данный генератор может сгодиться для тестирования работы разных радиоприемников, может применяться в качестве генератора тактовых сигналов, в качестве гетеродина в супергетеродинных приемниках, в синтезаторах частоты и многих других схожих приложениях.

  • Плата ]]>Arduino Nano ]]> .
  • Инкрементальный энкодер с кнопкой.
  • ]]>OLED дисплей ]]> 128х64.
  • ]]>Adafruit SI5351 CLOCK GEN ]]> (генератор тактовых частот).
  • Toggle Switch, SPDT (переключатель).
  • Panasonic RCA JACK (выходной радиочастотный разъем).
  • Конденсаторы 10 нФ и 100 нФ.
  • Конденсатор 10 мкФ.
  • Резистор 1 кОм.
  • Катушка индуктивности 100 мкГн (Inductor 100 uH).

В данном плане рассматривается генератор перестраиваемой частоты (variable-frequency oscillator, VFO), пригодный для применения в «домашних» (Do It Yourself , DIY) условиях. Данный генератор может сгодиться в синтезаторах частоты, супергетеродинных радиоприемниках, SDR-приемопередатчиках и т.д. Генератор имеет шкальный индикатор (Bargraph indicator) для отображения мощности сигнала (S-Meter) и 20 заблаговременно установленных диапазонов частот.

Основные особенности плана:

  • рабочий диапазон от 10 кГц до 225 МГц;
  • шаг настройки: 1 Гц, 10 Гц, 1 кГц, 5 кГц, 10 кГц и 1 МГц;
  • регулируемое смещение (+ либо -) промежуточной частоты (ПЧ);
  • 20 заблаговременно установленных диапазонов частот (с стремительным доступом) в полосах частот АМ-вещания (BCB) и радиолюбительских диапазонах (HAM frequencies);
  • режим генерации сигналов (функциональный генератор);
  • для применения в качестве здешнего генератора на самодельных супергетеродинных радиоприемниках либо радиоприемниках с прямым реформированием;
  • для применения в качестве генератора переменной частоты для радиолюбителей;
  • для применения в качестве простого тактового генератора для калибровки либо генерации тактовых толчков;
  • шкальный индикатор для отображения мощности сигнала через вход АЦП (аналого-цифрового преобразователя);
  • вероятность работы с платами Arduino Uno, Nano и Pro Mini;
  • использует типовой дисплей 128×64 I2C OLED SSD1306 и модуль Si5351;
  • передача данных по интерфейсу I2C, нужно каждого 2 провода для подключения дисплея и модуля Si5351 к плате Arduino;
  • высокая устойчивость и точность генерации частоты;
  • отменная результативность, невысокая стоимость, дозволено собрать в домашних условиях.

Микросхема Si5351 это конфигурируемый через I2C генератор тактовых частот, безукоризненно подходящий для замены кварцев, кварцевых генераторов, генераторов VCXO (voltage-controlled crystal oscillator — кварцевый генератор, управляемый напряжением), синтезаторов с ФАПЧ (PLL), буферов развязки в приложениях, критичных к всеобщей стоимости. Основываясь на архитектуре PLL/VCXO + high resolution MultiSynth fractional divider, Si5351 может генерировать всякую частоту до 200 МГц на всем из выходов с нулевым отклонением от заданного значения (0 ppm error). Для удовлетворения разным требованиям приложений Si5351 выпускается в 3 версиях. Si5351A генерирует до 8 не зависящих друг от друга тактовых сигналов, применяя внутренний генератор, что дозволяет заменить несколько кварцев либо кварцевых генераторов. В Si5351B добавлен внутренний VCXO, что дает вероятность заменить как вольно (само­стоятельно друг от друга), так и синхронно генерируемые тактовые частоты. Это устраняет надобность использования дорогих особых кварцев, предоставляя при этом высокую безопасность работы в широком диапазоне настраиваемых частот. Si5351C предоставляет такую же эластичность, но синхронизируется при этом с внешним опорным генератором (CLKIN).

Узнать больше подробную информацию о микросхеме Si5351 и ее подключение к плате Arduino вы можете на сайте ее разработчика. Также тезисы ее работы недурно описаны на сайте microsin.net.

Схема генератора перестраиваемой частоты на Arduino и модуле Si5351 представлена на дальнейшем рисунке.

Для работы с планом исполните следующую последовательность шагов:

  • подготовьте аппаратную часть плана согласно представленной схемы;
  • подайте питание на плату Arduino;
  • откройте код программы в Arduino IDE, установите все нужные библиотеки;
  • установите настройки плана (preferences) (описаны дальше в статье), скомпилируйте скетч и загрузите его в плату Arduino Nano, Uno либо Pro Mini;
  • вращайте ручку инкрементального энкодера для увеличения либо уменьшения генерируемой частоты;
  • нажимайте кнопку 1 для метаморфозы шага настройки. Допустимые шаги настройки: 1 Гц, 10 Гц, 1 кГц, 5 кГц, 10 кГц и 1 МГц;
  • нажимайте кнопку 2 для выбора одного из предварительно установленных частотных диапазонов либо выберите режим генератора (generator mode);
  • включайте/выключайте переключатель SW 2 для переключения между режимами RX и TX. В режиме RX переключатель SW 2 открыт, а в режиме TX он замкнут на землю (GND). В режиме TX значение IF (промежуточной частоты) не добавляется/вычитается из выхода RF (радиочастоты) — данный режим отменно подходит для применения в домашних приемопередатчиках;
  • подключите выходной сигнал с измерителя мощности (S-Meter) от вашего радиоприемника (радиостанции) к разъему X2 (вход S-Meter’а). Данный вход имеет настраиваемую восприимчивость, его показатель усиления дозволено настроить в приведенном скетче. На данный вход дозволено подавать сигналы от 500mV до 5V (max);
  • значимое дополнение: if it freezes in the initialization text, comment (put a //) at the line 77 statup_text ();

Вы можете изменить следующие строки в скетче:

#define IF 455 //введите вашу IF (промежуточную) частоту, ex: 455 = 455kHz, 10700 = 10.7MHz, 0 = прямое реформирование частоты приемника либо радиочастоты генератора, «+» будет добавляться, а «-» будет вычитаться сдвиг промежуточной частоты.
#define BAND_INIT 7 // введите ваш первоначальный диапазон (Band) (1-21) в начале работы плана, ex: 1 = Freq Generator, 2 = 800kHz (MW — средние волны), 7 = 7.2MHz (40m), 11 = 14.1MHz (20m).
#define XT_CAL_F 33000 // показатель калибровки модуля Si5351, дозволено настроить дабы получить верно 10MHz. Увеличение этого значения будет сокращать частоту и напротив.
#define S_GAIN 303 //настройка восприимчивости входа измерителя мощности (Signal Meter A/D input): 101 = 500mv; 202 = 1v; 303 = 1.5v; 404 = 2v; 505 = 2.5v; 1010 = 5v (max).
#define tunestep A0 //контакт, к которому подключена кнопка для настройки шага настройки.
#define band A1 //контакт, к которому подключена кнопка для выбора частотного диапазона.
#define rx_tx A2 // контакт, к которому подключена кнопка для выбора режима RX / TX, RX = switch open (переключатель открыт), TX = switch closed to GND (переключатель замкнут на землю). В режиме TX частота IF (промежуточная) не учитывается.
#define adc A3 //контакт, применяемый как вход измерителя мощности (Signal Meter A/D input).

Видео, демонстрирующее работу генератора


Источник

Генератор сигналов на AD9850. Часть 2.

В предыдущей публикации мы подробно рассмотрели возможности генератора AD9850, его подключение к Ардуино (как для последовательного, так и для параллельного режима обмена) и научились генерировать нужную частоту на выходе AD9850. Сегодня мы применим эти знания на практике: речь пойдёт о создании полноценного генератора на базе AD9850.

Компоненты

Кроме модуля AD9850 нам понадобятся:

  • Ардуино Нано
  • ЖК дисплей 1602 (я использую поддерживающий кириллицу, но подойдёт и с английским шрифтом)
  • Энкодер вращения с кнопкой EC11
  • BNC разъёмы
  • Корпус
  • Несколько винтов и гаек М3.

Я добавил в проект разъём для подключения питания через вход Vin Ардуино и 2-позиционный выключатель. Но можно обойтись и без них.

Схема генератора

Перечисленные компоненты соединяем в соответствии со следующей схемой:

Я выбрал параллельный способ управления AD9850. Думаю, это будет выгоднее, поскольку планирую добавить в устройство функцию sweep (ни к чему тратить время на последовательную передачу).

Выводами генератора служат ZOUT1 и QOUT1 – синусоида и прямоугольные импульсы. Для управления скважностью прямоугольных импульсов можно выпаять из модуля генератора потенциометр и вынести его на панель устройства. У меня такой необходимости нет, поэтому оставил всё как есть.

Корпус

Корпус устройства я распечатал на 3D принтере. За его основу я взял параметризованную модель https://www.thingiverse.com/thing:1264391. Она позволяет создать корпус нужных размеров. Остаётся лишь немного доработать его для своих целей: добавить необходимые отверстия и стойки для крепления компонентов. Кроме того я решил усилить боковые части корпуса, в которые вворачивается крепёж, т.к. это место показалось мне ненадёжным. Заодно предусмотрел в них пазы для гаек. Получилось довольно неплохо:

Скетч

Итак, соединяем все компоненты по приведённой ранее схеме и устанавливаем их в корпусе. Дело за скетчем. Я реализовал в нём следующие функции: изменение частоты энкодером, изменение шага, ввод произвольной частоты, режим sweep. В скетче использованы библиотеки LiquidCrystal_I2C_Menu для построения меню и TimerOne для работы с таймером 1 (в режиме sweep). Вы можете скачать их вместе со скетчем и моделями для печати на сайте thingiverse.com: https://www.thingiverse.com/thing:5335092

Обратите внимание: при скачивании библиотеки LiquidCrystal_I2C_Menu с сайта github, поддержка кириллицы в ней по умолчанию выключена. Если вы используете дисплей с кириллицей, то необходимо включить её поддержку. Для этого откройте в текстовом редакторе файл LiquidCrystal_I2C_Menu.h, раскомментируйте строку #define CYRILLIC_DISPLAY (удалите символы // в начале строки) и сохраните изменения. После этого вы сможете выводить на дисплей русский текст с использованием данной библиотеки.

Получившийся в итоге генератор вы можете увидеть в следующем видео.

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

Источник

Генератор сигналов прямоугольной и синусоидальной формы на Arduino

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

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

Также на нашем сайте вы можете посмотреть проекты более «продвинутых» генераторов для формирования сигналов прямоугольной и синусоидальной формы:

Если же вам нужно исключительно простое решение для формирования сигналов прямоугольной формы с частотой до 1 МГц с помощью платы Arduino, то рекомендуем этот проект.

Необходимые компоненты

  1. Плата Arduino Nano (купить на AliExpress).
  2. Алфавитно-цифровой ЖК дисплей 16х2 (купить на AliExpress).
  3. Инкрементальный энкодер, угловой кодер (Rotary Encoder) (купить на AliExpress).
  4. Резисторы 5,6 кОм и 10 кОм (купить на AliExpress).
  5. Конденсатор 0,1 мкФ (купить на AliExpress).
  6. Перфорированная плата.
  7. Набор для пайки.

Работа схемы

Схема генератора сигналов на основе платы Arduino представлена на следующем рисунке.

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

Схема запитывается от USB кабеля Arduino. Необходимые соединения в схеме представлены в следующей таблице.

Контакт платы Arduino Куда подключен
D14 контакт RS ЖК дисплея
D15 контакт RN ЖК дисплея
D4 контакт D4 ЖК дисплея
D3 контакт D5 ЖК дисплея
D6 контакт D6 ЖК дисплея
D7 контакт D7 ЖК дисплея
D10 to Rotary Encoder 2
D11 to Rotary Encoder 3
D12 to Rotary Encoder 4
D9 выход прямоугольного сигнала
D2 контакт D9 платы Arduino
D5 выход SPWM сигнала

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

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

Формирование прямоугольного сигнала с изменяемой частотой

Если вы знакомы с Arduino, то вы должны знать что плата Arduino может достаточно просто формировать ШИМ сигнал (с помощью функции analogwrite) на ряде своих контактов. Но с помощью этой функции можно управлять только коэффициентом заполнения (скважностью) ШИМ сигнала, но нельзя управлять его частотой – а это как раз и нужно для нашего генератора сигналов. Управление частотой сигнала прямоугольной формы можно осуществить используя таймеры платы Arduino и непосредственно переключая состояние контактов на их основе. Помочь нам в этом может библиотека Arduino PWM Frequency Library (библиотека управления частотой ШИМ сигнала), более подробно работу с ней мы рассмотрим далее в статье.

Но в использовании этой библиотеки есть ряд слабых сторон. Дело в том, что данная библиотека изменяет настройки по умолчанию Таймера 1 (Timer 1) и Таймера 2 (Timer 2) платы Arduino. В связи с этим вы уже не сможете, к примеру, использовать библиотеку для управления серводвигателем или другие библиотеки, задействующие эти таймеры платы Arduino. Также функция analogwrite на контактах 9,10,11 & 13 использует Timer 1 и Timer 2, следовательно, вы уже не сможете формировать SPWM сигнал (синусоидальный ШИМ сигнал) на этих контактах.

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

Формирование синусоидальной волны (колебания) с помощью Arduino

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

Что такое SPWM сигнал

SPWM расшифровывается как Sinusoidal Pulse Width Modulation и переводится как синусоидальная широтно-импульсная модуляция (синусоидальная ШИМ). Этот сигнал в определенной степени похож на обычный ШИМ сигнал, но в нем коэффициент заполнения контролируется таким образом чтобы получить среднее напряжение похожее на синусоидальную волну. Например, при коэффициенте заполнения (скважности) 100% среднее выходное напряжение будет 5V, а при коэффициенте заполнения 25% оно будет всего лишь 1.25V, таким образом, управляя скважностью (коэффициентом заполнения) мы можем получить заранее определенные изменяемые значения среднего напряжения, то есть синусоидальную волну. Этот метод обычно используется в инверторах.

Принцип формирования SPWM сигнала показан на следующем рисунке.

Синим цветом на этом рисунке показан SPWM сигнал. Заметьте, что его скважность (коэффициент заполнения) изменяется от 0% до 100%, а затем снова возвращается в 0%. Представленный график построен для диапазона изменения напряжений от -1.0 до +1.0V, но в нашем случае, поскольку мы используем плату Arduino, масштаб подобного графика будет от 0V до 5V. Мы рассмотрим как в программе для Arduino формировать SPWM сигнал далее в статье.

Преобразование SPWM сигнала в синусоидальную волну

Преобразование SPWM сигнала в синусоидальную волну обычно требует использования схемы H-моста (H-bridge), которая состоит минимум из 4-х переключателей мощности (power switches). Подобные схемы обычно используются в инверторах. Мы не будем в статье подробно рассматривать эти вопросы поскольку нам с помощью нашей синусоидальной волны не нужно запитывать какое-либо устройство, нам всего лишь нужно ее сформировать. К тому же с помощью H-моста невозможно получить чистую синусоидальную волну – для этой цели необходимо использовать фильтр нижних частот (ФНЧ), состоящий из конденсаторов и индуктивностей.

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

Библиотека для управления частотой ШИМ сигнала в Arduino

Эту библиотеку вы можете скачать по следующей ссылке — Arduino PWM Frequency Library.

По представленной ссылке вы скачаете библиотеку в виде ZIP файла. После извлечения информации из этого ZIP файла вы получите каталог (папку) с именем PWM. Перейдите в папку с библиотеками Arduino IDE (для пользователей операционной системы Windows эта папка будет располагаться по адресу C:\Users\User\Documents\Arduino\libraries) и скопируйте туда эту PWM папку. Возможно, в библиотеках Arduino IDE у вас уже есть папка с именем PWM – в этом случае вам ее необходимо заменить на новую (скачанную) папку.

Объяснение программы для Arduino

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

Нам необходимо формировать ШИМ сигнал с изменяемой частотой на контакте 9 платы Arduino. Эта частота будет устанавливаться с помощью углового кодера, а ее значение будет отображаться на экране ЖК дисплея. А когда ШИМ сигнал будет формироваться на контакте 9 он также будет создавать прерывание на контакте 2 поскольку мы соединили оба этих контакта. Используя это прерывание мы можем управлять частотой SPWM сигнала, который будет формироваться на контакте 5.

Как обычно вначале программы мы должны подключить используемые библиотеки. Библиотека для работы с ЖК дисплеем встроена в Arduino IDE, а библиотеку для изменения частоты ШИМ сигнала мы только что скачали.

Источник

Adblock
detector