Πίνακας περιεχομένων:

Ηλεκτρική Τουρμπίνα Με ESP32: 9 Βήματα
Ηλεκτρική Τουρμπίνα Με ESP32: 9 Βήματα

Βίντεο: Ηλεκτρική Τουρμπίνα Με ESP32: 9 Βήματα

Βίντεο: Ηλεκτρική Τουρμπίνα Με ESP32: 9 Βήματα
Βίντεο: Electric turbo test @12V.=2 PSI. 2024, Ιούλιος
Anonim
Image
Image
Επίδειξη
Επίδειξη

Σήμερα, θα συζητήσω έναν ηλεκτρικό στρόβιλο με το ESP32. Η συναρμολόγηση έχει ένα μέρος που εκτυπώθηκε σε 3D. Θα παρουσιάσω μια λειτουργία PWM του ESP32 που είναι κατάλληλη για τον έλεγχο ηλεκτροκινητήρων. Αυτό θα χρησιμοποιηθεί σε κινητήρα DC. Θα δείξω επίσης τη λειτουργία αυτού του MCPWM (Motor Control PWM) σε μια πρακτική εφαρμογή.

Χρησιμοποίησα το ESP32 LoRa σε αυτό το έργο και νομίζω ότι είναι σημαντικό να σημειωθεί εδώ ότι αυτός ο μικροελεγκτής έχει δύο μπλοκ μέσα του. Αυτά τα μπλοκ είναι σε θέση να ελέγχουν τρεις κινητήρες το καθένα. Έτσι, είναι δυνατός ο έλεγχος έως έξι κινητήρων με PWM, όλα ανεξάρτητα. Αυτό σημαίνει ότι το στοιχείο ελέγχου που θα χρησιμοποιήσω εδώ δεν είναι το τυπικό (το οποίο είναι κάτι παρόμοιο με το Arduino). Αντ 'αυτού, το χειριστήριο είναι το ίδιο το τσιπ, το οποίο εγγυάται στο ESP32 μεγάλη ευελιξία σε σχέση με τον έλεγχο του κινητήρα.

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

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

Έλεγχος κινητήρα PWM
Έλεγχος κινητήρα PWM
Έλεγχος κινητήρα PWM
Έλεγχος κινητήρα PWM

Γενικό διάγραμμα:

• Η λειτουργία MCPWM του ESP32 μπορεί να χρησιμοποιηθεί για τον έλεγχο διαφόρων τύπων ηλεκτροκινητήρων. Διαθέτει δύο μονάδες.

• Κάθε μονάδα διαθέτει τρία ζεύγη εξόδου PWM.

• Κάθε ζεύγος εξόδου A / B μπορεί να συγχρονιστεί με έναν από τους τρεις χρονοδιακόπτες συγχρονισμού 0, 1 ή 2.

• Ένας χρονοδιακόπτης μπορεί να χρησιμοποιηθεί για συγχρονισμό περισσότερων από ένα ζεύγους εξόδου PWM

Πλήρες διάγραμμα:

• Κάθε μονάδα είναι επίσης ικανή να συλλέγει σήματα εισόδου ως ΣΗΜΑΤΑ ΣΥΝΧΡΟΝΙΣΜΟΥ.

• Εντοπισμός ΣΗΜΑΤΙΚΩΝ ΣΗΜΑΤΩΝ για υπερένταση ή υπέρταση κινητήρα.

• Λάβετε ανατροφοδότηση με τα σήματα CAPTURE, όπως η θέση του Κινητήρα

Βήμα 3: Πόροι που χρησιμοποιούνται

Πόροι που χρησιμοποιήθηκαν
Πόροι που χρησιμοποιήθηκαν

• Μπότες για σύνδεση

• Heltec Wifi LoRa 32

• Κοινός κινητήρας DC

• Γέφυρα H - L298N

• Καλώδιο USB

• Protoboard

• Παροχή ηλεκτρικού ρεύματος

Βήμα 4: ESP 32 Dev Kit - Pinout

ESP 32 Dev Kit - Pinout
ESP 32 Dev Kit - Pinout

Βήμα 5: Τοποθέτηση τουρμπίνας

Τοποθέτηση στροβίλων
Τοποθέτηση στροβίλων
Τοποθέτηση στροβίλων
Τοποθέτηση στροβίλων

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

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

Βήμα 7: Μέτρηση σε παλμογράφο

Μέτρηση σε παλμογράφο
Μέτρηση σε παλμογράφο

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

Επί κεφαλής

