Найти тему

LONG and yes : 28byj-48 , GRB, esp32

Цель: Используя драйвер Lm2003а обеспечить вращения шагового двигателя, а и пользователям научиться пошаговым инструкциям. 🙄

согласно таблице воздействия на механизм двигателя. А ранее был получен результат по управлению GRB LED светодиодами.

нужная вещь для  кода управления
нужная вещь для кода управления

точный шаг и ровный миг в метрологию манит -

Да допустимо отклоненья в диапазоне соприкосновенья.

Очевидно посчитать и программной подогнать

ваши представления к вероятности воззренья

в нужный сектор сразу, хоть и медленно , но разом.

По цене и качеству двигатель 28byj-48 к чудачеству.🤔?

В общем схему набросал ниже. РАБОЧАЯ😞

такая получилась схема.
такая получилась схема.

кстати хотел такую , но перепутал GPIO6 и VIn (это когда 180') и крепим и не перепроверяем.🤢

такой схемы нет  - нерабочая   да да да🤑
такой схемы нет - нерабочая да да да🤑

Итак запускаем espressif согласно карте операций.

карта операций.
карта операций.

далее создадим проект.

так создадим проект
так создадим проект

согласно пунктам выше выполним операции .

по пунктам ниже надо довершить часть дела

два пункта карты операции
два пункта карты операции

Вводим код согласно эл. схеме и он ниже в файл mail.c

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"
static const char *TAG = "example";
#define max_count 15
#define BLINK_GPIO CONFIG_BLINK_GPIO
#define BLINK_GPIO_A CONFIG_BLINK_GPIO_A
#define BLINK_GPIO_B CONFIG_BLINK_GPIO_B
#define BLINK_GPIO_C CONFIG_BLINK_GPIO_C
#define BLINK_GPIO_D CONFIG_BLINK_GPIO_D
#define BLINK_GPIO_E CONFIG_BLINK_GPIO_E
#define BLINK_GPIO_J CONFIG_BLINK_GPIO_J
static uint8_t s_led_state = 0;
static uint8_t s_led_count = 0;
static uint8_t s_MTR_count = 8;
//static led_strip_handle_t led_strip;
static void NULL_led(int tik)
{ vTaskDelay(tik / portTICK_PERIOD_MS);
gpio_set_level(BLINK_GPIO_D, 0);gpio_set_level(BLINK_GPIO_E, 0);
gpio_set_level(BLINK_GPIO_J, 0);gpio_set_level(BLINK_GPIO, 0 );
}/////////////////////
static void blink_led(void)
{ if (s_MTR_count==0){
gpio_set_level(BLINK_GPIO_D, 0);gpio_set_level(BLINK_GPIO_E, 0);
gpio_set_level(BLINK_GPIO_J, 0);gpio_set_level(BLINK_GPIO, 1 );}
if (s_MTR_count==1){
gpio_set_level(BLINK_GPIO_D, 0);gpio_set_level(BLINK_GPIO_E, 0);
gpio_set_level(BLINK_GPIO_J, 1 );gpio_set_level(BLINK_GPIO, 1); }
if (s_MTR_count==2){
gpio_set_level(BLINK_GPIO_D, 0);gpio_set_level(BLINK_GPIO_E, 0);
gpio_set_level(BLINK_GPIO_J, 1);gpio_set_level(BLINK_GPIO, 0); }
if (s_MTR_count==3){
gpio_set_level(BLINK_GPIO_D, 0);gpio_set_level(BLINK_GPIO_E, 1);
gpio_set_level(BLINK_GPIO_J, 1 );gpio_set_level(BLINK_GPIO, 0); }
if (s_MTR_count==4){
gpio_set_level(BLINK_GPIO_D, 0);gpio_set_level(BLINK_GPIO_E, 1);
gpio_set_level(BLINK_GPIO_J, 0 );gpio_set_level(BLINK_GPIO, 0); }
if (s_MTR_count==5){
gpio_set_level(BLINK_GPIO_D, 1);gpio_set_level(BLINK_GPIO_E, 1);
gpio_set_level(BLINK_GPIO_J, 0 );gpio_set_level(BLINK_GPIO, 0); }
if (s_MTR_count==6){
gpio_set_level(BLINK_GPIO_D, 1);gpio_set_level(BLINK_GPIO_E, 0);
gpio_set_level(BLINK_GPIO_J, 0);gpio_set_level(BLINK_GPIO, 0); }
if (s_MTR_count==7){
gpio_set_level(BLINK_GPIO_D, 1);gpio_set_level(BLINK_GPIO_E, 0);
gpio_set_level(BLINK_GPIO_J, 0 );gpio_set_level(BLINK_GPIO, 1); }
//////////////
if (s_MTR_count==8){
gpio_set_level(BLINK_GPIO_D, 1);gpio_set_level(BLINK_GPIO_E, 1);
gpio_set_level(BLINK_GPIO_J, 1);gpio_set_level(BLINK_GPIO, 0 );}
if (s_MTR_count==9){
gpio_set_level(BLINK_GPIO_D, 1);gpio_set_level(BLINK_GPIO_E, 1);
gpio_set_level(BLINK_GPIO_J, 0 );gpio_set_level(BLINK_GPIO, 0); }
if (s_MTR_count==10){
gpio_set_level(BLINK_GPIO_D, 1);gpio_set_level(BLINK_GPIO_E, 1);
gpio_set_level(BLINK_GPIO_J, 0);gpio_set_level(BLINK_GPIO, 1); }
if (s_MTR_count==11){
gpio_set_level(BLINK_GPIO_D, 1);gpio_set_level(BLINK_GPIO_E, 0);
gpio_set_level(BLINK_GPIO_J, 0 );gpio_set_level(BLINK_GPIO, 1); }
if (s_MTR_count==12){
gpio_set_level(BLINK_GPIO_D, 1);gpio_set_level(BLINK_GPIO_E, 0);
gpio_set_level(BLINK_GPIO_J, 1 );gpio_set_level(BLINK_GPIO, 1); }
if (s_MTR_count==13){
gpio_set_level(BLINK_GPIO_D, 0);gpio_set_level(BLINK_GPIO_E, 0);
gpio_set_level(BLINK_GPIO_J, 1 );gpio_set_level(BLINK_GPIO, 1); }
if (s_MTR_count==14){
gpio_set_level(BLINK_GPIO_D, 0);gpio_set_level(BLINK_GPIO_E, 1);
gpio_set_level(BLINK_GPIO_J, 1);gpio_set_level(BLINK_GPIO, 1); }
if (s_MTR_count==15){
gpio_set_level(BLINK_GPIO_D, 0); gpio_set_level(BLINK_GPIO_E, 1);
gpio_set_level(BLINK_GPIO_J, 1); gpio_set_level(BLINK_GPIO, 0); }
gpio_set_level(BLINK_GPIO_A, 0);
gpio_set_level(BLINK_GPIO_B, 0);
gpio_set_level(BLINK_GPIO_C, 0);
if (s_led_count==3) { gpio_set_level(BLINK_GPIO_A,1);return;}
if (s_led_count==4) { gpio_set_level(BLINK_GPIO_B, 1);return;}
if (s_led_count==5) { gpio_set_level(BLINK_GPIO_C, 1);return;}
if (s_led_count==6) { gpio_set_level(BLINK_GPIO_A, 1);return;}
if (s_led_count==7) { gpio_set_level(BLINK_GPIO_A, 1);
gpio_set_level(BLINK_GPIO_B, 1);return;}
if (s_led_count==8) { gpio_set_level(BLINK_GPIO_A, 1);
gpio_set_level(BLINK_GPIO_C, 1);return;}
if (s_led_count==9) { gpio_set_level(BLINK_GPIO_B, 1);
gpio_set_level(BLINK_GPIO_C, 1);return;}
if (s_led_count==10) { gpio_set_level(BLINK_GPIO_A, 1);
gpio_set_level(BLINK_GPIO_B, 1);
gpio_set_level(BLINK_GPIO_C, 1);return;}
}//////////////////////
static void configure_led(void)
{ ESP_LOGI(TAG, "Example configured to blink GPIO LED!");
gpio_reset_pin(BLINK_GPIO);
gpio_reset_pin(BLINK_GPIO_A); gpio_reset_pin(BLINK_GPIO_C);
gpio_reset_pin(BLINK_GPIO_D); gpio_reset_pin(BLINK_GPIO_B);
gpio_reset_pin(BLINK_GPIO_E); gpio_reset_pin(BLINK_GPIO_J);
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
gpio_set_direction(BLINK_GPIO_A, GPIO_MODE_OUTPUT);
gpio_set_direction(BLINK_GPIO_B, GPIO_MODE_OUTPUT);
gpio_set_direction(BLINK_GPIO_C, GPIO_MODE_OUTPUT);
gpio_set_direction(BLINK_GPIO_D, GPIO_MODE_OUTPUT);
gpio_set_direction(BLINK_GPIO_E, GPIO_MODE_OUTPUT);
gpio_set_direction(BLINK_GPIO_J, GPIO_MODE_OUTPUT);
}/////////////////////////////////////////////////
void app_main(void)
{ configure_led(); int len_led=10;
while (1) { if (len_led>CONFIG_BLINK_PERIOD) len_led=0;
ESP_LOGI(TAG, "Turning the LED %s! %d", s_led_state == true ? "ON" : "OFF",s_led_count);
blink_led(); s_led_state = !s_led_state; s_led_count++; s_MTR_count++;
if (s_led_count>max_count) s_led_count=0;
if (s_MTR_count>7 ) s_MTR_count=0; NULL_led(len_led);
vTaskDelay(CONFIG_BLINK_PERIOD-10 / portTICK_PERIOD_MS);
}
}
место положение файлов
место положение файлов

Откроем файл Kconfig.projbuild и вводим настроечный код туда. ниже.

menu "Example Configuration"
orsource "$IDF_PATH/examples/common_components/env_caps/$IDF_TARGET/Kconfig.env_caps"
config BLINK_GPIO
int "Blink GPIO number"
range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
default 2
help GPIO number (IOxx) to motor.
config BLINK_PERIOD
int "Blink period in ms"
range 10 3600000
default 1000
help
Define the blinking period in milliseconds.
config BLINK_GPIO_A
int "Blink GPIO number A"
range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
default 23
help
GPIO number (IOxx) to blink on and off the LED.
Some GPIOs are used for other purposes and cannot be used to blink.

config BLINK_GPIO_B
int "Blink GPIO number B"
range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
default 22
help
GPIO number (IOxx) to blink on and off the LED.
Some GPIOs are used for other purposes and cannot be used to blink.

config BLINK_GPIO_C
int "Blink GPIO number C"
range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
default 21
help
GPIO number (IOxx) to blink on and off the LED.
Some GPIOs are used for other purposes and cannot be used to blink.

config BLINK_GPIO_D
int "Blink GPIO number D"
range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
default 20
help GPIO number (IOxx) to motor .
config BLINK_GPIO_E
int "Blink GPIO number E"
range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
default 19
help GPIO number (IOxx) to step motor.
config BLINK_GPIO_J
int "Blink GPIO number J"
range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
default 18
help GPIO number (IOxx) to motor.
endmenu

НИЖЕ карта операций и надо выполнить 2 пункта

пункт 2 после 1  только возможен
пункт 2 после 1 только возможен

запустим отладчик и после появится файл sdkconfig. запустим его для редактирования. ниже указано, что и как.

выполним операции кары
выполним операции кары

Ниже карта на проверку наличия связи с платой esp32..... и запуска прошивки.

прошиваем плату.
прошиваем плату.

ПРОВЕРИМ связь и настроим. Прошиваем плату. Всё должно быть

успешно. двигатель должен заработать и медленно поворачиваться.

Светодиоды мигать в нужной последовательности.

Если быстро мигают, то измените в sdkconfig настройку Blink period in ms и снова отладить и прошить.

по монитору  во что идёт.
по монитору во что идёт.

Итак для вас также материалы по специальности АСУ ТП, САПР ТП, Мехатроника.

Спонсор ООО АК Правовое сотрудничество.

Лайки ставить если не трудно тута

Кстати доработка в mail.c добавили условия по out_print

void app_main(void)
{ configure_led(); int len_led=10; int out_print=0;
while (1) {
// if (len_led>CONFIG_BLINK_PERIOD) len_led=0;
if (out_print==6)
ESP_LOGI(TAG, "Turning the LED %s! %d", s_led_state == true ? "ON" : "OFF",s_led_count);
blink_led(); s_led_state = !s_led_state; s_led_count++; s_MTR_count++; out_print++;
if (s_led_count>max_count) s_led_count=0;
if (s_MTR_count>7 ) s_MTR_count=0;
if (out_print>20 ) out_print=0;
NULL_led(len_led);
vTaskDelay(CONFIG_BLINK_PERIOD -10/ portTICK_PERIOD_MS);
}
}