Innholdsfortegnelse:

ESP32 LoRa -kontrollert dronemotor: 10 trinn
ESP32 LoRa -kontrollert dronemotor: 10 trinn

Video: ESP32 LoRa -kontrollert dronemotor: 10 trinn

Video: ESP32 LoRa -kontrollert dronemotor: 10 trinn
Video: LoRa - Long-Range Radio for IoT | Arduino, ESP32, RPI Pico 2024, November
Anonim
Image
Image
Demonstrasjon
Demonstrasjon

I dag diskuterer vi dronemotorer, ofte kalt "børsteløse" motorer. De er mye brukt i flymodellering, hovedsakelig i droner, på grunn av kraften og høy rotasjon. Vi lærer om å kontrollere en børsteløs motor ved bruk av ESC og ESP32, utføre en analog aktivering på ESC ved hjelp av den interne LED_PWM -kontrolleren og bruk av et potensiometer for å endre motorhastigheten.

Trinn 1: Demonstrasjon

Trinn 2: Ressurser brukt

Ressurser brukt
Ressurser brukt
  • Gensere for tilkobling
  • Wifi LoRa 32
  • ESC-30A
  • Børsteløs A2212 / 13t motor
  • USB-kabel
  • Potensiometer for kontroll
  • Protoboard
  • Strømforsyning

Trinn 3: Wifi LoRa 32- Pinout

Wifi LoRa 32- Pinout
Wifi LoRa 32- Pinout

Trinn 4: ESC (elektronisk hastighetskontroll)

ESC (elektronisk hastighetskontroll)
ESC (elektronisk hastighetskontroll)
ESC (elektronisk hastighetskontroll)
ESC (elektronisk hastighetskontroll)
  • Elektronisk hastighetsregulator
  • Elektronisk krets for å kontrollere hastigheten på en elektrisk motor.
  • Kontrollert fra en standard 50Hz PWM servokontroll.
  • Det varierer koblingshastigheten til et nettverk av felteffekttransistorer (FET -er). Ved å justere koblingsfrekvensen til transistorene, endres motorhastigheten. Motorhastigheten varieres ved å justere timingen for de medfølgende strømpulsene til motorens forskjellige viklinger.
  • Spesifikasjoner:

Utgangsstrøm: 30A kontinuerlig, 40A i 10 sekunder

Trinn 5: ESC Electronic Speed Control (ESC)

ESC elektronisk hastighetskontroll (ESC)
ESC elektronisk hastighetskontroll (ESC)

Trinn 6: PWM servomotorstyring

PWM servomotorstyring
PWM servomotorstyring

Vi vil lage en PWM -servo for å påvirke ESC -datainndata ved å dirigere kanal 0 på LED_PWM for GPIO13, og bruke et potensiometer for å kontrollere modulasjonen.

For fangst vil vi bruke et potensiometer på 10k som en spenningsdeler. Fangsten vil bli utført på kanal ADC2_5, tilgjengelig for GPIO12.

Trinn 7: Analog fangst

Analog fangst
Analog fangst
Analog fangst
Analog fangst

Analog til digital konvertering

Vi konverterer verdiene til AD til PWM.

PWM for servoen er 50Hz, så pulsperioden er 1/50 = 0,02 sekunder eller 20 millisekunder.

Vi må handle i minst 1 millisekund til 2 millisekunder.

Når PWM er på 4095, er pulsbredden 20 millisekunder, noe som betyr at vi bør nå maksimumet på 4095/10 for å nå 2 millisekunder, så PWM bør motta 410 *.

Og etter minst 1 millisekund, derfor 409/2 (eller 4095/20), bør PWM motta 205 *.

* Verdier må være heltall

Trinn 8: Krets - Tilkoblinger

Krets - Tilkoblinger
Krets - Tilkoblinger

Trinn 9: Kildekode

Overskrift

#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 -skjerm (0x3c, SDA, SCL, RST); // Instanciando e ajustando os pinos do objeto "display"

Variabler

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

Oppsett

ugyldig oppsett () {pinMode (pin_Atuacao_A, OUTPUT); ledcSetup (kanal_A, frekvens, oppløsning); ledcAttachPin (pin_Atuacao_A, kanal_A); ledcWrite (kanal_A, ciklo_A); display.init (); display.flipScreenVertically (); // Vira a tela verticalmente display.clear (); // ajusta o alinhamento para a esquerda display.setTextAlignment (TEXT_ALIGN_LEFT); // ajusta a fonte for Arial 16 display.setFont (ArialMT_Plain_16); }

Løkke

void loop () {leitura = analogRead (Leitura_A); ciclo_A = kart (leitura, 0, 4095, 205, 410); ledcWrite (kanal_A, ciklo_A); potencia = kart (leitura, 0, 4095, 0, 100); display.clear (); // limpa o buffer vis 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 ("Potência:")); display.drawString (72, 36, String (potencia)); display.drawString (98, 36, String ("%")); display.display (); // mostra no display}

Trinn 10: Filer

Last ned filene

INO

PDF

Anbefalt: