Sommario:

Turbina elettrica con ESP32: 9 passaggi
Turbina elettrica con ESP32: 9 passaggi

Video: Turbina elettrica con ESP32: 9 passaggi

Video: Turbina elettrica con ESP32: 9 passaggi
Video: Motore Elettrico Corrente Continua DC Funzionamento 3D ⚙️ 2024, Luglio
Anonim
Image
Image
Dimostrazione
Dimostrazione

Oggi parlerò di una turbina elettrica con ESP32. L'assieme ha una parte che è stata stampata in 3D. Presenterò una funzione PWM dell'ESP32 adatta al controllo dei motori elettrici. Questo sarà utilizzato in un motore DC. Dimostrerò anche il funzionamento di questo MCPWM (Motor Control PWM) in un'applicazione pratica.

Ho usato ESP32 LoRa in questo progetto e penso che sia importante notare qui che questo microcontrollore ha due blocchi al suo interno. Questi blocchi sono in grado di controllare tre motori ciascuno. Pertanto, è possibile controllare fino a sei motori con PWM, tutti in modo indipendente. Ciò significa che il controllo che userò qui non è lo standard (che è qualcosa di simile all'Arduino). Il controllo è invece il chip stesso, che garantisce all'ESP32 molta flessibilità rispetto al controllo del motore.

Passaggio 1: dimostrazione

Passaggio 2: controllo motore PWM

Controllo motore PWM
Controllo motore PWM
Controllo motore PWM
Controllo motore PWM

Schema generale:

• La funzione MCPWM dell'ESP32 può essere utilizzata per controllare vari tipi di motori elettrici. Dispone di due unità.

• Ogni unità dispone di tre coppie di uscite PWM.

• Ogni coppia di uscite A/B può essere sincronizzata con uno dei tre timer di sincronizzazione 0, 1 o 2.

• Un timer può essere utilizzato per sincronizzare più di una coppia di uscite PWM

Schema completo:

• Ogni unità è anche in grado di raccogliere segnali in ingresso come SEGNI DI SINCRONIZZAZIONE;

• Rilevare SEGNALI DI GUASTO per sovracorrente o sovratensione motore;

• Ottenere feedback con CATTURA SEGNALI, come la posizione del motore

Passaggio 3: risorse utilizzate

Risorse utilizzate
Risorse utilizzate

• Ponticelli per il collegamento

• Heltec Wifi LoRa 32

• Motore CC comune

• Ponte H - L298N

• Cavo USB

• Scheda prototipi

• Alimentazione elettrica

Passaggio 4: kit di sviluppo ESP 32 - Pinout

Kit di sviluppo ESP 32 - Pinout
Kit di sviluppo ESP 32 - Pinout

Passaggio 5: montaggio della turbina

Montaggio della turbina
Montaggio della turbina
Montaggio della turbina
Montaggio della turbina

Passaggio 6: Circuito - Connessioni

Circuito - Collegamenti
Circuito - Collegamenti

Passaggio 7: misurazione sull'oscilloscopio

Misura su oscilloscopio
Misura su oscilloscopio

Passaggio 8: codice sorgente

Intestazione

#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 //Dichiara GPIO 12 come PWM0A #define GPIO_PWM0B_OUT 14 //Dichiara GPIO 14 come PWM0B

Impostare

void setup() { Serial.begin(115200); display.init(); //display.flipScreenVerticalmente(); //Vira una tela verticalmente display.clear(); //aggiusta o modifica per un'esquerda display.setTextAlignment(TEXT_ALIGN_LEFT); //aggiusta una 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 dichiarata non come fare código mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0A, GPIO_PWM0A_OUT); //mcpwm_gpio_init(unidade PWM 0, saida B, porta GPIO) => Instancia o MCPWM0B no pino GPIO_PWM0B_OUT dichiarata non come fare código mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0B, GPIO_PWM0B_OUT); mcpwm_config_t pwm_config; pwm_config.frequency = 1000; //frequenza = 500Hz, pwm_config.cmpr_a = 0; //Ciclo de trabalho (ciclo di lavoro) do PWMxA = 0 pwm_config.cmpr_b = 0; //Ciclo de trabalho (ciclo di lavoro) do PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; //Para MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; //Definisci il ciclo di trabalho em nível alto //Inicia(Unidade 0, Timer 0, Config PWM) mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config); //Definisci PWM0A & PWM0B com come configurações acima }

Funzioni

//Funzione della configurazione dell'operatore MCPWM 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_set_signal_low(0unida 1) (0, 1 o 2), Operatore (A o B)); => Desliga o sinal do MCPWM no Operador B (Definisci o sinal em Baixo) mcpwm_set_signal_low(mcpwm_num, timer_num, MCPWM_OPR_B); //mcpwm_set_duty(unidade PWM(0 o 1), Número do timer(0, 1 o 2), Operador (A o B), Ciclo de trabalho (% do PWM)); => Configura una percentuale do PWM no Operatore A (Ciclo de trabalho) mcpwm_set_duty(mcpwm_num, timer_num, MCPWM_OPR_A, duty_cycle); //mcpwm_set_duty_tyoe(unidade PWM(0 o 1), Número do timer(0, 1 o 2), Operador (A o B), Nível do ciclo de trabalho (alto o basso)); => definire il livello del ciclo di lavoro (alto o basso) 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" o "mcpwm_set_signal_high" per manter o ciclo de trabalho configurado anteriormente } //Função que configura o MCPWM Do operador B (Unidade, Timer, Porcentagem) 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 (Definisci o sinal em Baixo) mcpwm_set_duty(mcpwm_num, timer_num, MCPWM_OPR_B, duty_cycle); //Configura una percentuale di 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_num_A);MCP_num_PR_set_low_low //Desliga o sinal do MCPWM no Operatore A mcpwm_set_signal_low(mcpwm_num, timer_num, MCPWM_OPR_B); //Desliga o sinal do MCPWM no Operatore B }

Ciclo continuo

void loop() { //Move o motor no sentido horário brushed_motor_forward(MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled("50"); ritardo (2000); //Para o motore brushed_motor_stop(MCPWM_UNIT_0, MCPWM_TIMER_0); oled("0"); ritardo (2000); //Move o motor no sentido antihorário brushed_motor_backward(MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled("25"); ritardo (2000); //Para o motore brushed_motor_stop(MCPWM_UNIT_0, MCPWM_TIMER_0); oled("0"); ritardo (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(Stringa(i)); ritardo(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(Stringa(i)); ritardo(100); } ritardo(5000); }

Passaggio 9: Scarica i file

PDF

IO NO

DISEGNO

Consigliato: