Меню

Генератор сигналов для arduino

Генерирование и чтение сигналов

Начнём с самого простого: генерация импульса заданной длины, такое часто бывает нужно. Проще всего сделать это на delay() и delayMicroseconds() :

Нужно помнить, что digitalWrite() сам по себе выполняется в районе 3.6 мкс (58 тактов процессора). Для ускорения можно использовать например библиотеку directIO или прямую работу с регистрами портов.

Генерирование квадратного сигнала

Программное

Квадратный сигнал может быть использован для тактирования и управления, а также для генерации звука через усилитель. Самый базовый пример, Blink, по сути тоже является генератором квадратного сигнала:

Если заменить 1000 например на 10 , то получится квадратный сигнал с частотой 50 Гц. Этот способ называется программной генерацией сигнала, то есть микроконтроллер своими силами считает время и сам вручную дёргает ногой. Это как мешает работе остального кода, так и остальной код может сбивать частоту. Такую генерацию можно сделать более мене асинхронной на миллисе:

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

Функция tone()

В ядре Arduino есть встроенная функция для полуаппаратной генерации квадратного сигнала – tone(pin, frequency, duration) :

  • pin – цифровой пин, с которого будет генерироваться сигнал.
  • frequency – частота в Герцах. Диапазон 31.. 8’000’000 Гц, целые числа. С увеличением частоты растёт шаг изменения реальной частоты.
  • duration – продолжительность сигнала в миллисекундах. Опциональный параметр, если не указывать – сигнал будет генерироваться всё время.

Для ручной остановки генерации сигнала можно вызвать noTone() . Также у генерации при помощи tone() есть особенности:

  • Генерация является полуаппаратной: пин дёргается МК “вручную” по прерыванию таймера, что на высокой частоте может чуть тормозить код.
  • Генерация использует Timer 2, перенастройка или использование его для других целей (включая ШИМ на пинах D3 и D11 у Nano) отключит активную генерацию или изменит её частоту.
    • При вызове tone() таймер перенастраивается на генерацию, то есть можно использовать таймер в своих целях между вызовами tone() .
  • Генерация работает только на одном пине в один момент времени, причём для включения генерации на другом пине нужно сначала отключить текущую генерацию, то есть вызвать noTone() .

ШИМ сигнал

Аппаратный таймер позволяет генерировать квадратный сигнал аппаратно и полностью асинхронно работе остального кода, не тратя ни такта процессорного времени: время считается самим таймером, и сам же таймер управляет состоянием ноги МК. Для генерации ШИМ сигнала в среде Arduino есть функция analogWrite(pin, duty) , подробнее мы говорили в ней в уроке про ШИМ. Чтобы сделать ШИМ квадратным, нужно запустить его с duty , равной 128 . Что касается частоты полученного сигнала, то Ардуино настраивает таймеры так, что частота в зависимости от таймера может быть 490 или 980 Гц. Частоту можно изменить с довольно большим шагом, об этом мы говорили в уроке про увеличение частоты ШИМ.

Аппаратный таймер

Можно вручную настроить аппаратный таймер на генерацию квадратного сигнала. Тонкости настройки регистров таймера мы в рамках этих уроков не разбираем, но это можно сделать и при помощи библиотеки, например GyverTimers. Работу библиотеки мы разбирали в уроке о прерываниях таймера. Данная библиотека позволяет настроить генерацию квадратного сигнала с максимально возможной точностью и частотой, а также поднять на одном таймере генерацию двух или трёх (Arduino MEGA) меандров со смещением по фазе. Пример:

ШИМ сигнал

Аппаратный

Для генерации ШИМ сигнала с заданным заполнением есть стандартная функция analogWrite(pin, duty) , подробнее обсуждали в уроке про ШИМ сигнал, а частоту можно изменить перенастройкой таймера, как в уроке об увеличении частоты ШИМ. На самом деле таймеры позволяют настроить ШИМ сигнал с более точной или более высокой частотой и другими диапазонами заполнения (до 10 бит), но в ядре Arduino это не предусмотрено. Если такое будет нужно, можно воспользоваться библиотекой GyverPWM. Пример:

Читайте также:  Генератор под нагрузкой пропадает зарядка

Программный

Программная генерация ШИМ сигнала может пригодиться, если не хватает лишнего таймера или частота ШИМ низкая и не повлияет на остальной код, а он на неё. Шим сигнал на миллисе можно организовать вот таким образом:

Полуаппаратный ШИМ

Можно снизить нагрузку на процессор, отдав счёт времени аппаратному таймеру. Примеры на базе GyverTimers:

Если не хватает количества стандартных ШИМ-выходов, можно поднять полуаппаратный ШИМ на таймере на несколько пинов сразу:

Библиотека Servo

Как известно, RC сервоприводы управляются при помощи ШИМ сигнала с частотой

50 Гц и длительностью импульса от

2500 микросекунд. В стандартной библиотеке Servo.h реализована генерация полуаппаратного ШИМ сигнала, причём количество пинов можно менять во время работы. Библиотеку можно использовать как генерацию ШИМ, если его параметры подходят для использования.

Чтение сигналов

Чтение цифрового сигнала сводится к измерению времени между его импульсами, то есть изменениями состояния HIGH-LOW: так можно измерить период и частоту квадратного сигнала, заполнение и частоту ШИМ и вообще любой другой сигнал.

Функция pulseIn()

В ядре Ардуино есть готовые функции для измерения импульсов:

    pulseIn(pin, value, timeout) – для импульсов от 10 мкс до

3 минут, работает на счёте тактов процессора, лучше работает при отключенных прерываниях, более точно измеряет короткие импульсы.
pulseInLong(pin, value, timeout) – для импульсов от 10 мкс до

