roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 03:28

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: arduino, AccelStepper и serial
СообщениеДобавлено: 15 июл 2013, 16:37 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2011, 12:37
Сообщения: 1672
Откуда: Москва
прог. языки: С
А как ты узнаёшь в каком положении находится укладчик в момент начала программы?
И по программе у тебя получается ты сначала мотаешь все витки потом двигаешь укладчик.


X - это количество витков в одном слое.
NRot/X = количество слоёв
Должно быть что то типа такого.

Код:

int16_t Xtmp;
int16_t Xstep=2;//сдвигаем укладчик на диаметр провода после каждого оборота

void laying()
{
   if(Xtmp>0){
      if( Xtmp<X)
         Xtmp++;
      else
         Xtmp=-1;//меняем направление
   }else{
      if( (-1*Xtmp)<X)
         Xtmp--;
      else
         Xtmp=1;//меняем направление
   }
   
    stepper1.moveTo( (Xtmp>0 ? Xstep : -1*Xstep ) );
    stepper1.runToPosition();
    stepper1.setCurrentPosition(0);
}

..........
        NRot_tmp = 0;
        Xtmp=1;
        while(NRot_tmp < NRot)
        {
          forward();//один виток
        laying();//двигаем укладчик.
          NRot_tmp++;
        }

............

_________________
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: arduino, AccelStepper и serial
СообщениеДобавлено: 15 июл 2013, 20:51 
Не в сети
Аватара пользователя

Зарегистрирован: 13 май 2011, 21:37
Сообщения: 3202
Откуда: Bb
в моём случае X - это "диаметр провода", другими словами 1 небольшой сдвиг после 1 витка.
Вопрос в том, как найти, быть ему положительным или отрицательным.
..не совсем понял выражение в скобках: stepper1.moveTo( (Xtmp>0 ? Xstep : -1*Xstep ) );

Добавлено спустя 1 час 15 минут 30 секунд:
в симуляции мотор1 делает шаг, потом стоит дёргается.

Добавлено спустя 45 минут 50 секунд:
пока так(вроде) вышло:
Код:
#include <AccelStepper.h>

// Define some steppers and the pins the will use
AccelStepper stepper1; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
AccelStepper stepper2(AccelStepper::FULL4WIRE, 6, 7, 8, 9);
AccelStepper stepper3(AccelStepper::FULL4WIRE, 10, 11, 12, 13);

byte NRot = 9; //value of rotation
int NRot_tmp = 0;
bool lay_dir = true;
int lay_tmp = 0;
int lay_min = 0;
int lay_max = 3;
int X = 10;
char inc_b; // incoming serial data;
//char buff[]= "0000000000";

void forward()
{
    stepper2.moveTo(40);
    stepper2.runToPosition();
    stepper2.setCurrentPosition(0);
    stepper3.moveTo(20);
    stepper3.runToPosition();
    stepper3.setCurrentPosition(0);
    stepper2.moveTo(-40);
    stepper2.runToPosition();
    stepper2.setCurrentPosition(0);
    stepper3.moveTo(-20);
    stepper3.runToPosition();
    stepper3.setCurrentPosition(0);
}

void backward()
{
    stepper2.moveTo(-40);
    stepper2.runToPosition();
    stepper2.setCurrentPosition(0);
    stepper3.moveTo(-20);
    stepper3.runToPosition();
    stepper3.setCurrentPosition(0);
    stepper2.moveTo(40);
    stepper2.runToPosition();
    stepper2.setCurrentPosition(0);
    stepper3.moveTo(20);
    stepper3.runToPosition();
    stepper3.setCurrentPosition(0);
}

void laying()
{
    stepper1.moveTo(X);
    stepper1.runToPosition();
    stepper1.setCurrentPosition(0);
}
void laying_b()
{
    stepper1.runToNewPosition(-X);
    stepper1.setCurrentPosition(0);
    //stepper1.moveTo(-X);
    //stepper1.runToPosition();
    //stepper1.setCurrentPosition(0);
}

void laying_home()
{
  stepper1.disableOutputs();
  stepper2.disableOutputs();
  stepper3.disableOutputs();
}

void setup()

    Serial.begin(9600);
    Serial.println("Enter 'f' or 'b' for dir then value for number of rotation");
    stepper1.setMaxSpeed(600.0);
    stepper1.setAcceleration(400.0);
   
    stepper2.setMaxSpeed(1000.0);
    stepper2.setAcceleration(600.0);
   
    stepper3.setMaxSpeed(1000.0);
    stepper3.setAcceleration(600.0);
}

void loop()
{
    //int t=0;
    if (Serial.available())
    {
      delay(10);
      inc_b = Serial.read();
      if (inc_b == 'f') //forward
      {
        NRot_tmp = 0;
        while(NRot_tmp < NRot)
        {
          forward();
          if (lay_dir == true && lay_tmp < lay_max)
          {
            X = X*1;
            lay_dir = true;
            lay_tmp++;
          }
          else
          {
            lay_dir = false;
          }
          if (lay_dir == false && lay_tmp == lay_max || lay_tmp == lay_min)
          {
            X = X*-1;
            lay_dir = false;
            lay_tmp--;
          }
          else
          {
            lay_dir = true;
          }
          laying();
          NRot_tmp++;
        }
        //NRot = 0;
       
      Serial.flush();
      }
      else if (inc_b == 'b')  //backward
      {
        NRot_tmp = 0;
        while(NRot_tmp < NRot)
        {
          backward();
          if (lay_dir == true && lay_tmp < lay_max)
          {
            X = X*1;
            lay_dir = true;
            lay_tmp++;
          }
          else
          {
            lay_dir = false;
          }
          if (lay_dir == false && lay_tmp == lay_max || lay_tmp == lay_min)
          {
            X = X*-1;
            lay_dir = false;
            lay_tmp--;
          }
          else
          {
            lay_dir = true;
          }
          laying();
          NRot_tmp++;
        }
       
        Serial.flush();
      }
     
      else if (inc_b == 'l')  //laying
      {
      laying();
      Serial.flush();
      }
     
      else if (inc_b == 'q')  //exit
      {
      laying_home();
      Serial.flush();
      }
    }
}


Добавлено спустя 1 час 39 минут 22 секунды:
... что-то не то


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: arduino, AccelStepper и serial
СообщениеДобавлено: 17 июл 2013, 14:32 
Не в сети
Аватара пользователя

Зарегистрирован: 13 май 2011, 21:37
Сообщения: 3202
Откуда: Bb
сообщения не правятся

Добавлено спустя 10 минут 48 секунд:
вот так работает:
Код:
если (lay_dir похож на true и lay_tmp меньше lay_max или lay_dir похож на true и lay_tmp похож на lay_min или lay_dir похож на false и lay_tmp похож lay_min)


Вложения:
prot_001.png
prot_001.png [ 16.42 КиБ | Просмотров: 3513 ]
Комментарий к файлу: симуляция и код
proteus.zip [31.03 КиБ]
Скачиваний: 0
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: arduino, AccelStepper и serial
СообщениеДобавлено: 19 июл 2013, 18:39 
Не в сети
Аватара пользователя

Зарегистрирован: 13 май 2011, 21:37
Сообщения: 3202
Откуда: Bb
продолжил наращивать фишки


Вложения:
step_lcd.jpg
step_lcd.jpg [ 432.42 КиБ | Просмотров: 3499 ]
step_lcd.zip [41.68 КиБ]
Скачиваний: 0
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: arduino, AccelStepper и serial
СообщениеДобавлено: 01 фев 2016, 11:46 
Не в сети

Зарегистрирован: 28 июн 2015, 22:45
Сообщения: 5
Подскажите, как в этой библиотеке выводить данные на дисплей, не прерывая работу ШД?
Дисплей (на базе ТМ1637) или OLED (на базе SSD1306), нужно отображать пройденное кареткой расстояние, а это хотя бы 1-2 раза в секунду нужно обновлять дисплей, и в это время движок замирает (по звуку слышно), а мне нужно строго равномерное движение.
Можно ли сделать отображение данных "в фоне"? Вроде на видео в CNC на Arduino таких проблем нету. Как реализовать такое?
Возможно просто не понимаю, как она работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: arduino, AccelStepper и serial
СообщениеДобавлено: 01 фев 2016, 12:50 
Не в сети
Аватара пользователя

Зарегистрирован: 13 май 2011, 21:37
Сообщения: 3202
Откуда: Bb
На лету так сразу и не скажу даже. С меня программер неважный(собственно почему и задаю тут вопросы).
Первое, что в голову пришло, это всунуть строчку вывода в нужное место.
Как вариант - отдельную платку для этого.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: arduino, AccelStepper и serial
СообщениеДобавлено: 25 фев 2017, 00:01 
Не в сети
Аватара пользователя

Зарегистрирован: 13 май 2011, 21:37
Сообщения: 3202
Откуда: Bb
Немного фоток самой конструкции:


Вложения:
IMG_1035.JPG
IMG_1035.JPG [ 133.73 КиБ | Просмотров: 2907 ]
IMG_1036.JPG
IMG_1036.JPG [ 148.66 КиБ | Просмотров: 2905 ]
IMG_1037.JPG
IMG_1037.JPG [ 147.13 КиБ | Просмотров: 2908 ]
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO