ESP32 Управляемый LoRa Drone Engine: 10 шагов
ESP32 Управляемый LoRa Drone Engine: 10 шагов
Anonim
Image
Image
Демонстрация
Демонстрация

Сегодня мы обсуждаем двигатели для дронов, которые часто называют «бесщеточными». Они широко используются в авиамоделировании, в основном в дронах, из-за их мощности и высокой скорости вращения. Мы узнаем об управлении бесщеточным двигателем с помощью ESC и ESP32, выполнении аналогового срабатывания ESC с помощью внутреннего контроллера LED_PWM и использовании потенциометра для изменения скорости двигателя.

Шаг 1: демонстрация

Шаг 2. Используемые ресурсы

Используемые ресурсы
Используемые ресурсы
  • Перемычки для подключения
  • Wi-Fi LoRa 32
  • ESC-30A
  • Бесщеточный двигатель A2212 / 13t
  • USB-кабель
  • Потенциометр для управления
  • Протоборд
  • Источник питания

Шаг 3: Wifi LoRa 32- Распиновка

Wifi LoRa 32 - Распиновка
Wifi LoRa 32 - Распиновка

Шаг 4: ESC (электронная регулировка скорости)

ESC (Электронная регулировка скорости)
ESC (Электронная регулировка скорости)
ESC (Электронная регулировка скорости)
ESC (Электронная регулировка скорости)
  • Электронный регулятор скорости
  • Электронная схема для управления скоростью электродвигателя.
  • Управляется стандартным сервоуправлением с ШИМ 50 Гц.
  • Он изменяет скорость переключения сети полевых транзисторов (FET). Регулируя частоту переключения транзисторов, скорость двигателя изменяется. Скорость двигателя изменяется, регулируя синхронизацию импульсов тока, подаваемых на различные обмотки двигателя.
  • Характеристики:

Выходной ток: 30 А непрерывный, 40 А в течение 10 секунд

Шаг 5: Электронная регулировка скорости ESC (ESC)

Электронная регулировка скорости ESC (ESC)
Электронная регулировка скорости ESC (ESC)

Шаг 6: управление серводвигателем с ШИМ

ШИМ управление серводвигателем
ШИМ управление серводвигателем

Мы создадим сервопривод PWM для воздействия на ввод данных ESC, направив канал 0 LED_PWM для GPIO13, и будем использовать потенциометр для управления модуляцией.

Для захвата мы будем использовать потенциометр 10k в качестве делителя напряжения. Захват будет производиться на канале ADC2_5, доступном через GPIO12.

Шаг 7: Аналоговый захват

Аналоговый захват
Аналоговый захват
Аналоговый захват
Аналоговый захват

Аналого-цифровое преобразование

Преобразуем значения AD в ШИМ.

ШИМ сервопривода составляет 50 Гц, поэтому период импульса составляет 1/50 = 0,02 секунды или 20 миллисекунд.

Нам нужно действовать как минимум за 1–2 миллисекунды.

Когда ШИМ находится на уровне 4095, ширина импульса составляет 20 миллисекунд, что означает, что мы должны достичь максимума на 4095/10, чтобы достичь 2 миллисекунд, поэтому ШИМ должен получить 410 *.

И, по крайней мере, через 1 миллисекунду, следовательно, 409/2 (или 4095/20), ШИМ должен получить 205 *.

* Значения должны быть целыми числами.

Шаг 8: Схема - Подключения

Схема - Подключения
Схема - Подключения

Шаг 9: Исходный код

Заголовок

#include // Необходимое условие для Arduino 1.6.5 и последующее # include "SSD1306.h" // или сообщение #include "SSD1306Wire.h" // OLED_SDA - GPIO4 // OLED_SCL - GPIO15 // OLED_RST - GPIO16 #define SDA 4 #define SCL 15 #define RST 16 Дисплей SSD1306 (0x3c, SDA, SCL, RST); // Установка и установка изображения для объекта "display"

Переменные

const int freq = 50; const int canal_A = 0; const int resolucao = 12; const int pin_Atuacao_A = 13; const int Leitura_A = 12; int Potencia = 0; int leitura = 0; int ciclo_A = 0;

Настраивать

void setup () {pinMode (pin_Atuacao_A, ВЫХОД); ledcSetup (canal_A, freq, resolucao); ledcAttachPin (pin_Atuacao_A, canal_A); ledcWrite (canal_A, ciclo_A); display.init (); display.flipScreenVertical (); // Выполнить вертикальное отображение display.clear (); // установить или изменить настройки display.setTextAlignment (TEXT_ALIGN_LEFT); // установить шрифт для Arial 16 display.setFont (ArialMT_Plain_16); }

Петля

void loop () {leitura = analogRead (Leitura_A); ciclo_A = карта (лейтура, 0, 4095, 205, 410); ledcWrite (canal_A, ciclo_A); Potencia = map (leitura, 0, 4095, 0, 100); display.clear (); // ограничить буфер do display display.drawString (0, 0, String ("AD:")); display.drawString (32, 0, String (leitura)); display.drawString (0, 18, String ("ШИМ:")); display.drawString (48, 18, String (ciclo_A)); display.drawString (0, 36, String ("Potência:")); display.drawString (72, 36, String (потенция)); display.drawString (98, 36, String ("%")); display.display (); // почти нет отображения}

Шаг 10: файлы

Скачайте файлы

Я НЕТ

PDF