Índice:

Turbina elétrica com ESP32: 9 etapas
Turbina elétrica com ESP32: 9 etapas

Vídeo: Turbina elétrica com ESP32: 9 etapas

Vídeo: Turbina elétrica com ESP32: 9 etapas
Vídeo: Medidor de tensão e corrente AC com ESP32 e Arduino 2024, Julho
Anonim
Image
Image
Demonstração
Demonstração

Hoje, vou discutir uma turbina elétrica com ESP32. A montagem possui uma peça que foi impressa em 3D. Apresentarei uma função PWM do ESP32 que é adequada para controlar motores elétricos. Isso será usado em um motor DC. Também demonstrarei a operação deste MCPWM (Motor Control PWM) em uma aplicação prática.

Usei ESP32 LoRa neste projeto, e acho importante notar aqui que este microcontrolador tem dois blocos dentro dele. Esses blocos são capazes de controlar três motores cada. Assim, é possível controlar até seis motores com PWM, todos de forma independente. Isso significa que o controle que vou usar aqui não é o padrão (que é algo semelhante ao Arduino). Em vez disso, o controle é o próprio chip, o que garante ao ESP32 muita flexibilidade em relação ao controle do motor.

Etapa 1: Demonstração

Etapa 2: Controle do motor PWM

Controle de motor PWM
Controle de motor PWM
Controle do motor PWM
Controle do motor PWM

Diagrama Geral:

• A função MCPWM do ESP32 pode ser usada para controlar vários tipos de motores elétricos. Possui duas unidades.

• Cada unidade possui três pares de saída PWM.

• Cada par A / B de saída pode ser sincronizado com um dos três temporizadores de sincronização 0, 1 ou 2.

• Um temporizador pode ser usado para sincronizar mais de um par de saída PWM

Diagrama Completo:

• Cada unidade também é capaz de coletar sinais de entrada como SINAIS DE SINCRONIZAÇÃO;

• Detectar SINAIS DE FALHA para sobrecorrente ou sobretensão do motor;

• Obtenha feedback com SINAIS DE CAPTURA, como a posição do motor

Etapa 3: Recursos usados

Recursos Usados
Recursos Usados

• Jumpers para conexão

• Heltec Wifi LoRa 32

• Motor DC comum

• Ponte H - L298N

• Cabo USB

• Protoboard

• Fonte de energia

Etapa 4: ESP 32 Dev Kit - Pinagem

ESP 32 Dev Kit - Pinagem
ESP 32 Dev Kit - Pinagem

Etapa 5: montagem da turbina

Montagem de turbina
Montagem de turbina
Montagem de turbina
Montagem de turbina

Etapa 6: Circuito - Conexões

Circuito - Conexões
Circuito - Conexões

Etapa 7: Medição no osciloscópio

Medição no osciloscópio
Medição no osciloscópio

Etapa 8: Código Fonte

Cabeçalho

#include // Não é necessário caso use Arduino IDE # include "driver / mcpwm.h" // inclui uma 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

Configurar

void setup () {Serial.begin (115200); display.init (); //display.flipScreenVertically (); // Vira a tela verticalmente display.clear (); // ajusta o alinhamento para a exibição esquerda.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) => Instância o MCPWM0A no pino GPIO_PWM0A_OUT declarado no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0A, GPIO_PWM0A_OUT); // mcpwm_gpio_init (unidade PWM 0, saida B, porta GPIO) => Instância o MCPWM0B no pino GPIO_PWM0B_OUT declarado no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0B, GPIO_PWM0B_OUT); mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // frequência = 500Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (ciclo de trabalho) do PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (ciclo de trabalho) 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); // Defina PWM0A & PWM0B com as configurações acima}

Funções

// 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_ciclo) {// mcpwm_set ou_signal_ do (0, 1 ou 2), Operador (A ou B)); => Desliga o sinal do MCPWM no Operador B (Definir 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 cronômetro (0, 1 ou 2), Operador (A ou B), Ciclo de trabalho (% do PWM)); => Configurar 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 cronômetro (0, 1 ou 2), Operador (A ou B), Nível de ciclo de trabalho (alto ou baixo)); => definir 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 para chamar "mcpwm_set_signal_low" ou "mcpwm_set_signal_high" para manter o ciclo de trabalho instalado anteriormente} // Função que configura o MCPWM Do operador B (Unidade, Timer, Porcentagem (ciclo de trabalho) estático 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 (Definir 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); // define o nível do ciclo de trabalho (alto ou baixo)} // Função que para o MCPWM de ambos os Operadores estático void brushed_motor_stop (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num) {mcpwm_set_signal_low (mcpwm_PR_num, 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}

Ciclo

void loop () {// Mover o motor no sentido horário brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled ("50"); atraso (2000); // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); atraso (2000); // Mova o motor no sentido antihorário brushed_motor_backward (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled ("25"); atraso (2000); // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); atraso (2000); // Aceleração 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)); atraso (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 (string (i)); atraso (100); } atraso (5000); }

Etapa 9: Baixe os arquivos

PDF

EU NÃO

DESENHANDO

Recomendado: