Меню Закрыть

Простой генератор на ардуино

Содержание

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

Генератор сигналов своими руками на 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 и затем преобразовать его в синусоидальную волну.

Читайте также:  Менеджер web сервисов решает задачу

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

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

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

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

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

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

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

Читайте также:  Kyocera 1025 сетевое сканирование

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

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

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

Сайт для радиолюбителей

Генератор прямоугольных импульсов в своей основе использует библиотеку TimerOne, возможности библиотеки позволяют генерировать сигнал ШИМ на выводе 9 в диапазоне от 1 мкс до 8,3 сек, в частности в генераторе диапазон ограничен до 200 мс (5 Гц), при желании диапазон можно увеличить до 8,3 сек. Так можно регулировать скважность от 0 до 1023 единиц (10-бит), что соответствует 0 и 100%.

В генераторе импульсов имеется возможность регулировки периода следования импульсов при помощи кнопок подключенных к цифровым входам 6 и 7 Arduino. 13 вход позволяет регулировать скважность (коэффициент заполнения). Возможно кнопочное управление не самое разумное решение, но на данный момент реализована только такая функция.

Для удобства показания длительности и скважности выведены на первый ряд индикатора LCD 16×2, во втором ряду выведены показания частоты. Важно помнить что минимальный шаг регулировки периода следования импульсов 1 мкс, поэтому частота будет меняться дискретно, например 1 мкс это 1 МГц, 2 мкс — 500 кГц, 3 мкс это 333,333 Гц и так далее, по мере уменьшения частоты увеличивается плавность ее регулировки.

Генератор нуждается в доработке, поэтому со временем поменяются органы регулировки, добавятся новые функции.

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.