Sadržaj:
- Korak 1: Demonstracija
- Korak 2: Upravljanje PWM motorom
- Korak 3: Korišteni resursi
- Korak 4: ESP 32 Dev Kit - Pinout
- Korak 5: Montaža turbine
- Korak 6: Krug - veze
- Korak 7: Mjerenje na osciloskopu
- Korak 8: Izvorni kod
- Korak 9: Preuzmite datoteke
Video: Električna turbina s ESP32: 9 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
Danas ću razgovarati o električnoj turbini s ESP32. Sklop ima dio koji je tiskan u 3D. Predstavit ću PWM funkciju ESP32 koja je prikladna za upravljanje elektromotorima. To će se koristiti u istosmjernom motoru. Također ću pokazati rad ovog MCPWM -a (Motor Control PWM) u praktičnoj primjeni.
U ovom sam projektu koristio ESP32 LoRa i mislim da je važno napomenuti da ovaj mikrokontroler ima dva bloka unutar sebe. Ovi blokovi mogu upravljati po tri motora. Tako je moguće upravljati do šest motora s PWM -om, svi neovisno. To znači da kontrola koju ću ovdje koristiti nije standardna (što je nešto slično Arduinu). Umjesto toga, kontrola je sam čip, koji jamči ESP32 -u veliku fleksibilnost u pogledu upravljanja motorom.
Korak 1: Demonstracija
Korak 2: Upravljanje PWM motorom
Opći dijagram:
• Funkcija MCPWM ESP32 može se koristiti za upravljanje raznim vrstama elektromotora. Ima dvije jedinice.
• Svaka jedinica ima tri PWM izlazna para.
• Svaki izlazni A / B par može se sinkronizirati s jednim od tri sinkronizacijska brojača 0, 1 ili 2.
• Jedan mjerač vremena može se koristiti za sinkronizaciju više od jednog PWM izlaznog para
Cijeli dijagram:
• Svaka jedinica također može prikupljati ulazne signale kao SINKRONIZACIJSKI ZNAKOVI;
• Otkrijte ZNAKE KVARA za prekostruju ili prenapon motora;
• Dobijte povratne informacije pomoću SIGNALA ZA HVATANJE, kao što je položaj motora
Korak 3: Korišteni resursi
• Kratkospojnici za spajanje
• Heltec Wi -Fi LoRa 32
• Uobičajeni istosmjerni motor
• Most H - L298N
• USB kabl
• Protoboard
• Napajanje
Korak 4: ESP 32 Dev Kit - Pinout
Korak 5: Montaža turbine
Korak 6: Krug - veze
Korak 7: Mjerenje na osciloskopu
Korak 8: Izvorni kod
Zaglavlje
#include // Nije vam potrebno Caso korištenje Arduino IDE #include "driver/mcpwm.h" // uključuje biblioteku "Motor Control PWM" nativa do ESP32 #include // Potrebni apeni za Arduino 1.6.5 i posteriorno #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
Postaviti
void setup () {Serial.begin (115200); display.init (); //display.flipScreenVertical (); // Vira a tela verticalmente display.clear (); // ajusta o alinhamento para 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) => Instancija o MCPWM0A bez pinoa GPIO_PWM0A_OUT deklarirano da ne dolazi do codiga mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0A; MCPWM0A; // mcpwm_gpio_init (unidade PWM 0, saida B, porta GPIO) => Instancija o MCPWM0B bez pinoa GPIO_PWM0B_OUT deklarirano da ne dolazi do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0BP_M0_MPWM0B0_MPWM0B0_MPWM0_0, MCPWM0_0; mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // frekvencija = 500Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (radni ciklus) do PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (radni ciklus) do PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; // Za MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Definiraj ciclo de trabalho em nível alto // Inicia (Unidade 0, Timer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0, & pwm_config); // Definirajte PWM0A & PWM0B com kao konfiguraciju acima}
Funkcije
// Funkão que configuration 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) {// mc timer (0, 1 ili 2), Operador (A ili B)); => Desliga o sinal do MCPWM bez Operadora B (Definiraj 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)); => Konfigurirajte porcentagem za PWM bez Operadora 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 ou baixo)); => definirati ni do ciclo de trabalho (alto ou baixo) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_A, MCPWM_DUTY_MODE_0); // Napomena: 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,, statička praznina 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 (Definiraj sinal em Baixo) mcpwm_set_duty (mcpwm_num, timer_num, MCPWM_OPR_B, duty_cycle); // Konfiguriranje porcentaža za PWM bez Operadora B (Ciclo de trabalho) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_B, MCPWM_DUTY_MODE_0); // definirati 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) {mcpw_ timer_num // Desliga o sinal do MCPWM bez Operadora A mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_B); // Desliga o sinal do MCPWM bez Operadora B}
Petlja
void loop () {// Pomakni motor bez sentido horário brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50,0); oled ("50"); odgoda (2000); // Parametar motora brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); odgoda (2000); // Pomakni motor bez senzora antihorário brushed_motor_backward (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled ("25"); odgoda (2000); // Parametar motora brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); odgoda (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 (niz (i)); kašnjenje (200); } // Desaceleração i de 100 a 1 kašnjenje (5000); za (int i = 100; i> = 10; i-) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (niz (i)); kašnjenje (100); } kašnjenje (5000); }
Korak 9: Preuzmite datoteke
INO
CRTANJE
Preporučeni:
Električna LED značka: 4 koraka
Električna LED značka: Noć vještica se bliži. Razmišljate li o ukrašavanju i odijevanju? Bit će sjajno ako imate ekskluzivnu električnu LED značku. Stoga ćemo danas razgovarati o tome kako napraviti takvu električnu značku
Električna naljepnica: Ideas Para Hackear La Ciudad: 5 koraka
Električna naljepnica: Ideas Para Hackear La Ciudad: Podemos utilizar los postes de la ciudad para hacer diversas cosas, haremos un sticker for hacer un controlador and jugar pac-man.Materiales Vinil Tinta conductiva Kit Makey Makey (sa spojevima za aligator i kablom USB. Herramientas Plotter de
Električna gitara za cigare: 18 koraka (sa slikama)
Električna gitarska kutija za cigare: Iako je proizvodnja gitara u posljednjih stotinu godina napredovala, postoji duga povijest koja pokazuje da vam za izradu gitare ne treba mnogo. Sve što vam je potrebno je kutija za odjek zvuka, daska koja će djelovati kao gredica, nekoliko vijaka
Električna svijeća sa svijećom: 8 koraka (sa slikama)
Električna svijeća na svjećice: Nakon što sam vidjela vijesti o uraganu Sandy i čula muku kroz koju su prošli cijela moja obitelj i prijatelji u New Yorku i New Jerseyju, pomislila sam na svoju pripravnost za hitne slučajeve. San Francisco - uostalom - sjedi na vrhu nekih vrlo
Električna brava za vrata sa skenerom otiska prsta i RFID čitačem: 11 koraka (sa slikama)
Električna brava na vratima sa skenerom otiska prsta i RFID čitačem: Projekt je dizajniran kako bi se izbjegla potreba korištenja ključeva, a za postizanje našeg cilja koristili smo optički senzor otiska prsta i Arduino. Međutim, postoje pojedinci koji imaju nečitljiv otisak prsta i senzor ga neće prepoznati. Zatim razmišljam o