/

Генератор на arduino uno

Генератор сигнала (т.н. функциональный генератор) может быть использован для тестирования и отладки схем. Я часто использую его для проверки частотных характеристик электронных компонентов, например ОУ и датчиков. Этот генератор сигналов построен на плате Arduino. Он может выдавать четыре типа сигнала: синусоидальный, треугольный, прямоугольный и пилообразный, частота каждого из которых может регулироваться от 1Гц до 50 кГц. Частота, длительность импульса и амплитуда (усиление) сигналов управляется тремя потенциометрами. Я также добавил опциональный светодиодный индикатор, который указывает какой сигнал сейчас на выходе.

Термоусадка.
Провод №22.
Припой.
Дрель со сверлами.
Термоклей.
Клей

Подготовка Arduino Proto Shield

Arduino Proto Shield — это удобный способ добавления своей схемы к Arduino, но я решил немного его урезать, чтобы он занимал меньше места в корпусе. Сначала я укоротил выводы при помощи кусачек. Потом я убрал шести контактный разъем. После этого я удалил разъемы с верхней части платы.

Корпус

Я решил использовать лазерный резак для изготовления корпуса. Я разработал корпус используя AutoCAD, Autodesk 123D Make, и Corel Draw. Все файлы проекта можно скачать внизу статьи. Если у вас нет доступа к лазерному резаку, вы можете сделать все детали корпуса вручную по двумерным чертежам.

На картинке показаны отверстия на передней панели:
(3x) 7мм отверстие для потенциометров усиления, частоты и ШИМ.
(3x) 7мм отверстие для четырех кнопок — синусоидальный, треугольный, прямоугольный и пилообразный сигналы.
(1x) 10мм отверстие для аудио разъема.

Я вырезал изображения всех четырех сигналов для того чтобы их можно было подсвечивать, но вы можете просверлить простые отверстия 5мм для светодиодов под каждой кнопкой.
Также есть прямоугольное (высота11мм, ширина 12 мм) отверстие для USB-порта Arduino в задней части устройства.

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

Пайка проводов к кнопкам

Припаяйте 10 кОм резистор к одному из выводов каждой кнопки. Припаяйте зеленый провод к месту соединения кнопки и резистора и красный провод к резистору как показано на фото. Черный провод припаяйте к другому контакту кнопки. Все эти соединения надо заизолировать термоусадкой во избежание короткого замыкания.

Установка аудио разъема

Свинтите пластиковый корпус с аудио разъема. Припаяйте красный провод к двум стерео контактам и черный провод к GND как показано на фотографии. Я использовал термоклей для предотвращения короткого замыкания и дополнительной фиксации проводов и пайки. После этого, вставьте гнездо в отверстие в корпусе и закрепите его термоклеем.

Установка кнопок

Снимите с кнопок верхнюю часть и установите их в корпус, зафиксировав термоклеем. После его высыхания, установите верхнюю часть кнопок обратно.

R2R ЦАП на Arduino Shield

Припаяйте восемь резисторов 20кОм на Arduino Proto Shield. Один из выводов каждого резистора должен быть подключен к цифровым контактам Arduino 0-7.

Припаяйте семь резисторов 10кОм на Arduino Proto Shield так, чтобы они были между выводами ранее припаянных восьми резисторов 20 кОм.

Припаяйте резистор 10кОм на Arduino Proto Shield так, чтобы один вывод резистора 10кОм был присоединён к цифровому контакту 0 Arduino, а другой вывод к GND.

Панелька для микросхем

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

Фильтр нижних частот

В качестве ФНЧ (Фильтр Нижних Частот) выступают резистор и конденсатор, соединенные последовательно. ФНЧ пропускает низкие частоты и подавляет ступеньки на сигнале.

Вот как я рассчитал номиналы компонентов в своем ФНЧ:
Частота среза = 1/(2*pi*R*C)

Согласно теореме Найквиста, сигналы не может иметь частоту больше чем половина частоты дискретизации. Если бы я использовал частоту дискретизации 100 кГц, то максимальная возможная частота была бы 50 кГц.

Если я использую резистор 300 Ом, и хочу иметь частоту среза 50 кГц:
50000 = 1/(6.28*300*C)
C = 1.06*10^-8 F
Если немного округлить:
C = 0.01 мкФ

Подключите один вывод резистора 300 Ом к резистору 10 кОм, подключенному к цифровому выводу 7. Подключите конденсатор к другому выводу резистора 300 Ом. Второй вывод конденсатора подключается к GND.

Усилитель

Подключите положительный вывод конденсатора 220мкФ к соединению резистора и конденсатора в ФНЧ. Второй вывод конденсатора 220мкФ подключается к резистору 20 кОм, второй вывод которого подключается к 3 выводу панельки для микросхемы. Резистор 4.7 кОм подключается между 3 и 4 контактами панельки. К 4 выводу панельки подключается GND.

Подключите положительный вывод второго конденсатора 200мкФ к 5 контакту панельки. Позже, второй его вывод будет к подключен к потенциометру «Усиление». Подключите 6 контакт панельки к Vin, 2 контакт к GND и вставьте микросхему в панельку.

Подключение потенциометра "Усиление"

Громкость или усиление звукового сигнала будет управляться аудио потенциометром 10 кОм с выключателем. Подключите выход усилителя и GND к потенциометру, как показано на фото. Средний контакт это аудио выход, который будет подключен непосредственно к разъему.

Читайте также:  Шаблон вазочки для вырезания из бумаги

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

Подключение батареи

Подключить черный провод от разъема для батареи к GND Arduino Shield. Один провод от выключателя в потенциометре подключите к красному проводу, а второй провод от выключателя потенциометра к Vin Arduino Shield. Пока не подсоединяйте батарею.

Подключение аудио разъема

Соедините выход усилителя (отрицательный вывод конденсатора подключенного к 5 пятому выводу панельки) с красным проводом присоединенным к аудио разъему раньше. Черный провод подключите к GND Arduino Shield.

Подключение кнопок

Подключите все красные провода от кнопок к 5В и все черные провода к GND Arduino shield. Подключите зеленые провода к аналоговым контактам 0-3 в следующем порядке:
Аналоговый контакт 0 = Прямоугольный
Аналоговый контакт 1 = Треугольный
Аналоговый контакт 2 = Пилообразный
Аналоговый контакт 3 = Синусоидальный

Подключение потенциометров "Частота" и ШИМ

Подключите красный, черный, и зеленый провода к потенциометрам 10кОм и 50кОм, как показано на фотографии. Подключите красный провод к 5В и черный провод к GND Arduino shield. Подключите зеленые провода к аналоговым контактам 4 (ШИМ) и 5 (Частота).

Установка потенциометров

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

Подключение светодиодов

Подсоедините резистор 470 Ом к катоду каждого из четырех светодиодов. Припаяйте черный провод ко второму выводу резистора и красный провод к аноду светодиода. Заизолируйте всё термоусадкой во избежание короткого замыкания. Припаяйте черные провода от всех четырех светодиодов на GND Arduino shield. Припаяйте красные провода к цифровым контактам 8-11.

Установка светодиодов

Приклейте светодиоды в корпусе так, что каждый из них подсвечивал один символ на передней панели :
Цифровой контакт 8 = Прямоугольный
Цифровой контакт 9 = Треугольный
Цифровой контакт 10 = Пилообразный
Цифровой контакт 11 = Синусоидальный

Черный свето рассеиватель

Приклейте свето рассеиватель на вырезы в передней панели с внутренней стороны. Я использовал кусок черного пластикового мешка для мусора.

Программа

Прошейте Arduino кодом в файле function_generator.ino. В коде используются прерывания по таймеру на частоте 100 кГц для отправки новых данных в ЦАП. Остальная часть кода следит за состоянием кнопок и потенциометров. Так как прерывания происходят на высокой частоте, я должен сделать программу обработки прерываний в ISR(TIMER1_COMPA_vect)<> как можно короче. Математические операции с плавающей точкой и с помощью функции sin() занимают слишком много времени. Я рассмотрел с нескольких проектов, и получил это: Для треугольного и пилообразного сигнала я создал переменные sawByte, triByte, sawInc, и triInc. Каждый раз, когда частота меняется, я подсчитываю сумму на которую частота треугольного и пилообразного сигналов должна измениться с частотой 100 кГц:

То есть все, что должно быть сделано в прерывании, является простой математикой:

Для синусоидально сигнала, я написал простой скрипт на Python, который выводит 20000 значений 127+127 sin(х) за один полный цикл:

Я сохранил этот массив в памяти Arduino под названием sine20000[] и беру из него значения которые необходимо отправить в ЦАП. Это намного быстрее, чем вычислять значения каждый раз.

Последние штрихи

Подключите shield к Arduino. Подключите 9В батарею к разъему. Закрепите эти элементы внутри корпуса. Убедитесь, что USB-порт Arduino доступен снаружи. После запуска вы должны увидеть светящийся индикатор синусоиды.

Установка задней панели и ручек

Просверлите четыре отверстия на задней панели и закрепите её с помощью винтов. Привинтите ручки на потенциометры.

Тестирование

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

Вы заметите, что прямоугольный сигнал является единственным, который по настоящему регулируется от 1 Гц до 50 кГц. Поскольку частота дискретизации 100 кГц, синусоидальный, треугольный, и пилообразный сигналы становятся немного неузнаваемыми примерно после 25 кГц (4 отсчета за такт-100kHz/25kHz). Пилообразный и треугольный сигналы понижаются примерно 100 Гц, иначе значения triInc и sawInc станут настолько низким, что они округляются до нуля. Синусоидальный сигнал понижается до 1 Гц, но на самом деле до 5Гц, так как Arduino имеет достаточно памяти только для хранения около 20 тыс. значений.

Генератор частоты на Ардуино – прибор, который занимается преобразованием электрической энергии источника постоянного тока в энергию, не поддающуюся затуханию, для расчета и частоты и образованной формы электрических колебаний. Приспособление приобрело популярность среди начинающих создателей электронных устройств, разработчиков компьютерных девайсов и радиоприемников. Выходное напряжение получается из 3 форм: прямоугольник, синусоида и пила.

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

Такой прибор, как генератор сигналов на Ардуино, легко сделать в домашних условиях. Основа конструкции – микроконтроллер Arduino.

Где применяется генератор частоты на Ардуино

Роль частотного генератора в мире электроники – настройка и определение технической характеристики тактов сигнальных волн. Другое применение – для регулировки узлов и элементов приемников, передающих радио-колебания. Кроме того, генератор импульсов, построенный на Ардуино, используют как модулятор или источник питания для устройств, которые обладают измерительными свойствами.

Читайте также:  Сож для токарного станка своими руками

Частотные измерители могут изменять выходные сигналы с определенным скачком.

Поэтому устройства с такими свойствами играют немаловажную роль в конструировании электронных приборов. Перечислим другие значительные функции Ардуино-генератора:

  1. Поиск расположения мест, где можно проложить кабели и трубопроводы. Причем поисковая работа проводится на дальних расстояниях.
  2. Поисковые работы для находки мультичастотной технологии с помощью процесса излучения сразу нескольких частотных волн.
  3. Создание аналоговых синтезаторов. Синтезирующие устройства применяются для сборки электронных устройств без использования множества блоков. Все сигнальные волны мелькают между разными блоками строго по стандартам.

Комплектующие

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

  • Arduino Uno R3 в антистатической упаковке;
  • шилд DFRobot LCD Keypad Shield;
  • модуль генератора сигналов AD9850 DDS;
  • проводы для присоединения частей конструкции – 8 штук;
  • USB-провод или кабель.

Также во втором случае можно собрать устройство на основе AD9850 DDS модуля и 1,8-дюймового TFT-дисплея (контроллер ST7735).

В таком случае схема соединения будет выглядеть так:

Листинг программы для проекта «генератор импульсов с регулировкой частоты на Ардуино» для первого нашего варианта:

Во втором случае программный код будет таким (позаимствовано на просторах интернета):

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

Для второго варианта нужны следующие технические спецификации:

И библиотеки для Arduino:

Сборка

Алгоритм сборки проекта Arduino-генератор импульсов:

  1. Скачиваем и устанавливаем последнюю версию бесплатной среды разработки для программирования микропроцессора Ардуино. На нашем сайте указано, как правильно произвести первичную настройку. Также пользователь найдет все возможные ответы на свои вопросы по работе с данной средой.
  2. С помощью USB-кабеля подключаем микропроцессор к компьютерному устройству. Далее перемещаем программу, код которой указан в разделе выше, в память платформы.

Настройка

Если по окончанию загрузки пользователь получил сообщение «Done uploading», значит, генератор сигналов на Ардуино с дисплеем готов к работе. Следующий шаг – соединение модулей.

Выходные сигнальные волны снимаются с контактов генератора: QOUT1, QOUT2 (прямоугольный), ZOUT1 и ZOUT2 (синусоидальный).

После сборочных работ следует тщательно проверить, правильно ли подключены все контакты. Если все правильно подключено – подаем питание в устройство из электросети.

По истечению пары секунд на дисплее загорится стандартное значение частоты – 10 кГц. Значение можно изменить в любое время – для этого в листинге выше запрограммированы кнопки вверх, вниз, влево и вправо.

Проверка

В первом случае после конструирования должен получиться стандартный мотор-редуктор Ардуино синусоидальных и прямоугольных волновых сигналов, диапазон которых регулируется от 0 до 40 МГц. Проверить управление легче легкого – есть 2 кнопки – вверх и вниз, для настройки грубого характера, а другие – влево и вправо – настраивают аппарат на точную проверку. Настроить шаг можно в зависимости от установленной частоты на аппарате.

Во втором случае итоговое решение будет выглядеть так:

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

ВЧ-генератор в виде платы расширения к Arduino Uno

Если возникла необходимость в источнике синусоидального сигнала высокой частоты, то может выручить предлагаемый ВЧ-генератор, выполненный в виде платы расширения к распространённому контроллеру Arduino Uno. Этот, как теперь называют подобные устройства, шилд (Arduino Shield), созданный на основе микросхемы синтезатора частоты с прямым цифровым синтезом выходного сигнала (Direct Digital Synthesis – DDS), вставляется прямо в плату контроллера Arduino Uno, исключая саму возможность ошибки при подключении подобных устройств проводами.

Фото 1. ВЧ-генератор, установленный в плату контроллера Arduino Uno.

Контроллер Arduino Uno в данном случае непосредственно управляет работой DDS-генератора, но и сам требует подключения к USB-порту компьютера и работает под управлением компьютерной программы, выполняющей функцию пользовательского интерфейса. Всё необходимое программное обеспечение можно бесплатно скачать по ссылкам, приведенным в конце этого описания.

Рис.1. Управление ВЧ-генератором и его выходной сигнал на USB-осциллографе.

Высокочастотный синусоидальный сигнал, сформированный DDS-генератором, выведен на установленный на плате генератора коаксиальный ВЧ-разъем через симметрирующий ВЧ-трансформатор (балун), чем обеспечивается согласование со стандартной 50-омной нагрузкой.

Фото 2. SMA-разъем и согласующий ВЧ-трансформатор на плате генератора.

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

Фото 3. ВЧ-генератор + USB-осциллограф + ноутбук = измерительный комплекс.

Технические характеристики ВЧ-генератора

В таблице 1 приведены технические характеристики ВЧ-генератора с пояснениями. Некоторые из них разъяснены затем в тексте более подробно.

Таблица 1

Диапазон перестройки частоты от 100 кГц до 25 МГц
Рекомендуемый к использованию частотный диапазон от 150 кГц до 12,5 МГц
Уровень выходного сигнала (Rн=50 Ом) 1 0 dBm / 224 mV (RMS)
Неравномерность уровня выходного сигнала 1,2 ±2 dB
Регулировка уровня выходного сигнала нет
Уровень 2-й и 3-й гармоник, не выше -55 dB
Уровень собственных шумов, не выше -80 dB
Амплитудная модуляция нет
Частотная модуляция 3 да
Фазовая модуляция 3 да

1 – в рекомендуемом к использованию частотном диапазоне;
2 – ниже приведен график с неравномерностью АЧХ;
3 – цифровая манипуляция под управлением контроллера Arduino Uno.

На рис.2 представлена диаграмма с анализатора спектра, полученная при тестировании генератора на частоте 1 МГц.

Читайте также:  Калькулятор расчета теплоизоляции трубопроводов

Рис.2. Уровень сигнала, 2-й и 3-й гармоник и собственных шумов генератора (10 dBm/дел.).

По этой диаграмме можно оценить уровни 2-й и 3-й гармонических составляющих выходного сигнала, а также уровень собственных шумов ВЧ-генератора. Следует также отметить, что показатели качества выходного сигнала генератора обусловлены характеристиками микросхемы DDS-синтезатора AD9834B, на базе которой построен представленный здесь генератор сигналов высокой частоты.

Электрическую принципиальную схему представленного здесь генератора высокочастотного синусоидального сигнала, выполненного в виде платы расширения к контроллеру Arduino Uno, можно скачать в pdf-формате по ссылке в конце статьи.

Структурно схема высокочастотного генератора состоит из следующих друг за другом функциональных узлов:

  • DDS-синтезатора частоты на микросхеме AD9834B (D1) производства Analog Devices;
  • LC-фильтра нижних частот (L2..L5/C11..C13) с частотой среза 25 МГц;
  • дифференциального усилителя сигнала высокой частоты на микросхеме AD8132ARZ производства Analog Devices, с симметричного выхода которого нормированный по амплитуде синусоидальный сигнал высокой частоты через согласующий симметрирующий ВЧ-трансформатор (balun) подаётся на выходной коаксиальный ВЧ-разъём типа SMA.

Схема включения микросхемы DDS-синтезатора AD9834B (D1) приведена на рис.3.

Рис.3. Микросхема DDS-синтезатора AD9834B в схеме ВЧ-генератора.

Сигнал тактовой частоты 50 МГц подаётся на вход MCLK (8) с кварцевого генератора G1. Для управления микросхемой DDS-синтезатора AD9834B используется последовательный интерфейс типа SPI. Остальные управляющие входы микросхемы выведены на свободные порты контроллера Arduino Uno. Эти управляющие входы могут быть задействованы при необходимости реализовать какие-либо дополнительные функции, такие как, например, частотная и/или фазовая модуляция (манипуляция) выходного сигнала. Таким образом практически все функциональные возможности DDS-синтезатора AD9834B могут быть использованы под управлением контроллера Arduino Uno с соответствующим программным обеспечением.

Парафазный выходной сигнал с выходов микросхемы IOUT (19) и IOUTB (20) через развязывающие конденсаторы C9 и C10 подаётся затем на вход LC-фильтра нижних частот, схема которого представлена на рис.4.

Рис.4. LC-фильтр нижних частот с частотой среза 25 МГц.

Частота среза представленного на рис.4 ФНЧ около 25 МГц, а затухание на тактовой частоте 50 МГц составляет не менее -40 дБ. Амплитудно-частотная характеристика LC-фильтра нижних частот на элементах L2..L5/C11..C13 представлена на рис.5.

Рис.5. Амплитудно-частотная характеристика LC-фильтра нижних частот.

С LC-фильтра нижних частот синусоидальный сигнал поступает на вход нормирующего усилителя высокой частоты на микросхеме AD8132ARZ (D2) как показано на рис.6.

Рис.6. Нормирующий УВЧ и согласование его симметричного выхода с несимметричной нагрузкой.

Для согласования симметричного выхода УВЧ с несимметричной нагрузкой генератора, подключаемой через коаксиальный разъём XS3, между УВЧ и разъёмом включен симметрирующий согласующий ВЧ-трансформатор — балун с соотношением импедансов на входе и выходе 4:1 (T1). Выходное сопротивление ВЧ-генератора во всём рекомендуемом к использованию частотном диапазоне составляет 50 Ом.

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

Рис.7. Неравномерность уровня выходного сигнала при перестройке частоты.

Как видно из представленной диаграммы, наиболее крутой завал уровня сигнала наблюдается при приближении к нижнему краю диапазона перестройки частоты сигнала ВЧ-генератора. Это обусловлено недостаточной индуктивностью обмоток согласующего ВЧ-трансформатора T1. В рекомендуемом к использованию диапазоне частот выходного сигнала неравномерность не превышает ±2 dB.

Программное обеспечение описанного выше ВЧ-генератора как платы расширения к контроллеру Arduino Uno состоит из двух частей: программы, которую необходимо записать в контроллер Arduino Uno и компьютерной программы пользовательского интерфейса. Обе программы можно свободно и бесплатно скачать по приведенным ниже ссылкам.

Для записи необходимого программного обеспечения в контроллер Arduino Uno необходимо скачать архивный файл AD9834-ctrl.zip и распаковать его с сохранением названия папки с файлами программы AD9834-ctrl. Затем открыть в среде программирования Arduino IDE файл из этой папки AD9834-ctrl.ino и запрограммировать свой контроллер Arduino Uno.

Программа пользовательского интерфейса, запускаемая на компьютере, написана на языке Java. Поэтому файл программы пользовательского интерфейса jDDSin.jar запускается на компьютере при условии, что на компьютере установлена виртуальная Java-машина (Java Virtual Machine). Как это сделать — подробно и неоднократно было описано на сайтах, посвященных созданию и использованию программного обеспечения на языке Java.

На рис.8 представлен вид окна запущенной программы пользовательского интерфейса.

Рис.8. Окно программы пользовательского интерфейса.

При подключении к компьютеру платы Arduino Uno, запрограммированной как было описано выше, и последующем запуске программы jDDSin, программа автоматически определяет виртуальный COM-порт, к которому подключен контроллер, устанавливает с контроллером связь и поддерживает с ним постоянный обмен информационными пакетами. Поэтому в программе отсутствует меню выбора COM-порта и его параметров. Достаточно подключить плату и запустить программу. Работу программного обеспечения можно проверить со своей платой Arduino Uno и без установленной платы расширения.

Управление частотой сигнала на выходе ВЧ-генератора при помощи программы пользовательского интерфейса, как видно, очень простое. Нажатие мышкой на кнопку «+1»/«-1» (или кнопки «↑» / «↓» на клавиатуре) увеличивает/уменьшает частоту сигнала на 1 Гц, 1 кГц или 1 МГц — в зависимости от выбора шага изменения частоты в правой панели «Step». Для быстрого ввода требуемого значения частоты нажмите на клавиатуре пробел и введите частоту в герцах.

©Задорожный Сергей Михайлович, 2019г.

Оцените статью
Добавить комментарий