roboforum.ru

Технический форум по робототехнике.
Текущее время: 22 фев 2025, 21:48

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




Начать новую тему Ответить на тему  [ Сообщений: 474 ]  На страницу Пред.  1 ... 8, 9, 10, 11, 12, 13, 14 ... 32  След.
Автор Сообщение
 Заголовок сообщения: Re: Arduino pro mini для управления шаговым двигателем
СообщениеДобавлено: 31 июл 2015, 14:51 
Не в сети

Зарегистрирован: 07 авг 2010, 21:29
Сообщения: 1725
Откуда: КМВ
прог. языки: C
ФИО: Андрей
У нас то же и получится примерно. :)

_________________
Дым, идущий из всех устройств в помещении предвещает появление электрика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Arduino pro mini для управления шаговым двигателем
СообщениеДобавлено: 31 июл 2015, 16:12 
Не в сети
Аватара пользователя

Зарегистрирован: 01 ноя 2014, 00:50
Сообщения: 1728
Откуда: Ставрополье
ФИО: Александр
Понял. Тагда остаётся только ждать инструкций )) Т.к. все свои познания я уже выложил.

_________________
Наружная реклама, сувениры, шелкотрафаретная печать (пакеты, шары, футболки и т.п.)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Arduino pro mini для управления шаговым двигателем
СообщениеДобавлено: 03 авг 2015, 12:05 
Не в сети

Зарегистрирован: 07 авг 2010, 21:29
Сообщения: 1725
Откуда: КМВ
прог. языки: C
ФИО: Андрей
Ок. Сделаю себе "стенд" для отладки - начну писать. На этой неделе постараюсь.

_________________
Дым, идущий из всех устройств в помещении предвещает появление электрика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Arduino pro mini для управления шаговым двигателем
СообщениеДобавлено: 06 авг 2015, 13:34 
Не в сети
Аватара пользователя

Зарегистрирован: 01 ноя 2014, 00:50
Сообщения: 1728
Откуда: Ставрополье
ФИО: Александр
Было бы просто замечательно... А-то не только руки чешутся попробовать всё сотворить )))

Кстати, для включения/отключения намотки, как думаете, можно использовать готтовый модуль с фотоэлементом http://www.aliexpress.com/item/High-Qua ... 45226.html ? В смысле нить провисла, перекрыла свет (я только примерно представляю работу подобных датчиков) - мотор включился и подмотал нить, затем всё повторяется.

_________________
Наружная реклама, сувениры, шелкотрафаретная печать (пакеты, шары, футболки и т.п.)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Arduino pro mini для управления шаговым двигателем
СообщениеДобавлено: 07 авг 2015, 10:41 
Не в сети

Зарегистрирован: 07 авг 2010, 21:29
Сообщения: 1725
Откуда: КМВ
прог. языки: C
ФИО: Андрей
Можно использовать. Но это датчик отражения. Если будет срабатывать на нить - то почему нет?

_________________
Дым, идущий из всех устройств в помещении предвещает появление электрика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Arduino pro mini для управления шаговым двигателем
СообщениеДобавлено: 07 авг 2015, 11:58 
Не в сети
Аватара пользователя

Зарегистрирован: 01 ноя 2014, 00:50
Сообщения: 1728
Откуда: Ставрополье
ФИО: Александр
Не буду голову ломать. Всё равно не пойму )) Знать бы что искать, чтобы так рраз, поставил готовенький кусочек платки с детальками, а оно работает как надо :D

_________________
Наружная реклама, сувениры, шелкотрафаретная печать (пакеты, шары, футболки и т.п.)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Arduino pro mini для управления шаговым двигателем
СообщениеДобавлено: 13 авг 2015, 02:23 
Не в сети
Аватара пользователя

Зарегистрирован: 01 ноя 2014, 00:50
Сообщения: 1728
Откуда: Ставрополье
ФИО: Александр
Собрал ардуинку с драйвером в подобие корпуса. Надо же когда-то с макетки уходить ))
Правда оставил её сверху, чтобы программировать пока всё в стадии разработки.

Вопрос к Андрею (как к автору скетча), почему мотор работает не ... не поёт чтоли, как на принтере например, а как-то не чисто по звуку, и, такое ощущение, что трясётся сильнее, чем моторы на принтере например?
Драйвер переключал по всякому (микрики на нём), но что-то всё как буд-то не так. И еще, почти на минимуме переменника, есть какой-то скачок оборотов (резко повышаются) в одном и том же вроде месте резистора. Это может быть брак переменника или что еще?


Вложения:
IMG_1492[1].JPG
IMG_1492[1].JPG [ 2.23 МиБ | Просмотров: 1817 ]

_________________
Наружная реклама, сувениры, шелкотрафаретная печать (пакеты, шары, футболки и т.п.)
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Arduino pro mini для управления шаговым двигателем
СообщениеДобавлено: 13 авг 2015, 13:10 
Не в сети

Зарегистрирован: 07 авг 2010, 21:29
Сообщения: 1725
Откуда: КМВ
прог. языки: C
ФИО: Андрей
Revenger писал(а):
Вопрос к Андрею (как к автору скетча), почему мотор работает не ... не поёт чтоли, как на принтере например, а как-то не чисто по звуку, и, такое ощущение, что трясётся сильнее, чем моторы на принтере например?

Собрал "макет", сейчас проверю, возможно подправлю.
Revenger писал(а):
Драйвер переключал по всякому (микрики на нём), но что-то всё как буд-то не так. И еще, почти на минимуме переменника, есть какой-то скачок оборотов (резко повышаются) в одном и том же вроде месте резистора. Это может быть брак переменника или что еще?

Переменник на сколько килоом? А, кстати, подключен правильно? Движок переменника на ногу Ax ардуины?

_________________
Дым, идущий из всех устройств в помещении предвещает появление электрика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Arduino pro mini для управления шаговым двигателем
СообщениеДобавлено: 13 авг 2015, 13:33 
Не в сети
Аватара пользователя

Зарегистрирован: 01 ноя 2014, 00:50
Сообщения: 1728
Откуда: Ставрополье
ФИО: Александр
Вроде мотор правильно, по крайней мере когда был не правильно он просто стучал и еле шагал, а переменник (на сколько помню 20кОм, но проверю схожу), судя по скетчу, на ногу А0, а не на Ах... Или я что-то не там смотрел..

_________________
Наружная реклама, сувениры, шелкотрафаретная печать (пакеты, шары, футболки и т.п.)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Arduino pro mini для управления шаговым двигателем
СообщениеДобавлено: 13 авг 2015, 14:33 
Не в сети

Зарегистрирован: 07 авг 2010, 21:29
Сообщения: 1725
Откуда: КМВ
прог. языки: C
ФИО: Андрей
Ну да, на А0.
Сейчас проверю скетч.

_________________
Дым, идущий из всех устройств в помещении предвещает появление электрика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Arduino pro mini для управления шаговым двигателем
СообщениеДобавлено: 13 авг 2015, 18:46 
Не в сети

Зарегистрирован: 07 авг 2010, 21:29
Сообщения: 1725
Откуда: КМВ
прог. языки: C
ФИО: Андрей
Все правильно, да, при шорохах резистора возможно такое поведение. Добавлю завтра "антидребезг" для резистора, также три кнопки и светодиод.

_________________
Дым, идущий из всех устройств в помещении предвещает появление электрика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Arduino pro mini для управления шаговым двигателем
СообщениеДобавлено: 14 авг 2015, 14:43 
Не в сети

Зарегистрирован: 07 авг 2010, 21:29
Сообщения: 1725
Откуда: КМВ
прог. языки: C
ФИО: Андрей
Новый код. версия 0.2
Изменения:
1. Добавлен светодиод "тип управления". На ногу ардуины 7, анодом к ноге, катодом - на землю, обязательно токоограничивающий резистор ом 200
2. Добавлена кнопка "Больше" - нога 4, замыкание на землю
3. Добавлена кнопка "Меньше" - нога 2, замыкание на землю
4. Добавлена кнопка "Режим" - нога 3, замыкание на землю

Логика работы: После включения светодиод "тип управления" - выключен. Частота задается резистором.
После однократного нажатия на кнопку "режим" - светодиод включается, устройство продолжает генерировать частоту установленную резистором, но ее можно менять кнопками "Больше" и "Меньше". При этом положение и изменения резистора - неважны.
Если снова нажать кнопку режим - то светодиод выключится, частота снова задается резистором напрямую.

Сейчас в скетче установлена минимальная частота 2, максимальная 100. Меняйте как надо.
Жду результатов теста.

Код:
/*
Управление шаговиком (драйвер степ-дир) переменным резистором
теперь с кнопками! :)
v 0.2 */




#define Step_pin 6 //вывод Arduino для ноги STEP контроллера
#define Dir_pin 5 //вывод Arduino для ноги DIR контроллера
#define Resistor_pin A0 //вывод Arduino резистора 0-5вольт
#define Mode_led_pin 7 //вывод Arduino Светодиода "режим"

//********** Кнопки:
#define keyDEFtime   30 //Значение для антидребезга - клавиша удерживаемая столько времени в миллисекундах считается нажатой.
#define keyPAUSEtime   400 //Значение в миллисекундах паузы между повторами
#define Butt_Mode 3 //Кнопка "режим"
//номер кнопки - 3
#define KeyMode 3
#define Butt_Down 2 //Кнопка "Меньше"
//номер кнопки - 1
#define KeyDown 1
#define Butt_Up 4 //Кнопка "Больше"
//номер кнопки - 2
#define KeyUp 2
#define KeyNONE 0 //Ничего не нажато
byte keyTemp = KeyNONE; //Переменная для хранения временного состояния кнопок
byte keyCONTpress; //Переменная взводится после первого срабатывания клавиши и определяет автоповтор
unsigned long BtnTime; //Хранит время начала нажатия кнопок
//************


byte ControlMode = 0; //Переменная определяет режим управления. 0 - резистор. 1 - кнопки.

//Переменная для значения таймера
volatile unsigned char timerLoadValue;
//Переменная для количества холостых циклов таймера
volatile unsigned char FullTimer;
volatile unsigned char FullTimerCount; //внутренный счетчик таймера

//значение минимальной частоты
#define LowFreq 2
//значение МАКСИмальной частоты
#define HighFreq 100
//Переменная для шага чаcтоты на едниницу изменения АЦП
float FreqStep;
int OutFreq = LowFreq; //Переменная для хранения установленной частоты



//Переменная для текущего значения резистора
int sensorValue = 0;
//Переменная для Старого значения резистора
int OLDsensorValue = 0;



void setup() {               
// Конфигурим вывод Step_pin как выход
pinMode(Step_pin,OUTPUT);
// Конфигурим вывод Dir_pin как выход
pinMode(Dir_pin,OUTPUT);
// Конфигурим вывод Dir_pin как вход
pinMode(Resistor_pin,INPUT);
// Конфигурим выводы кнопок как входы с подтяжкой
pinMode(Butt_Down, INPUT_PULLUP);
pinMode(Butt_Mode,INPUT_PULLUP);
pinMode(Butt_Up,INPUT_PULLUP);
pinMode(Mode_led_pin,OUTPUT); // Конфигурим вывод Mode_led_pin как выход



//Установим на выходах 0
digitalWrite(Step_pin, LOW);
digitalWrite(Dir_pin, LOW);

// Посчитаем "шаг" изменения частоты на единицу изменения резистора
FreqStep=(float)(HighFreq-LowFreq)/1024;

//Запускает последовательный порт
Serial.begin(9600);

//Сообщение о запуске программы
Serial.println("Program started"); 
Serial.print("FreqStep="); 
Serial.println(FreqStep); 

//Запускает таймер и получает загружаемое значение таймера.
//Параметр - желаемая частота в герцах.

timerLoadValue=SetupTimer2(50);

//Установки Таймер2: Делитель частоты /8, режим 0
//Частота = 16MHz/256 = 62500 герц или
//Делитель /256 дает нам хороший рабочий диапазон
//так что сейчас мы просто жестко запрограммируем это.
TCCR2A = 0;
//TCCR2B = 1<<CS22 | 0<<CS21 | 0<<CS20; //это на 256
TCCR2B = 4;

//Подключение прерывания по переполнению Timer2
TIMSK2 = 1<<TOIE2;


//Выводит загружаемое значение таймера
Serial.print("Timer2 Load:");
Serial.println(timerLoadValue,HEX);
}

void loop() {
byte ButtPressed=read_buttons(); //прочитаем нажатую кнопку

if (KeyMode==ButtPressed) //Если нажата кнопка - меняем режим управления и управляем светодиодом
  {ControlMode=!ControlMode; digitalWrite(Mode_led_pin,ControlMode);}
   
   if (ControlMode) //Если режим кнопки (светодиод включен)
     {
       if (KeyUp==ButtPressed) //Если нажата кнопка "Больше"
         {OutFreq+=1;}
       if (KeyDown==ButtPressed) //Если нажата кнопка "Меньше"
         {OutFreq-=1;} 
       if (ButtPressed) {SetupTimer2(OutFreq);} //Если вообще что-то нажато
     }
   else //Если режим резистор (светодиод выключен)
     {
        //Тут будем читать занчение
        sensorValue=analogRead(Resistor_pin); 
        //Сравним значение со старым, если отличается - пересчитаем установку таймера
        if (sensorValue!= OLDsensorValue)
          {  //Serial.println("ReCall"); //debug
           OLDsensorValue=sensorValue;
           OutFreq = LowFreq+FreqStep*sensorValue; //Вычислим новое значение частоты
           SetupTimer2(OutFreq);
          }
     }
   
    /*
      Serial.print("sensor=");
      Serial.println(sensorValue,DEC);
      Serial.print("FullTimerCount");
      Serial.println(FullTimerCount);
      Serial.print("FullTimer");
      Serial.println(FullTimer,DEC);
     
      Serial.print("timer=");
      Serial.println(timerLoadValue,DEC);
     
      Serial.print("ButtPressed=");
      Serial.println(ButtPressed,DEC);
      Serial.print("OutFreq=");
      Serial.println(OutFreq,DEC);
       Serial.println("***");
          Serial.println("");

    */
    delay (1);
}



//Timer2 указатель вектора прерывания по переполнению
//Собственно говоря частота будет в два раза ниже.
ISR(TIMER2_OVF_vect)
{
  if (FullTimerCount>1)
  {FullTimerCount--;}
  else
  {if (FullTimerCount==1) //предпоследний цикл
      {
       TCNT2+=timerLoadValue;
       FullTimerCount=0;
      }
   {if (FullTimerCount==0) // Срабатывание
        {
         FullTimerCount=FullTimer;
         //Переключение IO-вывода в другое состояние.
         digitalWrite(Step_pin,!digitalRead(Step_pin));
        //Перезагрузка таймера и коррекция по задержке
        if (FullTimer)
            {TCNT2=1;} //Если холостые циклы есть  - максимальное значение
        else
            {TCNT2+=timerLoadValue;}
        }

    }
  }
}


#define TIMER_CLOCK_FREQ 62500.0
//15625 for /1024
//2MHz for /8 prescale from 16MHz

  //Установка Таймера2.
//Конфигурирует 8-битный Таймер2 ATMega168 для выработки прерывания
//с заданной частотой.
//Возвращает начальное значение таймера, которое должно быть загружено в TCNT2
//внутри вашей процедуры ISR.
//Смотри пример использования ниже.
unsigned char SetupTimer2(float timeoutFrequency){
  //Подсчет начального значения таймера
  //Слегка усложним, добавив холостые просчеты
  int ticks = TIMER_CLOCK_FREQ/timeoutFrequency;
  FullTimer=ticks/256; //Вычисляем количество ПОЛНЫХ циклов таймера
  timerLoadValue=(int)(257.0-(ticks-(256*FullTimer)+0.5));  //Вычисляем количество доплнительных тиков таймера
  //257 на самом деле должно быть 256, но я получил лучшие результаты с 257.

  //загружает таймер для первого цикла
  if (FullTimer)
    {TCNT2=1;} //Если холостые циклы есть  - максимальное значение
  else
      {TCNT2=timerLoadValue;}
}



// *****************************
//Чтение кнопок с антидребезгом
int read_buttons() {
byte KeyTempTemp = KeyNONE; //Переменная для хранения свежесчитанного внутри функции
//digitalWrite (LED_pin,0); //debug
//delay (400); //debug
//Тут используем millis() для отслеживания нажатия кнопки
// Запоминиаем в переменной BtnTime ВРЕМЯ НАЧАЛА нажатия
// Запоминаем в переменной keyTemp нажатия
// Дефиним время антидребезга #define

      if (!digitalRead(Butt_Mode)) { KeyTempTemp=KeyMode; } //Определяем в переменную ТЕКУЩУЮ нажатую кнопку.
      if (!digitalRead(Butt_Down)) { KeyTempTemp=KeyDown; }
      if (!digitalRead(Butt_Up)) { KeyTempTemp=KeyUp; }
     //А тут проверим, совпадает ли с keyTemp (была ли нажата ранее)
/*     lcd.setCursor(0, 0); //debug
     lcd.print(KeyTempTemp); //debug
     lcd.setCursor(2, 0); //debug
     lcd.print(keyTemp); //debug
     lcd.setCursor(1, 1); //debug
     lcd.print(millis()); //debug
     lcd.setCursor(12, 1); //debug
     digitalWrite (LED_pin,1); //debug
     delay (100);
     lcd.print("    "); //debug
     lcd.setCursor(12, 1); //debug
     lcd.print(adc_key_in); //debug
*/
     if (KeyTempTemp==keyTemp) //Кнопка уже БЫЛА нажата
     {
        if (keyCONTpress) //Повторные установки клавиши
          {
            if ((millis()-BtnTime) > keyPAUSEtime)
            {
              BtnTime=millis(); // Ставим стартовое время для автоповтора
              return keyTemp;
            }
          } 
        else //Первая установка клавиши
           {
              if ((millis()-BtnTime) > keyDEFtime)
              {
                keyCONTpress=1;
                BtnTime=millis(); // Ставим стартовое время для автоповтора
                return keyTemp;
              }
           }
     }
     else //Раньше было другое состояние
     {
       keyCONTpress=0;
       BtnTime=millis(); //Устанавливаем ТЕКУЩЕЕ время в переменную BtnTime
       keyTemp=KeyTempTemp; //устанавливаем кнопку во временную переменную.
     }
   
return KeyNONE; }  // Если ничего не сработало, то ничего не возвращаем
//***********************************


