Taula de continguts:

Turbina elèctrica amb ESP32: 9 passos
Turbina elèctrica amb ESP32: 9 passos

Vídeo: Turbina elèctrica amb ESP32: 9 passos

Vídeo: Turbina elèctrica amb ESP32: 9 passos
Vídeo: Cómo hacer las BOBINAS de un motor eléctrico manualmente 2024, Juliol
Anonim
Image
Image
Demostració
Demostració

Avui parlaré d’una turbina elèctrica amb ESP32. El conjunt té una part que es va imprimir en 3D. Presentaré una funció PWM de l’ESP32 que és adequada per controlar motors elèctrics. S’utilitzarà en un motor de corrent continu. També demostraré el funcionament d’aquest MCPWM (Motor Control PWM) en una aplicació pràctica.

He utilitzat ESP32 LoRa en aquest projecte i crec que és important tenir en compte que aquest microcontrolador té dos blocs al seu interior. Aquests blocs són capaços de controlar tres motors cadascun. Així, és possible controlar fins a sis motors amb PWM, tots de forma independent. Això vol dir que el control que faré servir aquí no és l’estàndard (que és una cosa similar a l’Arduino). En canvi, el control és el propi xip, que garanteix a l’ESP32 molta flexibilitat pel que fa al control del motor.

Pas 1: demostració

Pas 2: control del motor PWM

Control del motor PWM
Control del motor PWM
Control del motor PWM
Control del motor PWM

Diagrama general:

• La funció MCPWM de l'ESP32 es pot utilitzar per controlar diversos tipus de motors elèctrics. Té dues unitats.

• Cada unitat té tres parells de sortida PWM.

• Cada parell de sortida A / B es pot sincronitzar amb un dels tres temporitzadors de sincronització 0, 1 o 2.

• Es pot utilitzar un temporitzador per sincronitzar més d’un parell de sortida PWM

Diagrama complet:

• Cada unitat també és capaç de recollir senyals d’entrada com a SIGNES DE SINCRONITZACIÓ;

• Detectar SIGNES DE FALLA per sobreintensitat o sobretensió del motor;

• Obteniu comentaris amb CAPTURE SIGNALS, com ara la posició del motor

Pas 3: recursos utilitzats

Recursos utilitzats
Recursos utilitzats

• Jumpers per a connexió

• Heltec Wifi LoRa 32

• Motor comú de corrent continu

• Pont H - L298N

• Cable USB

• Protoboard

• Font d'alimentació

Pas 4: kit de desenvolupament ESP 32 - Pinout

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

Pas 5: muntatge de la turbina

Muntatge de turbina
Muntatge de turbina
Muntatge de turbina
Muntatge de turbina

Pas 6: Circuit - Connexions

Circuit - Connexions
Circuit - Connexions

Pas 7: mesura amb oscil·loscopi

Mesura en oscil·loscopi
Mesura en oscil·loscopi

Pas 8: codi font

Capçalera

#include // No és necessari cas use Arduino IDE # include "driver / mcpwm.h" // inclui a biblioteca "Motor Control PWM" nativa do ESP32 #include // Necessario 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 com PWM0A #define GPIO_PWM0B_OUT 14 // Declara GPIO 14 com PWM0B

Configuració

configuració nul·la () {Serial.begin (115200); display.init (); //display.flipScreenVertically (); // Vira a tela verticalment display.clear (); // ajusta o alinhamento per a l'esquerra display.setTextAlignment (TEXT_ALIGN_LEFT); // ajusta a fonte per 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 code mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0A, GPIO_PW; // mcpwm_gpio_init (unidade PWM 0, saida B, porta GPIO) => Instancia o MCPWM0B no pino GPIO_PWM0B_OUT declarado no começo do code mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0B, GPIO_PW; mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // frequência = 500Hz, pwm_config.cmpr_a = 0; // Cicle de treball (cicle de treball) do PWMxA = 0 pwm_config.cmpr_b = 0; // Cicle de treball (cicle de treball) de PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; // Para MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Definir cicle de treball em nível alto // Inicia (Unidade 0, Timer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0, & pwm_config); // Definiu PWM0A i PWM0B com com a configuracions acima}

Funcions

// Funció 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_w (set) (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 treball (% do PWM)); => Configura un percentatge de PWM sense operador A (Cicle de treball) 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 treball (alt o baix)); => defineix un cicle de treball (alt o baix) 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" per mantenir o cicle de treball configurat anteriorment} // Funcionament 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); // Configureu un percentatge de PWM no Operador B (Ciclo de treball) 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)} // Funcionament que per a MCPWM de tots dos Operadors static void brushed_motor_stop (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num) {mcpwm_set_signal_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}

Bucle

void loop () {// Move o motor no sentido horário brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled ("50"); endarreriment (2000); // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); endarreriment (2000); // Moveu el motor sense sentit antihorari brushed_motor_backward (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled ("25"); endarreriment (2000); // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); endarreriment (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)); retard (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)); retard (100); } retard (5000); }

Pas 9: baixeu els fitxers

PDF

INO

DIBUIX

Recomanat: