roboforum.ru

Технический форум по робототехнике.

Вопросы новичка.

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Re: Вопросы новичка.

Сообщение dimamichev » 07 авг 2018, 17:01

Одна она у меня. Ждать новых лень. Её под мелкий шаговик который "би-падла", а под крупный - транзисторы, они до 2 Ампер ток держат.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Dmitry__ » 07 авг 2018, 17:09

dimamichev писал(а):Одна она у меня. Ждать новых лень.

Вот тебе делать нефиг, все ждать с али. В Питере есть прекрасный магазин, все по ценам али.
Драйверы:
http://roboshop.spb.ru/modules&filter=15

Добавлено спустя 1 минуту 19 секунд:
Твоя uln-ка по цене муки - 80р :)

http://roboshop.spb.ru/modules/draiver-step-mottor?filter=15

Изображение
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Вопросы новичка.

Сообщение dimamichev » 07 авг 2018, 17:39

Ну тут надо затариваться...и опять почту ждать. Конечно не месяц, я надеюсь. Вообще плохо что в Смоленске мало торгуют модулями с али (про коэффициент цены 4-5 молчим), ардуины нет в принципе.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение dimamichev » 08 авг 2018, 19:09


Такой пробник пока...
Код: Выделить всёРазвернуть
///////////// СТАНОК ДЛЯ РИСОВАНИЯ //////////////////////////////
#include <Servo.h>
#define f1 8 // выводы обмоток малого шагового (вертикаль Y)
#define f2 9
#define f3 10
#define f4 11
#define F1 4 // выводы обмоток большого шагового (горизонталь X)
#define F2 5
#define F3 6
#define F4 7

byte a0=140;byte a=a0;// угол исходного положения пера - поднято
int n=10;//переменная единицы временного интервала
int i=0;// счётчик
int i1=0;// счётчик
String inputString;// строка данных
byte tablY[16]={0,1,1,1,
                1,1,0,1,
                1,0,1,1,
                1,1,1,0};// ТАКТЫ ВКЛЮЧЕНИЯ - полношаговый режим в одну обмотку питанием (биполярный)
byte tablX[16]={1,1,0,0,
                0,1,1,0,
                0,0,1,1,
                1,0,0,1};// ТАКТЫ ВКЛЮЧЕНИЯ - полношаговый режим в две обмотки питанием (униполярный)               

Servo servo1;



void setup() {
Serial.begin(9600);
servo1.attach(12);
servo1.write(a0);
pinMode(f1, OUTPUT);   //  определение вывода как ВЫХОД
pinMode(f2, OUTPUT);
pinMode(f3, OUTPUT);
pinMode(f4, OUTPUT);
digitalWrite(f1, HIGH); digitalWrite(f2, HIGH); digitalWrite(f3, HIGH); digitalWrite(f4, HIGH);// исходное состояние  - обмотки обесточены 
pinMode(F1, OUTPUT);   //  определение вывода как ВЫХОД
pinMode(F2, OUTPUT);
pinMode(F3, OUTPUT);
pinMode(F4, OUTPUT);
digitalWrite(F1, LOW); digitalWrite(F2, LOW); digitalWrite(F3, LOW); digitalWrite(F4, LOW);// исходное состояние  - обмотки обесточены 
}

void loop()
    {
     up_down_pen(true); SchagY(80);SchagX(-30);SchagY(-80);SchagX(30);up_down_pen(false);
     delay (2000);
      me:goto me;
    }
////////////////////////////////////////////////////////////////////////////////////////
//// функция перемещения пера по оси Y на заданное число шагов (направление определяется знаком перед числом)
////////////////////////////////////////////////////////////////////////////////////////
void SchagY(int y)
{
byte j=0;int k;if (y>=0){k=1;}else {k=-1;}
while (j<=abs(y)-1)
{
  if(i<0){i=12;}if(i>12){i=0;}
  digitalWrite(f1, tablY[i]);digitalWrite(f2, tablY[i+1]);digitalWrite(f3, tablY[i+2]);digitalWrite(f4, tablY[i+3]);delay(2*n);i=i+4*k;j=j+1; 
  }
digitalWrite(f1, HIGH); digitalWrite(f2, HIGH); digitalWrite(f3, HIGH); digitalWrite(f4, HIGH);// исходное состояние  - обмотки обесточены   
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
//// функция перемещения пера по оси X на заданное число шагов (направление определяется знаком перед числом)
////////////////////////////////////////////////////////////////////////////////////////
void SchagX(int x)
{
byte j1=0;int k1;if (x>=0){k1=1;}else {k1=-1;}
while (j1<=abs(x)-1)
{
  if(i1<0){i1=12;}if(i1>12){i1=0;}
  digitalWrite(F1, tablX[i1]);digitalWrite(F2, tablX[i1+1]);digitalWrite(F3, tablX[i1+2]);digitalWrite(F4, tablX[i1+3]);delay(2*n);i1=i1+4*k1;j1=j1+1; 
  }
digitalWrite(F1, LOW); digitalWrite(F2, LOW); digitalWrite(F3, LOW); digitalWrite(F4, LOW);// исходное состояние  - обмотки обесточены   
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////функция поднимания-опускания пера (значения аргумента false и true  соответственно)/////
void  up_down_pen(boolean  k)
{
  while (a>87&&k==1)
  {servo1.write(a);a=a-1;delay(n);}if(k== true ){a=87;}
   while (a<a0&&k==0)
  {servo1.write(a);a=a+1;delay(n);}if (k==false){a=a0;}
  }
  /////////////////////////////////////////////////////////////////////////////////////////////////


Добавлено спустя 3 часа 11 минут 47 секунд:
Сетка с миллиметровым шагом, люфты имеют место быть.
Вложения
20180808_175624.jpg
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Scorpio » 09 авг 2018, 16:04

Нормальная сетка. Шаговики считай освоил. Кружочки ровные умеет рисовать? Скетч все еще не красивый.
Аватара пользователя
Scorpio
 
Сообщения: 2683
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение dimamichev » 09 авг 2018, 19:20

Scorpio писал(а):Нормальная сетка. Шаговики считай освоил. Кружочки ровные умеет рисовать? Скетч все еще не красивый.

Нет, пока только вдоль осей координатных шпарит, пробовал по аналогии с предыдущей конструкцией отрезок под углом, но пока не пошло (синусы и косинусы не очень приветствуются). Есть нюансы в отличии от серв - положение пера не запомнить, приходиться возращать в исходное положение через счётчик всех шагов, он то и сбивается при использовании тригонометрии. Скетч чуть переделал в шаги по миллиметрам. Но есть принципиальный момент - по оси х минимальное перемещение 0,5мм, у - около 0,2мм (размер линейного шага пера из-за двигателей). Поэтому плавная кривая тоже не факт. Плюс для неё надо как то извратиться и одновременно шагать моторами, как это воткнуть в один цикл - вопрос для меня. Ещё эти хвостики при разворотах пера на 180 (на фотке видны). Получается при подключении шаговика - ложный шажок, и не в ту сторону :D, при этом возврат работает идеально (контура полностью повторяются при перезапуске программы ардуины). Выложу скетч, но он пока хорош для рисования прямоугольников, плюсиков и квадратов.

Добавлено спустя 2 часа 4 минуты 9 секунд:
Код: Выделить всёРазвернуть
///////////// СТАНОК ДЛЯ РИСОВАНИЯ //////////////////////////////
#include <Servo.h>
#define f1 8 // выводы обмоток малого шагового (вертикаль Y)
#define f2 9
#define f3 10
#define f4 11
#define F1 4 // выводы обмоток большого шагового (горизонталь X)
#define F2 5
#define F3 6
#define F4 7

byte a0=140;byte a=a0;// угол исходного положения пера - поднято
int n=10;//переменная единицы временного интервала
int i=0;// счётчик
int i1=0;// счётчик
float X=0;float Y=0;//переменные учёта положения пера относительно начала координат
String inputString;// строка данных
byte tablY[16]={0,1,1,1,
                1,1,0,1,
                1,0,1,1,
                1,1,1,0};// ТАКТЫ ВКЛЮЧЕНИЯ - полношаговый режим в одну обмотку питанием (биполярный)
byte tablX[16]={1,0,0,0,
                0,1,0,0,
                0,0,1,0,
                0,0,0,1};// ТАКТЫ ВКЛЮЧЕНИЯ - полношаговый режим в одну обмотку питанием (униполярный)               

Servo servo1;



void setup() {
Serial.begin(9600);
servo1.attach(12);
servo1.write(a0);delay(10*n);servo1.write(a0-3);//начальный подъём пера
pinMode(f1, OUTPUT);   //  определение вывода как ВЫХОД
pinMode(f2, OUTPUT);
pinMode(f3, OUTPUT);
pinMode(f4, OUTPUT);
digitalWrite(f1, HIGH); digitalWrite(f2, HIGH); digitalWrite(f3, HIGH); digitalWrite(f4, HIGH);// исходное состояние  - обмотки обесточены 
pinMode(F1, OUTPUT);   //  определение вывода как ВЫХОД
pinMode(F2, OUTPUT);
pinMode(F3, OUTPUT);
pinMode(F4, OUTPUT);
digitalWrite(F1, LOW); digitalWrite(F2, LOW); digitalWrite(F3, LOW); digitalWrite(F4, LOW);// исходное состояние  - обмотки обесточены 
}

void loop()
    {
//что то рисуем...

      VozvratPera ();// возврат в начало отсчёта пера
      me:goto me;//по привычке
    }

////////////////////////////////////////////////////////////////////////////////////////
//// функция перемещения пера по оси Y на заданное количество миллиметров (направление определяется знаком перед числом)
////////////////////////////////////////////////////////////////////////////////////////
void SchagY(float y)
{
Y=Y+y;//текущий учёт положения пера относительно начала отсчёта
y=4.7*y;//переводной множитель из миллиметров в число шагов двигателя
byte j=1;int k;if (y>=0){k=1;}else {k=-1;}
while (j<=abs(y))
{
  if(i<0){i=12;}if(i>12){i=0;}////условия зацикливания тактов по кругу
  digitalWrite(f1, tablY[i]);digitalWrite(f2, tablY[i+1]);digitalWrite(f3, tablY[i+2]);digitalWrite(f4, tablY[i+3]);delay(2*n);
  i=i+4*k;j=j+1;//условия перехода на следующий такт 
  }
digitalWrite(f1, HIGH); digitalWrite(f2, HIGH); digitalWrite(f3, HIGH); digitalWrite(f4, HIGH);// исходное состояние  - обмотки обесточены   
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
//// функция перемещения пера по оси X на заданное количество миллиметров (направление определяется знаком перед числом)
////////////////////////////////////////////////////////////////////////////////////////
void SchagX(float x)
{
  X=X+x;//текущий учёт положения пера относительно начала отсчёта
  x=2*x;//переводной множитель из миллиметров в число шагов двигателя
byte j=1;int k;if (x>=0){k=1;}else {k=-1;}
while (j<=abs(x))
{
  if(i1<0){i1=12;}if(i1>12){i1=0;}//условия зацикливания тактов по кругу
  digitalWrite(F1, tablX[i1]);digitalWrite(F2, tablX[i1+1]);digitalWrite(F3, tablX[i1+2]);digitalWrite(F4, tablX[i1+3]);delay(2*n);
  i1=i1+4*k;j=j+1;//условия перехода на следующий такт
 
  }
digitalWrite(F1, LOW); digitalWrite(F2, LOW); digitalWrite(F3, LOW); digitalWrite(F4, LOW);// исходное состояние  - обмотки обесточены   
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////функция возврата пера в исходное положение на начало отсчёта
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void VozvratPera ()
{
  up_down_pen(false);
  SchagX(-X); SchagY(-Y);
  X=0;Y=0;

  }
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////функция поднимания-опускания пера (значения аргумента false и true  соответственно)/////
void  up_down_pen(boolean  k)
{
  while (a>87&&k==1)
  {servo1.write(a);a=a-1;delay(n);}if(k== true ){a=87;}
   while (a<a0&&k==0)
  {servo1.write(a);a=a+1;delay(n);}if (k==false){a=a0;delay(10*n);servo1.write(a0-3);}
  }
  /////////////////////////////////////////////////////////////////////////////////////////////////
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Dmitry__ » 09 авг 2018, 19:31

Код: Выделить всёРазвернуть
#define f1 8 // выводы обмоток малого шагового (вертикаль Y)
#define f2 9
#define f3 10
#define f4 11
#define F1 4 // выводы обмоток большого шагового (горизонталь X)
#define F2 5
#define F3 6
#define F4 7


Димон, ну как так? :shock: Я чуть глаза не сломал, пытаясь найти разницу, а оказалось строчные/заглавные :o
Нахрена так обзывать сигналы, чтоб потом писать комментарии??? Это же звиздец сколько можно ошибок наделать в программе на ровном месте...
Почему не так как ниже?
В таком варианте комментарии вообще не нужны...

Код: Выделить всёРазвернуть
#define motor_Y_f1 8
#define motor_Y_f2 9
#define motor_Y_f3 10
#define motor_Y_f4 11

#define motor_X_f1 4
#define motor_X_f2 5
#define motor_X_f3 6
#define motor_X_f4 7
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Вопросы новичка.

Сообщение dimamichev » 09 авг 2018, 20:40

Ну, да - логичней,перепишу.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Scorpio » 10 авг 2018, 04:45

Добавлю своих пару ложек в скетч, раз уж мы взялись воспитывать роботостроителя.
В коментах к скетчу лучше указывать для какой ардуины он писался. Потом и сам не вспомнишь.
Для управления шаговиками существуют удобные библиотеки. Если решил сам, что в познавательных целях полезно, то хотя бы обеспечь одновременное движение по 2м осям, иначе смысла в такой рисовалке меньше, чем в первой.
Массив шагов для управления шаговиками вовсе не нужен, но, если тебе так нравится для лучшего понимания, то использовать массив из байт для 1 и 0 весьма расточительно. Ты сейчас вырабатываешь стиль программирования, который д.б. сразу гарантировать оптимальность и элегантность кода. Меняем:
Код: Выделить всёРазвернуть
//byte tablX[16]={1,1,0,0,
//                0,1,1,0,
//                0,0,1,1,
//                1,0,0,1};// ТАКТЫ ВКЛЮЧЕНИЯ - полношаговый режим в две обмотки питанием (униполярный)
byte tablX[4]={0b11000000,
               0b01100000,
               0b00110000,
               0b10010000};// ТАКТЫ ВКЛЮЧЕНИЯ - полношаговый режим в две обмотки питанием (униполярный) 

Когда мы одновременно управляем 4-мя ногами МК, то удобнее и гораздо эффективнее использовать обращение к порту целиком, нежели к отдельным ногам:
Код: Выделить всёРазвернуть
//digitalWrite(F1, LOW); digitalWrite(F2, LOW); digitalWrite(F3, LOW); digitalWrite(F4, LOW);  
PORTD &= 0x0F;

Посмотрев принципиальную схему Arduino UNO, мы определили, что выводы 4,5,6,7 дуины - это D4,D5,D6,D7 МК. Соответственно PORTD &= 0x0F; записывает нам нули в старшие разряды порта D, оставляя младшие без изменений. Попробуй теперь самостоятельно переписать функции SchagX и SchagY, с учетом изменения массива и операций с портом.
Старайся пользоваться преимуществами С++:
Код: Выделить всёРазвернуть
//int k1;if (x>=0){k1=1;}else {k1=-1;}
int k1=(x>=0)?1:-1;
Аватара пользователя
Scorpio
 
Сообщения: 2683
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение dimamichev » 10 авг 2018, 10:59

Так получилось, загружать в станок страшно.
С одновременным движением по двум осям - тут как пойти?, либо "элементарные" Г-образные и ничего к исходным функциям добавлять не надо, либо "элементарный косой штрих", но тут надо думать.
Как вариант (тоже видел рисовальный ролик) заменить ручку фломастером и растр- по точкам в прямоугольной системе.
Код: Выделить всёРазвернуть
///////////// СТАНОК ДЛЯ РИСОВАНИЯ //////////////////////////////
///////////// Arduino UNO ///////////////////////////////////////
#include <Servo.h>

#define motor_Y_f1 8
#define motor_Y_f2 9
#define motor_Y_f3 10
#define motor_Y_f4 11

#define motor_X_f1 4
#define motor_X_f2 5
#define motor_X_f3 6
#define motor_X_f4 7

byte a0=140;byte a=a0;// угол исходного положения пера - поднято
int n=10;//переменная единицы временного интервала
int i=0;// счётчик
int i1=0;// счётчик
float X=0;float Y=0;//переменные учёта положения пера относительно начала координат
String inputString;// строка данных
byte tablY[4]={0b00000111,
               0b00001101,
               0b00001011,
               0b00001110};// ТАКТЫ ВКЛЮЧЕНИЯ - полношаговый режим в одну обмотку питанием (биполярный)
byte tablX[4]={0b10000000,
               0b01000000,
               0b00100000,
               0b00010000};// ТАКТЫ ВКЛЮЧЕНИЯ - полношаговый режим в одну обмотку питанием (униполярный)               

Servo servo1;



void setup() {
Serial.begin(9600);
servo1.attach(12);
servo1.write(a0);delay(10*n);servo1.write(a0-5);//начальный подъём пера
pinMode(motor_Y_f1, OUTPUT);   //  определение вывода как ВЫХОД
pinMode(motor_Y_f2, OUTPUT);
pinMode(motor_Y_f3, OUTPUT);
pinMode(motor_Y_f4, OUTPUT);
PORTB &=0b00001111;// исходное состояние  - обмотки обесточены   
pinMode(motor_X_f1, OUTPUT);   //  определение вывода как ВЫХОД
pinMode(motor_X_f2, OUTPUT);
pinMode(motor_X_f3, OUTPUT);
pinMode(motor_X_f4, OUTPUT);
PORTD &=0b00001111;// исходное состояние  - обмотки обесточены 
}

void loop()
    {
   // Что то рисуем...
     VozvratPera ();
      me:goto me;
    }

////////////////////////////////////////////////////////////////////////////////////////
//// функция перемещения пера по оси Y на заданное количество миллиметров (направление определяется знаком перед числом)
////////////////////////////////////////////////////////////////////////////////////////
void SchagY(float y)
{
Y=Y+y;//текущий учёт положения пера относительно начала отсчёта
y=4.7*y;//переводной множитель из миллиметров в число шагов двигателя
int j=0;int k=(y>=0)?1:-1;
while (j<=abs(y)-1)
{
  if(i<0){i=3;}if(i>3){i=0;}////условия зацикливания тактов по кругу
  PORTB &= tablY[i];
  delay(2*n);
  i=i+k;j=j+1;//условия перехода на следующий такт 
  }
  PORTB &=0b00001111;// исходное состояние  - обмотки обесточены   
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
//// функция перемещения пера по оси X на заданное количество миллиметров (направление определяется знаком перед числом)
////////////////////////////////////////////////////////////////////////////////////////
void SchagX(float x)
{
  X=X+x;//текущий учёт положения пера относительно начала отсчёта
  x=2*x;//переводной множитель из миллиметров в число шагов двигателя
int j=0;int k=(x>=0)?1:-1;
while (j<=abs(x)-1)
{
  if(i1<0){i1=3;}if(i1>3){i1=0;}//условия зацикливания тактов по кругу
  PORTD &=tablX[i1];
  delay(2*n);
  i1=i1+k;j=j+1;//условия перехода на следующий такт
 
  }
PORTD &=0b00001111;// исходное состояние  - обмотки обесточены 
   
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////функция возврата пера в исходное положение на начало отсчёта
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void VozvratPera ()
{
  up_down_pen(false);
  SchagX(-X); SchagY(-Y);
  X=0;Y=0;

  }
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////функция поднимания-опускания пера (значения аргумента false и true  соответственно)/////
void  up_down_pen(boolean  k)
{
  while (a>87&&k==1)
  {servo1.write(a);a=a-1;delay(n);}if(k== true ){a=87;}
   while (a<a0&&k==0)
  {servo1.write(a);a=a+1;delay(n);}if (k==false){a=a0;delay(10*n);servo1.write(a0-5);}
  }
  /////////////////////////////////////////////////////////////////////////////////////////////////
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Dmitry__ » 10 авг 2018, 15:33

dimamichev писал(а):полношаговый режим в одну обмотку питанием (униполярный)

Так шаговики не управляются. Что это за "бегущая 1"?

Код: Выделить всёРазвернуть
byte tablY[4]={0b00000111,
               0b00001101,
               0b00001011,
               0b00001110};// ТАКТЫ ВКЛЮЧЕНИЯ - полношаговый режим в одну обмотку питанием (биполярный)

И так нельзя управлять. Это что, 3 обмотки всегда подключены? Или инверсный драйвер и одна обмотка подключена? В любом случае - неправильно.
Косяк на косяке. :)
Алгоритм управления шаговиком сам нашел? Коммутируя проводочки?
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Вопросы новичка.

Сообщение dimamichev » 10 авг 2018, 16:07

Dmitry__ писал(а):
dimamichev писал(а):полношаговый режим в одну обмотку питанием (униполярный)

Так шаговики не управляются. Что это за "бегущая 1"?

Код: Выделить всёРазвернуть
byte tablY[4]={0b00000111,
               0b00001101,
               0b00001011,
               0b00001110};// ТАКТЫ ВКЛЮЧЕНИЯ - полношаговый режим в одну обмотку питанием (биполярный)

И так нельзя управлять. Это что, 3 обмотки всегда подключены? Или инверсный драйвер и одна обмотка подключена? В любом случае - неправильно.
Косяк на косяке. :)
Алгоритм управления шаговиком сам нашел? Коммутируя проводочки?

Драйвер инверсный, алгоритм управления такой при питании от 5 В.Пробовал и две обмотки питать сразу - правильным алгоритмом, с повышением крутящего в 1,4 раза, подумал обмоткам тяжко будет. С униполярным тоже пробовал по разному. Например всего от 5 Вольт так: 1100,0110,0011,1001
Дим, меня вот что смущает (скетч пока не загрузил) на 12 выводе серва сидит, а я её через порт В, получается собираюсь вредничать. Подъёмник может не работать.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Scorpio » 10 авг 2018, 16:09

Dmitry__ писал(а):Так шаговики не управляются.

Он же тебе линии рисовал, а ты говоришь не управляются :)
Главное не допускать длительного тока через обмотки.
Если так PORTB &= tablY[i];, то старшие биты в массиве надо забивать 1111, чтобы не задействованные ноги порта остались при своем значении. Либо так: PORTB &= (tablY[i]|0xF0);
Преимущество твоей новой конструкции как раз в возможности рисовать ровные косые линии и кружочки, без аппроксимации их отрезками. Кроме одновременного движения, надо еще уметь задавать разную скорость по X и Y. Придумай сам, как это сделать. Если уж совсем не будет получаться, то подскажем :)
Аватара пользователя
Scorpio
 
Сообщения: 2683
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение dimamichev » 10 авг 2018, 16:34

Я правильно понимаю, что на не задействованные в управлении выводы надо 1111-цы ставить и при этом их значение меняться не будет?
Скорость - время пауз между переключениями шагов! В текущем варианте всё вертится вокруг числа шажков, про длительность пауз забыл напрочь.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Scorpio » 10 авг 2018, 16:40

Ты делаешь логическое & значения ноги порта с 1. Если у тебя там был 0, установленный какой-то другой функцией, то он и останется. Если была 1, то останется 1.
Аватара пользователя
Scorpio
 
Сообщения: 2683
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Пред.След.

Вернуться в Arduino и другие Xduino

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

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