Пример как можно генерировать шаги для ШД

Контроллеры, драйверы, датчики, управляющие устройства.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

Bender писал(а):пробуй
что именно пробовать? Пошел прошивать :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
wldev
Мастер
Сообщения: 1650
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение wldev »

попробуй
Вложения
WLDrive.rar
(2.75 КБ) 482 скачивания
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
Аватара пользователя
wldev
Мастер
Сообщения: 1650
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение wldev »

aftaev писал(а):что именно пробовать?
Да просто в последний момент увидел, что я кое что закомментировал... определение пинов...
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

Bender писал(а):попробуй
что то получше стало на звук.

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

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

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

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

aftaev писал(а):5,5,0.1,0.1 еле на слух отличается от 5,5,1,
ускорение 0,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: Пример как можно генерировать шаги для ШД

Сообщение wldev »

aftaev писал(а):5,5,0.1,0,1 еле на слух отличается от 5,5,1,1 и не отличаетсяот 5,5,5,5
Так ускорение роли не играет
т.к. у тебя начальная скорость и максимальная одинаовы
надо чтобы первое занчение было меньше второго
вот пример:
Вложения
setParam.jpg (2877 просмотров) <a class='original' href='./download/file.php?id=10894&mode=view' target=_blank>Загрузить оригинал (98 КБ)</a>
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

теперь начал понимать что цифры означают.
1е число с какой скоростью начинать стартовать
2е максимальная скорость(рабочая скорость)
3е время разгона
4е время торможения.

Почему тогда 1,100,1,1 выдает ошибку Moving parametr is wrong :thinking:

Код: Выделить всё

#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: Пример как можно генерировать шаги для ШД

Сообщение wldev »

aftaev писал(а):Почему тогда 1,100,1,1 выдает ошибку Moving parametr is wrong
дома посмотрю...

попробуй поставить не 100 а 50, и
если Drive1.setMovInc(10); то он не успеет развить скорость 100
надо примерно Drive1.setMovInc(300); или Drive1.setMovInc(1000);
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

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

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

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: Пример как можно генерировать шаги для ШД

Сообщение wldev »

aftaev писал(а):Bender, можно сделать что функция возвращала коды ошибок, а то не понятно какой параметр завышен
хорошо...

на видео ускорение и торможение видны)
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

Bender, выводить на экран позицию оси в мм в реалтайме наверно не получится :hehehe:
На вывод 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: Пример как можно генерировать шаги для ШД

Сообщение ukr-sasha »

Вставлю и свои 5 копеек. :-)
aftaev писал(а):выводить на экран позицию оси в мм в реалтайме наверно не получится
А зачем? Глаз все равно может отследить 24 изменения (кадра ) в секунду.
Т.е. нужно показания обновлять только 24 раза в секунду - остальное не успеешь уловить. ;)
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

ukr-sasha писал(а):А зачем? Глаз все равно может отследить 24 изменения (кадра ) в секунду.
допустим нужно проехать 3000мм пусть индикация обновляется раз в 1мм команде вывода 10 символов на экран нужно 15584 мкс или 15мс.
myGLCD.print("hjgtykbgh", 5, 150);

будем оставаливаться каждый мм чтоб обновить экран :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение ukr-sasha »

Саша, я конечно в микроконтроллерах не очень разбираюсь, но зачем останавливаться? Можно послать на экран информацию, в то же время продолжая движение? Пусть она прорисуется на 15 мс позже, я этого не замечу, а ты? :-)
Или я не правильно что то понимаю?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Serg »

У ардуинщиков это плохо получается. - Чтоб выводить не останавливаясь надо для вывода на экран использовать как минимум аппаратный интерфейс (SPI?)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
wldev
Мастер
Сообщения: 1650
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение wldev »

aftaev писал(а):Bender, можно сделать что функция возвращала коды ошибок, а то не понятно какой параметр завышен
Сейчас,
ошибка если максимальная скорость меньше начальной
ошибка если максимальная скорость меньше либо равна нулю
ошибка если начальная скорость меньше нуля
ошибка если время разгона или торможение меньше нуля

А если максимальная скорость задана больше максимально возможной, то будет установлена максимально возможная.

+ обновил расчёт скорости
Вложения
WLDrive.rar
(2.86 КБ) 451 скачивание
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Сергей Саныч »

UAVpilot писал(а):У ардуинщиков это плохо получается.
А что, там работа по прерываниям невозможна в принципе?
Чудес не бывает. Бывают фокусы.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

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

Вернуться в «Электроника»