Arduino Uno в качестве генератора прямоугольных импульсов с регулируемой частотой и рабочим циклом
в Ардуино 0 3,265 Просмотров
В этом проекте плата Arduino Uno настроена как генератор прямоугольных импульсов с выбираемым пользователем уровнем частоты и рабочего цикла. Рабочий диапазон системы составляет до 10 кГц.
Желаемую частоту и рабочий цикл генерируемых прямоугольных импульсов можно задать с помощью матричной клавиатуры, которая сопряжена с цифровыми выводами Arduino.
Генератора прямоугольных импульсов — схема и работа
Принципиальная схема генератора прямоугольных импульсов показана на следующем рисунке:
В качестве устройства ввода используется матричная клавиатура 4 × 3. Четыре ряда (с RW1 по RW4) клавиатуры подключены к цифровым контактам 10, 11, 12 и 13 платы Arduino Uno. Три столбца (с CL1 по CL3) клавиатуры подключены к аналоговым входным контактам Arduino (с A0 по A2). Каждая колонка подключена к источнику питания 5 В через резистор сопротивлением 1 кОм (R1 — R3).
Arduino Uno — это плата разработки на базе микроконтроллера AVR ATmega328P (MCU) с шестью аналоговыми выводами и 14 цифровыми контактами ввода/вывода. Микроконтроллер имеет 32 КБ флэш-памяти ISP, 2 КБ ОЗУ и 1 КБ EEPROM. Плата обеспечивает последовательную связь через UART, SPI и I2C. Микроконтроллер может работать с тактовой частотой 16 МГц.
В нашем примере цифровые выводы Arduino 13, 12, 11, 10 и 9 сконфигурированы как выходные выводы. Контакты A0, A1 и A2 служат для аналоговых входов.
Программного обеспечения
Исходный код написан на языке программирования Arduino. Плата программируется с использованием программного обеспечения Arduino IDE.
Выберите плату Arduino Uno в меню Инструменты –> Плата в Arduino IDE и загрузите ниже приведенный скетч через стандартный порт USB на вашем компьютере:
Функция Serial.begin (9600) инициализирует последовательный порт со скоростью 9600 бод. В этом проекте монитор последовательного порта Arduino IDE также отображает введенное значение частоты и рабочего цикла прямоугольных импульсов.
Примечание. Arduino необходимо перезагружать каждый раз, перед тем как устанавливается новая частота и рабочий цикл.
Схема работы проста. После загрузки кода в Arduino подключите клавиатуру, как показано на схеме. Включите питание и введите желаемое значение частоты с клавиатуры. Затем нажмите кнопку рабочего цикла S11 (см. схему) и введите желаемое значение рабочего цикла, нажимая цифровые клавиши (от S0 до S9). Наконец, нажмите клавишу Enter (S12).
Выходные прямоугольные импульсы будут на разъеме CON1, который подключен к цифровому выводу 9 Arduino Uno.
Генератор сигналов на 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. Возможно, из этого получится продолжение данной публикации.
Функциональный генератор сигналов с регулируемой частотой на Ардуино с дисплеем 1602. Схема и описание
в Ардуино 0 7,675 Просмотров
Это простой функциональный генератор с регулируемой частотой работает в диапазоне звуковых частот. Он может быть полезен для тестирования усилителей, экспериментов в области цифровой обработки сигналов и в лабораториях электроники.
Авторский прототип представлен на следующем рисунке:
Принципиальная схема функционального генератора
Схема содержит плату Ardunio Uno (Board1), ЖК-дисплей 1602 (LCD1), два потенциометра по 10 кОм (VR1, VR2) и несколько дополнительных компонентов.
Потенциометр VR1, подключенный к контакту 3 LCD1, используется для управления контрастностью LCD1. Потенциометр VR2, подключенный к выводу A0 аналогового входа платы Arduino Uno, используется для настройки периода времени выходных сигналов (частоты).
В качестве выходов использованы контакты 3, 9 и 10 платы Arduino:
- контакт 3 — для прямоугольной волны
- контакт 9 — для синусоидальной волны
- контакт 10 — для пилообразной волны
Сигналы с выводов 9 и 10 фактически являются широтно-импульсными модулированными (ШИМ) сигналами, несущими аналоговые сигналы. Необходимая форма сигнала получаются с помощью простой схемы резистивно-конденсаторного фильтра. Прямоугольный сигнал на выводе 3 снимается без фильтра.
Эти формы сигналов синтезируются с использованием функций управления прерыванием Timer0 и Compare-Match микроконтроллера Arduino (ATmega328). Таймер1 ATmega328 запрограммирован на частоту 10 кГц для генерации выходных сигналов ШИМ.
Переключатель S2, подключенный к контакту 8 платы Board1, используется для изменения частотного диапазона. В программе предусмотрено два частотных диапазона: от 30 до 250 Гц и от 250 до 2500 Гц для покрытия среднего диапазона звуковых частот. Эти сигналы от CON2 до CON4 можно просмотреть на осциллографе.
Скетч функционального генератора
Программа должна быть загружена в Ардуино с помощью программного обеспечения Arduino IDE. С USB-кабелем, подключенным между Arduino и ПК, значение частоты можно посмотреть на дисплее LCD1, а на последовательном плоттере в Arduino IDE посмотреть форму сигнала.
Переключатель S1, подключенный к контакту 2 платы Board1, используется для переключения отображения между LCD1 и последовательным плоттером в Arduino IDE. Если контакт 2 заземлен, осциллограммы (синусоидальный, квадратный и пилообразный сигнал) можно просматривать на последовательном плоттере, как на цифровом осциллографе:
Каждая форма сигнала имеет величину около 5 В. Таким образом, синусоидальная волна изменяется от 0 до 5 В и не переходит в отрицательную.
Подключения LCD1 выполняются на печатной плате с помощью 16-контактной гребенки. Резистор на 470 Ом (R1), подключенный к выводу 15, используется для подсветки LCD1. Питание для ЖК-дисплея берется с контактов 5В и Gnd платы Arduino.
USB-кабель используется для подключения Arduino к ПК или ноутбуку. После загрузки программы плату Arduino и LCD1 можно запитать от адаптера / аккумулятора напряжением 9 вольт.
Строительство и испытания
Компоновка печатной платы (см. плата своими руками) генератора частоты и расположение его компонентов показано на следующем рисунке:
После сборки схемы на печатной плате загрузите исходный код на плату Arduino. Отсоедините плату от компьютера и подключите ее к источнику питания 9 В через разъем CON1.
Вы можете просмотреть сгенерированное значение частоты на ЖК-дисплее, разомкнув переключатель S1, или проверить различные формы сигналов на последовательном плоттере, замкнув S1.
Очень простой генератор из ардуины.
ТехнарьКто
Иногда бывает нужно подать сигнал определённой частоты, а специального устройства под рукой нету. Благодаря появлению микроконтроллеров теперь можно при необходимости хоть на коленке в поле сделать генератор. Вот скетч для генератора с регулируемой частотой, пользуюсь давно и успешно.
Генератор частоты от 1 Гц до 8 000 000 Гц. Вырабатывает однополярный меандр со скважность 2. По русски это значит длительность импульса и длительность паузы между импульсами равны, а сигнал имеет прямоугольную форму.
Вопрос: Что такое генератор?
Ответ: Это устройство которое преобразует энергию источника питания в энергию выходных электрических импульсов заданной частоты и формы.
Вопрос: А мне то это зачем?
Ответ: Очень хороший вопрос, ответ на который Вы вряд ли найдете в интернете. Вы сможете проверить работоспособность усилителя. Проверить диапазон воспроизводимых усилителем частот. Проверить целостность динамика, даже без усилителя с помощью только этого генератора. Найти обрыв силового провода в проводке, обрыв телефонного провода, обрыв в электропроводке автомобиля. Правда кроме генератора нужен будет еще и детектор сигнала. Для поиска обрыва проводки генератор присоединяют к исследуемой линии, а частота генератора лежит в пределах килогерца. Поиск производится детектором. По резкому уменьшения громкости звука, определяется место разрыва. Генератор позволит проверить работу микропроцессора ардуины или PIC контроллера при использовании его как тактового. Можно сделать звуковую сирену с тональностью сигнала который Вам нравиться. Сделать передатчик с использованием генератора в качестве задающего несущую частоту. Настроить фильтр низкой частоты, настроить фильтр высокой частоты, настроить режекторный фильтр. Фильтры используют в цветомузыке, в каскадах радиоприемников, в импульсной технике для защиты от помех, для очистки информационного сигнала от сопутствующих работе помех. Подать сигнал низкой частоты на устройства работающие на шине I2C и посмотреть обмен информации хоть с помощью вольтметра. С помощью генератора можно измерять индуктивность и емкость с очень высокой точностью. Да и вообще сейчас трудно назвать современное электронное устройство в котором нет генератора и для быстрой проверки работы устройства не требовался бы внешний генератор, хотя бы такой. Кроме этого при использовании генератора показывающего все знаки неизменно возникнет вопрос, почему во всех генераторах частота немного отличается. Поэтому этот генератор позволит заинтересоваться вопросом точности и что же такое ppm, ppb зачем и когда это нужно.
Подначка: Да я программу генератора на компьютере запущу. Че мне заморачиватся.
Ответ: Программы генераторов на компьютере для звуковых карт ограничены звуковой частотой. Мне будет очень любопытно узнать, как вы с генерируете сигнал хотя бы в мегагерц 1 000 000 Гц с помощью звуковой карты. С помощью этого генератора — легко.
Теперь Вы знаете зачем нужен генератор. Практические примеры использования выходят за рамки данного сообщения. Здесь только про создание самого генератора.
Итак схема.
Я же обещал очень простой генератор
На выход сигнала можно смело цеплять динамик для проверки его работоспособности. Без конденсатора можно сразу подавать сигнал на микроконтроллеры и электронные схемы у которых 5V питание.
Из терминала послать требуемую частоту в герцах. Только цифру. В ответ в терминал будет выведена частота в герцах, а на выходе генератора появиться сигнал с частотой как в терминале.
Пример для частоты 200 кГц. В терминале набирал 200000
Пример для частоты 8 мегагерц. В терминале набирал 8000000
Меандр кривой из за малого частотного диапазона осциллографа. Но это совершенно другой вопрос.
Надо понимать, что выводимая в терминале частота будет отличаться от реальной. Выводимая в терминале частота была бы при идеальном кварце работающем точно на частоте 16 000 000 Гц. У ардуин такого не бывает. Если кому интересно, то могу написать о кварцевых резонаторах. Для понимания, почему в ардуино не бывает точных кварцев.
PS Поскольку в целом я далек от программирования но весьма не плохой электроник, вынужденный современностью разбираться в коде разных программ, то по большей части использую приборы которые кто то уже делал. Зачастую модифицирую, иногда и очень сильно, под свои потребности и использую. При этом считаю, что соблюдение авторства все равно должно быть. Код обычно беру из общедоступных источников, когда авторы сами выложили для использования другими. Поскольку найти конструкции бывает затруднительно, а при повторении конструкций бывают малопонятные особенности, о которых Вы можете и не найти информации, то считаю, что выложить и подробно описать для чего это надо и как заставить работать ту или иную конструкцию — это нормально.