Ну и пожеланий жду, могу например установленную частоту запоминать. Но с экраном все ж проще, имхо.

_________________
Дым, идущий из всех устройств в помещении предвещает появление электрика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Arduino pro mini для управления шаговым двигателем
СообщениеДобавлено: 14 авг 2015, 17:27 
Не в сети
Аватара пользователя

Зарегистрирован: 01 ноя 2014, 00:50
Сообщения: 1728
Откуда: Ставрополье
ФИО: Александр
Супер. Попробую прицепить сегодня весь "обвес" )) Жалко с макетки уже всё переместил, но ничего.
Отпишусь по результату.

_________________
Наружная реклама, сувениры, шелкотрафаретная печать (пакеты, шары, футболки и т.п.)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Arduino pro mini для управления шаговым двигателем
СообщениеДобавлено: 14 авг 2015, 17:39 
Не в сети

Зарегистрирован: 07 авг 2010, 21:29
Сообщения: 1725
Откуда: КМВ
прог. языки: C
ФИО: Андрей
Подумалось мне чего-то... О установке микрометра.
Я так понимаю что логика работы всего устройства такая: Экструдер через сопло давит расплав, он на воздухе застывает охлаждаясь. Толщина регулируется скоростью протяжки: То есть если экструдер работает на постоянных оборотах - то толщину регулируем изменением скорости шагового двигателя (протяжка). Какое расстояние между соплом экструдера и протяжкой? Где на этом расстоянии можно установить микрометр? то есть нужно место где пруток уже достаточно остыл и не раздавится измерительными роликами, но максимально близко к тому месту, где он еще "растягивается" - чтоб волн не было от положительной обратной связи.
И еще, если экструдер может из-за гранул или еще каких-то причин менять скорость, то его все равно нужно контролировать. Так что оптопару ставить желательно.
Ну, у меня сейчас вообще так:
Вложение:
IMG_20150814_163415.jpg
IMG_20150814_163415.jpg [ 1.39 МиБ | Просмотров: 1760 ]

_________________
Дым, идущий из всех устройств в помещении предвещает появление электрика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Arduino pro mini для управления шаговым двигателем
СообщениеДобавлено: 14 авг 2015, 23:03 
Не в сети
Аватара пользователя

Зарегистрирован: 01 ноя 2014, 00:50
Сообщения: 1728
Откуда: Ставрополье
ФИО: Александр
У меня сейчас протяжка примерно в 30см, до неё пластик доходит еще горячим, но уже вроде не деформируется. Можно это расстояние сократить, поставив вентилятор обдувать нить. Обороты экструдера нужно стабилизировать как-то, точнее все мысли как раз и были об обратной связи, чтобы протяжка реагировала на изменения оборотов. + если еще микрометр добавить, то вообще супер (так и делают в итоге все, кто давно экструдерами балуется).
Вообще давление на пластик микрометром или штангелем думаю не принципиально, т.к. очень низкое, там достаточно легкой пружинки.

Добавлено спустя 3 часа 44 минуты 8 секунд:
Залил прошивку. Чичас буду пробовать крутить моторчик ))

Добавлено спустя 20 минут 25 секунд:
Не получилось "зажечь" светодиод. Т.е. функция "режим" не активируется. Соответственно "кнопки" +- не фунциклируют.

Пробовал просто перемычкой от - к ногам цепляться, типа нажимать. Может контакт плохой.. попробую чуть позже подпаяться. :oops:

_________________
Наружная реклама, сувениры, шелкотрафаретная печать (пакеты, шары, футболки и т.п.)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 474 ]  На страницу Пред.  1 ... 8, 9, 10, 11, 12, 13, 14 ... 32  След.

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


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

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


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

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