Tabla de contenido:

Turbina eléctrica con ESP32: 9 pasos
Turbina eléctrica con ESP32: 9 pasos

Video: Turbina eléctrica con ESP32: 9 pasos

Video: Turbina eléctrica con ESP32: 9 pasos
Video: GENERADOR HIDRAULICO de ENERGIA! 💧 ⚡  (turbina 12v 10w) Cómo producir electricidad casera con agua 2024, Mes de julio
Anonim
Image
Image
Demostración
Demostración

Hoy hablaré sobre una turbina eléctrica con ESP32. El ensamblaje tiene una pieza que se imprimió en 3D. Presentaré una función PWM del ESP32 que es adecuada para controlar motores eléctricos. Esto se utilizará en un motor de CC. También demostraré el funcionamiento de este MCPWM (Motor Control PWM) en una aplicación práctica.

Usé ESP32 LoRa en este proyecto, y creo que es importante señalar aquí que este microcontrolador tiene dos bloques dentro. Estos bloques son capaces de controlar tres motores cada uno. Así, es posible controlar hasta seis motores con PWM, todos de forma independiente. Esto significa que el control que usaré aquí no es el estándar (que es algo similar al Arduino). En cambio, el control es el propio chip, lo que garantiza al ESP32 mucha flexibilidad con respecto al control del motor.

Paso 1: demostración

Paso 2: Control de motor PWM

Control de motor PWM
Control de motor PWM
Control de motor PWM
Control de motor PWM

Diagrama general:

• La función MCPWM del ESP32 se puede utilizar para controlar varios tipos de motores eléctricos. Tiene dos unidades.

• Cada unidad tiene tres pares de salidas PWM.

• Cada par de salida A / B se puede sincronizar con uno de los tres temporizadores de sincronización 0, 1 o 2.

• Se puede usar un temporizador para sincronizar más de un par de salidas PWM

Diagrama completo:

• Cada unidad también es capaz de recopilar señales de entrada como SIGNOS DE SINCRONIZACIÓN;

• Detectar SEÑALES DE FALLA por sobrecorriente o sobretensión del motor;

• Obtenga retroalimentación con CAPTURA DE SEÑALES, como la posición del motor

Paso 3: Recursos utilizados

Recursos utilizados
Recursos utilizados

• Jumpers para conexión

• Heltec Wifi LoRa 32

• Motor de CC común

• Puente H - L298N

• Cable USB

• Protoboard

• Fuente de alimentación

Paso 4: Kit de desarrollo ESP 32 - Pinout

Kit de desarrollo ESP 32 - Pinout
Kit de desarrollo ESP 32 - Pinout

Paso 5: Montaje de la turbina

Montaje de turbina
Montaje de turbina
Montaje de turbina
Montaje de turbina

Paso 6: Circuito - Conexiones

Circuito - Conexiones
Circuito - Conexiones

Paso 7: medición en osciloscopio

Medición en osciloscopio
Medición en osciloscopio

Paso 8: código fuente

Encabezamiento

#include // No es necesario en caso de usar Arduino IDE # include "driver / mcpwm.h" // inclui una biblioteca "Motor Control PWM" nativa do ESP32 #include // Necesario solo para 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 y 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

Configuración

configuración vacía () {Serial.begin (115200); display.init (); //display.flipScreenVertically (); // Vira una tela verticalmente display.clear (); // ajusta o alinhamento para una pantalla esquerda.setTextAlignment (TEXT_ALIGN_LEFT); // ajusta una fuente 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, MCPWM0A, GPA_PWM0; // 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, MCPWM0B, GPBIO_PWM0; mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // frecuencia = 500Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (ciclo de trabajo) do PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (ciclo de trabajo) do PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; // Para MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Definir ciclo de trabalho em nível alto // Inicia (Unidade 0, Timer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0, & pwm_config); // Definir PWM0A & PWM0B com como configurações acima}

Funciones

// 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) {// Número mcpwmlow_set_Watch_Works (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)); => Configura un porcentaje de PWM sin Operador A (ciclo de tráfico) 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)); => definir el nivel del ciclo de trabalho (alto o 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 anteriormente} // Função que configura o MCPWM Do operador B (Unidade, Timer, Porcentagem (ciclo de trabalho)) static 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 no Operador A (Define o sinal em Baixo) mcpwm_set_duty (mcpwm_num, timer_num, MCPWM_OPR_B, duty_cycle); // Configura un porcentajem do PWM no Operador 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) {mcpwm_set_signal_wmOP_low, mcpwm_set_signal_wm_low, // 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}

Círculo

bucle vacío () {// Mover el motor sin sentido horário brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled ("50"); retraso (2000); // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); retraso (2000); // Mover o motor no sentido antihorário brushed_motor_backward (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled ("25"); retraso (2000); // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); retraso (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 (Cadena (i)); retraso (200); } // Desaceleração i de 100 a 1 delay (5000); para (int i = 100; i> = 10; i -) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (Cadena (i)); retraso (100); } retraso (5000); }

Paso 9: descargue los archivos

PDF

INO

DIBUJO

Recomendado: