Innehållsförteckning:

Elektrisk turbin med ESP32: 9 steg
Elektrisk turbin med ESP32: 9 steg

Video: Elektrisk turbin med ESP32: 9 steg

Video: Elektrisk turbin med ESP32: 9 steg
Video: Колибри Т32 - маленький турбореактивный двигатель 2024, Juli
Anonim
Image
Image
Demonstration
Demonstration

Idag kommer jag att diskutera en elektrisk turbin med ESP32. Enheten har en del som trycktes i 3D. Jag kommer att presentera en PWM -funktion för ESP32 som är lämplig för styrning av elmotorer. Detta kommer att användas i en likströmsmotor. Jag kommer också att visa hur denna MCPWM (Motor Control PWM) fungerar i en praktisk tillämpning.

Jag använde ESP32 LoRa i detta projekt, och jag tror att det är viktigt att notera här att denna mikrokontroller har två block inuti den. Dessa block kan styra tre motorer vardera. Således är det möjligt att styra upp till sex motorer med PWM, alla oberoende. Det betyder att kontrollen jag använder här inte är standarden (vilket är något som liknar Arduino). Istället är kontrollen själva chipet, vilket garanterar ESP32 mycket flexibilitet när det gäller motorstyrning.

Steg 1: Demonstration

Steg 2: PWM -motorstyrning

PWM motorstyrning
PWM motorstyrning
PWM motorstyrning
PWM motorstyrning

Allmänt diagram:

• MCPWM -funktionen i ESP32 kan användas för att styra olika typer av elmotorer. Den har två enheter.

• Varje enhet har tre PWM -utgångspar.

• Varje utgående A / B -par kan synkroniseras med en av tre synkroniseringstimrar 0, 1 eller 2.

• En timer kan användas för att synkronisera mer än ett PWM -utgångspar

Komplett diagram:

• Varje enhet kan också samla in insignaler som SYKRONISERINGSSIGNER;

• Upptäck FELTECKEN för överström eller motoröverspänning;

• Få feedback med CAPTURE SIGNALS, till exempel motorns position

Steg 3: Resurser som används

Resurser som används
Resurser som används

• Byxor för anslutning

• Heltec Wifi LoRa 32

• Vanlig likströmsmotor

• Bro H - L298N

• USB-kabel

• Protoboard

• Strömförsörjning

Steg 4: ESP 32 Dev Kit - Pinout

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

Steg 5: Turbinmontering

Turbinmontering
Turbinmontering
Turbinmontering
Turbinmontering

Steg 6: Krets - anslutningar

Krets - Anslutningar
Krets - Anslutningar

Steg 7: Mätning på oscilloskop

Mätning på oscilloskop
Mätning på oscilloskop

Steg 8: Källkod

Rubrik

#include // Não é necessário caso use Arduino IDE #include "driver/mcpwm.h" // inclui a biblioteca "Motor Control PWM" nativa do ESP32 #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 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

Uppstart

void setup () {Serial.begin (115200); display.init (); //display.flipScreenVertically (); // Vira a tela verticalmente display.clear (); // ajusta o 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, saida A, porta GPIO) => Instancia o MCPWM0A no pino GPIO_PWM0A_OUT declarado no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, GPPWM0, // mcpwm_gpio_init (unidade PWM 0, saida B, porta GPIO) => Instancia o MCPWM0B no pino GPIO_PWM0B_OUT declarado no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0; mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // frequência = 500Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (driftcykel) gör PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (driftcykel) gör PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; // Para MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Definiera ciclo de trabalho em nível alto // Inicia (Unidade 0, Timer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0, & pwm_config); // Definiera PWM0A & PWM0B com som konfigurationer ima

Funktioner

// 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) {// mcpwal_ (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), Numero do timer (0, 1 ou 2), Operador (A ou B), Ciclo de trabalho (% do PWM)); => Konfigurera en porcentagem för PWM ingen 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), Numero do timer (0, 1 ou 2), Operador (A ou B), Nível do ciclo de trabalho (alto baixo)); => definiera 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 (Unidade), Timho statiskt tomrum borstat_motor_ bakåt (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 no Operador A (Define o sinal em Baixo) mcpwm_set_duty (mcpwm_num, timer_num, MCPWM_OPR_B, duty_cycle); // Configura a porcentagem do PWM no Operador B (Ciclo de trabalho) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_B, MCPWM_DUTY_MODE_0); // definiera 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) // 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}

Slinga

void loop () {// Move o motor no sentido horário brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled ("50"); fördröjning (2000); // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); fördröjning (2000); // Flytta motorn utan sentido antihorário borstad_motor_ bakåt (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled ("25"); fördröjning (2000); // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); fördröjning (2000); // Aceleracao i de 1 a 100 för (int i = 10; i <= 100; i ++) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (String (i)); fördröjning (200); } // Desaceleração i de 100 a 1 fördröjning (5000); för (int i = 100; i> = 10; i-) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (String (i)); fördröjning (100); } fördröjning (5000); }

Steg 9: Ladda ner filerna

PDF

INO

TECKNING

Rekommenderad: