Найти тему
Serg SV

📙 Самодельный Генератор МЕАНДРА 1 Гц — 8 МГц на Arduino управляется с Компьютера -Лаборатория на MK (MK&PC)

Оглавление

Генератор прямоугольных импульсов на Arduino NANO управление c компьютера

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

Примеров использования генератора меандра

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

Кроме того, прямоугольный сигнал можно с успехом использовать для настройки аналоговых устройств, таких как усилители звуковой частоты. Например, используя генератор прямоугольных импульсов совместно с осциллографом. Можно очень легко проверить работоспособность регулятора тембра. Быстро оценить частотный диапазон УНЧ. Без дорогостоящих специальных приборов измерения АЧХ.

Можно даже проверить работоспособность радиоприемной аппаратуры.

Это связано с тем, что в спектре прямоугольного сигнала содержится огромное число гармоник. Теоретически, идеальный симметричный прямоугольный сигнал со скважностью 2 (он называется «Меандр») можно представить как сумму бесконечного числа синусоидальных сигналов — нечетных гармоник.

Например, если частота меандра равна 50 Гц, то он представляет из себя сумму синусоид (гармоник) с частотами 50 Гц, 150 Гц, 250 Гц и т. д. до «бесконечности».

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

Как просто Перестроить импульсный БП на другое напряжение заменив 1 Резистор

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

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

Схема генератора на Arduino

Принято считать, что генератор прямоугольных импульсов — это очень простое устройство. И действительно, генератор меандра можно собрать на паре логических элементов простой логической микросхемы типа CD4011. Но на самом деле это не совсем так. Если нам нужен качественный прямоугольный сигнал и точная установка его частоты в широком диапазоне частот, то генератор получается не такой уж и простой.

Мощный повышающий DC Преобразователь из 6В в 12В до 100 Вт

На мой взгляд, лучше всего собрать генератор прямоугольных сигналов на микроконтроллере. Еще лучше использовать для этого дешевую маленькую плату Aerduino Nano. В этом случае при подключении ардуинки к компьютеру мы сразу получаем в системе виртуальный COM порт. Через такой порт очень удобно управлять нашим генератором. При этом мы экономим на всяких кнопках, энкодерах и LCD дисплее. Для генератора нам потребуется только плата Arduino Nano и пара проводов. Нужно сказать, что генератор будет прекрасно работать и на других платах Arduino, например UNO. Я использую NANO в силу ее маленьких размеров и дешевизны.

Используемая плата Arduino

Микроконтроллер:  ATmega328 (ATmega168 в версиях до v3.0)
Тактовая частота: 16 MHz
Формат: minimal
Размер: 43.18 mm × 18.54 mm   
Хост Интерфейс: — USB/ FTDIFT232R
Напряжение питания: 5 V
Flash: 16/32 KB
EEPROM: 0.5/1 KB
SRAM: 1/2 KB
Цифровые I/O пины: 14  (6 — с функцией PWM)
Аналоговые входы: 6
Аналоговые выходы: нет
Примечание: — Это крошечная версия Arduino, которая работает с питанием от USB и построена с SMD микроконтроллером.

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

-2

Как видно из схемы, мы снимаем прямоугольный сигнал с ножки D9 платы Arduino. Второй провод выходного разъема подключаем к ножке GND (Земля) платы Ардуино.

Ардуино по отличной ЦЕНЕ

Arduino Nano оптом и в розницу по отличной ЦЕНЕ

Несмотря на свою крайнюю простоту генератор выдает качественный прямоугольный сигнал в довольно широком диапазоне частот: от 1 Герца до восьми Мегагерц. Шаг установки частоты — 1 Герц. Это действительно хорошие параметры для такого простого устройства. Точность задания частоты зависит только от качества кварцевого резонатора платы Ардуино.

Программа для микроконтроллера

Ниже приведен текст программы для Arduino. Скопируйте этот скетч и вставте его в Arduino IDE.

byte Lshift[] = {3,3,2,2};

void setup() {

Serial.begin(9600);

pinMode (9, OUTPUT); // выход генератора

//Регистр управления А таймера/счетчика1

TCCR1A=0;

//Регистр управления B таймера/счетчика1

TCCR1B=0;

}

void loop() {

static uint32_t UartFreq = 0; //Переменная для задания нужной частоты

uint32_t compare = OCR1A; //OCR1A - Регистры сравнения A выхода таймера/счетчика1

uint16_t divider = 1; //переменная коэфф. деления прескалера

float freqency;

if (Serial.available() > 0) {

UartFreq = Serial.parseInt(); //получаем значение частоты из сообщения UART

if (UartFreq <= 0 || UartFreq > F_CPU/2) { //Проверяем допустимый диапазон значений частоты

return; }

compare = (F_CPU / UartFreq /2 /divider); //вычисляем нужное значение OCR

for (byte i = 0; i < 4; i++) {

if (compare > 65536) {

divider <<= Lshift[i];

compare = F_CPU / UartFreq /2 /divider; }

else {

TCCR1B = (i + 1) | ( 1 << WGM12 );

break; } // CTC режим работы таймера

}

OCR1A = compare-1;

TCCR1A = 1 << COM1A0;

// Вывод значения частоты обратно в UART в подтверждение

//Следующие три строки можно закомментировать, эта информация

//не используется в программе управления

freqency = F_CPU / 2 / (OCR1A + 1) / divider;

if (freqency <10000) {

Serial.print("Частота на выходе= ");

Serial.print(freqency, 0);

Serial.println(" Hz ");

Serial.print(" Вы ввели частоту= ");

Serial.println(UartFreq);}

if (freqency >= 10000) {

Serial.print("Частота на выходе= ");

Serial.print(freqency / 1000, 3);

Serial.println(" kHz");

Serial.print(" Вы ввели частоту= ");

Serial.println(UartFreq);}

}

}

Выходной прямоугольный сигнал формируется на выводе D9 платы Arduino. Генерация осуществляется аппаратным способом с использованием модуля ШИМ микроконтроллера и, соответственно, 16-разрядного таймера Timer1.

В следующем отрывке текста программы контроллер постоянно «слушает» UART порт микроконтроллера в рабочем цикле.

При поступлении какой либо информации она преобразуется в число в строке:
UartFreq = Serial.parseInt();

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

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

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

Частично информация взята с сайта https://musbench.com

-3