Inhaltsverzeichnis:

Elektrische Turbine mit ESP32 - Gunook
Elektrische Turbine mit ESP32 - Gunook

Video: Elektrische Turbine mit ESP32 - Gunook

Video: Elektrische Turbine mit ESP32 - Gunook
Video: Lego Technic Automatic Candle snuffer #Shorts 2024, Juli
Anonim
Image
Image
Demonstration
Demonstration

Heute bespreche ich eine elektrische Turbine mit ESP32. Die Baugruppe enthält ein Teil, das in 3D gedruckt wurde. Ich werde eine PWM-Funktion des ESP32 vorstellen, die sich zur Steuerung von Elektromotoren eignet. Dies wird in einem Gleichstrommotor verwendet. Außerdem werde ich die Funktionsweise dieses MCPWM (Motor Control PWM) in einer praktischen Anwendung demonstrieren.

Ich habe ESP32 LoRa in diesem Projekt verwendet, und ich denke, es ist hier wichtig zu beachten, dass dieser Mikrocontroller zwei Blöcke enthält. Diese Blöcke können jeweils drei Motoren steuern. Somit ist es möglich, bis zu sechs Motoren mit PWM unabhängig voneinander anzusteuern. Dies bedeutet, dass die Steuerung, die ich hier verwende, nicht der Standard ist (was dem Arduino ähnlich ist). Stattdessen ist die Steuerung der Chip selbst, was dem ESP32 viel Flexibilität in Bezug auf die Motorsteuerung garantiert.

Schritt 1: Demonstration

Schritt 2: PWM-Motorsteuerung

PWM-Motorsteuerung
PWM-Motorsteuerung
PWM-Motorsteuerung
PWM-Motorsteuerung

Allgemeines Diagramm:

• Mit der MCPWM-Funktion des ESP32 können verschiedene Arten von Elektromotoren gesteuert werden. Es hat zwei Einheiten.

• Jede Einheit hat drei PWM-Ausgangspaare.

• Jedes Ausgangs-A/B-Paar kann mit einem von drei Synchronisations-Timern 0, 1 oder 2 synchronisiert werden.

• Ein Timer kann verwendet werden, um mehr als ein PWM-Ausgangspaar zu synchronisieren

Vollständiges Diagramm:

• Jedes Gerät kann auch Eingangssignale als SYNCHRONISATIONSZEICHEN sammeln;

• FEHLERZEICHEN für Überstrom oder Motorüberspannung erkennen;

• Erhalten Sie Feedback mit CAPTURE SIGNALS, wie z. B. die Position des Motors

Schritt 3: Verwendete Ressourcen

Verwendete Ressourcen
Verwendete Ressourcen

• Jumper für den Anschluss

• Heltec Wifi LoRa 32

• Gemeinsamer Gleichstrommotor

• Brücke H - L298N

• USB-Kabel

• Protoboard

• Energieversorgung

Schritt 4: ESP 32 Dev Kit - Pinbelegung

ESP 32 Dev Kit - Pinbelegung
ESP 32 Dev Kit - Pinbelegung

Schritt 5: Turbinenmontage

Turbinenmontage
Turbinenmontage
Turbinenmontage
Turbinenmontage

Schritt 6: Schaltung - Anschlüsse

Schaltung - Anschlüsse
Schaltung - Anschlüsse

Schritt 7: Messung am Oszilloskop

Messung am Oszilloskop
Messung am Oszilloskop

Schritt 8: Quellcode

Header

#include //Nicht nötig, um Arduino IDE zu verwenden#include "driver/mcpwm.h" //inclui eine Biblioteca "Motor Control PWM" nativa do ESP32 #include // Notwendig für Arduino 1.6.5 und posterior #include " SSD1306.h" // oder 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

Aufstellen

Void setup () { Serial.begin (115200); display.init(); //display.flipScreenVertically(); //Vira a tela verticalmente display.clear(); // ajusta oder alinhamento para a esquerda display.setTextAlignment(TEXT_ALIGN_LEFT); // ajusta a fonte para Arial 16 display.setFont (ArialMT_Plain_16); //mcpwm_gpio_init(unidade PWM 0, sagtea A, porta GPIO) => Instancia oder MCPWM0A kein Pino GPIO_PWM0A_OUT declarado no codigo mcpwm_gpio_init(MCPWM_UNIT_0, MCP0_IOP); //mcpwm_gpio_init(unidade PWM 0, sagtea B, porta GPIO) => Instancia oder MCPWM0B kein Pino GPIO_PWM0B_OUT declarado no começo do codigo mcpwm_gpio_init(MCPWM_UNIT_0, MCPBIOWP); mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // Frequenz = 500 Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (Arbeitszyklus) tun PWMxA = 0 pwm_config.cmpr_b = 0; //Ciclo de trabalho (Arbeitszyklus) do 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 definieren //Inicia(Unidade 0, Timer 0, Config PWM) mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config); // PWM0A & PWM0B com als configurações acima definieren}

Funktionen

//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, float duty_cycle) { //mcpwm_t timer_num, float duty_cycle) { //mcpwm (0, 1 oder 2), Operateur (A oder 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 oder 1), Número do timer (0, 1 oder 2), Operador (A oder B), Ciclo de trabalho (% do PWM)); => Konfiguriere ein Porcentagem do PWM no Operator A (Ciclo de trabalho) mcpwm_set_duty(mcpwm_num, timer_num, MCPWM_OPR_A, Duty_cycle); // mcpwm_set_duty_tyoe (unidade PWM (0 oder 1), Número do timer (0, 1 oder 2), Operador (A oder B), Nível do ciclo de trabalho (alto oder baixo)); => Definiere o nível do ciclo de trabalho (alto ou baixo) mcpwm_set_duty_type(mcpwm_num, timer_num, MCPWM_OPR_A, MCPWM_DUTY_MODE_0); //Nota: 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 MCPWM Do operador B, Porcentagem, de statisch void 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_A); //Desliga o sinal do MCPWM nein Operator A (Define o sinal em Baixo) mcpwm_set_duty(mcpwm_num, timer_num, MCPWM_OPR_B, duty_cycle); // Konfiguriere ein Porcentagem do PWM no Operator B (Ciclo de trabalho) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_B, MCPWM_DUTY_MODE_0); //define o nível do ciclo de trabalho (alto ou baixo) } //Função que para o MCPWM de ambos os Operadores static void brushed_motor_stop(mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer(num_set_Mcp_low_m_set_signal_timer_set_signal //Desliga oder sinal do MCPWM kein Operator A mcpwm_set_signal_low(mcpwm_num, timer_num, MCPWM_OPR_B); //Desliga oder sinal do MCPWM kein Operator B }

Schleife

Void loop () {//Move o motor no sentido horário brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled("50"); Verzögerung (2000); //Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled("0"); Verzögerung (2000); //Move o motor no sentido antihorário brushed_motor_backward (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled("25"); Verzögerung (2000); //Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled("0"); Verzögerung (2000); // Acceleraco 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)); Verzögerung (200); } // Desaceleração i de 100 a 1 delay(5000); for(int i=100;i>=10;i--){brushed_motor_forward(MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled(String(i)); Verzögerung (100); } Verzögerung (5000); }

Schritt 9: Laden Sie die Dateien herunter

PDF

INO

ZEICHNUNG

Empfohlen: