ESP32 LoRa Controlled Drone Engine: 10 Βήματα
ESP32 LoRa Controlled Drone Engine: 10 Βήματα
Anonim
Image
Image
Επίδειξη
Επίδειξη

Σήμερα συζητάμε για κινητήρες μη επανδρωμένων αεροσκαφών, που συχνά ονομάζονται κινητήρες χωρίς ψήκτρες. Χρησιμοποιούνται ευρέως σε αερομοντελισμό, κυρίως σε drones, λόγω της ισχύος και της υψηλής περιστροφής τους. Θα μάθουμε για τον έλεγχο ενός κινητήρα χωρίς ψήκτρες χρησιμοποιώντας ESC και ESP32, την πραγματοποίηση αναλογικής ενεργοποίησης στο ESC χρησιμοποιώντας τον εσωτερικό ελεγκτή LED_PWM και τη χρήση ενός ποτενσιόμετρου για την αλλαγή της ταχύτητας του κινητήρα.

Βήμα 1: Επίδειξη

Βήμα 2: Χρησιμοποιημένοι πόροι

Πόροι που χρησιμοποιήθηκαν
Πόροι που χρησιμοποιήθηκαν
  • Μπλουζάκια για σύνδεση
  • Wifi LoRa 32
  • ESC-30A
  • Κινητήρας χωρίς ψήκτρες A2212 / 13t
  • καλώδιο USB
  • Ποτενσιόμετρο για έλεγχο
  • Protoboard
  • Παροχή ηλεκτρικού ρεύματος

Βήμα 3: Wifi LoRa 32- Pinout

Wifi LoRa 32- Pinout
Wifi LoRa 32- Pinout

Βήμα 4: ESC (ηλεκτρονικός έλεγχος ταχύτητας)

ESC (ηλεκτρονικός έλεγχος ταχύτητας)
ESC (ηλεκτρονικός έλεγχος ταχύτητας)
ESC (ηλεκτρονικός έλεγχος ταχύτητας)
ESC (ηλεκτρονικός έλεγχος ταχύτητας)
  • Ηλεκτρονικός ελεγκτής ταχύτητας
  • Ηλεκτρονικό κύκλωμα για τον έλεγχο της ταχύτητας ενός ηλεκτροκινητήρα.
  • Ελέγχεται από ένα τυπικό σερβο ελέγχου PWM 50Hz.
  • Μεταβάλλει το ρυθμό μεταγωγής ενός δικτύου τρανζίστορ φαινομένου πεδίου (FET). Ρυθμίζοντας τη συχνότητα μεταγωγής των τρανζίστορ, αλλάζει η ταχύτητα του κινητήρα. Η ταχύτητα του κινητήρα μεταβάλλεται προσαρμόζοντας το χρονισμό των παρεχόμενων παλμών ρεύματος στις διάφορες περιελίξεις του κινητήρα.
  • Προδιαγραφές:

Ρεύμα εξόδου: 30A συνεχές, 40A για 10 δευτερόλεπτα

Βήμα 5: ESC Electronic Speed Control (ESC)

ESC Electronic Speed Control (ESC)
ESC Electronic Speed Control (ESC)

Βήμα 6: Έλεγχος σερβοκινητήρα PWM

PWM Servo Motor Control
PWM Servo Motor Control

Θα δημιουργήσουμε ένα σερβο PWM για να ενεργούμε στην εισαγωγή δεδομένων ESC κατευθύνοντας το κανάλι 0 του LED_PWM για το GPIO13 και θα χρησιμοποιήσουμε ένα ποτενσιόμετρο για τον έλεγχο της διαμόρφωσης.

Για τη λήψη, θα χρησιμοποιήσουμε ένα ποτενσιόμετρο 10k ως διαχωριστή τάσης. Η λήψη θα γίνει στο κανάλι ADC2_5, προσβάσιμο από το GPIO12.

Βήμα 7: Αναλογική λήψη

Αναλογική Λήψη
Αναλογική Λήψη
Αναλογική Λήψη
Αναλογική Λήψη

Αναλογική σε ψηφιακή μετατροπή

Θα μετατρέψουμε τις τιμές του AD σε PWM.

Το PWM του σερβο είναι 50Hz, επομένως η περίοδος παλμού είναι 1/50 = 0,02 δευτερόλεπτα ή 20 χιλιοστά του δευτερολέπτου.

Πρέπει να δράσουμε σε τουλάχιστον 1 χιλιοστό του δευτερολέπτου έως 2 χιλιοστά του δευτερολέπτου.

Όταν το PWM είναι στο 4095, το πλάτος του παλμού είναι 20 χιλιοστά του δευτερολέπτου, πράγμα που σημαίνει ότι πρέπει να φτάσουμε το μέγιστο στα 4095/10 για να φτάσουμε τα 2 χιλιοστά του δευτερολέπτου, οπότε το PWM πρέπει να λαμβάνει 410 *.

Και μετά από τουλάχιστον 1 χιλιοστό του δευτερολέπτου, άρα 409/2 (ή 4095/20), το PWM θα πρέπει να λάβει 205 *.

* Οι τιμές πρέπει να είναι ακέραιοι

Βήμα 8: Κύκλωμα - Συνδέσεις

Κύκλωμα - Συνδέσεις
Κύκλωμα - Συνδέσεις

Βήμα 9: Πηγαίος κώδικας

Επί κεφαλής

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

Μεταβλητές

const int freq = 50; const int canal_A = 0; const int resolutionucao = 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 (canal_A, freq, resolutionucao); ledcAttachPin (pin_Atuacao_A, canal_A); ledcWrite (canal_A, ciclo_A); display.init (); display.flipScreenVertically (); // Vira a tela verticalmente display.clear (); // για να δείτε το 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 (canal_A, ciclo_A); potencia = χάρτης (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 ("Potência:")); display.drawString (72, 36, String (potencia)); display.drawString (98, 36, String ("%")); display.display (); // mostra χωρίς οθόνη}

Βήμα 10: Αρχεία

Κατεβάστε τα αρχεία

ΕΓΩ ΔΕΝ

PDF