3 минут, основано на micros() (т.е. на Таймере 0), не работает при отключенных прерываниях, более точно измеряет длинные импульсы.

Измеренная мной точность на коротких импульсах: 0.5 мкс

Обе функции возвращают длину импульса в микросекундах. Возвращают 0, если импульса не было и был достигнут тайм-аут. Обе функции блокирующие, то есть останавливают выполнение кода, пока не поймают импульс или не завершатся по тайм-ауту. Аргументы:

  • pin – цифровой пин (GPIO), на котором ожидается импульс.
  • value – направление импульса, HIGH или LOW .
  • timeout – тайм-аут ожидания импульса в микросекундах. Необязательный параметр, по умолчанию равен 1’000’000 мкс (1 секунда).

Как это работает: пусть мы настроили импульс на HIGH , функция будет ожидать изменение значения с LOW на HIGH . Если скачок с LOW на HIGH не произошёл за время, установленное тайм-аутом, функция завершит выполнение и вернёт 0.

Для превращения длины импульса (мкс) в частоту (Гц) достаточно поделить на него секунду (точнее, 1’000’000 мкс).

Измеряем сигналы вручную

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

Библиотека тахометра

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

Источник

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

Генератор частоты на Ардуино – это прибор для преобразования электрической энергии источника постоянного тока.

Что такое генератор

Генератор производит преобразование в энергию, не поддающуюся затуханию, для расчета и частоты и образованной формы электрических колебаний.

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

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

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

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

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

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

Читайте также:  Воздушные зазоры в генераторе

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

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

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

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

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

  1. Arduino Uno R3 в антистатической упаковке;
  2. Шилд DFRobot LCD Keypad Shield;
  3. Модуль генератора сигналов AD9850 DDS;
  4. Проводы для присоединения частей конструкции – 8 штук;
  5. USB-провод или кабель.

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

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

Код для Ардуино

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

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

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

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

Сборка генератора

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

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

Настройка

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

Выходные сигнальные волны снимаются с контактов генератора:

  • QOUT1,
  • QOUT2 (прямоугольный),
  • ZOUT1,
  • ZOUT2 (синусоидальный).

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

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

Проверка работы

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

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

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

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

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

Источник

Очень простой генератор из ардуины.

ТехнарьКто

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

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

Вопрос: Что такое генератор?
Ответ: Это устройство которое преобразует энергию источника питания в энергию выходных электрических импульсов заданной частоты и формы.

Читайте также:  Замена генератора audi q7 3 л дизель

Вопрос: А мне то это зачем?
Ответ: Очень хороший вопрос, ответ на который Вы вряд ли найдете в интернете. Вы сможете проверить работоспособность усилителя. Проверить диапазон воспроизводимых усилителем частот. Проверить целостность динамика, даже без усилителя с помощью только этого генератора. Найти обрыв силового провода в проводке, обрыв телефонного провода, обрыв в электропроводке автомобиля. Правда кроме генератора нужен будет еще и детектор сигнала. Для поиска обрыва проводки генератор присоединяют к исследуемой линии, а частота генератора лежит в пределах килогерца. Поиск производится детектором. По резкому уменьшения громкости звука, определяется место разрыва. Генератор позволит проверить работу микропроцессора ардуины или PIC контроллера при использовании его как тактового. Можно сделать звуковую сирену с тональностью сигнала который Вам нравиться. Сделать передатчик с использованием генератора в качестве задающего несущую частоту. Настроить фильтр низкой частоты, настроить фильтр высокой частоты, настроить режекторный фильтр. Фильтры используют в цветомузыке, в каскадах радиоприемников, в импульсной технике для защиты от помех, для очистки информационного сигнала от сопутствующих работе помех. Подать сигнал низкой частоты на устройства работающие на шине I2C и посмотреть обмен информации хоть с помощью вольтметра. С помощью генератора можно измерять индуктивность и емкость с очень высокой точностью. Да и вообще сейчас трудно назвать современное электронное устройство в котором нет генератора и для быстрой проверки работы устройства не требовался бы внешний генератор, хотя бы такой. Кроме этого при использовании генератора показывающего все знаки неизменно возникнет вопрос, почему во всех генераторах частота немного отличается. Поэтому этот генератор позволит заинтересоваться вопросом точности и что же такое ppm, ppb зачем и когда это нужно.

Подначка: Да я программу генератора на компьютере запущу. Че мне заморачиватся.
Ответ: Программы генераторов на компьютере для звуковых карт ограничены звуковой частотой. Мне будет очень любопытно узнать, как вы с генерируете сигнал хотя бы в мегагерц 1 000 000 Гц с помощью звуковой карты. С помощью этого генератора — легко.

Теперь Вы знаете зачем нужен генератор. Практические примеры использования выходят за рамки данного сообщения. Здесь только про создание самого генератора.

Итак схема.

Я же обещал очень простой генератор

На выход сигнала можно смело цеплять динамик для проверки его работоспособности. Без конденсатора можно сразу подавать сигнал на микроконтроллеры и электронные схемы у которых 5V питание.

Из терминала послать требуемую частоту в герцах. Только цифру. В ответ в терминал будет выведена частота в герцах, а на выходе генератора появиться сигнал с частотой как в терминале.
Пример для частоты 200 кГц. В терминале набирал 200000

Пример для частоты 8 мегагерц. В терминале набирал 8000000

Меандр кривой из за малого частотного диапазона осциллографа. Но это совершенно другой вопрос.

Надо понимать, что выводимая в терминале частота будет отличаться от реальной. Выводимая в терминале частота была бы при идеальном кварце работающем точно на частоте 16 000 000 Гц. У ардуин такого не бывает. Если кому интересно, то могу написать о кварцевых резонаторах. Для понимания, почему в ардуино не бывает точных кварцев.

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

Источник

Adblock
detector