Изменение шагов шд в станке намотки трансов

Тема в разделе "Arduino & Shields", создана пользователем ЗАВ, 16 авг 2021.

  1. ЗАВ

    ЗАВ Гик

    Всем здравствуйте. собрал станок для намотки катушек трансформаторов на шд. скетч взял готовый из интернета. механику немного изменил. основной мотор (ввиду небольшой мощности), собрал на редукторе 1/5. поэтому нужно изменить количество шагов на оборот намоточного шд в 5 раз больше. там где скачивал скетч тема умерла. возможно подкорректировать скетч?
     

    Вложения:

  2. Airbus

    Airbus Радиохулиган Модератор

    Ув.ЗАВ!А как вставить код правильно Вас не учили случайно?В этом виде никто даже смотреть не будет. Надо так
    [​IMG]
     
  3. ЗАВ

    ЗАВ Гик

    Код (C++):
    /* Description: Arduino ATmega 328P + Stepper motor control CNC Shield v3 + 2004 LCD + Encoder KY-040
       Author:      TDA
       Ver:         2.4b
       Date:        21/08/2020

           Arduino pinout diagram:
              _______________
             |      USB      |
             |           AREF|
             |            GND|
             |             13| DIR A
             |RESET        12| STEP A
             |3V3         #11| STOP BT
             |5V          #10| BUZ OUT
             |GND          #9|
             |VIN           8| EN STEP
             |               |
             |              7| DIR Z
             |             #6| RS LCD
      AD BUT |A0 14        #5| ENCODER CLK
      LCD EN |A1 15         4| STEP Z
      LCD D4 |A2 16   INT1 #3| ENCODER SW
      LCD D5 |A3 17   INT0  2| ENCODER DT
      LCD D6 |A4 18      TX 1|
      LCD D7 |A5 19      RX 0|
             |__A6_A7________|                    
    */


    //**************************************************************************************************************
    #define ShaftStep 50 // ShaftStep = Шаг резьбы*50
    #define MicroStepsN 4 // Число микрошагов на шаг
    #define StepsForTurn 1 // число шагов для одного оборота основного двигателя (200 = 1,8° на шаг)
    //**************************************************************************************************************

    #include <AccelStepper.h>
    #include <LiquidCrystal.h>

    #define STEPPER1_DIR_PIN 7 // The Z Stepper pins
    #define STEPPER1_STEP_PIN 4
    #define STEPPER2_DIR_PIN 13 // The A stepper pins
    #define STEPPER2_STEP_PIN 12

    #define ENC_CLK   2 // Даем имена номерам пинов
    #define ENC_SW    3
    #define STEP_Z    4
    #define ENC_DT    5
    #define DIR_Z     7
    #define EN_STEP   8
    #define BUZZ_OUT  10
    #define STOP_BT   11
    #define STEP_A    12
    #define DIR_A     13
    #define RS        6
    #define EN        15
    #define D4        16
    #define D5        17
    #define D6        18
    #define D7        19
    #define AD_BUTTON 14

    byte up[8] =   {0b00100,0b01110,0b11111,0b00000,0b00000,0b00000,0b00000,0b00000};   // Создаем свой символ ? для LCD
    byte down[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b01110,0b00100};   // Создаем свой символ ? для LCD

    volatile int Encoder_Dir;                                 // Направление вращения энкодера
    volatile boolean Push_Button, Var_Set, DC, AutoWindStart; // Нажатие кнопки; режим установки значения; формирование сигнала STEP; работает подпрограмма автонамотки
    volatile boolean Pause;                                   // Флаг паузы в режиме автонамотка
    volatile int i;                                           // Счетчик кол-ва заходов в прерывание таймера
    char Str_Buffer[22];                                      // Буфер для функции sprintf
    byte LCD_Column, LCD_Row, Symbol_Code, Motor_Num;         // Номер столбца и строки LCD; код символа https://i.stack.imgur.com/oZhjJ.gif; номер шагового двигателя
    int32_t ActualShaftPos, ActualLayerPos;                   // Текущие позиции двигателей вала и укладчика
    int Actual_Turn = 0, Actual_Turn_Prev, Actual_Turn_Temp, Actual_Layer = 0;  // Текущий виток и слой при автонамотке
    int Shaft_Pos, Lay_Pos, Set_Turns, Set_Step, Set_Speed=16, Set_Layers=1, Step_Mult=1; // Переменные изменяемые на экране
    byte Menu_Index = 0, run_btn;                             // Переменная хранит номер текущей строки меню
    uint16_t Buttons_ADC;                                     // Значение АЦП от нажатия кнопок                        
    uint8_t MicroSteps = MicroStepsN;                         // Число микрошагов на шаг
    int8_t Steppers_Dir = 1;                                  // Направление вращения ШД
    volatile int Set_Speed_INT;
    char Short_Str_Buffer[5];

    int32_t stepper1CurPos;
    int32_t stepper1OldPos;
    int32_t stepper1Pos;

    enum menu_states {Autowinding, PosControl, TurnsSet, StepSet, SpeedSet, LaySet, Direction, Start, Cancel, Empty, StepSA, DirSA, SpeedSA, CancelSA}; // Нумерованный список строк экрана

    struct MenuType {                       // Структура описывающая меню
      byte Screen;                          // Индекс экрана
      byte string_number;                   // Номер строки на экране
      char format[22];                      // Формат строки
      char format_Set_var[9];               // Формат значения при вводе переменной
      int  *param;                          // Указатель на адрес текущей переменной изменяемой на экране
      int  var_Min;                         // Ограничение значения переменной снизу
      int  var_Max;                         // Ограничение значения переменной сверху
      byte param_coef;};                    // Размерный коэффициент значения переменной

    const struct MenuType Menu[] = {        // Объявляем переменную Menu пользовательского типа MenuType и доступную только для чтения
      {0,  0,  "  AUTO               ", ""          ,NULL,        0,      0,      0        },    // "> AUTOWINDING   "
      {0,  1,  "  SEMI-AUTO          ", ""          ,NULL,        0,      0,      0        },    // "> POS CONTROL   "
      {2,  0,  "  TURNS:  %03d       ", "%03d"      ,&Set_Turns,  1,      999,    1        },    // "> TURNS: >000<  "
      {2,  1,  "  STEP:   %1d.%04d   ", "%1d.%04d"  ,&Set_Step,   1,      400,    ShaftStep},    // "> STEP:>0.0000<v"
      {4,  0,  "  SPEED:  %03d       ", "%03d"      ,&Set_Speed,  1,      16,     1        },    // "> SPEED: >000< ^"
      {4,  1,  "  LAYERS: %02d       ", "%02d"      ,&Set_Layers, 1,      99,     1        },    // "> LAYERS:>00<  v"
      {6,  0,  "  DIR>>>             ", ""          ,NULL,        0,      0,      0        },    // "> DIRECTION >>>^"
      {6,  1,  "  START              ", ""          ,NULL,        0,      0,      0        },    // "> START        v"
      {8,  0,  "  CANCEL             ", ""          ,NULL,        0,      0,      0        },    // "> CANCEL       ^"
      {8,  1,  "                     ", ""          ,NULL,        0,      0,      0        },    // ">               "
      {10, 0,  "  STEP:   %1d.%04d   ", "%1d.%04d"  ,&Set_Step,   1,      400,    ShaftStep},    // "> STEP:>0.0000< "
      {10, 1,  "  DIR>>>             ", ""          ,NULL,        0,      0,      0        },    // "> DIRECTION >>>v"
      {12, 0,  "  SPEED:  %03d       ", "%03d"      ,&Set_Speed,  1,      16,     1        },    // "> SPEED: >000< ^"
      {12, 1,  "  CANCEL             ", ""          ,NULL,        0,      0,      0        },    // "> CANCEL        "
      {14, 0,  "T%03d/%03d L%02d/%02d", ""          ,NULL,        0,      0,      0        },    // "T000/000 L00/00 "
      {14, 1,  "SP%03d ST0.%04d      ", ""          ,NULL,        0,      0,      0        },    // "SP000 ST0.0000  "
      {16, 0,  "AUTOWINDING DONE     ", ""          ,NULL,        0,      0,      0        },    // "AUTOWINDING DONE"
      {16, 1,  "PRESS CONTINUE       ", ""          ,NULL,        0,      0,      0        }};   // "PRESS CONTINUE  "
    // Define some steppers and the pins the will use
    AccelStepper stepper1(AccelStepper::DRIVER, STEP_Z, DIR_Z);
    AccelStepper stepper2(AccelStepper::DRIVER, STEP_A, DIR_A);
    LiquidCrystal lcd(RS,EN,D4,D5,D6,D7); // Назначаем пины для управления LCD

    void setup()
    {
      pinMode(ENC_CLK, INPUT);    // Инициализация входов/выходов
      pinMode(ENC_SW,  INPUT);
      pinMode(STEP_Z,  OUTPUT);
      pinMode(ENC_DT,  INPUT);
      pinMode(DIR_Z,   OUTPUT);
      pinMode(EN_STEP, OUTPUT);
      pinMode(STEP_A,  OUTPUT);
      pinMode(DIR_A,   OUTPUT);
      pinMode(BUZZ_OUT,OUTPUT);
      pinMode(STOP_BT, INPUT);
      pinMode(RS,      OUTPUT);
      pinMode(EN,      OUTPUT);
      pinMode(D4,      OUTPUT);
      pinMode(D5,      OUTPUT);
      pinMode(D6,      OUTPUT);
      pinMode(D7,      OUTPUT);

    digitalWrite(EN_STEP, HIGH); // Запрет управления двигателями
    digitalWrite(STOP_BT, HIGH); // Вкл. подтягивающие резисторы к VDD

      cli();                                                                        // Глобальный запрет прерываний
      EICRA = (1<<ISC11)|(0<<ISC10)|(0<<ISC01)|(1<<ISC00);                          // Настройка срабатывания прерываний: INT0 по изменению сигнала, INT1 по спаду сигнала; ATmega328/P DATASHEET стр.89
      EIMSK = (1<<INT0)|(1<<INT1);                                                  // Разрешение прерываний INT0 и INT1; ATmega328/P DATASHEET стр.90
      EIFR = 0x00;                                                                  // Сбрасываем флаги внешних прерываний; ATmega328/P DATASHEET стр.91
      sei();
      lcd.createChar(0, up);       // Записываем символ ? в память LCD
      lcd.createChar(1, down);     // Записываем символ ? в память LCD
    // lcd.begin(20,4);                                                              // Инициализация LCD Дисплей 20 символов 4 строки
      lcd.begin(16,2);                                                              // Инициализация LCD Дисплей 16 символов 2 строки

      lcd.clear();
      lcd.print("Winding Machine");
      lcd.setCursor(0,1);
      lcd.print("ver.2.4b TDM Lab");
      delay(1500);
       
      lcd.clear();                                                  
      sprintf(Str_Buffer, Menu[0].format);
      lcd.print(Str_Buffer);  // Выводим первую строку на экран
      lcd.setCursor(0,1);
      sprintf(Str_Buffer, Menu[1].format);
      lcd.print(Str_Buffer);  // Выводим вторую строку на экран
      PrintSymbol(0,0,0x3E);  // Выводим символ ">" на 0,0 LCD
    }
     
    Последнее редактирование модератором: 23 авг 2021
  4. ЗАВ

    ЗАВ Гик

    подозреваю что вставил код неверно, так как пришлось только половину вставить , редактор жалуется (много символов). где посмотреть курсы по вставке кода? (мне приходиться перетаскивать его с другого компа. ардуино и интернет стоят в разных компах)

    если я правильно понял , то автор планировал выставлять шаги в скетче этой строкой

    #define ShaftStep 50 // ShaftStep = Шаг резьбы*50
    #define MicroStepsN 4 // Число микрошагов на шаг
    #define StepsForTurn 1 // число шагов для одного оборота основного двигателя (200 = 1,8° на шаг)

    Однако третья строка работает странно (как я понял она и выставляет шаги намоточного ШД . у меня на 360 градусов нужно их 200 , но стоит редуктор 1/5 , следовательно на круг катушки мне нужно 200*5+1000 шагов). скетч не работает только со значение 0 , ЛЮБЫЕ другие числа шагов отличные от 200 ни на что не реагируют! как увеличить в 5 раз шаги намоточного ШД?
     
  5. ЗАВ

    ЗАВ Гик

    Уточняю -- 200*5=1000 шагов (опечатка).
     
  6. ЗАВ

    ЗАВ Гик

    #define StepsForTurn 1 // число шагов для одного оборота основного двигателя (200 = 1,8° на шаг)

    На значение 1 не смотрите . изначально оно равно 200. 1 - Это я пробовал уже все подряд пробовал , чтобы хоть как то прояснить функционально значения строки. - безрезультатно.всегда ШД либо работает как значение 200, либо не работает, если ставишь 0.
     
  7. parovoZZ

    parovoZZ Гуру

    Скетч ваш - дикое фуфло. Все изменяемые параметры должны меняться без перепрограммирования МК.
     
  8. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Что-то тут неряшливо. Зачем строки -
    #define STEPPER1_DIR_PIN 7 // The Z Stepper pins
    #define STEPPER1_STEP_PIN 4
    #define STEPPER2_DIR_PIN 13 // The A stepper pins
    #define STEPPER2_STEP_PIN 12
    ?
     
  9. ЗАВ

    ЗАВ Гик

    Спасибо за оценку чужого труда.;) однако чем богаты тем и рады:). строки насколько я понял привязывают пины к драйверам для управления шд. к сожалению больше мне нечего сказать... надеюсь на Вашу помощь. Скетч то рабочий...
     
  10. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Ну не знаю. Я их закомментировал и все скомпилировалось без ошибок. Эти же пины переименованы ("передефайнены" )))) ) чуть ниже.
     
  11. ЗАВ

    ЗАВ Гик

    скетч компилируется , грузится и работает на приемлемом уровне. проблема в его перенастройке- изменении оборотов намоточного шд.
     
  12. ЗАВ

    ЗАВ Гик

    по большому счету нужно чтобы скетч считал 5 оборотов намоточного шд как один оборот. и исходя из этого считал обороты намотки и управлял шагами укладочного шд.
     
  13. Daniil

    Daniil Гуру

    Пожалуйста, пользуйтесь кнопкой "редактировать", а не писать тонну разных сообщений.
    вы картинку смотрели что вам отправили в 2-м посте?
     
  14. ЗАВ

    ЗАВ Гик

    конечно смотрел. написал , что не понял до конца как вставлять код . я в arduino ide выделяю весь код , копирую в буфер , язык ставлю с++ , и вставляю кнопкой как указано, весь код в редактор , порядка 2000 символов. редактор ругается, половину нижнюю удаляю, тогда берет. подозреваю , что это не правильно . как вставить правильно ВЕСЬ код? и почему он у меня вставляется в текстовом формате?
     
    Последнее редактирование: 17 авг 2021
  15. fogary

    fogary Гик

    Может MicroStepsN нужно то же в пять раз увеличить? Исходя из этого:
    Код (C++):
    Actual_Turn_Temp = stepper1Pos/MicroStepsN/StepsForTurn;
     
  16. ЗАВ

    ЗАВ Гик

    подозреваю что на результатам намотки вполне возможно, что придется переделывать механику на соотношение 1/10. чтоб быть уверенным , что пропусков шагов нет. Ваше предложение эту возможность поддерживает? как конкретно это попробовать?
     
  17. ЗАВ

    ЗАВ Гик

    к сожалению мой вопрос (заданный дважды) по поводу вставки всего кода в формате с++ остается без ответа. никто не знает как его вставлять?
    по поводу корректировки шд уже спрашивать не знаю как.....
     
  18. Un_ka

    Un_ka Гуру

    Код (Text):
    [code=cpp]#pragma for [ /code]
    Вот так через BB - коды, если про кнопку <> непонятно.;)
    Пробел в между [ и / уберите.
     
  19. SergeiL

    SergeiL Оракул Модератор

    Поправил через <>. добавил пропущенные "/*"
     
  20. b707

    b707 Гуру

    по поводу корректировки можно обсуждать только после вставки ВСЕГО кода. А сейчас в той части кода. что вставлена - управления мотором нет вовсе. обсждать нечего