Генератор частоты на ардуино: сборка, настройка, код

Сообщества › Электронные Поделки › Блог › Генератор регулируемой частоты на Arduino Nano

Дело было вечером делать было нечего)
Итак, встречайте — генератор с частотомером на борту.

После успешного проекта по сборке пультоскопа решил собрать генератор и частотомер. Вот что из этого вышло:
Формы сигнала: синус DDS, треугольник DDS, прямоугольник DDS, правая пила DDS, левая пила DDS.
Характеристики взял с страницы автора
“генерации таймером:
Генерация прямоугольного сигнала 0.4 Мгц,
минимальный шаг регулировки частоты в диапазоне 0…2,8кГц — 1Гц
свыше 2,8кГц минимальный шаг постепенно возрастает.
Регулировка коэффициента заполнения (скважности) 1.100%
в диапазоне 1Гц.80кГц регулировка производится с разрешением 1%
Свыше 80кГц разрешение (шаг) регулировки скважности увеличивается.
При изменении рабочей частоты в диапазоне 1Гц-80кГц выбранная скважность сохраняется,
а при изменении частоты свыше 80кГц сбрасывается на 50 %,
но в режиме регулировки скважности её можно снова изменять.

Тех. Характеристики генерации сигнала через DDS:
Почему-то в оригинальной статье автора алгоритма DDS о характеристиках нет ни слова.
Указана только максимальная частота -65кГц. Откуда её взял автор непонятно, я поставил ограничение на 100кГц C увеличением частоты сильно падает разрешение получаемого сигнала на высоких частотах. А конкретно, в диапазонах:
0…6,25 кГц — разрядность от 256 до 128 градаций
6,25…12,5 кГц — разрядность от 128 до 64 градаций
12,5…25кГц -разрядность от 64 до 32 градаций
25кГц…50кГц -разрядность от 32 до 16 градаций
50кГц…100кГц -разрядность от 16 до 8 градаций
Помимо этого с увеличением частоты вырастает джиттер,
особенно заметно на сигналах с резкими фронтами (прямоугольник, пила).
Но на точно установленных частотах 6,25кГц ; 12,5кГц ; 25кГц; 50кГц; 100 кГц джиттера нет, их можно использовать для точных измерений. Остальные частоты для большинства применений тоже подойдут.
Но если нужен идеальный сигнал -то только генерация таймером.”
Во всех диапазонах DDS минимальный шаг регулировки частоты — 1Гц.
Характеристики частотомера, измеряемая частота 1Гц … 7,999 МГц, при превышении частоты начинает привирать.
Есть еще входы на вольтметр, он встроен в меню, но я его не использовал.

За основу взял проект с сайта Ардуино.ру. Проект повторен и проверен несколькими комрадами. Я перевел меню на Русский язык, развел печатную плату и спаял)
В проекте используется Arduino Nano, LCD Nokia 5110 и энкондер “одношаговый”.
Управление: кнопка переключения режимов переключает последовательно
синус DDS, треугольник DDS, прямоугольник DDS, правая пила DDS,
левая пила DDS. частота генерации таймером, скважность генерации таймером

Кнопка на энкодере переключает шаг изменения частоты 1000-1-10-100
в режиме регулировки скважности(6) нажатие на кнопку переключает энкодер в режим (5).
При старте есть возможность выбора режима, генератор-вольтметр. После обратного отсчета автоматом включается генератор.
Подсветка включается комбинацией — удерживая кнопку энкондера нажать кнопку режима послеотпустить кнопку энкондера.
Файлы проекта будут доступны по ссылке

UPD //Проект запускается без танцев с бубнами, с первого раза.

Communities › Arduino для автомобиля › Blog › Генератор с возможностью регулировки частоты и скважности за 100 руб

Был момент, мне как то понадобился генератор.
Да ещё и со специфическими требованиями.
Основной импульс с регулируемой частотой и скважностью
+ пачка импульсов запускаемая по синхроимпульсу
(можно от основного импульса)
Пачка — с регулируемым количеством, скважностью и задержкой от основного импульса.

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

Вырезал из кода все прибамбасы
касаемые генерации пачки по синхроимпульсу

и решил выложить сюда.

Информация о режиме, частоте и скважности выводится в терминал.
Естественно, не нужно возлагать на него какие-то фантастические надежды.
Это всего лишь программная генерация,
чем выше частота, тем более искажёнными будут фронты.
Частоту выжимал около 1 мГц,
если поменять кварц, то можно и более попробовать выжать.

Скетч и необходимые для работы библиотеки внизу страницы
——————-
#include “CyberLib.h”
#include

// PWM должно быть заглавными буквами

bool p1, p2, p3;
int pwm = 9; // the pin that the pwm out
int32_t f=100; //стартовая частота
int duty=128; //стартовая скважность

int mode=1;
// 1 — частота ШИМ
// 2 — ширина ШИМ
// 3 — Сохранение настроек
// 4 — Загрузка настроек

void setup()
<
Serial.begin(115200);
Serial.println(“Init device”);
Serial.println(“mode: PWM Frequency HZ”);
InitTimersSafe();
bool success = SetPinFrequencySafe(pwm, f);

D9_Out; //Настраиваем пин D9 на выход

// пины кнопок
D4_In; //Настраиваем пин D4 на вход
D5_In; //Настраиваем пин D5 на вход
D6_In; //Настраиваем пин D6 на вход

case 2:
Serial.println(“mode: PWM Duty %”); // Ширина импульса
break;

case 3:
Serial.println(“mode: Save Data”); // Сохранение параметров
break;

case 4:
Serial.println(“mode: Load Data”); // загрузка параметров
break;

case 2: // если режим 2 (регулировка скважности), то прибавляем сважность
duty++;
if (duty>255) duty=255;
success = SetPinFrequencySafe(pwm, f);
pwmWrite(pwm, duty);
Serial.println(duty);
break;

case 3:
WriteEEPROM_Long(0, f);
WriteEEPROM_Byte(10, duty);
Serial.println(“Data saved!”);
break;

case 4:
f = ReadEEPROM_Long(0);
duty = ReadEEPROM_Byte(10);
success = SetPinFrequencySafe(pwm, f);
pwmWrite(pwm, duty);

Digitrode

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

Генератор сигналов своими руками на 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, иначе вы получите ошибку во время компиляции.

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

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

Делаем генератор частоты на базе Ардуино микроконтроллера

Генератор частоты на Ардуино – прибор, который занимается преобразованием электрической энергии источника постоянного тока в энергию, не поддающуюся затуханию, для расчета и частоты и образованной формы электрических колебаний. Приспособление приобрело популярность среди начинающих создателей электронных устройств, разработчиков компьютерных девайсов и радиоприемников. Выходное напряжение получается из 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 кнопки – вверх и вниз, для настройки грубого характера, а другие – влево и вправо – настраивают аппарат на точную проверку. Настроить шаг можно в зависимости от установленной частоты на аппарате.

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

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

Источники:

http://www.drive2.com/c/469956834430550966

http://digitrode.ru/computing-devices/mcu_cpu/1687-generator-signalov-svoimi-rukami-na-arduino.html

http://arduinoplus.ru/generator-chastoti-arduino/

http://jobeka.com/vacancies-inzhener-elektronik-sankt-peterburg

Ссылка на основную публикацию