В статье будет рассмотрен и описан простой процесс сборки полезного генератора импульсов для изучения катушек индуктивности и других экспериментов.Отличие такого генератора от распространённых ШИМ-генераторов в том, что у данного генератора имеется возможность задавать отдельно длительность импульса и отдельно длительность паузы, а также количество последовательно идущих импульсов и пауз. Имеется также возможность получения полноценного регулируемого повторяющегося во времени сигнала.Все перечисленные возможности реализованы через код. Для создания генератора понадобится Arduino Nano/Uno, две тактильные кнопки, LCD-дисплей и установленная на ПК программа Arduino IDE.Схема подключения изображена на рисунке 1.рис.1Для удобства подключения и использования Arduino Nano можно применить такую плату расширения (рис. 2). Очень удобно, есть рядом расположенные необходимые выводы для подключения LCD-дисплея. У каждого сигнального пина рядом есть отдельный пин GND и +5V. рис.2Вначале необходимо скачать и установить Arduino IDE. Далее необходима библиотека LiquidCrystal I2C, автор Frank de Brabander, библиотека необходима для работы дисплея. Это можно сделать, зайдя в Tools - Manage Libraries…. (рис.3). рис.3На данном этапе у вас должны быть в наличии: I2C LCD 2004 дисплей, две тактильные кнопки, Arduino Nano или Uno. И установлена на компьютер Arduino IDE, добавлена библиотека LiquidCrystal I2C. Рассмотрим возможности генератора импульсов (рис.4) и (рис.1). рис.4Кнопка 1. Длинное нажатие (0,4 сек) служит для выбора цифровой ячейки по горизонтали.Кнопка 1. Короткое нажатие задаёт цифровое значение в выделенной ячейке.Кнопка 2. По короткому нажатию идёт выбор строки. Выделение текущей ячейки опускается сверху в низ, дойдя до самого низа, выделение возвращается в верхнюю ячейку.Кнопка 2. Длинное нажатие выдаёт сигнал или пачку сигналов в режиме Burst на вывод 9 Arduino.Pulse. Задаётся длительность импульса в микросекундах. Рабочий диапазон от единиц микросекунд до 16000 микросекунд.Pause. Задаётся длительность паузы в микросекундах. Рабочий диапазон от единиц микросекунд до 16000 микросекунд.Mode. Здесь задаётся один из двух режимов. В данном примере это Burst, то есть режим одиночного импульса или последовательности из нескольких импульсов и пауз. Переключение режимов происходит по быстрому нажатию на кнопку 1.Burst. В этой строчке задаётся количество последовательно идущих импульсов и пауз. По умолчанию стоит 1, это значит, что данный режим работы, — это генератор одиночного импульса. Если поставить 2, то мы получим два импульса и две паузы. Если 3, то три импульса и три паузы и т.д. При этом после последней паузы генерация выключается, а значит, отчётливой границы последней паузы не будет видно, пример: (рис.6,7).Для переключения к настройкам повторяющегося сигнала необходимо опуститься в то место дисплея, где написано Mode, и далее короткое нажатие на кнопку 1. Режим Burst изменится на Continuous (рис.5).рис.5В режиме Continuous имеется возможность задавать длительность импульсов и отдельно пауз. И выводить повторяющийся сигнал. Режим Continuous работает в реальном времени. Без необходимости запускать повторяющийся сигнал и изменения кнопкой.Данный генератор создавался с целью изучения катушек индуктивности. Он создавался и рассчитан не на прямое подключение к полевому транзистору, а на подключение через оптопару и драйвер затвора. В моём случае это 6N137 и TC4420. Поэтому логика работы генератора инвертированная: то есть когда MOSFET закрыт, на выводе 9 Arduino — 5 вольт.Пример работы. Генератор выдаёт 1 импульс (Pulse) длительностью 100 микросекунд (рис6).рис.6Пример работы. Генератор выдаёт 3 последовательных импульсов и пауз. Длительность импульса (Pulse) 100 микросекунд, длительность паузы (Pause) 50 микросекунд. При этом после последней паузы генерация выключается, поэтому последняя пауза всегда не разделяется (рис. 7). рис.7Пример работы. Генератор в режиме Continuous. 200 микросекунд длительность импульса (Pulse) и 450 микросекунд длительность паузы (Pause), — это бесконечно повторяющийся режим (рис. 8). рис.8Для завершения создания этого генератора импульсов достаточно загрузить предоставленный код в Arduino IDE. Для этого подключите Arduino Nano через USB-кабель к компьютеру, откройте Arduino IDE, выберите Arduino Nano/Uno, выберите COM-порт к которому подключена Arduino Nano/Uno. Необходимое выделено на (рис. 9). Загрузите код, нажмите вверху "Загрузка" (Upload). рис.9Если после загрузки кода на дисплее не появилась информация, то в начале кода измените адрес на "0x3F" (без кавычек). Смотрите (рис. 10). рис.10#include #include LiquidCrystal_I2C lcd(0x27, 20, 4); // Адрес I2C дисплея (подставьте свой при необходимости)// —------— Пины —--------const int button1Pin = 3; // Кнопка 1 (короткое: изменение цифры, длинное: переход на следующую цифру)const int button2Pin = 4; // Кнопка 2 (короткое: выбор раздела, длинное: запуск Burst)const int outputPin = 9; // Выход на оптопару (ШИМ/импульсы)// —------— Параметры генерации —--------unsigned long pulseWidth = 100; // Длительность импульса (мкс)unsigned long pauseWidth = 100; // Длительность паузы (мкс)unsigned long burstCount = 1; // Число импульсов в пачке (Burst)// Символьные представления для ввода (6 цифр)char pulseDigits[6] = {'0', '0', '0', '1', '0', '0'}; // "000100" -> 100 мксchar pauseDigits[6] = {'0', '0', '0', '1', '0', '0'};char burstDigits[6] = {'0', '0', '0', '0', '0', '1'}; // "000001" -> 1 импульс// —------— Интерфейс —--------int currentSection = 0; // 0 = pulse, 1 = pause, 2 = mode, 3 = burst count (только в Burst-режиме)int currentDigit = 0; // Индекс редактируемой цифры (0-5)int mode = 1; // 0 = Continuous, 1 = Burstvolatile bool generating = false; // Флаг активной генерации пачки// —------— Дребезг кнопок —--------int button1State = HIGH, lastButton1Reading = HIGH;unsigned long lastDebounceTime1 = 0, button1PressTime = 0;int button2State = HIGH, lastButton2Reading = HIGH;unsigned long lastDebounceTime2 = 0, button2PressTime = 0;const unsigned long debounceDelay = 50; // мсconst unsigned long longPressThreshold = 400; // мс (удержание кнопки)// —------— Вспомогательные функции —--------unsigned long getValue(char* digits) { unsigned long val = 0; for (int i = 0; i < 6; i++) { val = val * 10 + (digits[i] - '0'); } return (val == 0) ? 1 : val; // 000000 интерпретируется как 1 мкс}// Настройка аппаратного ШИМ (режим Continuous)void configureTimer() { unsigned long period_us = pulseWidth + pauseWidth; if (period_us > 1000000) period_us = 1000000; // ограничение 1 сек uint16_t prescaler; uint8_t cs_bits; double tick_us; if (period_us debounceDelay) { if (reading1 != button1State) { button1State = reading1; if (button1State == LOW) { button1PressTime = millis(); // нажали } else { // Отпустили кнопку unsigned long duration = millis() - button1PressTime; bool paramsChanged = false; if (currentSection == 0 || currentSection == 1 || (currentSection == 3 && mode == 1)) { char* digits = (currentSection == 0) ? pulseDigits : (currentSection == 1) ? pauseDigits : burstDigits; if (duration < longPressThreshold)...
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | 🤔итак я уже все попробовал создать акромя двигателя магнитной струны. ... | -2 | 3 | 15-07-2026 |
| 2 | [Перевод] Самодельный дисплей, отображающий картинку в воздухе | 0 | 6 | 22-06-2026 |
| 3 | Студент-электронщик превратил дребезжание дроссельных катушек в музыку | 5 | 7 | 19-07-2026 |
| 4 | 📜 Тестирование №51969 [Км-4. переходные процессы в линейных электрических цепях. ... | 0 | 15.87 | 27-07-2026 |
| 5 | Сенсорный монитор своими руками | 0 | 7.23 | 24-09-2004 |
| 6 | LCD, PDP, LEP мониторы | 0 | 9.12 | 17-03-2001 |
| 7 | LCD монитор Hyundai ImageFlat LM1510A | 0 | 9.31 | 22-06-2001 |
| 8 | Ну, Gemini больше ничего не принимает, просто зависает и ничего ... | -2 | 4 | 07-07-2026 |
| 9 | Создан насос для перекачивания жидкости с помощью магнитного поля | 0 | 0 | 02-06-2025 |