ዝርዝር ሁኔታ:

የኤሌክትሪክ ተርባይን በ ESP32: 9 ደረጃዎች
የኤሌክትሪክ ተርባይን በ ESP32: 9 ደረጃዎች

ቪዲዮ: የኤሌክትሪክ ተርባይን በ ESP32: 9 ደረጃዎች

ቪዲዮ: የኤሌክትሪክ ተርባይን በ ESP32: 9 ደረጃዎች
ቪዲዮ: ሞባይል ስልካችንን በመጠቀም ከየትኛውም ቦታ ሆነን እንዴት የኤሌክትሪክ እቃዎችን መቆጣጠር እንችላለን? 2024, ሀምሌ
Anonim
Image
Image
ሰልፍ
ሰልፍ

ዛሬ ፣ ከኤስፒፒ 32 ጋር በኤሌክትሪክ ተርባይን ላይ እወያያለሁ። ስብሰባው በ 3 ዲ የታተመ አንድ ክፍል አለው። የኤሌክትሪክ ሞተሮችን ለመቆጣጠር ተስማሚ የሆነውን የ ESP32 የ PWM ተግባር አቀርባለሁ። ይህ በዲሲ ሞተር ውስጥ ጥቅም ላይ ይውላል። እኔ ደግሞ በተግባራዊ ትግበራ ውስጥ የዚህን MCPWM (የሞተር ቁጥጥር PWM) አሠራር አሣያለሁ።

በዚህ ፕሮጀክት ውስጥ ESP32 LoRa ን እጠቀም ነበር ፣ እና እዚህ ይህ ማይክሮ መቆጣጠሪያ በውስጡ ሁለት ብሎኮች እንዳሉት ልብ ማለት አስፈላጊ ይመስለኛል። እነዚህ ብሎኮች እያንዳንዳቸው ሶስት ሞተሮችን የመቆጣጠር ችሎታ አላቸው። ስለሆነም በ PWM እስከ ስድስት ሞተሮችን መቆጣጠር ይቻላል ፣ ሁሉም በተናጥል። ይህ ማለት እኔ እዚህ የምጠቀምበት መቆጣጠሪያ ደረጃው አይደለም (እሱም ከአርዲኖ ጋር ተመሳሳይ ነው)። ይልቁንስ መቆጣጠሪያው ራሱ ቺፕ ነው ፣ ይህም ለ ESP32 የሞተር መቆጣጠሪያን ብዙ ተጣጣፊነትን የሚያረጋግጥ ነው።

ደረጃ 1 - ሰልፍ

ደረጃ 2 PWM የሞተር ቁጥጥር

PWM የሞተር ቁጥጥር
PWM የሞተር ቁጥጥር
PWM የሞተር ቁጥጥር
PWM የሞተር ቁጥጥር

አጠቃላይ ንድፍ:

• የ ESP32 የ MCPWM ተግባር የተለያዩ የኤሌክትሪክ ሞተሮችን ዓይነቶች ለመቆጣጠር ሊያገለግል ይችላል። ሁለት አሃዶች አሉት።

• እያንዳንዱ ክፍል ሦስት PWM ውፅዓት ጥንዶች አሉት።

• እያንዳንዱ የውጤት ኤ / ቢ ጥንድ ከሶስት የማመሳሰል ጊዜ ቆጣሪዎች 0 ፣ 1 ወይም 2 በአንዱ ሊመሳሰል ይችላል።

• አንድ ሰዓት ቆጣሪ ከአንድ በላይ የ PWM ውፅዓት ጥንድን ለማመሳሰል ሊያገለግል ይችላል

ሙሉ ንድፍ:

• እያንዳንዱ አሃድ እንዲሁ የግብዓት ምልክቶችን እንደ ሲኖክሮኒዜሽን ምልክቶች የመሰብሰብ ችሎታ አለው ፤

• ለትርፍ ጊዜ ወይም ለሞተር ከልክ በላይ መጨናነቅ የተሳሳቱ ምልክቶችን ያግኙ ፤

• እንደ ሞተሩ አቀማመጥ ካሉ በ CAPTURE SIGNALS ግብረመልስ ያግኙ

ደረጃ 3 - ያገለገሉ ሀብቶች

ጥቅም ላይ የዋሉ ሀብቶች
ጥቅም ላይ የዋሉ ሀብቶች

• ዝላይዎች ለግንኙነት

• Heltec Wifi LoRa 32

• የጋራ የዲሲ ሞተር

• ድልድይ ሸ - L298N

• የዩኤስቢ ገመድ

• ፕሮቶቦርድ

• ገቢ ኤሌክትሪክ

ደረጃ 4: ESP 32 Dev Kit - Pinout

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

ደረጃ 5 ተርባይን መጫኛ

ተርባይን መጫኛ
ተርባይን መጫኛ
ተርባይን መጫኛ
ተርባይን መጫኛ

ደረጃ 6 - ወረዳ - ግንኙነቶች

ወረዳ - ግንኙነቶች
ወረዳ - ግንኙነቶች

ደረጃ 7 - በኦስሴስኮስኮፕ ላይ መለካት

በ Oscilloscope ላይ መለካት
በ Oscilloscope ላይ መለካት

ደረጃ 8: የምንጭ ኮድ

ራስጌ

#ያካትቱ // Não é necessário caso Arduino IDE ን ይጠቀሙ #“ሾፌር/mcpwm.h” // ን ጨምሮ “የሞተር ቁጥጥር PWM” ናቲቫ እስከ ESP32 #ያካትታል/Necessário apenas para o Arduino 1.6.5 e posterior #include” SSD1306.h "// o mesmo que #ያካትቱ" SSD1306Wire.h "// OLED_SDA - GPIO4 // OLED_SCL - GPIO15 // OLED_RST - GPIO16 #ዴፊኔ ኤስዲኤ 4 #ዲፊን SCL 15 #define RST 16 SSD1306 ማሳያ (0x3c ፣ SDA ፣ SCL ፣ RST); // Instanciando e ajustando os pinos do objeto “display” #define GPIO_PWM0A_OUT 12 // Declara GPIO 12 como PWM0A #depine GPIO_PWM0B_OUT 14 // Declara GPIO 14 como PWM0B

አዘገጃጀት

ባዶነት ማዋቀር () {Serial.begin (115200); display.init (); // ማሳያ። // ቪራ አንድ ቴላ 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) => Instancia o MCPWM0A no pino GPIO_PWM0A_OUT declarado no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0A, GPWM0A, GPOM0A, MCPWM0A // mcpwm_gpio_init (unidade PWM 0 ፣ saida B ፣ porta GPIO) => Instancia o MCPWM0B no pino GPIO_PWM0B_OUT declarado no começo do código mcpwm_gpio_init (MCPWM_UNIT_0 ፣ MCPWM0B ፣ GPBMT mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // frequência = 500Hz ፣ pwm_config.cmpr_a = 0; // Ciclo de trabalho (የግዴታ ዑደት) PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (የግዴታ ዑደት) PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER ያድርጉ ፤ // ፓራ MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // ciclo de trabalho em nível alto // Inicia (Unidade 0 ፣ Timer 0 ፣ Config PWM) mcpwm_init (MCPWM_UNIT_0 ፣ MCPWM_TIMER_0 ፣ & pwm_config) ፤ // PWM0A & PWM0B com ን እንደአዋቀረው acima} ይግለጹ

ተግባራት

// Função que configura o MCPWM operador A (Unidade, Timer, Porcentagem (ciclo de trabalho)) የማይንቀሳቀስ ባዶ brushed_motor_forward (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num, float duty_cycle) {// mcp (0 ፣ 1 ወይም 2) ፣ ኦፔራዶር (ሀ ለ ቢ)); => ደሴሊጋ ሲፒኤምፒኤምኤም ኦፔራዶር ቢ (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 (% PWM ያድርጉ)); => የፒሲኤም ኦፔራዶር ኤ (ሲክሎ ደ 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)); => ciclo de trabalho (alto ou baixo) mcpwm_set_duty_type (mcpwm_num ፣ timer_num ፣ MCPWM_OPR_A ፣ MCPWM_DUTY_MODE_0) የሚለውን ይግለጹ ፤ // ማሳሰቢያ: ቻሜ ኢሳ 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, Timer, Porcent, የማይንቀሳቀስ ባዶ ባዶ ብሩሽ_ሞተር_ኋላ (mcpwm_unit_t mcpwm_num ፣ mcpwm_timer_t timer_num ፣ float duty_cycle) {mcpwm_set_signal_low (mcpwm_num ፣ timer_num ፣ MCPWM_OPR_A); // ደሴሊጋ ሲፒኤምፒኤምኤም ኦፔራዶር ኤ (ፍቺ o sinal em Baixo) mcpwm_set_duty (mcpwm_num ፣ timer_num ፣ MCPWM_OPR_B ፣ duty_cycle); // የአስተዋዋቂውን PWM ን ያለ Operador B (Ciclo de trabalho) mcpwm_set_duty_type (mcpwm_num ፣ timer_num ፣ MCPWM_OPR_B ፣ MCPWM_DUTY_MODE_0) ያድርጉ። // ፍቺው ሲክሎ ዴ ትራባልሆ (አልቶ 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) {mcpwm_n_Mum_m_Mum_m_Mum_m // በደሴቲቱ ላይ ለ MCPWM ምንም ኦፔራዶር ኤ mcpwm_set_signal_low (mcpwm_num ፣ timer_num ፣ MCPWM_OPR_B); // ደሴሊጋ ወይም ኃጢአት በ MCPWM ምንም ኦፔራዶር ለ}

ሉፕ

ባዶነት loop () {// አንቀሳቅስ ሞተር የለም sentido horário brushed_motor_forward (MCPWM_UNIT_0 ፣ MCPWM_TIMER_0 ፣ 50.0); ዘይት ("50"); መዘግየት (2000); // ፓራ ኦ ሞተር ብሩሽ_ሞቶር ማቆሚያ (MCPWM_UNIT_0 ፣ MCPWM_TIMER_0); ዘይት ("0"); መዘግየት (2000); // አንቀሳቅስ ሞተርን ምንም ሴኪዶ antihorário brushed_motor_backward (MCPWM_UNIT_0 ፣ MCPWM_TIMER_0 ፣ 25.0); ዘይት ("25"); መዘግየት (2000); // ፓራ ኦ ሞተር ብሩሽ_ሞተር_ስታፕ (MCPWM_UNIT_0 ፣ MCPWM_TIMER_0); ዘይት ("0"); መዘግየት (2000); // Aceleracao i de 1 a 100 ለ (int i = 10; i <= 100; i ++) {brushed_motor_forward (MCPWM_UNIT_0 ፣ MCPWM_TIMER_0 ፣ i) ፤ ዘይት (ሕብረቁምፊ (i)); መዘግየት (200); } // Desaceleração i de 100 a 1 መዘግየት (5000); ለ (int i = 100; i> = 10; i-) {brushed_motor_forward (MCPWM_UNIT_0 ፣ MCPWM_TIMER_0 ፣ i); ዘይት (ሕብረቁምፊ (i)); መዘግየት (100); } መዘግየት (5000); }

ደረጃ 9 ፋይሎቹን ያውርዱ

ፒዲኤፍ

INO

ስዕል

የሚመከር: