Sommario:

Motore drone ESP32 LoRa controllato: 10 passaggi
Motore drone ESP32 LoRa controllato: 10 passaggi

Video: Motore drone ESP32 LoRa controllato: 10 passaggi

Video: Motore drone ESP32 LoRa controllato: 10 passaggi
Video: 😨COMUNICAZIONE LONG RANGE con ESP32 fino a 10Km - INVIO e RICEZIONE DATI 2024, Dicembre
Anonim
Image
Image
Dimostrazione
Dimostrazione

Oggi parliamo di motori per droni, spesso chiamati motori "brushless". Sono ampiamente utilizzati nell'aeromodellismo, principalmente nei droni, grazie alla loro potenza e all'elevata rotazione. Impareremo a controllare un motore brushless utilizzando ESC ed ESP32, eseguendo un'attuazione analogica sull'ESC utilizzando il controller LED_PWM interno e utilizzando un potenziometro per modificare la velocità del motore.

Passaggio 1: dimostrazione

Passaggio 2: risorse utilizzate

Risorse utilizzate
Risorse utilizzate
  • Ponticelli per il collegamento
  • Wi-Fi LoRa 32
  • ESC-30A
  • Motore senza spazzole A2212 / 13t
  • cavo USB
  • Potenziometro per il controllo
  • Protoboard
  • Alimentazione elettrica

Passaggio 3: Wifi LoRa 32- Pinout

Wifi LoRa 32- Pinout
Wifi LoRa 32- Pinout

Passaggio 4: ESC (controllo elettronico della velocità)

ESC (controllo elettronico della velocità)
ESC (controllo elettronico della velocità)
ESC (controllo elettronico della velocità)
ESC (controllo elettronico della velocità)
  • Regolatore di velocità elettronico
  • Circuito elettronico per il controllo della velocità di un motore elettrico.
  • Controllato da un servocomando PWM standard a 50 Hz.
  • Varia la velocità di commutazione di una rete di transistor ad effetto di campo (FET). Regolando la frequenza di commutazione dei transistor, viene modificata la velocità del motore. La velocità del motore viene variata regolando la temporizzazione degli impulsi di corrente forniti ai vari avvolgimenti del motore.
  • Specifiche:

Corrente di uscita: 30 A continui, 40 A per 10 secondi

Passaggio 5: controllo elettronico della velocità ESC (ESC)

ESC Controllo elettronico della velocità (ESC)
ESC Controllo elettronico della velocità (ESC)

Passaggio 6: controllo del servomotore PWM

Controllo del servomotore PWM
Controllo del servomotore PWM

Creeremo un servo PWM per agire sull'ingresso dei dati ESC dirigendo il canale 0 del LED_PWM per il GPIO13 e utilizzeremo un potenziometro per controllare la modulazione.

Per la cattura utilizzeremo un potenziometro da 10k come divisore di tensione. La cattura verrà effettuata sul canale ADC2_5, accessibile da GPIO12.

Passaggio 7: acquisizione analogica

Acquisizione analogica
Acquisizione analogica
Acquisizione analogica
Acquisizione analogica

Conversione da analogico a digitale

Convertiremo i valori di AD in PWM.

Il PWM del servo è 50Hz, quindi il periodo dell'impulso è 1/50 = 0,02 secondi o 20 millisecondi.

Dobbiamo agire in almeno 1 millisecondo a 2 millisecondi.

Quando il PWM è a 4095, l'ampiezza dell'impulso è di 20 millisecondi, il che significa che dovremmo raggiungere il massimo a 4095/10 per raggiungere 2 millisecondi, quindi il PWM dovrebbe ricevere 410 *.

E dopo almeno 1 millisecondo, quindi 409/2 (o 4095/20), il PWM dovrebbe ricevere 205 *.

* I valori devono essere interi

Passaggio 8: Circuito - Connessioni

Circuito - Collegamenti
Circuito - Collegamenti

Passaggio 9: codice sorgente

Intestazione

#include // Necessário apenas para 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 objeto "display"

Variabili

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 potenza = 0; int leitura = 0; int ciclo_A = 0;

Impostare

void setup(){ pinMode(pin_Atuacao_A, OUTPUT); ledcSetup(canale_A, freq, resolucao); ledcAttachPin(pin_Atuacao_A, canal_A); ledcWrite(canale_A, ciclo_A); display.init(); display.flipScreenVerticalmente(); //Vira una tela verticalmente display.clear(); //aggiusta o modifica per un'esquerda display.setTextAlignment(TEXT_ALIGN_LEFT); //aggiusta una fonte per Arial 16 display.setFont(ArialMT_Plain_16); }

Ciclo continuo

void loop() { leitura = analogRead(Leitura_A); ciclo_A = map(leitura, 0, 4095, 205, 410); ledcWrite(canale_A, ciclo_A); potenza = 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("Potenza:")); display.drawString(72, 36, String(potenza)); display.drawString(98, 36, String("%")); display.display(); //mostra nessuna visualizzazione }

Passaggio 10: file

Scarica i file

IO NO

PDF

Consigliato: