Mundarija:

ESP32 bilan elektr turbinasi: 9 qadam
ESP32 bilan elektr turbinasi: 9 qadam

Video: ESP32 bilan elektr turbinasi: 9 qadam

Video: ESP32 bilan elektr turbinasi: 9 qadam
Video: ESP32, более мощная чем любая другая Ардуино 2024, Iyul
Anonim
Image
Image
Namoyish
Namoyish

Bugun men ESP32 bilan elektr turbinasini muhokama qilaman. Assambleyada 3D formatida chop etilgan qism mavjud. Men elektr motorlarini boshqarish uchun mos bo'lgan ESP32 PWM funktsiyasini taqdim etaman. Bu shahar motorida ishlatiladi. Men ham ushbu MCPWM (Motor Control PWM) ning ishlashini amaliy qo'llanmada ko'rsataman.

Men bu loyihada ESP32 LoRa -dan foydalandim va menimcha, bu mikrokontrollerning ichida ikkita blok borligini ta'kidlash kerak. Bu bloklar har biri uchta dvigatelni boshqarishga qodir. Shunday qilib, PWM bilan oltita dvigatelni mustaqil ravishda boshqarish mumkin. Bu shuni anglatadiki, men bu erda ishlatadigan boshqaruv standart emas (bu Arduino -ga o'xshash). Buning o'rniga, boshqaruv - bu chipning o'zi, bu ESP32 -ni motorni boshqarishga nisbatan ancha moslashuvchanligini kafolatlaydi.

1 -qadam: Namoyish

2 -qadam: PWM dvigatelini boshqarish

PWM dvigatelini boshqarish
PWM dvigatelini boshqarish
PWM dvigatelini boshqarish
PWM dvigatelini boshqarish

Umumiy diagramma:

• ESP32 ning MCPWM funktsiyasi har xil turdagi elektr motorlarini boshqarish uchun ishlatilishi mumkin. Unda ikkita birlik mavjud.

• Har bir qurilmada uchta PWM chiqish juftligi mavjud.

• Har bir chiqish A / B juftligi uchta sinxronizatsiya taymerlaridan biri bilan sinxronlashtirilishi mumkin 0, 1 yoki 2.

• Bitta PWM chiqish juftini sinxronlashtirish uchun bitta taymerdan foydalanish mumkin

To'liq diagramma:

• Har bir birlik, shuningdek, sinxronizatsiya belgilari sifatida kirish signallarini yig'ishga qodir;

• Haddan tashqari tok yoki dvigatelning haddan tashqari kuchlanishi uchun Nosozlik belgilarini aniqlash;

• CAPTURE SIGNALS yordamida Dvigatelning joylashuvi kabi fikr -mulohazalarni oling

3 -qadam: Ishlatilgan manbalar

Ishlatilgan manbalar
Ishlatilgan manbalar

• Ulanish uchun o'tish moslamalari

• Heltec Wi -Fi LoRa 32

• Umumiy shahar dvigateli

• H ko'prigi - L298N

• USB kabeli

• Protoboard

• Quvvatlantirish manbai

4 -qadam: ESP 32 Dev Kit - Pinout

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

5 -qadam: Turbina o'rnatish

Turbinani o'rnatish
Turbinani o'rnatish
Turbinani o'rnatish
Turbinani o'rnatish

6 -qadam: O'chirish - ulanishlar

O'chirish - ulanishlar
O'chirish - ulanishlar

7 -qadam: Osiloskopda o'lchash

Osiloskopda o'lchash
Osiloskopda o'lchash

8 -qadam: Manba kodi

Sarlavha

#qo'shish // Arduino IDE -ni ishlatish kerak emas "haydovchi/mcpwm.h" ni o'z ichiga oladi // "PWM dvigatelini boshqarish" bibliotekasini o'z ichiga oladi #ESP32 -ni o'z ichiga oladi // Arduino 1.6.5 va undan keyingi orqa qismlarga #qo'shish " SSD1306.h "// u mesmo que #include" SSD1306Wire.h "// OLED_SDA - GPIO4 // OLED_SCL - GPIO15 // OLED_RST - GPIO16 #define SDA 4 #define SCL 15 #destine RST 16 SSD1306 displeyi (0x3c, SDA, SCL, RST); // "displey" ni aniqlang #GPIO_PWM0A_OUT 12 ni aniqlang // Declara GPIO 12 ni PWM0A #ta'riflang GPIO_PWM0B_OUT 14 // Declara GPIO 14 ni PWM0B belgilang.

Sozlash

void setup () {Serial.begin (115200); display.init (); //display.flipScreenVertically (); // Vertikal ko'rinishdagi ekran.clear (); // ekranni ko'rsatish.setTextAlignment (TEXT_ALIGN_LEFT); // Arial 16 displey.setFont (ArialMT_Plain_16) uchun shrift; // mcpwm_gpio_init (bir martalik PWM 0, sa A, GPIO porti) => MCPWM0A o'rnatilmagan yoki GPIO_PWM0A_OUT e'lon qilinmagan, mcpwm_gpio_init (MCPWM_UNIT_0, MCP_PO00M, MCPWM0A) // mcpwm_gpio_init (bir xil PWM 0, saida B, GPIO porti) => MCPWM0B o'rnatilmagan yoki GPIO_PWM0B_OUT ko'rsatilmagan, mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0B, MCPWM0B) mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // chastota = 500Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (vazifa aylanishi) PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (vazifa aylanishi) PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; // MCPWM assimetrik parametrlari pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Bosh sahifani belgilang // Inicia (Unidade 0, Taymer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0, & pwm_config); // PWM0A va PWM0B com ni konfiguratsiya qilish sifatida belgilang}

Vazifalar

// MCPWM operatori A (Unidade, Taymer, Porcentagem (ciclo de trabalho)) statik bo'shligi brushed_motor_forward (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num, float ms_smol) (0, 1 ou 2), Operador (A ou B)); => MCPWM operatsion operatsiyalari yo'qligini aniqlang (Baixo ni aniqlang) mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_B); // mcpwm_set_duty (bir martalik PWM (0 ou 1), taymer taymeri (0, 1 ou 2), Operador (A ou B), Ciclo de trabalho (% PWM)); => Operator A (Ciclo de trabalho) mcpwm_set_duty (mcpwm_num, timer_num, MCPWM_OPR_A, duty_cycle) bilan PWM -ni sozlash. // mcpwm_set_duty_tyoe (bir martalik PWM (0 ou 1), taymer taymeri (0, 1 ou 2), Operador (A ou B), Nível do ciclo de trabalho (alto ou baixo)); => trapalho ni belgilang (alo ou baixo) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_A, MCPWM_DUTY_MODE_0); // Nota: "mcpwm_set_signal_low" yoki "mcpwm_set_signal_high" buyrug'iga binoan, bu funktsiyani bajaradi // // MCPWM operatsion tizimi B (Unicod, Timer) bilan ishlash. statik bo'shliq 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); // MCPWM operatsion operatsiyalari bo'lmagan holda (Baixo ni aniqlang) mcpwm_set_duty (mcpwm_num, timer_num, MCPWM_OPR_B, duty_cycle); // Operator B (Ciclo de trabalho) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_B, MCPWM_DUTY_MODE_0) bo'lmagan PWM konfiguratsiyasi; // aniq belgilang, albatta, trabalho! // Operator A mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_B) bo'lmagan MCPWM -ni aniq belgilash; // MCPWM operatsion operatori bo'lmagan holda

Loop

void loop () {// Dvigatelni siljitish uchun hech qanday vosita yo'q, brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled ("50"); kechikish (2000); // Dvigatel cho'tkasi_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); kechikish (2000); // Antihorário brushed_motor_backward motorini harakatlantiring (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled ("25"); kechikish (2000); // Dvigatel cho'tkasi_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); kechikish (2000); // Aceleracao i 1 a 100 uchun (int i = 10; i <= 100; i ++) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (String (i)); kechikish (200); } // Desaceleração i de 100 a 1 kechikish (5000); uchun (int i = 100; i> = 10; i-) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (String (i)); kechikish (100); } kechikish (5000); }

9 -qadam: Fayllarni yuklab oling

PDF

INO

Chizma

Tavsiya: