Устройство для перемотки проволоки с распределением виток к витку

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Hold1904, 20 дек 2016.

?

Много букав?

  1. Да

    1 голосов
    50,0%
  2. Нет

    1 голосов
    50,0%
  1. Hold1904

    Hold1904 Нуб

    Всем привет! Недавно перед собой поставил задачу сделать такое устройство, для упрощения своей жизни. Дело в том, что я работаю на крупном предприятии, занимающемся выпуском микроэлектронной продукции. В процессе производства применяем золотую проволоку толщиной 10-50 микрон. Сейчас приходится перематывать в ручную(это долго, не технологично и некачественно, к тому же проволока рвется). Из быстрых решений- переделал рыболовную катушку, жить стало проще, но хочется наматывать виток к витку.
    Для решения поставленной задачи мною приобретена плата STRELA, добыто пару шаговых двигателей, сервопривод и втулки для катушек.
    Примерная схема устройства
    перемотка.jpg
    Хочу заметить, ранее с программированием микроконтроллеров никогда не сталкивался, поэтому нужна помощь более опытных людей.

    Хочу написать алгоритм при котором шаговый двигатель будет делать заданное количество оборотов наматывая проволоку, а сервопривод с каждым оборотом шагового двигателя менять положение на 1 градус.
    Пока что уговорил двигатель шагать и отдельно уговорил ШИМом коллекторный двигатель крутится медленнее( это просто ради эксперимента)

    Хотелось бы наиболее рационально использовать библиотеки. И написать программу в 2-3 строки, тоесть может быть задействовать какую нибудь математическую функцию...(краткость-сестра таланта)

    Товарищи! Какие будут Ваши предложения? Какими операторами и функциями воспользоваться?
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    сначала сделай чтобы хоть как-то работало, потом будем оптимизировать
     
  3. rkit

    rkit Гуру

    В гугле есть тысячи примеров использования самых разнообразных двигателей. Ищите что вам надо, изучайте, пишите свое.
     
  4. Onkel

    Onkel Гуру

    Я собственно не товарищ, но хотел бы заметить, что 1° для сервомашинки - нереализуемое значение, либо вам нужен безлюфтовый мотор-редуктор, который будет стоить как катушка вашей золотой проволоки, либо шаговик с шагом 0,9° (есть такие), но получите кратность именно эти 0,9°. Но есть принципиально другой подход - ролик с проволокой перемещать не шаговиком и (или) сервомашинкой, а т.н. швп - шарико- винтовой парой, этак вы микрон 50 точность получите, ну и того же порядка воспроизводимость, если крутить в из швп будете шаговиком.
     
  5. Tomasina

    Tomasina Сушитель лампочек Модератор

    можно на выходну шестеренку сервы зацепить вторую, сильно большего диаметра. Этакий мини-редуктор.
     
  6. Hold1904

    Hold1904 Нуб

    Спасибо за рекомендации, над железом подумаю еще, пока размышляю над алгоритмом программы.
     
  7. rkit

    rkit Гуру

    Неправильный порядок действий. Алгоритм зависит от железа, а не наоборот
     
    Последнее редактирование: 22 дек 2016
  8. vvr

    vvr Инженерище

    полностью поддерживаю rkit
    сначала определитесь со всеми исполнительными механизмами, а потом можно и покодить
     
  9. Hold1904

    Hold1904 Нуб

    Ребят, я не программист, и я очень плохо себе представляю возможности кода, собственно поэтому и поднял тему, в надежде на совет, на какие операторы стоит обратить внимание, какими функциями воспользоваться... Ибо на букварь у меня нету времени.
    Пока что с Али не пришёл сервопривод, поэтому "имитируя" его работу использую коллекторный двигатель с транзистором.
    а пока что-вот мои достижения ;)
    Код (C++):

    // Подключим библиотеку для работы с I2C-расширителем портов
    #include <Wire.h>
    // Подключим библиотеку Strela
    #include <Strela.h>



    void setup() {
      uPinMode(P1, OUTPUT); // это Arduino GPIO. Мы настроим его на выход
      uDigitalWrite(P1, LOW); // задаем низкий уровень на P1
     
    }
    static int var = 0; // вводим переменную для повторения
    void loop()
    {
      bool buttonState = uDigitalRead(S1); //Считаем положение кнопки

            if (buttonState)          //Если она была нажата...
            while(var < 200)          //Выполнить  {...} повторив ... раз.
            {
              analogWrite(P1, 255);  // крутить двигатель ШИМ
              delay (10);
              analogWrite(P1, 0);    // не крутить двигатель ШИМ
              stepperMotor(400, 5); // сделать 1 оборот (400 шагов)
           buttonState = uDigitalRead(S2);
            if (buttonState)          //Если она была нажата...
            break;  //прервать цикл
            }
    }
     
    Пытаюсь избавиться от паузы 10 мс, Хочу чтобы коллекторный двигатель срабатывал без торможения шагового...
     
  10. mcureenab

    mcureenab Гуру

    Сколько витков в один слой нужно уложить? Их число целое?
    Катушка многослойная? Все слои одинаковые или количество витков уменьшается в каждом слое?
    Витки наматываются справа налево и так же в обратном порядке слева направо или слои не симметричны?
     
  11. Hold1904

    Hold1904 Нуб

    Катушку планируется наматывать в 1 слой, в 1 сторону. Катушки разные, ну к примеру диаметр 16 мм, ширина 10 мм, т.е. если матать даже через шаг в 100 микрон это уже 100 витков...
    В идеале буду стремиться наматывать проволоку 15 мкм с шагом 15-20 мкм, проволоку 40 мкм с шагом 40-45 мкм.
    Возможно поработаю над механикой, взял на вооружение советы Onkel и
    Tomasina.
     
    Последнее редактирование: 22 дек 2016
  12. Onkel

    Onkel Гуру

    stepper.gif
     
    vnt-83 и Tomasina нравится это.
  13. mcureenab

    mcureenab Гуру

    Привод головки от DVD привода имеет более чем достаточное разрешение - более тысячи дорожек на мм.
     
  14. Hold1904

    Hold1904 Нуб

    Всем привет! С прошедшими!!!
    Снова вернулся к воплощению идеи.
    За основу взял 2 движка:
    - шаговый двигатель с редуктором 28BYJ-48, управляться будет контроллером ULN2003, далее двигатель буду называть" Первым"
    - шаговый двигатель из сд-привода со своей винтовой направляющей, управляться будет встроенным в "Стрелу" контроллером, далее буду называть его "Вторым"
    Изначально планировал Первым двигателем распределять проволоку виток-к-витку, так как благодаря редуктору у него за один оборот аж 2048 шагов, но в руки попало готовое решение для первого запуска, в дальнейшем двигатели планирую поставить другие.

    Надергал из разных примеров вот такой вот код
    Код (C++):
    #include <Stepper.h>
    #include <Strela.h>
    const int stepsPerRevolution = 2048; // 2048 шагов за один оборот(Двигатель с редуктором 1Х32)
    static int var = 0; // вводим переменную для повторения

    Stepper myStepper(stepsPerRevolution, P1, P3, P2, P4); // на этих пинах сидит двигатель с редуктором

    void setup() {
      myStepper.setSpeed(16); // скорость 16 об/минуту
      uPinMode(P1, OUTPUT);
      uPinMode(P2, OUTPUT);
      uPinMode(P3, OUTPUT);
      uPinMode(P4, OUTPUT);
    }

    void loop() {
      bool buttonState = uDigitalRead(S1); //Считаем положение кнопки
            if (buttonState)          //Если она была нажата...
            while(var < 1)          //Выполнить  цикл повторив 1 раз( на будущее для намотки разных катушек).
            {
              myStepper.step(stepsPerRevolution); // шагаем оборот в одном направлении
              stepperMotor(-1, 5); // шаг в обратном направлении вторым двигателем
              buttonState = uDigitalRead(S3); //Считаем положение кнопки
            if (buttonState)          //Если она была нажата...
            break; // остановить цикл
            }
            buttonState = uDigitalRead(S2); //Считаем положение кнопки
            if (buttonState)          //Если она была нажата...
            while(var < 1)          //Выполнить  {...} повторив ... раз.
            {
              myStepper.step(stepsPerRevolution); // шаг в одном направлении
              stepperMotor(1, 5); // шаг в прямом направлении вторым двигателем
              buttonState = uDigitalRead(S3);
            if (buttonState)          //Если она была нажата...
            break; // остановить цикл
            }

    }
    Ребята, подскажите как сделать?:
    - чтобы Первый двигатель не останавливался на время шагания второго... Никак не получается разобраться...
    - чтобы после 500 шагов второго двигателя он начинал шагать в другую сторону
     
  15. vnt-83

    vnt-83 Нерд

    У нас на предприятии подобное по функционалу устройство, только габаритами побольше. Мотаем стальную проволоку (0.4 и 2 мм) на бобины также виток к витку, только в много слоёв. Двигатель, который крутит бобину работает автономно с заданной скоростью. Точнее, подаётся команда на его запуск при старте намотки и остановку по завершении. С торца бобины установлена металлическая пластина, с помощью которой и датчика (типа SN04-N) считаются обороты бобины. Конкретно, у нас за один оборот бобины поступает 2 импульса. Можно сделать любое количество. И по приходу этих импульсов включается ШД, который передвигает каретку с проволокой поперёк бобины туда-обратно. Количество шагов на один импульс зависит от количества импульсов. Пришлось считать передаточное число.

    Вы можете также приладить к катушке какой-нибудь датчик оборотов с нужным разрешением (количеством импульсов на один оборот). Катушку можно вращать любым двигателем постоянного тока (к примеру) через редуктор для установки нужной скорости. Возможно, Вам больше подойдёт ременная передача, это довольно просто на самом деле. В процессе намотки, при поступлении импульсов от датчика оборотов, двигать двигатель от CD на нужное количество шагов. Включили первый двигатель вращающий катушку - пошли импульсы оборотов - второй двигатель двигает каретку с проволокой поперёк катушки. Выключили первый двигатель - всё остановилось.
     
    Последнее редактирование: 3 фев 2017
  16. Hold1904

    Hold1904 Нуб

    vnt-83 Здравая идея, на более дешевых компонентах, попробую воплотить... Но пока-что доделаю на двух шаговиках...
     
  17. Hold1904

    Hold1904 Нуб

    Старожилы!!!!! До сих пор не сыскал ответа...
    Мне требуется одним микроконтроллером крутить одновременно два шаговика с разной скоростью, 1 крутится постоянно, второй эпизодически.
    Как я понял, это уже многозадачность...
    Вот в этой статье реализовано что-то подобное с помощью КЛАССОВ... 2 сервопривода работают независимо друг от друга.

    Внимание вопрос: Можно ли будет вызвать 2 класса, чтобы реализовать одновременную работу двух шаговиков?
     
    Последнее редактирование: 16 май 2017
  18. rkit

    rkit Гуру

    Два шаговика одновременно крутить можно. но для этого надо уметь программировать, а не "вызывать классы".
     
    Hold1904 нравится это.
  19. Tomasina

    Tomasina Сушитель лампочек Модератор

  20. mcureenab

    mcureenab Гуру

    Можно.
    Тот мотор, что постоянно крутится можно на таймер посадить.
     
    Hold1904 нравится это.