ESP32 LoRa контролиран дрон двигател: 10 стъпки
ESP32 LoRa контролиран дрон двигател: 10 стъпки
Anonim
Image
Image
Демонстрация
Демонстрация

Днес обсъждаме безпилотни двигатели, често наричани „безчеткови“двигатели. Те се използват широко в авиационното моделиране, главно в дронове, поради тяхната мощност и висока ротация. Ще научим как да управляваме безчетков двигател с помощта на ESC и ESP32, да извършваме аналогично задействане на ESC с помощта на вътрешния контролер LED_PWM и да използваме потенциометър за промяна на скоростта на двигателя.

Стъпка 1: Демонстрация

Стъпка 2: Използвани ресурси

Използвани ресурси
Използвани ресурси
  • Джъмпери за свързване
  • Wi -Fi LoRa 32
  • ESC-30A
  • Безчетков двигател A2212 / 13t
  • USB кабел
  • Потенциометър за управление
  • Protoboard
  • Захранване

Стъпка 3: Wifi LoRa 32- Pinout

Wi-Fi LoRa 32- Pinout
Wi-Fi LoRa 32- Pinout

Стъпка 4: ESC (електронен контрол на скоростта)

ESC (електронен контрол на скоростта)
ESC (електронен контрол на скоростта)
ESC (електронен контрол на скоростта)
ESC (електронен контрол на скоростта)
  • Електронен регулатор на скоростта
  • Електронна схема за управление на скоростта на електродвигател.
  • Управлява се от стандартно 50Hz PWM серво управление.
  • Той променя скоростта на превключване на мрежа от полеви транзистори (FET). Чрез регулиране на честотата на превключване на транзисторите се променя скоростта на двигателя. Скоростта на двигателя се променя чрез регулиране на времето на подаваните токови импулси към различните намотки на двигателя.
  • Спецификации:

Изходен ток: 30А непрекъснато, 40А за 10 секунди

Стъпка 5: ESC Електронен контрол на скоростта (ESC)

ESC Електронен контрол на скоростта (ESC)
ESC Електронен контрол на скоростта (ESC)

Стъпка 6: Управление на PWM серво мотора

PWM управление на серво мотора
PWM управление на серво мотора

Ще създадем PWM серво, което да действа при въвеждане на ESC данни, като насочим канал 0 на LED_PWM за GPIO13 и ще използваме потенциометър за управление на модулацията.

За улавяне ще използваме потенциометър от 10k като делител на напрежение. Заснемането ще се извърши по канал ADC2_5, достъпен от GPIO12.

Стъпка 7: Аналогово улавяне

Аналогово улавяне
Аналогово улавяне
Аналогово улавяне
Аналогово улавяне

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

Ще преобразуваме стойностите на AD в PWM.

ШИМ на серво е 50Hz, така че периодът на импулса е 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 e posterior #включва "SSD1306.h" // o mesmo que #include "SSD1306Wire.h" // OLED_SDA -GPIO4 // OLED_SCL -GPIO15 // OLED_RST - GPIO16 #дефинира SDA 4 #дефинира SCL 15 #дефинира RST 16 SSD1306 дисплей (0x3c, SDA, SCL, RST); // Instanciando e ajustando os pinos do objeto "display"

Променливи

const int freq = 50; const int канал_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, OUTPUT); ledcSetup (channel_A, freq, resolucao); ledcAttachPin (pin_Atuacao_A, canal_A); ledcWrite (channel_A, ciclo_A); display.init (); display.flipScreenVertical (); // Vira a tela verticalmente display.clear (); // ajusta o alinhamento за esquerda display.setTextAlignment (TEXT_ALIGN_LEFT); // добавяне на фон за Arial 16 display.setFont (ArialMT_Plain_16); }

Цикъл

void loop () {leitura = analogRead (Leitura_A); ciclo_A = карта (leitura, 0, 4095, 205, 410); ledcWrite (channel_A, ciclo_A); potencia = карта (leitura, 0, 4095, 0, 100); display.clear (); // ограничение или буфер за показване 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 (potencia)); display.drawString (98, 36, String ("%")); display.display (); // mostra без дисплей}

Стъпка 10: Файлове

Изтеглете файловете

АЗ НЕ

PDF

Препоръчано: