Spisu treści:

Turbina elektryczna z ESP32: 9 kroków
Turbina elektryczna z ESP32: 9 kroków

Wideo: Turbina elektryczna z ESP32: 9 kroków

Wideo: Turbina elektryczna z ESP32: 9 kroków
Wideo: Jak zrobić tani wolnoobrotowy generator prądu do elektrowni wiatrowej 12V, 24V, 48V 2024, Listopad
Anonim
Image
Image
Demonstracja
Demonstracja

Dzisiaj będę omawiał turbinę elektryczną z ESP32. Zespół posiada część wydrukowaną w 3D. Przedstawię funkcję PWM ESP32, która nadaje się do sterowania silnikami elektrycznymi. Będzie to używane w silniku prądu stałego. Pokażę też działanie tego MCPWM (Motor Control PWM) w praktycznym zastosowaniu.

W tym projekcie użyłem ESP32 LoRa i myślę, że warto tutaj zaznaczyć, że ten mikrokontroler ma w sobie dwa bloki. Te bloki są w stanie sterować trzema silnikami każdy. Dzięki temu możliwe jest sterowanie do sześciu silników za pomocą PWM, wszystkie niezależnie. Oznacza to, że sterowanie, którego tutaj użyję, nie jest standardem (co jest czymś podobnym do Arduino). Zamiast tego sterowanie jest samym chipem, co gwarantuje ESP32 dużą elastyczność w zakresie sterowania silnikiem.

Krok 1: Demonstracja

Krok 2: Sterowanie silnikiem PWM

Sterowanie silnikiem PWM
Sterowanie silnikiem PWM
Sterowanie silnikiem PWM
Sterowanie silnikiem PWM

Ogólny schemat:

• Funkcja MCPWM ESP32 może być wykorzystana do sterowania różnymi typami silników elektrycznych. Posiada dwie jednostki.

• Każde urządzenie ma trzy pary wyjść PWM.

• Każda para wyjść A / B może być synchronizowana z jednym z trzech zegarów synchronizacji 0, 1 lub 2.

• Jeden Timer może być użyty do synchronizacji więcej niż jednej pary wyjść PWM

Pełny schemat:

• Każda jednostka może również zbierać sygnały wejściowe jako ZNAKI SYNCHRONIZACJI;

• Wykrywanie ZNAKÓW BŁĘDÓW dla przetężenia lub przepięcia silnika;

• Uzyskaj informacje zwrotne za pomocą SYGNAŁÓW PRZECHWYTU, takich jak położenie silnika

Krok 3: Wykorzystane zasoby

Wykorzystane zasoby
Wykorzystane zasoby

• Zworki do podłączenia

• Heltec Wi-Fi LoRa 32

• Wspólny silnik prądu stałego

• Mostek H - L298N

• kabel USB

• Płyta prototypowa

• Zasilacz

Krok 4: Zestaw deweloperski ESP 32 - Pinout

Zestaw deweloperski ESP 32 - pinout
Zestaw deweloperski ESP 32 - pinout

Krok 5: Montaż turbiny

Montaż turbiny
Montaż turbiny
Montaż turbiny
Montaż turbiny

Krok 6: Obwód - połączenia

Obwód - połączenia
Obwód - połączenia

Krok 7: Pomiar na oscyloskopie

Pomiar na oscyloskopie
Pomiar na oscyloskopie

Krok 8: Kod źródłowy

nagłówek

#include //Nie trzeba używać Arduino IDE#include "driver/mcpwm.h" //włącz bibliotekę "Motor Control PWM" natywną do ESP32 #include // Niezbędne dla Arduino 1.6.5 i później #include SSD1306.h" // o pytanie #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

Ustawiać

void setup() { Serial.begin(115200); display.init(); //display.flipScreenPionowo(); //Przejdź do ekranu pionowego display.clear(); //dostosuj ustawienie do wyświetlania.setTextAlignment(TEXT_ALIGN_LEFT); //ustaw czcionkę dla Arial 16 display.setFont(ArialMT_Plain_16); //mcpwm_gpio_init(unidade PWM 0, saya A, porta GPIO) => Instancja MCPWM0A brak pinu GPIO_PWM0A_OUT deklaruje brak kodu mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM_0); //mcpwm_gpio_init(unidade PWM 0, saya B, porta GPIO) => Instancja MCPWM0B brak pinu GPIO_PWM0B_OUT deklaruje brak kodu mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM_0; MCPWM_0); mcpwm_config_t pwm_config; pwm_config.częstotliwość = 1000; //częstotliwość = 500Hz, pwm_config.cmpr_a = 0; //Ciclo de trabalho (cykl pracy) do PWMxA = 0 pwm_config.cmpr_b = 0; //Ciclo de trabalho (cykl pracy) do PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; //Para MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; //Zdefiniuj cykl pracy na wysokim poziomie //Inicia(Unidade 0, Timer 0, Config PWM) mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config); //Zdefiniuj PWM0A i PWM0B com jako configurações acima }

Funkcje

//Zabawa w konfigurowanie operatora A MCPWM (Unidade, Timer, Porcentagem (cykl pracy)) static void brushed_motor_forward(mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num, float duty_cycle) { //set0_ocpwm_timer_ (0, 1 lub 2), Operador (A lub B)); => Zapisz do MCPWM bez Operadora B (Definiuj zapisz w Baixo) mcpwm_set_signal_low(mcpwm_num, timer_num, MCPWM_OPR_B); //mcpwm_set_duty(unidade PWM (0 lub 1), liczba do timera (0, 1 lub 2), Operador (A lub B), Ciclo de trabalho (% do PWM)); => Konfiguracja części do PWM bez Operadora A (Cilo de Trabalho) mcpwm_set_duty(mcpwm_num, timer_num, MCPWM_OPR_A, duty_cycle); //mcpwm_set_duty_tyoe (jednostajne PWM (0 lub 1), Numer do timera (0, 1 lub 2), Operador (A lub B), Nivel do cyklu pracy (alto lub baixo)); => zdefiniuj nowy cykl pracy (alto lub baixo) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_A, MCPWM_DUTY_MODE_0); //Uwaga: Chame essa função toda vez que for chamado „mcpwm_set_signal_low” lub „mcpwm_set_signal_high” na potrzeby wcześniejszej konfiguracji trabalho } //Função que configura MCPWM Doradztwo, TimerhoUnid) () 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 bez Operadora A (Definiuj sinal em Baixo) mcpwm_set_duty(mcpwm_num, timer_num, MCPWM_OPR_B, duty_cycle); //Konfiguruj porcentagem do PWM bez Operadora B (Cilo de trabalho) mcpwm_set_duty_type(mcpwm_num, timer_num, MCPWM_OPR_B, MCPWM_DUTY_MODE_0); //zdefiniuj nowy cykl pracy (alto lub baixo) } //Função que MCPWM de ambos dla operatorów Operadores static void brushed_motor_stop(mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_mlow_num, PW_pww timerA) {mcpwm timerA; //Deliga do MCPWM bez Operadora A mcpwm_set_signal_low(mcpwm_num, timer_num, MCPWM_OPR_B); //Desliga o sinal do MCPWM bez Operadora B }

Pętla

void loop() { //Przenieś silnik bez wysyłania horario brushed_motor_forward(MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled("50"); opóźnienie (2000); //Para o silnik brushed_motor_stop(MCPWM_UNIT_0, MCPWM_TIMER_0); oled("0"); opóźnienie (2000); //Przenieś silnik bez wysyłania antyhorario brushed_motor_backward(MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled("25"); opóźnienie (2000); //Para o silnik brushed_motor_stop(MCPWM_UNIT_0, MCPWM_TIMER_0); oled("0"); opóźnienie (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(Ciąg(i)); opóźnienie(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(Ciąg(i)); opóźnienie (100); } opóźnienie(5000); }

Krok 9: Pobierz pliki

PDF

JA NIE

RYSUNEK

Zalecana: