Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
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
- 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
Pasul 4: 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)
Pasul 6: PWM Servo Motor Control
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ă
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
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