INHOUDSOPGAWE:

Elektriese turbine met ESP32: 9 stappe
Elektriese turbine met ESP32: 9 stappe

Video: Elektriese turbine met ESP32: 9 stappe

Video: Elektriese turbine met ESP32: 9 stappe
Video: Использование кнопки скорости шагового двигателя 28BYJ-48 с 8 проектами: Ultimate Video Tutorial, урок 107 2024, November
Anonim
Image
Image
Demonstrasie
Demonstrasie

Vandag bespreek ek 'n elektriese turbine met ESP32. Die samestelling bevat 'n deel wat in 3D gedruk is. Ek bied 'n PWM -funksie van die ESP32 aan wat geskik is vir die bestuur van elektriese motors. Dit sal in 'n GS -motor gebruik word. Ek sal ook die werking van hierdie MCPWM (Motor Control PWM) demonstreer in 'n praktiese toepassing.

Ek het ESP32 LoRa in hierdie projek gebruik, en ek dink dit is belangrik om hier op te let dat hierdie mikrobeheerder twee blokke daarin het. Hierdie blokke kan drie motors elk beheer. Dit is dus moontlik om tot ses motors met PWM te bestuur, almal onafhanklik. Dit beteken dat die beheer wat ek hier sal gebruik nie die standaard is nie (wat soortgelyk is aan die Arduino). Die beheer is in plaas daarvan die chip self, wat die ESP32 baie buigsaamheid ten opsigte van motorbeheer waarborg.

Stap 1: Demonstrasie

Stap 2: PWM -motorbeheer

PWM motorbeheer
PWM motorbeheer
PWM motorbeheer
PWM motorbeheer

Algemene diagram:

• Die MCPWM -funksie van die ESP32 kan gebruik word om verskillende tipes elektriese motors te beheer. Dit het twee eenhede.

• Elke eenheid het drie PWM -uitsetpare.

• Elke uitvoer A / B -paar kan gesinchroniseer word met een van drie sinchronisasie -tydtellers 0, 1 of 2.

• Een timer kan gebruik word om meer as een PWM -uitsetpaar te sinchroniseer

Volledige diagram:

• Elke eenheid is ook in staat om insetseine te versamel as sinchroniseringstekens;

• Ontdek foutiewe tekens vir oorstroom of motoroorspanning;

• Verkry terugvoer met CAPTURE SIGNALS, soos die posisie van die enjin

Stap 3: Hulpbronne gebruik

Hulpbronne gebruik
Hulpbronne gebruik

• Springers vir verbinding

• Heltec Wifi LoRa 32

• Algemene DC -motor

• Brug H - L298N

• USB -kabel

• Protoboard

• Kragtoevoer

Stap 4: ESP 32 Dev Kit - Pinout

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

Stap 5: Turbine -montering

Turbine montering
Turbine montering
Turbine montering
Turbine montering

Stap 6: stroombaan - verbindings

Kring - verbindings
Kring - verbindings

Stap 7: Meting op die oscilloskoop

Meting op die oscilloskoop
Meting op die oscilloskoop

Stap 8: Bronkode

Koptekst

#include // Noodsaaklik om Arduino IDE te gebruik #sluit in "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); // Instansies en aanpassings vir die "vertoon" #definieer GPIO_PWM0A_OUT 12 // Declara GPIO 12 van PWM0A #definieer GPIO_PWM0B_OUT 14 // Declara GPIO 14 van PWM0B

Stel op

ongeldige opstelling () {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) => Instance of MCPWM0A no pino GPIO_PWM0A_OUT declarado no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0A, // mcpwm_gpio_init (unidade PWM 0, saida B, porta GPIO) => Instance of MCPWM0B no pino GPIO_PWM0B_OUT declarado no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0, MCPWM0 mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // frequência = 500Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (dienssiklus) tot PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (dienssiklus) tot PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; // Vir MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Definieer die ciclo de trabalho em nível alto // Inicia (Unidade 0, Timer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0, & pwm_config); // Definieer PWM0A & PWM0B com as configurações acima}

Funksies

// 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 to 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 a porcentagem to 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 timer (0, 1 ou 2), Operador (A ou B), Nível do ciclo de trabalho (alto baixo)); => definieer 'n nuwe taak (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), Timo statiese leemte geborsel_motor_ agteruit (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 to PWM no Operador B (Ciclo de trabalho) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_B, MCPWM_DUTY_MODE_0); // definieer 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 to MCPWM no Operador A mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_B); // Desliga o sinal of MCPWM no Operador B}

Lus

leegte -lus () {// Skuif na motor sonder sentido horário geborsel_motor_ vorentoe (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled ("50"); vertraging (2000); // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); vertraging (2000); // Skuif na motor sonder sentido antihorário geborsel_motor_ agteruit (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled ("25"); vertraging (2000); // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); vertraging (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)); vertraging (200); } // Desaceleração i de 100 a 1 vertraging (5000); vir (int i = 100; i> = 10; i-) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (String (i)); vertraging (100); } vertraging (5000); }

Stap 9: Laai die lêers af

PDF

EK NEE

TEKENING

Aanbeveel: