Технический форум по робототехнике.
MIHAnik22 » 13 мар 2016, 18:23
Все просто и в то же время оч сложно, потому что не работает... Прошиваю марлин в ардуишку, рампс и драйвер установлены шаговик подключен, и на команды репетиер хоста отвечает, все работает. Но зашиваю в ардуино "свой код" скачанный с сайта, который должен работать, но он не работает. Ресет и слип на драйвере запитаны, аппаратное питание есть, силовое питание есть, степ дир меняют свое напряжение, но мотор молчит, перепрошиваю ардуино подключаю репетиер хост...все работает... В чем проблема кто подскажет???
вот код
- Код: Выделить всё • Развернуть
void update(int steps, int time, int pin_step, int pin_dir)
{
if(steps>0) digitalWrite(pin_dir, HIGH);
else
{
digitalWrite(pin_dir, LOW);
steps=-steps;
}
//---
for(int a=0; a<steps*2; a++)
{
delay(time);
digitalWrite(pin_step, !digitalRead(pin_step));
}
}
void setup() {
pinMode(46, OUTPUT);
pinMode(48, OUTPUT);
}
void loop() {
update(100, 10, 46, 48);
delay(1000);
update(-100, 10, 46, 48);
delay(1000);
}
вот сборка
- Вложения
-
![IMG_20160313_174747[1].jpg (878.15 КиБ) Просмотров: 2956 IMG_20160313_174747[1].jpg](./download/file.php?id=40691&t=1&style=9)
Myp » 13 мар 2016, 20:26
подключи светодиоды на степ/дир и убедись что твоя программа работает.
MIHAnik22 » 13 мар 2016, 22:13
Myp, а что в этом случае может не работать? код? может у тебя есть заведомо рабочий пробный скетч для пололу а4988?
Да, проверил, светодиод моргает, ну оно и понятно. Может для степа нужено какое то особое напряжение? или интервалы подачи или длительность подачи? Я пытался в марлине разобратся, ну там наворочено столько defin-ов что фиг поймешь откуда эта переменная где ее искать...
Добавлено спустя 1 час 33 минуты 1 секунду:
Никто такого никогда не делал? ну может кто то хоть поможет разобраться в "марлин"е? Где там конкретно искать хитрость в управлении шаговиками?
Добавлено спустя 5 минут 46 секунд:
Заметил особенность, при вращении шаговика от "репетир хоста" энейбл в ноль уходит, а когда жесткий рестарт делаешь возвращается к 4,7 вольтам. С моей же прошивкой энейбл всегда на 4,25 вольтах.
GaD » 14 мар 2016, 00:31
вот программа заведомо рабочая, вам подставить только ваши пины
- Код: Выделить всё • Развернуть
#include <AccelStepper.h>
#define STEP 9 // step
#define DIR 8 // dir направления вращения
#define EN 10 // enable вкл/выкл
#define delay_step 5 // Выдержка для регулировки скорости вращения
int analogPin0 = A0; // пин переменного резистор
//int reg = x; // Переменная которая будет содержать размер буфера
void setup()
{
pinMode(STEP, OUTPUT); // Настраиваем контакт на выход
pinMode(DIR, OUTPUT); // Настраиваем контакт на выход
pinMode(EN, OUTPUT); // Настраиваем контакт на выход
pinMode(analogPin0, INPUT); // Настраиваем контакт на вход
}
void loop()
{
//int x = reg;
int reg = (analogRead(analogPin0)); // переменая с переменного резистора 1023
digitalWrite(EN, 0);
cicle(1, reg);
delay(5);
cicle(0, reg);
delay(5);
}
void cicle(boolean napr, int steps)
{
digitalWrite(DIR, napr);
for (int i=0; i < steps; i++)
{
digitalWrite(STEP, 1);
delay(delay_step);
digitalWrite(STEP, 0);
delay(delay_step);
}
}
MIHAnik22 » 14 мар 2016, 20:35
GaD, Огромное спасибо это должно работать!) вот только вопрос. У меня энейбл на пине А8 как точно узнать номер пина? В протеусе номера одни, пины другие...
Добавлено спустя 2 часа 4 минуты 49 секунд:
Оха, с пинами разобрался...
Последний раз редактировалось
MIHAnik22 14 мар 2016, 20:49, всего редактировалось 2 раз(а).
GaD » 14 мар 2016, 20:43
- Код: Выделить всё • Развернуть
#include <AccelStepper.h>
#define STEP 54 // step
#define DIR 55 // dir направления вращения
#define EN 38 // enable вкл/выкл
#define delay_step 5 // Выдержка для регулировки скорости вращения
void setup()
{
pinMode(STEP, OUTPUT); // Настраиваем контакт на выход
pinMode(DIR, OUTPUT); // Настраиваем контакт на выход
pinMode(EN, OUTPUT); // Настраиваем контакт на выход
}
void loop()
{
digitalWrite(EN, 0);
cicle(1, 1023);
delay(5);
cicle(0, 1023);
delay(5);
}
void cicle(boolean napr, int steps)
{
digitalWrite(DIR, napr);
for (int i=0; i < steps; i++)
{
digitalWrite(STEP, 1);
delay(delay_step);
digitalWrite(STEP, 0);
delay(delay_step);
}
}
судя по фото у вас А4988 на оси Х, программу поправил, циклическая туда, обратно.
изучите распиновку RAMPS, у вы у меня её нету.
http://reprap.org/wiki/RAMPS_1.4/ru
MIHAnik22 » 14 мар 2016, 20:49
ХАХА, Замечательно, все работает!)Благодарности нет границ!) Ну тогда вопрос на засыпку. Если у меня максимальное время задержки 1 тактовая единица, то есть delay(1) то как мне увеличить скорость вращение шаговика? Сейчас в коде delay_step = 1 . Но скорость не высокая, полный оборот за 7 секунд, или для скорости надо микрошаги отключать?
GaD » 14 мар 2016, 20:57
убрать все джампера jp4
MIHAnik22 » 14 мар 2016, 21:13
GaD, хм только так? У меня на принтере тоже такая же связка, и репетиер хост умеет разгонять до серьезных скоростей, джампера стоят. Каретка по Z (на винтах) взлетает за секунды
RootAdmin » 15 мар 2016, 12:49
delay принимает значения в миллисекундах. Зачем оно вообще?
Myp » 15 мар 2016, 15:27
MIHAnik22 писал(а):Если у меня максимальное время задержки 1 тактовая единица, то есть delay(1)
delay(1) это задержка в 1 миллисекунду, для начала неплохо бы перейти с миллисекунд на микросекунды
заменив на delayMicroseconds(100) мотор будет вращаться в 10 раз быстрее.
GaD » 15 мар 2016, 16:03
MIHAnik22 писал(а):хм только так?
ну это как вы реализуете
MIHAnik22 » 15 мар 2016, 17:45
Myp, АААА вооот, вот то что нужно!)
RootAdmin » 15 мар 2016, 18:52
Но это крайне "прямая" практика. Нормально - это настроить таймер, который будет дергать ногой независимо от того чем сейчас занимается основная программа.
MIHAnik22 » 15 мар 2016, 19:11
RootAdmin, а разве библиотека AccelStepper.h этого не делает?