#include // Δεν χρειάζεται να χρησιμοποιήσετε το Arduino IDE #περιλαμβάνει "πρόγραμμα οδήγησης/mcpwm.h" // περιλαμβάνει μια βιβλιοθήκη "Motor Control PWM" nativa do ESP32 #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" #define GPIO_PWM0A_OUT 12 // Declara GPIO 12 como PWM0A #define GPIO_PWM0B_OUT 14 // Declara GPIO 14 como PWM0B

Ρύθμιση

void setup () {Serial.begin (115200); display.init (); //display.flipScreenVertically (); // Vira a tela verticalmente display.clear (); // για να δείτε το esquerda display.setTextAlignment (TEXT_ALIGN_LEFT); // παρακαλώ να δείτε το Arial 16 display.setFont (ArialMT_Plain_16); // mcpwm_gpio_init (unidade PWM 0, saida A, porta GPIO) => Instancia o MCPWM0A no pino GPIO_PWM0A_OUT deklarado no começo do código mcpwm_gpio_init (MCPWM_UNI_0, M0P0, M0, M0, M0, M0, M0, M0, M0, M0, M0, M0, 0, // mcpwm_gpio_init (unidade PWM 0, saida B, porta GPIO) => Instancia o MCPWM0B no pino GPIO_PWM0B_OUT deklarado no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, M0P0M0, M0, M0, M0, M0, M0, M0, M0, M0, M0, M0, M0, M0, M0, M0, M0, M0, M0, M0, M0, M0, M0, M0, 0, 0, mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // frequência = 500Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (κύκλος λειτουργίας) έως PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (κύκλος εργασιών) έως PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; // Para MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Ορισμός ciclo de trabalho em nível alto // Inicia (Unidade 0, Timer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0, & pwm_config); // Ορισμός PWM0A & PWM0B com ως configurações acima}

Λειτουργίες

// Função que configura o MCPWM operador A (Unidade, Timer, Porcentagem (ciclo de trabalho)) static void brushed_motor_forward (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num_mum_mum_mumwum (0, 1 ou 2), Operador (A ou B)); => Desliga o sinal do MCPWM no Operador B (Define o sinal em Baixo) mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_B)? // mcpwm_set_duty (unidade PWM (0 ou 1), Número do timer (0, 1 ou 2), Operador (A ou B), Ciclo de trabalho (% do PWM)); => Διαμορφώστε ένα porcentagem do PWM no Operador A (Ciclo de trabalho) mcpwm_set_duty (mcpwm_num, timer_num, MCPWM_OPR_A, duty_cycle)? // mcpwm_set_duty_tyoe (unidade PWM (0 ou 1), Número do timer (0, 1 ou 2), Operador (A ou B), Nível do ciclo de trabalho (alto ou baixo)); => καθορίστε το ciclo de trabalho (alto ou baixo) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_A, MCPWM_DUTY_MODE_0)? // Σημείωση: Chame essa função toda vez que for chamado "mcpwm_set_signal_low" ou "mcpwm_set_signal_high" para manter o ciclo de trabalho configurado anteriormente} // Função que configura o MCPWOM Do operador B (Un) στατικό κενό brushed_motor_backward (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num, float duty_cycle) {mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_; // Desliga o sinal do MCPWM no Operador A (Define o sinal em Baixo) mcpwm_set_duty (mcpwm_num, timer_num, MCPWM_OPR_B, duty_cycle). // Διαμορφώστε ένα porcentagem do PWM no Operador B (Ciclo de trabalho) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_B, MCPWM_DUTY_MODE_0). // ορίζουν o Nivel κάνουμε Ciclo de trabalho (Alto OU Baixo)} // Função que para o MCPWM de Ambos os Operadores στατική άκυρη brushed_motor_stop (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num) {mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_A)? // Desliga o sinal do MCPWM no Operador A mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_B)? // Desliga o sinal do MCPWM no Operador B}

Βρόχος

void loop () {// Move o motor no sentido horário brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled ("50")? καθυστέρηση (2000). // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0")? καθυστέρηση (2000). // Μετακινήστε το μοτέρ χωρίς sentido antihorário brushed_motor_backward (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0). oled ("25")? καθυστέρηση (2000). // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0")? καθυστέρηση (2000). // Aceleracao i de 1 a 100 for (int i = 10; i <= 100; i ++) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (String (i)); καθυστέρηση (200)? } // Desaceleração i de 100 a 1 delay (5000); για (int i = 100; i> = 10; i-) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (String (i)); καθυστέρηση (100)? } καθυστέρηση (5000); }

Βήμα 9: Κατεβάστε τα αρχεία

PDF

ΕΓΩ ΔΕΝ

ΣΧΕΔΙΟ

Συνιστάται: