ESP32 LoRa-gestuurde drone-engine - Ajarnpa
ESP32 LoRa-gestuurde drone-engine - Ajarnpa
Anonim
Image
Image
Demonstratie
Demonstratie

Vandaag hebben we het over dronemotoren, vaak "borstelloze" motoren genoemd. Ze worden veel gebruikt in aeromodellering, voornamelijk in drones, vanwege hun kracht en hoge rotatie. We leren over het besturen van een borstelloze motor met behulp van ESC en ESP32, het uitvoeren van een analoge bediening op de ESC met behulp van de interne LED_PWM-controller en het gebruik van een potentiometer om de motorsnelheid te wijzigen.

Stap 1: Demonstratie

Stap 2: Gebruikte bronnen

Gebruikte bronnen
Gebruikte bronnen
  • Jumpers voor verbinding
  • Wifi LoRa 32
  • ESC-30A
  • Borstelloze A2212 / 13t-motor
  • USB-kabel
  • Potentiometer voor controle
  • Protobord
  • Stroomvoorziening

Stap 3: Wifi LoRa 32- Pinout

Wifi LoRa 32- Pinout
Wifi LoRa 32- Pinout

Stap 4: ESC (elektronische snelheidsregeling)

ESC (elektronische snelheidsregeling)
ESC (elektronische snelheidsregeling)
ESC (elektronische snelheidsregeling)
ESC (elektronische snelheidsregeling)
  • Elektronische snelheidsregelaar
  • Elektronisch circuit om de snelheid van een elektromotor te regelen.
  • Aangestuurd vanuit een standaard 50Hz PWM-servobesturing.
  • Het varieert de schakelsnelheid van een netwerk van veldeffecttransistoren (FET's). Door de schakelfrequentie van de transistoren aan te passen, wordt het motortoerental gewijzigd. Het motortoerental wordt gevarieerd door de timing van de geleverde stroompulsen aan te passen aan de verschillende wikkelingen van de motor.
  • Specificaties:

Uitgangsstroom: 30A continu, 40A gedurende 10 seconden

Stap 5: ESC elektronische snelheidsregeling (ESC)

ESC Elektronische snelheidsregeling (ESC)
ESC Elektronische snelheidsregeling (ESC)

Stap 6: PWM servomotorbesturing

PWM servomotorbesturing
PWM servomotorbesturing

We zullen een PWM-servo maken om te reageren op ESC-gegevensinvoer door kanaal 0 van de LED_PWM voor de GPIO13 te sturen, en een potentiometer gebruiken om de modulatie te regelen.

Voor het vastleggen gebruiken we een potentiometer van 10k als spanningsdeler. De opname zal worden gedaan op kanaal ADC2_5, toegankelijk via GPIO12.

Stap 7: Analoge opname

Analoge opname
Analoge opname
Analoge opname
Analoge opname

Analoog naar digitaal conversie

We zullen de waarden van AD naar de PWM converteren.

De PWM van de servo is 50 Hz, dus de pulsperiode is 1/50 = 0,02 seconden of 20 milliseconden.

We moeten handelen in ten minste 1 milliseconde tot 2 milliseconden.

Wanneer de PWM 4095 is, is de pulsbreedte 20 milliseconden, wat betekent dat we het maximum bij 4095/10 moeten bereiken om 2 milliseconden te bereiken, dus PWM zou 410 * moeten ontvangen.

En na minimaal 1 milliseconde, dus 409/2 (of 4095/20), zou de PWM 205* moeten ontvangen.

* Waarden moeten gehele getallen zijn

Stap 8: Circuit - Aansluitingen

Circuit - Aansluitingen
Circuit - Aansluitingen

Stap 9: Broncode

kop

#include // Necessário apenas para o Arduino 1.6.5 en 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"

Variabelen

const int freq = 50;const int kanaal_A = 0; const int resolucao = 12; const int pin_Atuacao_A = 13; const int Leitura_A = 12; int potentiaal = 0; int leitura = 0; int ciclo_A = 0;

Opstelling

void setup(){ pinMode(pin_Atuacao_A, OUTPUT); ledcSetup(canal_A, freq, resolucao); ledcAttachPin (pin_Atuacao_A, kanaal_A); ledcWrite(canal_A, ciclo_A); weergave.init(); display.flipScreenVertical(); //Vira een tela verticalmente display.clear(); // ajusta of alinhamento para a esquerda display.setTextAlignment (TEXT_ALIGN_LEFT); //ajusta a fonte para Arial 16 display.setFont (ArialMT_Plain_16); }

Lus

void loop () { leitura = analogRead (Leitura_A); ciclo_A = kaart(leitura, 0, 4095, 205, 410); ledcWrite(canal_A, ciclo_A); potencia = kaart (leitura, 0, 4095, 0, 100); display.clear();//limpa o buffer 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("Potencia:")); display.drawString(72, 36, String(potencia)); display.drawString(98, 36, String("%")); weergave.weergave(); // de meeste geen weergave}

Stap 10: Bestanden

Download de bestanden

INO

PDF