Страница 3 из 7

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

Добавлено: 14 янв 2013, 20:45
aftaev
Bender писал(а):пробуй
что именно пробовать? Пошел прошивать :)

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

Добавлено: 14 янв 2013, 20:46
wldev
попробуй

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

Добавлено: 14 янв 2013, 20:55
wldev
aftaev писал(а):что именно пробовать?
Да просто в последний момент увидел, что я кое что закомментировал... определение пинов...

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

Добавлено: 14 янв 2013, 21:43
aftaev
Bender писал(а):попробуй
что то получше стало на звук.

5,5,0.1,0,1 еле на слух отличается от 5,5,1,1 и не отличаетсяот 5,5,5,5
Для ускорения есть допустимые макс. значения.
В ходе экспериментов ошибка не вылазила!

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

Добавлено: 14 янв 2013, 21:44
aftaev
Bender писал(а):Да просто в последний момент увидел, что я кое что закомментировал... определение пинов...
а я успел попробовать и думаю шо не работает :)

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

Добавлено: 14 янв 2013, 22:31
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

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

Добавлено: 15 янв 2013, 07:30
wldev
aftaev писал(а):5,5,0.1,0,1 еле на слух отличается от 5,5,1,1 и не отличаетсяот 5,5,5,5
Так ускорение роли не играет
т.к. у тебя начальная скорость и максимальная одинаовы
надо чтобы первое занчение было меньше второго
вот пример:

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

Добавлено: 15 янв 2013, 11:25
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();
}

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

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

попробуй поставить не 100 а 50, и
если Drive1.setMovInc(10); то он не успеет развить скорость 100
надо примерно Drive1.setMovInc(300); или Drive1.setMovInc(1000);

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

Добавлено: 15 янв 2013, 14:49
aftaev
Bender, можно сделать что функция возвращала коды ошибок, а то не понятно какой параметр завышен

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

Добавлено: 15 янв 2013, 14:55
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();
}

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

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

на видео ускорение и торможение видны)

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

Добавлено: 15 янв 2013, 16:05
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();

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

Добавлено: 15 янв 2013, 17:01
ukr-sasha
Вставлю и свои 5 копеек. :-)
aftaev писал(а):выводить на экран позицию оси в мм в реалтайме наверно не получится
А зачем? Глаз все равно может отследить 24 изменения (кадра ) в секунду.
Т.е. нужно показания обновлять только 24 раза в секунду - остальное не успеешь уловить. ;)

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

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

будем оставаливаться каждый мм чтоб обновить экран :)

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

Добавлено: 15 янв 2013, 18:08
ukr-sasha
Саша, я конечно в микроконтроллерах не очень разбираюсь, но зачем останавливаться? Можно послать на экран информацию, в то же время продолжая движение? Пусть она прорисуется на 15 мс позже, я этого не замечу, а ты? :-)
Или я не правильно что то понимаю?

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

Добавлено: 15 янв 2013, 18:19
Serg
У ардуинщиков это плохо получается. - Чтоб выводить не останавливаясь надо для вывода на экран использовать как минимум аппаратный интерфейс (SPI?)

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

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

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

+ обновил расчёт скорости

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

Добавлено: 15 янв 2013, 19:30
Сергей Саныч
UAVpilot писал(а):У ардуинщиков это плохо получается.
А что, там работа по прерываниям невозможна в принципе?

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

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