Motor de dronă controlat ESP32 LoRa: 10 pași
Motor de dronă controlat ESP32 LoRa: 10 pași
Anonim
Image
Image
Demonstrație
Demonstrație

Astăzi discutăm despre motoarele cu drone, numite frecvent motoare „fără perii”. Sunt utilizate pe scară largă în aeromodelism, în principal în drone, datorită puterii și rotației ridicate. Vom afla despre controlul unui motor fără perii folosind ESC și ESP32, efectuarea unei acționări analogice pe ESC folosind controlerul intern LED_PWM și utilizarea unui potențiometru pentru a modifica viteza motorului.

Pasul 1: demonstrație

Pasul 2: Resurse utilizate

Resurse utilizate
Resurse utilizate
  • Jersee pentru conexiune
  • Wifi LoRa 32
  • ESC-30A
  • Motor fără perii A2212 / 13t
  • cablu USB
  • Potențiometru pentru control
  • Protoboard
  • Alimentare electrică

Pasul 3: Wifi LoRa 32- Pinout

Wifi LoRa 32- Pinout
Wifi LoRa 32- Pinout

Pasul 4: ESC (Control electronic al vitezei)

ESC (Control electronic al vitezei)
ESC (Control electronic al vitezei)
ESC (Control electronic al vitezei)
ESC (Control electronic al vitezei)
  • Controler electronic de viteză
  • Circuit electronic pentru controlul vitezei unui motor electric.
  • Controlat de la un servo control PWM de 50Hz standard.
  • Variază rata de comutare a unei rețele de tranzistoare cu efect de câmp (FET). Prin ajustarea frecvenței de comutare a tranzistoarelor, viteza motorului este modificată. Viteza motorului variază prin ajustarea temporizării impulsurilor de curent furnizate la diferitele înfășurări ale motorului.
  • Specificații:

Curent de ieșire: 30A continuu, 40A timp de 10 secunde

Pasul 5: Control electronic al vitezei ESC (ESC)

Control electronic al vitezei ESC (ESC)
Control electronic al vitezei ESC (ESC)

Pasul 6: PWM Servo Motor Control

Control servomotor PWM
Control servomotor PWM

Vom crea un servo PWM pentru a acționa asupra datelor de intrare ESC direcționând canalul 0 al LED_PWM pentru GPIO13 și vom folosi un potențiometru pentru a controla modulația.

Pentru captură, vom folosi un potențiometru de 10k ca divizor de tensiune. Captura se va face pe canalul ADC2_5, accesibil de GPIO12.

Pasul 7: Captură analogică

Captură analogică
Captură analogică
Captură analogică
Captură analogică

Conversie analog-digital

Vom converti valorile AD în PWM.

PWM al servo-ului este de 50Hz, deci perioada de impuls este de 1/50 = 0,02 secunde sau 20 de milisecunde.

Trebuie să acționăm în cel puțin 1 milisecundă până la 2 milisecunde.

Când PWM este la 4095, lățimea impulsului este de 20 milisecunde, ceea ce înseamnă că ar trebui să atingem maximul la 4095/10 pentru a ajunge la 2 milisecunde, deci PWM ar trebui să primească 410 *.

Și după cel puțin 1 milisecundă, deci 409/2 (sau 4095/20), PWM ar trebui să primească 205 *.

* Valorile trebuie să fie întregi

Pasul 8: Circuit - Conexiuni

Circuit - Conexiuni
Circuit - Conexiuni

Pasul 9: Cod sursă

Antet

#include // Necessário apenas for o Arduino 1.6.5 e posterior # include "SSD1306.h" // o mesmo que #include "SSD1306Wire.h" // OLED_SDA - GPIO4 // OLED_SCL - GPIO15 // OLED_RST - GPIO16 #define SDA 4 #define SCL 15 #define RST 16 SSD1306 display (0x3c, SDA, SCL, RST); // Instanciando e ajustando os pinos do object "display"

Variabile

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;

Înființat

void setup () {pinMode (pin_Atuacao_A, OUTPUT); ledcSetup (canal_A, freq, resolucao); ledcAttachPin (pin_Atuacao_A, canal_A); ledcWrite (canal_A, ciclo_A); display.init (); display.flipScreenVertically (); // Vira a tela verticalmente display.clear (); // ajusta o aliniament pentru a afișa stânga.setTextAlignment (TEXT_ALIGN_LEFT); // ajusta a fonte pentru Arial 16 display.setFont (ArialMT_Plain_16); }

Buclă

void loop () {leitura = analogRead (Leitura_A); ciclo_A = map (leitura, 0, 4095, 205, 410); ledcWrite (canal_A, ciclo_A); potencia = map (leitura, 0, 4095, 0, 100); display.clear (); // limpa o buffer do display display.drawString (0, 0, String ("AD:")); display.drawString (32, 0, String (leitura)); display.drawString (0, 18, String ("PWM:")); display.drawString (48, 18, String (ciclo_A)); display.drawString (0, 36, String ("Potenzia:")); display.drawString (72, 36, String (potencia)); display.drawString (98, 36, Șir ("%")); display.display (); // mostra no display}

Pasul 10: Fișiere

Descărcați fișierele

EU NU

PDF