что именно пробовать? Пошел прошиватьBender писал(а):пробуй
Пример как можно генерировать шаги для ШД
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- wldev
- Мастер
- Сообщения: 1650
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
попробуй
- Вложения
-
- WLDrive.rar
- (2.75 КБ) 482 скачивания
- wldev
- Мастер
- Сообщения: 1650
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
Да просто в последний момент увидел, что я кое что закомментировал... определение пинов...aftaev писал(а):что именно пробовать?
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
что то получше стало на звук.Bender писал(а):попробуй
5,5,0.1,0,1 еле на слух отличается от 5,5,1,1 и не отличаетсяот 5,5,5,5
Для ускорения есть допустимые макс. значения.
В ходе экспериментов ошибка не вылазила!
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
а я успел попробовать и думаю шо не работаетBender писал(а):Да просто в последний момент увидел, что я кое что закомментировал... определение пинов...
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
ускорение 0,1aftaev писал(а):5,5,0.1,0.1 еле на слух отличается от 5,5,1,
https://www.youtube.com/watch?v=mLCItHMTh_o
ускорение 1
https://www.youtube.com/watch?v=kE-kbG7UUkQ
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- wldev
- Мастер
- Сообщения: 1650
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
Так ускорение роли не играетaftaev писал(а):5,5,0.1,0,1 еле на слух отличается от 5,5,1,1 и не отличаетсяот 5,5,5,5
т.к. у тебя начальная скорость и максимальная одинаовы
надо чтобы первое занчение было меньше второго
вот пример:
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
теперь начал понимать что цифры означают.
1е число с какой скоростью начинать стартовать
2е максимальная скорость(рабочая скорость)
3е время разгона
4е время торможения.
Почему тогда 1,100,1,1 выдает ошибку Moving parametr is wrong
1е число с какой скоростью начинать стартовать
2е максимальная скорость(рабочая скорость)
3е время разгона
4е время торможения.
Почему тогда 1,100,1,1 выдает ошибку Moving parametr is wrong
Код: Выделить всё
#include <ITDB02_Graph16.h>
#include <WLDrive.h>
WLDrive Drive1(14,15); //Создали двигатель и назначили выходные сигналы,выход 1 - шаги 2 направление
//кнопки
int adc_key_in; // Пуск
bool lastRot;//запомним прошлое направление вращения
// Declare which fonts we will be using
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
// Uncomment the next line for Arduino Mega
ITDB02 myGLCD(38,39,40,41,ITDB32S); // Задаем используемый экран
void setup()
{
// НАСТРОЙКА ЭКРАНА
myGLCD.InitLCD(LANDSCAPE); // задаем экран горизонтально
//myGLCD.InitLCD(); // задаем экран вертикально
myGLCD.clrScr(); // очистка экрана
//
myGLCD.fillScr (0,0,0); // фон экрана
myGLCD.setColor(0, 255, 0); // цвет букв
myGLCD.setBackColor(0, 0, 0); // цвет фона букв
myGLCD.setFont(SmallFont); // мелкие буквы
myGLCD.clrScr(); // очистка экрана
myGLCD.print("Step Drive", 30, 5);
//настраиваем ПИНЫ
// pinMode(outBeep, OUTPUT); // устанавливает режим работы - выход
// pinMode(out2, OUTPUT); // устанавливает режим работы - выход
// pinMode(out3, OUTPUT); // устанавливает режим работы - выход
// pinMode(out4, OUTPUT); // устанавливает режим работы - выход
Drive1.setDim(0.1); //установка размера одного шага допустим 0.1мм или 0.1градус
Drive1.setFreq(2000);//установили частоту нашей системы. Это частота характеризующая быстродействие работы нашего генератора
if(!Drive1.setParam(1,100,1,1))//Установили режим движения соотв. (начальная скорость,конечная скорость,время разгона(с),время торможения(с))
{
//Serial.Print("Moving parametr is wrong!"); //я точно незнаю как печатать но вроде так
myGLCD.print("Moving parametr is wrong", 5, 50);
}
lastRot=true;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
// ОСНОВНАЯ ПРОГРАММА
//--------------------------------------------------------------------------------------------------------------------------------------------------
void loop()
{
adc_key_in = analogRead(0); // АЦП нажатой кнопки
if(adc_key_in == 0 //Считываем runPin и если он в 1 (нажали кнопку)
&&!Drive1.isBusy()) //И двигатель не в работе
{
if(lastRot)
Drive1.setMovInc(10); //устанавливаем что нам нужно подвинуться на 100мм / 100градусов
else
Drive1.setMovInc(-10); //устанавливаем что нам нужно подвинуться на -100мм / -100градусов
lastRot=!lastRot;
Drive1.start(); ///взводим
}
Drive1.redirect();
}Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- wldev
- Мастер
- Сообщения: 1650
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
дома посмотрю...aftaev писал(а):Почему тогда 1,100,1,1 выдает ошибку Moving parametr is wrong
попробуй поставить не 100 а 50, и
если Drive1.setMovInc(10); то он не успеет развить скорость 100
надо примерно Drive1.setMovInc(300); или Drive1.setMovInc(1000);
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
Bender, можно сделать что функция возвращала коды ошибок, а то не понятно какой параметр завышен
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
https://www.youtube.com/watch?v=PUUvH1WY44U
Код: Выделить всё
#include <ITDB02_Graph16.h>
#include <WLDrive.h>
WLDrive Drive1(14,15); //Создали двигатель и назначили выходные сигналы,выход 1 - шаги 2 направление
//кнопки
int adc_key_in; // Пуск
bool lastRot;//запомним прошлое направление вращения
// Declare which fonts we will be using
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
// Uncomment the next line for Arduino Mega
ITDB02 myGLCD(38,39,40,41,ITDB32S); // Задаем используемый экран
void setup()
{
// НАСТРОЙКА ЭКРАНА
myGLCD.InitLCD(LANDSCAPE); // задаем экран горизонтально
//myGLCD.InitLCD(); // задаем экран вертикально
myGLCD.clrScr(); // очистка экрана
//
myGLCD.fillScr (0,0,0); // фон экрана
myGLCD.setColor(0, 255, 0); // цвет букв
myGLCD.setBackColor(0, 0, 0); // цвет фона букв
myGLCD.setFont(SmallFont); // мелкие буквы
myGLCD.clrScr(); // очистка экрана
myGLCD.print("Step Drive", 30, 5);
//настраиваем ПИНЫ
// pinMode(outBeep, OUTPUT); // устанавливает режим работы - выход
// pinMode(out2, OUTPUT); // устанавливает режим работы - выход
// pinMode(out3, OUTPUT); // устанавливает режим работы - выход
// pinMode(out4, OUTPUT); // устанавливает режим работы - выход
Drive1.setDim(0.1); //установка размера одного шага допустим 0.1мм или 0.1градус
Drive1.setFreq(2000);//установили частоту нашей системы. Это частота характеризующая быстродействие работы нашего генератора
if(!Drive1.setParam(1,60,0.1,5))//Установили режим движения соотв. (начальная скорость,конечная скорость,время разгона(с),время торможения(с))
{
//Serial.Print("Moving parametr is wrong!"); //я точно незнаю как печатать но вроде так
myGLCD.print("Moving parametr is wrong", 5, 50);
}
lastRot=true;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
// ОСНОВНАЯ ПРОГРАММА
//--------------------------------------------------------------------------------------------------------------------------------------------------
void loop()
{
adc_key_in = analogRead(0); // АЦП нажатой кнопки
if(adc_key_in == 0 //Считываем runPin и если он в 1 (нажали кнопку)
&&!Drive1.isBusy()) //И двигатель не в работе
{
if(lastRot)
Drive1.setMovInc(300); //устанавливаем что нам нужно подвинуться на 100мм / 100градусов
else
Drive1.setMovInc(-300); //устанавливаем что нам нужно подвинуться на -100мм / -100градусов
lastRot=!lastRot;
Drive1.start(); ///взводим
}
Drive1.redirect();
}Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- wldev
- Мастер
- Сообщения: 1650
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
хорошо...aftaev писал(а):Bender, можно сделать что функция возвращала коды ошибок, а то не понятно какой параметр завышен
на видео ускорение и торможение видны)
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
Bender, выводить на экран позицию оси в мм в реалтайме наверно не получится
На вывод 10 знаков на экран уходит 15584 микросекунд
void loop()
{
adc_key_in = analogRead(0); // АЦП нажатой кнопки
// считаем сколько времени нужно для вывода на экран
// 10 символов нужно 15584 мкс
// time0 = millis(); //запоминаем время прошедшее с момента начала выполнения программы
time0 = micros(); //запоминаем время прошедшее с момента начала выполнения программы
myGLCD.print("h0000000о0", 5, 150); // выводим что то
times = micros() - time0 ;
myGLCD.printNumI(times, 5, 200); // выводим что то
if(adc_key_in == 0 //Считываем runPin и если он в 1 (нажали кнопку)
&&!Drive1.isBusy()) //И двигатель не в работе
{
if(lastRot)
{
Drive1.setMovInc(300); //устанавливаем что нам нужно подвинуться на 100мм / 100градусов
}
else
Drive1.setMovInc(-300); //устанавливаем что нам нужно подвинуться на -100мм / -100градусов
lastRot=!lastRot;
Drive1.start(); ///взводим
}
Drive1.redirect();
На вывод 10 знаков на экран уходит 15584 микросекунд
void loop()
{
adc_key_in = analogRead(0); // АЦП нажатой кнопки
// считаем сколько времени нужно для вывода на экран
// 10 символов нужно 15584 мкс
// time0 = millis(); //запоминаем время прошедшее с момента начала выполнения программы
time0 = micros(); //запоминаем время прошедшее с момента начала выполнения программы
myGLCD.print("h0000000о0", 5, 150); // выводим что то
times = micros() - time0 ;
myGLCD.printNumI(times, 5, 200); // выводим что то
if(adc_key_in == 0 //Считываем runPin и если он в 1 (нажали кнопку)
&&!Drive1.isBusy()) //И двигатель не в работе
{
if(lastRot)
{
Drive1.setMovInc(300); //устанавливаем что нам нужно подвинуться на 100мм / 100градусов
}
else
Drive1.setMovInc(-300); //устанавливаем что нам нужно подвинуться на -100мм / -100градусов
lastRot=!lastRot;
Drive1.start(); ///взводим
}
Drive1.redirect();
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- ukr-sasha
- Мастер
- Сообщения: 3401
- Зарегистрирован: 21 мар 2011, 07:47
- Репутация: 2181
- Настоящее имя: Украинец Александр Григорьевич
- Откуда: Киев, Украина
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
Вставлю и свои 5 копеек.
Т.е. нужно показания обновлять только 24 раза в секунду - остальное не успеешь уловить.
А зачем? Глаз все равно может отследить 24 изменения (кадра ) в секунду.aftaev писал(а):выводить на экран позицию оси в мм в реалтайме наверно не получится
Т.е. нужно показания обновлять только 24 раза в секунду - остальное не успеешь уловить.
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
допустим нужно проехать 3000мм пусть индикация обновляется раз в 1мм команде вывода 10 символов на экран нужно 15584 мкс или 15мс.ukr-sasha писал(а):А зачем? Глаз все равно может отследить 24 изменения (кадра ) в секунду.
myGLCD.print("hjgtykbgh", 5, 150);
будем оставаливаться каждый мм чтоб обновить экран
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- ukr-sasha
- Мастер
- Сообщения: 3401
- Зарегистрирован: 21 мар 2011, 07:47
- Репутация: 2181
- Настоящее имя: Украинец Александр Григорьевич
- Откуда: Киев, Украина
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
Саша, я конечно в микроконтроллерах не очень разбираюсь, но зачем останавливаться? Можно послать на экран информацию, в то же время продолжая движение? Пусть она прорисуется на 15 мс позже, я этого не замечу, а ты? 
Или я не правильно что то понимаю?
Или я не правильно что то понимаю?
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
У ардуинщиков это плохо получается. - Чтоб выводить не останавливаясь надо для вывода на экран использовать как минимум аппаратный интерфейс (SPI?)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- wldev
- Мастер
- Сообщения: 1650
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
Сейчас,aftaev писал(а):Bender, можно сделать что функция возвращала коды ошибок, а то не понятно какой параметр завышен
ошибка если максимальная скорость меньше начальной
ошибка если максимальная скорость меньше либо равна нулю
ошибка если начальная скорость меньше нуля
ошибка если время разгона или торможение меньше нуля
А если максимальная скорость задана больше максимально возможной, то будет установлена максимально возможная.
+ обновил расчёт скорости
- Вложения
-
- WLDrive.rar
- (2.86 КБ) 451 скачивание
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2858
- Откуда: Тюмень
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
А что, там работа по прерываниям невозможна в принципе?UAVpilot писал(а):У ардуинщиков это плохо получается.
Чудес не бывает. Бывают фокусы.
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: Пример как можно генерировать шаги для ШД
Вот когда шлем информацию на экран это занимает время. Чтобы послать 10 символов нужно нужно 15584 мкс или 15мс. TFT экраны это не семигментные индикаторы которые постоянно нужно прорисовывать. Пока идет пересылка на экран шаги кто генерить будетukr-sasha писал(а):Можно послать на экран информацию, в то же время продолжая движение?
А у кого он есть. Наверно есть у СТМ32UAVpilot писал(а): Чтоб выводить не останавливаясь надо для вывода на экран использовать как минимум аппаратный интерфейс (SPI?)
Что можно http://arduino.ru/ReferenceSerg-tmn писал(а):А что, там работа по прерываниям невозможна в принципе?
Прерывания http://arduino.ru/Tutorial/Arduino_Interrupts
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.