Re: Пример как можно генерировать шаги для ШД
Добавлено: 14 янв 2013, 20:45
что именно пробовать? Пошел прошиватьBender писал(а):пробуй
Статьи, обзоры, цены на станки и комплектующие.
https://cnc-club.ru/forum/
что именно пробовать? Пошел прошиватьBender писал(а):пробуй
Да просто в последний момент увидел, что я кое что закомментировал... определение пинов...aftaev писал(а):что именно пробовать?
что то получше стало на звук.Bender писал(а):попробуй
а я успел попробовать и думаю шо не работаетBender писал(а):Да просто в последний момент увидел, что я кое что закомментировал... определение пинов...
ускорение 0,1aftaev писал(а):5,5,0.1,0.1 еле на слух отличается от 5,5,1,
Так ускорение роли не играетaftaev писал(а):5,5,0.1,0,1 еле на слух отличается от 5,5,1,1 и не отличаетсяот 5,5,5,5
Код: Выделить всё
#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();
}дома посмотрю...aftaev писал(а):Почему тогда 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,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();
}хорошо...aftaev писал(а):Bender, можно сделать что функция возвращала коды ошибок, а то не понятно какой параметр завышен
А зачем? Глаз все равно может отследить 24 изменения (кадра ) в секунду.aftaev писал(а):выводить на экран позицию оси в мм в реалтайме наверно не получится
допустим нужно проехать 3000мм пусть индикация обновляется раз в 1мм команде вывода 10 символов на экран нужно 15584 мкс или 15мс.ukr-sasha писал(а):А зачем? Глаз все равно может отследить 24 изменения (кадра ) в секунду.
Сейчас,aftaev писал(а):Bender, можно сделать что функция возвращала коды ошибок, а то не понятно какой параметр завышен
А что, там работа по прерываниям невозможна в принципе?UAVpilot писал(а):У ардуинщиков это плохо получается.
Вот когда шлем информацию на экран это занимает время. Чтобы послать 10 символов нужно нужно 15584 мкс или 15мс. TFT экраны это не семигментные индикаторы которые постоянно нужно прорисовывать. Пока идет пересылка на экран шаги кто генерить будетukr-sasha писал(а):Можно послать на экран информацию, в то же время продолжая движение?
А у кого он есть. Наверно есть у СТМ32UAVpilot писал(а): Чтоб выводить не останавливаясь надо для вывода на экран использовать как минимум аппаратный интерфейс (SPI?)
Что можно http://arduino.ru/ReferenceSerg-tmn писал(а):А что, там работа по прерываниям невозможна в принципе?