на главную
Карта сайта
English version
Вы читаете:

Генератор прямоугольных импульсов

Измерительная техника
6 лет назад

Генератор прямоугольных импульсов на АРДУИНО

2

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

На практике в составе цифровых схем применяются преимущественно генераторы прямоугольных импульсов.

Как их собрать на базе кварцевых, аналоговых и (или) с применением логических (цифровых) элементов, мы рассмотрели в отдельном материале.

Здесь подробно раскроем вопрос сборки на базе программируемых микросхем.

 

Задачи программируемых генераторов

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

Кроме того, такие ГТИ могут:

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

2.Калибровать осциллограф (в лабораториях и учебных заведениях);

3.Использоваться в авторских проектах;

4.И др.

 

Особенности "железа"

Каким бы точным ни был "конструктор" Arduino, используемые в нем микросхемы имеют свои ограничения:

1.Собственная тактовая частота;

2.Время реакции может на одни и те же функции может отличаться в зависимости от выбранной базы (Nano, Uno, Mega и т.п.);

3.Управление импульсами может отличаться в зависимости от используемой в программе основной управляющей функции.

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

Стоимость решений на Arduino чаще заметно выше аналогичных на базе простых или цифровых радиоэлементов. Поэтому ГТИ на Ардуино подходят только для узкоспециализированных задач.

 

Простая схема ГТИ на Arduino

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

Схема собирается даже на простой макетной плате. Понадобятся:

1.Энкодер (как альтернатива – 3 отдельные кнопки);

2.Микросхема на базе atmega328 (это может быть Arduino UNO, Nano или MiniPro);

3.Макетная плата;

4.Отдельная кнопка (или второй энкодер);

5.Дисплей от Nokia 5110 (совместимый с макетными платами, такие имеются в продаже);

6.Программатор для прошивки Arduino;

7.Конденсаторы (по количеству пинов энкодеров) - 0,01..0,1uf.

Конечный вид устройства может быть таким (как один из вариантов).

Внешний вид устройства

Рис. Внешний вид устройства

 

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

Скретч-файл можно найти во вложениях. Там же макет печатной платы (dip).
Устройство формирует на выходе меандр в диапазоне 1 – 8000000 Гц.

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

 

Другие варианты и примечания

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

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

delay(миллисекунды) – эта команда остановит программу на указанное количество миллисекунд. Здесь важно понимать, что остановится вся программа, то есть ни порты, ни устройства ввода/вывода отвечать не будут.

delayMicroseconds() – аналогичная предыдущей команда, но работающая с микросекундами. Указываемый промежуток не должен превышать 16383 микросекунды.

millis() – выводит промежуток времени, который прошел от начала работы процесса в миллисекундах.

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

Для работы с быстрыми частотами необходимо обращаться непосредственно к встроенному таймеру (OCR1A).

Для упрощения написания программы можно подключить готовую библиотеку, например, arduino-timer-api (размещена она здесь - https://github.com/sadr0b0t/arduino-timer-api/)

Тогда код будет выглядеть так:

#include"timer-api.h"
void setup() {
    Serial.begin(9600);
    // частота=1Гц, период=1с
    timer_init_ISR_1Hz(TIMER_DEFAULT);
    pinMode(13, OUTPUT);
}

Схему устройства и программу на базе АРДУИНО можно скачать здесь.

Автор: RadioRadar

Мнения читателей
  • valera/11.03.2019 - 17:37

    этот код всегда даёт ошибку компиляции.

  • Василий/22.10.2018 - 20:26

    Привет.Можно заменить дисплей на Nokia 3310 ?