Inhoudsopgave:

Elektrische turbine met ESP32 - Ajarnpa
Elektrische turbine met ESP32 - Ajarnpa

Video: Elektrische turbine met ESP32 - Ajarnpa

Video: Elektrische turbine met ESP32 - Ajarnpa
Video: Magnet attack on mechanical water meter 2024, November
Anonim
Image
Image
Demonstratie
Demonstratie

Vandaag bespreek ik een elektrische turbine met ESP32. De assembly heeft een onderdeel dat in 3D is geprint. Ik zal een PWM-functie van de ESP32 presenteren die geschikt is voor het aansturen van elektromotoren. Dit wordt gebruikt in een gelijkstroommotor. Ook zal ik de werking van deze MCPWM (Motor Control PWM) in een praktische toepassing demonstreren.

Ik heb ESP32 LoRa in dit project gebruikt en ik denk dat het belangrijk is om hier op te merken dat deze microcontroller twee blokken bevat. Deze blokken kunnen elk drie motoren aansturen. Zo is het mogelijk om tot zes motoren met PWM te besturen, allemaal onafhankelijk. Dit betekent dat de besturing die ik hier zal gebruiken niet de standaard is (wat vergelijkbaar is met de Arduino). In plaats daarvan is de besturing de chip zelf, die de ESP32 veel flexibiliteit garandeert met betrekking tot motorbesturing.

Stap 1: Demonstratie

Stap 2: PWM-motorbesturing

PWM-motorbesturing
PWM-motorbesturing
PWM-motorbesturing
PWM-motorbesturing

Algemeen schema:

• De MCPWM-functie van de ESP32 kan worden gebruikt om verschillende typen elektromotoren aan te sturen. Het heeft twee eenheden.

• Elke unit heeft drie PWM-uitgangsparen.

• Elk output A/B-paar kan worden gesynchroniseerd met een van de drie synchronisatietimers 0, 1 of 2.

• Eén timer kan worden gebruikt om meer dan één PWM-uitgangspaar te synchroniseren

Volledig schema:

• Elke unit is ook in staat om ingangssignalen te verzamelen als SYNCHRONISATIESTEKENS;

• STORINGSTEKENS detecteren voor overstroom of motoroverspanning;

• Verkrijg feedback met CAPTURE SIGNALS, zoals de positie van de motor

Stap 3: Gebruikte bronnen

Gebruikte bronnen
Gebruikte bronnen

• Jumpers voor verbinding

• Heltec Wifi LoRa 32

• Gemeenschappelijke DC-motor

• Brug H - L298N

• USB-kabel

• Protobord

• Stroomvoorziening

Stap 4: ESP 32 Dev Kit - Pinout

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

Stap 5: Turbinemontage

Turbine montage
Turbine montage
Turbine montage
Turbine montage

Stap 6: Circuit - Aansluitingen

Circuit - Aansluitingen
Circuit - Aansluitingen

Stap 7: Meting op oscilloscoop

Meting op oscilloscoop
Meting op oscilloscoop

Stap 8: Broncode

kop

#include //No é 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 en 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

Opstelling

void setup() { Serial.begin(115200); weergave.init(); //display.flipScreenVertical(); //Vira een tela verticalmente display.clear(); // ajusta of alinhamento para a esquerda display.setTextAlignment (TEXT_ALIGN_LEFT); //ajusta a fonte para Arial 16 display.setFont (ArialMT_Plain_16); //mcpwm_gpio_init (enkele PWM 0, zei A, porta GPIO) => Instancia of MCPWM0A geen pino GPIO_PWM0A_OUT declarado geen começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWPW0A_GPIOOUT_WMP0A_) //mcpwm_gpio_init (enkele PWM 0, genoemde B, porta GPIO) => Instancia of MCPWM0B geen pino GPIO_PWM0B_OUT declarado geen começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWMP0B_GPIOOUT_WMP0B_GPIO); mcpwm_config_t pwm_config; pwm_config.frequentie = 1000; // frequentie = 500Hz, pwm_config.cmpr_a = 0; //Ciclo de trabalho (duty cycle) do PWMxA = 0 pwm_config.cmpr_b = 0; //Ciclo de trabalho (duty cycle) do PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; //Para MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; //Definieer een ciclo de trabalho em nivel alto //Inicia (Unidade 0, Timer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config); // Definieer PWM0A & PWM0B com als configuraties }

Functies

//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) {//mcsignalpwm_set_unis_timer (0, 1 of 2), Operador (A of B)); => Desliga of sinal do MCPWM no Operador B (Definieer of sinal em Baixo) mcpwm_set_signal_low(mcpwm_num, timer_num, MCPWM_OPR_B); //mcpwm_set_duty (unidade PWM (0 of 1), Número do timer (0, 1 of 2), Operador (A of B), Ciclo de trabalho (% van PWM)); => Configureer een 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 of 1), Número do timer (0, 1 of 2), Operador (A of B), Nivel do ciclo de trabalho (alto of baixo)); => definieer een nieuw begin (alto of 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" of "mcpwm_set_signal_high" para manter o ciclo de trabalho configurado anteriormente} //Função que configura o MCPWM Do operador B () statische leegte 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 (Definieer 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 nivel do ciclo de trabalho (alto of 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_timer_t timer_num) {mcpwm_timer_t timer_num) {mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num) {mcpwm_timer_t timer_num) {mcpwm_timer_t timer_num) { // Desliga of sinal do MCPWM no Operador A mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_B); //Desliga of sinal do MCPWM geen Operador B}

Lus

void loop () {// Move o motor no sentido horário brushed_motor_forward (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); // Verplaats de motor geen sentido antihorário brushed_motor_backward (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 een 1 vertraging (5000); for(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: Download de bestanden

PDF

INO

TEKENING

Aanbevolen: