Намотчик обмоток

Фрезеры, лазеры, квадрокоптеры ...
Аватара пользователя
707dm
Сообщения: 241
Зарегистрирован: 22 окт 2015, 18:14
Имя: Дмитрий
Откуда: Иркутск
Благодарил (а): 1 раз
Контактная информация:

Re: Намотчик обмоток

Непрочитанное сообщение 707dm » 10 июн 2017, 16:25

Не знаю что за припой используют китайцы, но все что смог выжать из своей паяльной станции это 435'С,с трудом дало мне выпаять старый энкодэр.
Пропаял первый драйвер,не самое удачное решение конечно,при замене 16 точек пайки,может и не все ноги нужны,позже будем разбираться.
Вложения
1497100875474-1676504957.jpg
Почему в сутках не 36 часов ;)

Shaman
Сообщения: 1229
Зарегистрирован: 23 ноя 2016, 22:50
Имя: Денис
Откуда: Дубна
Благодарил (а): 44 раза
Поблагодарили: 124 раза

Re: Намотчик обмоток

Непрочитанное сообщение Shaman » 10 июн 2017, 18:18

Эхехе, вопросы эстетики оставим в стороне.
Для применения драйвера важен конденсатор, который стоит на всех платах либо прямо под драйвером, либо рядом. Я щас не помню в чем там цимус, но конденсатор должен стоять рядом с каждым драйвером, как можно ближе к нему. Вот на схеме к примеру:
Изображение
Когда на форуме переходят на "Вы", в реальной жизни уже давно бьют морду!

Shaman
Сообщения: 1229
Зарегистрирован: 23 ноя 2016, 22:50
Имя: Денис
Откуда: Дубна
Благодарил (а): 44 раза
Поблагодарили: 124 раза

Re: Намотчик обмоток

Непрочитанное сообщение Shaman » 10 июн 2017, 18:20

И проводников вы много напаяли. Со стороны микроконтроллера достаточно 2х, микрошаг можно прямо на месте настроить.
Когда на форуме переходят на "Вы", в реальной жизни уже давно бьют морду!

Аватара пользователя
707dm
Сообщения: 241
Зарегистрирован: 22 окт 2015, 18:14
Имя: Дмитрий
Откуда: Иркутск
Благодарил (а): 1 раз
Контактная информация:

Re: Намотчик обмоток

Непрочитанное сообщение 707dm » 10 июн 2017, 18:47

Shaman писал(а):
10 июн 2017, 18:18
Эхехе, вопросы эстетики оставим в стороне.
Для применения драйвера важен конденсатор, который стоит на всех платах либо прямо под драйвером, либо рядом. Я щас не помню в чем там цимус, но конденсатор должен стоять рядом с каждым драйвером, как можно ближе к нему. Вот на схеме к примеру:
Изображение
Т.е. теоретически такой конденсатор можно выпаять с шилда например ардуино ЦНС ,который у меня в наличии?,чтоб не заморачиваться с поисками.
Почему в сутках не 36 часов ;)

Аватара пользователя
707dm
Сообщения: 241
Зарегистрирован: 22 окт 2015, 18:14
Имя: Дмитрий
Откуда: Иркутск
Благодарил (а): 1 раз
Контактная информация:

Re: Намотчик обмоток

Непрочитанное сообщение 707dm » 10 июн 2017, 18:53

Ну и по микрошагам,сразу не подумал как в рампсе все решается на уровне перемычек,тут посути смысла нет шаг дробить,поэтому наверно можно без перемычек?
Почему в сутках не 36 часов ;)

Shaman
Сообщения: 1229
Зарегистрирован: 23 ноя 2016, 22:50
Имя: Денис
Откуда: Дубна
Благодарил (а): 44 раза
Поблагодарили: 124 раза

Re: Намотчик обмоток

Непрочитанное сообщение Shaman » 10 июн 2017, 19:15

Вот честно - если есть шилд, который вы готовы принести в жертву, то не правильнее ли его и использовать?
На нем все готово, вс соединения есть, перемычки и т.д. и т.п.
Нужно просто взять схему и посмотреть, что куда идет, после чего просто закодить и дело с концом...
Когда на форуме переходят на "Вы", в реальной жизни уже давно бьют морду!

Аватара пользователя
Lenivo
Сообщения: 1808
Зарегистрирован: 25 май 2017, 12:46
Имя: Александр
Благодарил (а): 92 раза
Поблагодарили: 179 раз

Re: Намотчик обмоток

Непрочитанное сообщение Lenivo » 10 июн 2017, 19:33

Shaman писал(а):
10 июн 2017, 18:18
Эхехе, вопросы эстетики оставим в стороне.
Для применения драйвера важен конденсатор, который стоит на всех платах либо прямо под драйвером, либо рядом. Я щас не помню в чем там цимус, но конденсатор должен стоять рядом с каждым драйвером, как можно ближе к нему. Вот на схеме к примеру:
Изображение
"Цимус" в том, что без конденсатора при длинных проводах до шагового двигателя, на плате драйвера образуются скачки напряжения , и если скачки более 35 вольт, вылетают керамические конденсаторы на платке драйвера и микросхема выгорает. А электролит служит буфером и поглощает паразитную энергию, возникающую при включении-выключении обмоток двигателя.

3d20
Сообщения: 9
Зарегистрирован: 09 ноя 2016, 20:02
Поблагодарили: 1 раз

Re: Намотчик обмоток

Непрочитанное сообщение 3d20 » 10 июн 2017, 21:15

Сразу предупреждаю, что давно схемотехникой не занимаюсь и не в курсе современных решений, но по уму, там должно стоять 2 конденсатора параллельно: электролит относительно большой емкости, как на схеме и пленочник - небольшой, примерно 100 nF, обычно ставили от 22 до 470 nF. Физика процесса такова, что электролит довольно инерционный и не успевает гасить высокочастотную составляющую, за нее как раз пленочник и отвечает, а электролит сглаживает мощные импульсы. По конкретному типу пленочника не подскажу, так как не отслеживаю современную номенклатуру.

Аватара пользователя
Чиффа
Сообщения: 378
Зарегистрирован: 09 июн 2016, 08:04
Имя: Сергей
Откуда: Арзамас
Благодарил (а): 14 раз
Поблагодарили: 31 раз

Re: Намотчик обмоток

Непрочитанное сообщение Чиффа » 10 июн 2017, 23:21

Попробовал свои силы в скетчеписании :o
Пока вот так вот:
Спойлер

Код: Выделить всё

// Обозначаем пины:
byte  XSTP_pin = A0;   // шаг двигателя катушки (X на рампсе) (нога)
byte  XDIR_pin = A1;   // направление двигателя катушки (нога)
byte  X_EN_pin = A2;   // включение двигателя катушки (нога)

byte  YSTP_pin = A6;   // шаг двигателя каретки (Y на рампсе) (нога)
byte  YDIR_pin = A7;   // направление двигателя каретки (нога)
byte  Y_EN_pin = A8;   // включение двигателя каретки (нога)
// Концевики: (концевики нормально разомкнутые, подключены к +5В одним выходом, другим на Мегу)
byte  Ymin_pin = 14;  // на рампсе Ymin (нога)
byte  Ymax_pin = 18;  // на рампсе Zmin (нога)
//можно использовать только 1 концевик, нам же пофиг на направление движения каретки ;)

////////////////////////
//Константы и прочие полезности:
boolean XDIR = 0, YDIR = 0;           // направление движения моторов, начальные значения
unsigned long Time_mem;
unsigned long Time_now;
unsigned int X_count = 0;         // счетчик шагов Катушки
unsigned int Y_count = 0;         // счетчик шагов Каретки
unsigned long Interval = 100;     // время на итерацию, мСек. Собссно чем больше, тем медденнее идет намотка
boolean flag_HOME = 0;            // если равен 1, то едем домой Кареткой. Не забыть при выставлении этого флага указать направление движения YDIR!!!
byte Dt = 5;                     // время от поднятия ног XSTP или YSTP до их опускания, мСек
unsigned int Otn_XY = 50;        // через сколько шагов катушки будет сделан шаг каретки. Можно подобрать опытным путем, но лучше сначала рассчитать.


byte com = 0;                     // что мы приняли с com-порта

boolean LED = 0;                  // отладка



void setup() {

  ////////////////////////
  //Конфигурируем ноги МК:
  pinMode(13, OUTPUT);            // отладка

  pinMode(XSTP_pin, OUTPUT);
  pinMode(XDIR_pin, OUTPUT);
  pinMode(X_EN_pin, OUTPUT);
  pinMode(YSTP_pin, OUTPUT);
  pinMode(YDIR_pin, OUTPUT);
  pinMode(Y_EN_pin, OUTPUT);
  pinMode(Ymin_pin, INPUT);
  digitalWrite(Ymin_pin, LOW);
  pinMode(Ymax_pin, INPUT);
  digitalWrite(Ymax_pin, LOW);


  // Отладка по COM-порту
  Serial.begin(115200);  // С мегой не работал, у нее портов много, так что пока пробуем 1й


  // Включаем двигатели:
  digitalWrite(X_EN_pin, LOW);        // вроде двигатели включаются подтяжкой к земле ???
  digitalWrite(Y_EN_pin, LOW);        //
  digitalWrite(XDIR_pin, XDIR);
  digitalWrite(YDIR_pin, YDIR);
}

void loop() {
  // Смотрим сколько прошло времени
  Time_now = millis();
  if (Time_now - Time_mem >= Interval) {     // Если прошло достаточно времени, то:
    Time_mem = Time_now;                     // обнуляем время сразу, а то забудем!
    if (digitalRead(Ymin_pin) == 1) {        // Смотрим не сработал ли концевик
      flag_HOME = 0;                         // если да, то прекращаем ехать домой
      YDIR = !YDIR;                          // меняем нарпавление движения каретки на случай, если мы наматывали
      //   digitalWrite(13, LED);              // отладка
      //   LED = !LED;                         // отладка
    }
    if (digitalRead(Ymax_pin) == 1) {        // Смотрим не сработал ли концевик
      flag_HOME = 0;                         // если да, то прекращаем ехать домой
      YDIR = !YDIR;                          // меняем нарпавление движения каретки на случай, если мы наматывали
      //   digitalWrite(13, LED);              // отладка
      //   LED = !LED;                         // отладка
    }

    if (flag_HOME == 1) {                    // если мы едем домой, то
      //digitalWrite(YDIR_pin, YDIR);            // задаем направление движения
      digitalWrite(YSTP_pin, HIGH);          // дрыгаем ногой
      delay(Dt);                             // по поводу задержки я хз сколько она должна быть,
      digitalWrite(YSTP_pin, LOW);           // и вообще, по поводу реализации с delay я в сомненьях, но работать должно :)
    }
    else {                                   // если мы всетаки наматываем катушку, а не едем домой
      digitalWrite(XSTP_pin, HIGH);          // дрыгаем ногой
      delay(Dt);                             //
      digitalWrite(XSTP_pin, LOW);           //
      X_count++;
      if (X_count == Otn_XY) {               // если пора двигать каретку, то
        X_count = 0;                         // обнуляем счетчик шагов катушки
        digitalWrite(YSTP_pin, HIGH);        // двигаем каретку
        delay(Dt);                           //
        digitalWrite(YSTP_pin, LOW);         //
      }
      //   digitalWrite(13, LED);              // отладка
      //   LED = !LED;                         // отладка
    }




    if (Serial.available() > 0) {
      com = Serial.read();                      // читаем com-порт.
      if (com-48==1) {flag_HOME=1;}             //Если пришла 1, то мы едем домой!!!
      if (com-48==0) {flag_HOME=0;}             //Если пришел 0, то мы приехали домой!!!
    }        
  }

}
Должно работать, для тестов пойдет )) Дисплея и энкодера пока нет, да и я с ними не работал если честно. Управление пока по com-порту.
При включении должен сразу начинать наматывать двигая двумя шаговиками. Если сработал любой концевик, то меняется направление каретки.
Сильно прошу не пинать, я не программист, мне просто интересно попробовать свои силы :roll:
Вложения
Namotchik.zip
(2.05 КБ) 75 скачиваний
DIY принтер, 28х23х18, директ, прямой привод осей.

