Цель: Используя драйвер 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 пункта
запустим отладчик и после появится файл 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);
}
}