Аватара пользователя
707dm
Сообщения: 241
Зарегистрирован: 22 окт 2015, 18:14
Имя: Дмитрий
Откуда: Иркутск
Благодарил (а): 1 раз
Контактная информация:

Re: Намотчик обмоток

Непрочитанное сообщение 707dm » 11 июн 2017, 05:37

Спасибо большое будет с чего начать,а что там про рампс?, чет как говориться:
Хорошая мысля приходит опосля.
Рампс в наличии.
Вложения
14971484730082111018756.jpg
Почему в сутках не 36 часов ;)

Аватара пользователя
707dm
Сообщения: 241
Зарегистрирован: 22 окт 2015, 18:14
Имя: Дмитрий
Откуда: Иркутск
Благодарил (а): 1 раз
Контактная информация:

Re: Намотчик обмоток

Непрочитанное сообщение 707dm » 11 июн 2017, 05:38

К ниму и экран проще подключить и концевики,блин и паять не надо...
Почему в сутках не 36 часов ;)

Аватара пользователя
Lenivo
Сообщения: 1808
Зарегистрирован: 25 май 2017, 12:46
Имя: Александр
Благодарил (а): 92 раза
Поблагодарили: 179 раз

Re: Намотчик обмоток

Непрочитанное сообщение Lenivo » 11 июн 2017, 11:26

Вот схема RAMPS - в верхнем левом углу схема на какие разъемы приходятся выводы драйверов и других устройств - ставишь драйвер в Х и смотришь по картинке какие ноги задействованы чтобы управлять Х - Хstep - AO, X-DIR- A1, X-EN - D38, точно также смотришь концевики например Ymax -D15 Ymin-D14.
ramps-schematic.png
Разводка_платы_RAMPS_1_4.png
Разводка_платы_RAMPS_1_4.png (54.98 КБ) 1347 просмотров

Аватара пользователя
707dm
Сообщения: 241
Зарегистрирован: 22 окт 2015, 18:14
Имя: Дмитрий
Откуда: Иркутск
Благодарил (а): 1 раз
Контактная информация:

Re: Намотчик обмоток

Непрочитанное сообщение 707dm » 11 июн 2017, 11:47

Дома жена припахала через полтора часа сяду за ардуину.
Почему в сутках не 36 часов ;)

Аватара пользователя
Чиффа
Сообщения: 378
Зарегистрирован: 09 июн 2016, 08:04
Имя: Сергей
Откуда: Арзамас
Благодарил (а): 14 раз
Поблагодарили: 31 раз

Re: Намотчик обмоток

Непрочитанное сообщение Чиффа » 11 июн 2017, 11:49

Рампс -это ваще круто, я все под рампс писал.
Для начала собери бутерброд из меги с рампсом, подсоедини к компу и прошей. Отключи от всего питания, вставь рабочие драйверы в Х и Y с 1/8 микрошага пусть. Подсоедини двигатели, пока просто двигатели, а не на намотчика, тестируем же. К ymin и zmin подсоединяем концевики таким образом, что в ненажатом состоянии концевик разомкнут, один контакт идет на сигнал, а другой на +5В. Концевик при нажатии должен подавать +5 на пин меги, главное - подсоединить к тем пинам, что в прошивке указаны, а то ноги ненароком сгорят :roll:
Блин, ладно, сейчас переделаю под срабатывание от земли, а не от +5.
DIY принтер, 28х23х18, директ, прямой привод осей.

Аватара пользователя
Чиффа
Сообщения: 378
Зарегистрирован: 09 июн 2016, 08:04
Имя: Сергей
Откуда: Арзамас
Благодарил (а): 14 раз
Поблагодарили: 31 раз

Re: Намотчик обмоток

Непрочитанное сообщение Чиффа » 11 июн 2017, 12:11

Спойлер

Код: Выделить всё

// Обозначаем пины:
byte  XSTP_pin = A0;   // шаг двигателя катушки (X на рампсе) (нога)
byte  XDIR_pin = A1;   // направление двигателя катушки (нога)
byte  X_EN_pin = A2;   // включение двигателя катушки (нога)

byte  YSTP_pin = A6;   // шаг двигателя каретки (Y на рампсе) (нога)
byte  YDIR_pin = A7;   // направление двигателя каретки (нога)
byte  Y_EN_pin = A8;   // включение двигателя каретки (нога)
// Концевики: (концевики нормально разомкнутые, подключены к +5В одним выходом, другим на Мегу)
byte  Ymin_pin = 14;  // на рампсе Ymin (нога)
byte  Ymax_pin = 18;  // на рампсе Zmin (нога)
//можно использовать только 1 концевик, нам же пофиг на направление движения каретки ;)

////////////////////////
//Константы и прочие полезности:
boolean XDIR = 0, YDIR = 0;           // направление движения моторов, начальные значения
unsigned long Time_mem;
unsigned long Time_now;
unsigned int X_count = 0;         // счетчик шагов Катушки
unsigned int Y_count = 0;         // счетчик шагов Каретки
unsigned long Interval = 100;     // время на итерацию, мСек. Собссно чем больше, тем медденнее идет намотка
boolean flag_HOME = 0;            // если равен 1, то едем домой Кареткой. Не забыть при выставлении этого флага указать направление движения YDIR!!!
byte Dt = 5;                     // время от поднятия ног XSTP или YSTP до их опускания, мСек
unsigned int Otn_XY = 50;        // через сколько шагов катушки будет сделан шаг каретки. Можно подобрать опытным путем, но лучше сначала рассчитать.


byte com = 0;                     // что мы приняли с com-порта

boolean LED = 0;                  // отладка



void setup() {

  ////////////////////////
  //Конфигурируем ноги МК:
  pinMode(13, OUTPUT);            // отладка

  pinMode(XSTP_pin, OUTPUT);
  pinMode(XDIR_pin, OUTPUT);
  pinMode(X_EN_pin, OUTPUT);
  pinMode(YSTP_pin, OUTPUT);
  pinMode(YDIR_pin, OUTPUT);
  pinMode(Y_EN_pin, OUTPUT);
  pinMode(Ymin_pin, INPUT);
  digitalWrite(Ymin_pin, HIGH);
  pinMode(Ymax_pin, INPUT);
  digitalWrite(Ymax_pin, HIGH);


  // Отладка по COM-порту
  Serial.begin(115200);  // С мегой не работал, у нее портов много, так что пока пробуем 1й


  // Включаем двигатели:
  digitalWrite(X_EN_pin, LOW);        // вроде двигатели включаются подтяжкой к земле ???
  digitalWrite(Y_EN_pin, LOW);        //
  digitalWrite(XDIR_pin, XDIR);
  digitalWrite(YDIR_pin, YDIR);
}

void loop() {
  // Смотрим сколько прошло времени
  Time_now = millis();
  if (Time_now - Time_mem >= Interval) {     // Если прошло достаточно времени, то:
    Time_mem = Time_now;                     // обнуляем время сразу, а то забудем!
    if (digitalRead(Ymin_pin) == 0) {        // Смотрим не сработал ли концевик
      flag_HOME = 0;                         // если да, то прекращаем ехать домой
      YDIR = !YDIR;                          // меняем нарпавление движения каретки на случай, если мы наматывали
      //  digitalWrite(13, LED);              // отладка
      //  LED = !LED;                         // отладка
    }
    if (digitalRead(Ymax_pin) == 0) {        // Смотрим не сработал ли концевик
      flag_HOME = 0;                         // если да, то прекращаем ехать домой
      YDIR = !YDIR;                          // меняем нарпавление движения каретки на случай, если мы наматывали
      //   digitalWrite(13, LED);              // отладка
      //   LED = !LED;                         // отладка
    }

    if (flag_HOME == 1) {                    // если мы едем домой, то
      //digitalWrite(YDIR_pin, YDIR);            // задаем направление движения
      digitalWrite(YSTP_pin, HIGH);          // дрыгаем ногой
      delay(Dt);                             // по поводу задержки я хз сколько она должна быть,
      digitalWrite(YSTP_pin, LOW);           // и вообще, по поводу реализации с delay я в сомненьях, но работать должно :)
    }
    else {                                   // если мы всетаки наматываем катушку, а не едем домой
      digitalWrite(XSTP_pin, HIGH);          // дрыгаем ногой
      delay(Dt);                             //
      digitalWrite(XSTP_pin, LOW);           //
      X_count++;
      if (X_count == Otn_XY) {               // если пора двигать каретку, то
        X_count = 0;                         // обнуляем счетчик шагов катушки
        digitalWrite(YSTP_pin, HIGH);        // двигаем каретку
        delay(Dt);                           //
        digitalWrite(YSTP_pin, LOW);         //
      }
      //   digitalWrite(13, LED);              // отладка
      //   LED = !LED;                         // отладка
    }




    if (Serial.available() > 0) {
      com = Serial.read();                      // читаем com-порт.
      if (com - 48 == 1) {
        flag_HOME = 1; //Если пришла 1, то мы едем домой!!!
      }
      if (com - 48 == 0) {
        flag_HOME = 0; //Если пришел 0, то мы приехали домой!!!
      }
    }
  }

}
вот, теперь концевики при срабатывании должны подтягивать ногу МК к земле. Проверил на чистой меге - работает.
Итак, нужно собрать все пока висящее в воздухе и посмотреть как оно будет крутиться.
Двигатели к X и Y рампса, концевики 2 шт. к Ymin Zmin - нормально разомкнутые, один контакт к сигнальному контакту, второй к земле, третий в воздухе (на +5В ничего не подключаем).
При подаче +12В на рампс один двигатель начинает делать шаги (катушка, X), другой (каретка Y) делает шаги реже в Otn_XY раз (сейчас 50). При срабатывании концевика меняется направление движения каретки (ага, тут у меня косяк!!!)
Вот без железа код писать - это ваще жесть!

Исправился:
Спойлер

Код: Выделить всё

// Обозначаем пины:
byte  XSTP_pin = A0;   // шаг двигателя катушки (X на рампсе) (нога)
byte  XDIR_pin = A1;   // направление двигателя катушки (нога)
byte  X_EN_pin = A2;   // включение двигателя катушки (нога)

byte  YSTP_pin = A6;   // шаг двигателя каретки (Y на рампсе) (нога)
byte  YDIR_pin = A7;   // направление двигателя каретки (нога)
byte  Y_EN_pin = A8;   // включение двигателя каретки (нога)
// Концевики: (концевики нормально разомкнутые, подключены к +5В одним выходом, другим на Мегу)
byte  Ymin_pin = 14;  // на рампсе Ymin (нога)
byte  Ymax_pin = 18;  // на рампсе Zmin (нога)
//можно использовать только 1 концевик, нам же пофиг на направление движения каретки ;)

////////////////////////
//Константы и прочие полезности:
boolean XDIR = 0, YDIR = 0;           // направление движения моторов, начальные значения
unsigned long Time_mem;
unsigned long Time_now;
unsigned int X_count = 0;         // счетчик шагов Катушки
unsigned int Y_count = 0;         // счетчик шагов Каретки
unsigned long Interval = 100;     // время на итерацию, мСек. Собссно чем больше, тем медденнее идет намотка
boolean flag_HOME = 0;            // если равен 1, то едем домой Кареткой. Не забыть при выставлении этого флага указать направление движения YDIR!!!
byte Dt = 5;                     // время от поднятия ног XSTP или YSTP до их опускания, мСек
unsigned int Otn_XY = 50;        // через сколько шагов катушки будет сделан шаг каретки. Можно подобрать опытным путем, но лучше сначала рассчитать.
byte i;                          // стандартный индекс цикла

byte com = 0;                     // что мы приняли с com-порта

boolean LED = 0;                  // отладка



void setup() {

  ////////////////////////
  //Конфигурируем ноги МК:
  pinMode(13, OUTPUT);            // отладка

  pinMode(XSTP_pin, OUTPUT);
  pinMode(XDIR_pin, OUTPUT);
  pinMode(X_EN_pin, OUTPUT);
  pinMode(YSTP_pin, OUTPUT);
  pinMode(YDIR_pin, OUTPUT);
  pinMode(Y_EN_pin, OUTPUT);
  pinMode(Ymin_pin, INPUT);
  digitalWrite(Ymin_pin, HIGH);
  pinMode(Ymax_pin, INPUT);
  digitalWrite(Ymax_pin, HIGH);


  // Отладка по COM-порту
  Serial.begin(115200);  // С мегой не работал, у нее портов много, так что пока пробуем 1й


  // Включаем двигатели:
  digitalWrite(X_EN_pin, LOW);        // вроде двигатели включаются подтяжкой к земле ???
  digitalWrite(Y_EN_pin, LOW);        //
  digitalWrite(XDIR_pin, XDIR);
  digitalWrite(YDIR_pin, YDIR);
}

void loop() {
  // Смотрим сколько прошло времени
  Time_now = millis();
  if (Time_now - Time_mem >= Interval) {     // Если прошло достаточно времени, то:
    Time_mem = Time_now;                     // обнуляем время сразу, а то забудем!
    if (digitalRead(Ymin_pin) == 0) {        // Смотрим не сработал ли концевик
      flag_HOME = 0;                         // если да, то прекращаем ехать домой
      YDIR = !YDIR;                          // меняем нарпавление движения каретки на случай, если мы наматывали
      for (i = 0; i < 5; i++) {
        digitalWrite(YSTP_pin, HIGH);        // тут мы отъезжаем от сработавшего концевика на 5 шагов
        delay(Dt);                           // чтобы он разомкнулся,
        digitalWrite(YSTP_pin, LOW);         // а то мы так и будем сюда заходить
        delay(Dt);
      }


      //  digitalWrite(13, LED);              // отладка
      //  LED = !LED;                         // отладка
    }
    if (digitalRead(Ymax_pin) == 0) {        // Смотрим не сработал ли концевик
      flag_HOME = 0;                         // если да, то прекращаем ехать домой
      YDIR = !YDIR;                          // меняем нарпавление движения каретки на случай, если мы наматывали
      for (i = 0; i < 5; i++) {
        digitalWrite(YSTP_pin, HIGH);        // тут мы отъезжаем от сработавшего концевика на 5 шагов
        delay(Dt);                           // чтобы он разомкнулся,
        digitalWrite(YSTP_pin, LOW);         // а то мы так и будем сюда заходить
        delay(Dt);
      }
      //   digitalWrite(13, LED);              // отладка
      //   LED = !LED;                         // отладка
    }

    if (flag_HOME == 1) {                    // если мы едем домой, то
      //digitalWrite(YDIR_pin, YDIR);            // задаем направление движения
      digitalWrite(YSTP_pin, HIGH);          // дрыгаем ногой
      delay(Dt);                             // по поводу задержки я хз сколько она должна быть,
      digitalWrite(YSTP_pin, LOW);           // и вообще, по поводу реализации с delay я в сомненьях, но работать должно :)
    }
    else {                                   // если мы всетаки наматываем катушку, а не едем домой
      digitalWrite(XSTP_pin, HIGH);          // дрыгаем ногой
      delay(Dt);                             //
      digitalWrite(XSTP_pin, LOW);           //
      X_count++;
      if (X_count == Otn_XY) {               // если пора двигать каретку, то
        X_count = 0;                         // обнуляем счетчик шагов катушки
        digitalWrite(YSTP_pin, HIGH);        // двигаем каретку
        delay(Dt);                           //
        digitalWrite(YSTP_pin, LOW);         //
      }
      //   digitalWrite(13, LED);              // отладка
      //   LED = !LED;                         // отладка
    }




    if (Serial.available() > 0) {
      com = Serial.read();                      // читаем com-порт.
      if (com - 48 == 1) {
        flag_HOME = 1; //Если пришла 1, то мы едем домой!!!
      }
      if (com - 48 == 0) {
        flag_HOME = 0; //Если пришел 0, то мы приехали домой!!!
      }
    }
  }

}
Теперь при срабатывании концевика каретка будет делать 5 шагов назад, чтобы концевик разомкнуть.
Если нам по com-порту пришла 1, то включается режим "парковки" и каретка едет домой до концевика с автоматическим переходом в режим "намотка". Если пришел 0, то режим "парковка" выключается и включается "намотка".
Вот как-то так. На оптимальность решений не претендую, но для потестить должно хватить.
DIY принтер, 28х23х18, директ, прямой привод осей.

Ответить

Вернуться в «Другие наши интересные проекты»

Яндекс.Метрика