Я думаю, что как только это кто-то узнает, то у них на сайте сразу появится новая версия с такими изменениями.solo писал(а):Может кто нибудь подскажет как изменить скетч чтобы получить большую частоту от ардуино на выводе степ
LCNC->USB->Arduino-> ШД step, dir
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: LCNC->USB->Arduino-> ШД step, dir
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- solo
- Мастер
- Сообщения: 1374
- Зарегистрирован: 20 окт 2011, 18:39
- Репутация: 272
- Настоящее имя: Юрий Соловьев
- Откуда: Украина Харьков
- Контактная информация:
Re: LCNC->USB->Arduino-> ШД step, dir
http://habrahabr.ru/post/141442/
Нашел вот такую ссылка Подскажите барану куда в скетч надо добавить данную инфу, или что на что надо поменять для того чтобы ускорить выполнение digitalWrite
если я правильно понимаю то в скетч вот этот кусок программы отвечает за генерацию шагов
Нашел вот такую ссылка Подскажите барану куда в скетч надо добавить данную инфу, или что на что надо поменять для того чтобы ускорить выполнение digitalWrite
если я правильно понимаю то в скетч вот этот кусок программы отвечает за генерацию шагов
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: LCNC->USB->Arduino-> ШД step, dir
Так у него всеравно на выхлопе до 15 кгц, тебе этого хватит?
- solo
- Мастер
- Сообщения: 1374
- Зарегистрирован: 20 окт 2011, 18:39
- Репутация: 272
- Настоящее имя: Юрий Соловьев
- Откуда: Украина Харьков
- Контактная информация:
Re: LCNC->USB->Arduino-> ШД step, dir
не 15 кГц на выводе степ не получается Получается около 500 Гц
Я уже перепробовал много разных вариантов корректировки скетча все равно получается очень медленно
если на прямую дергаю выводи степ такой командой
то импульс степ получается очень короткий и его не успевает отрабатывать драйвер ШД но ардуина вроде тогда успевает генерировать импульсы
Добавляю делау чтобы увеличить длительность импульс степ то тогда получается каша на степ ( нет стабильности и падает частота ) . вот так пишу команду
ИМХО проблема в том что в цикл генерации степ включает опрос последовательного порта и это может очень сильно тормозить ардуину, но правда с моим
подходом и пониманием в программировании все может быть совсем на оборот
Мне уже говорил " пилот " что без работы с прерываниями хорошего результата не получится, пытаюсь изучать программирование С++ ( правда пока очень туго продвигается) Если кто то поможет с программирование буду весьма признателен
Я уже перепробовал много разных вариантов корректировки скетча все равно получается очень медленно
если на прямую дергаю выводи степ такой командой
Код: Выделить всё
if(stepper0Pos != stepper0Goto){busy++;if(stepper0Pos > stepper0Goto){PORTC |= (1<<7);PORTC &= ~(1<<5);stepper0Pos--;PORTC |= (1<<5);}else{PORTC &= ~(1<<7);PORTC &= ~(1<<5);stepper0Pos++;PORTC |= (1<<5);}}
Код: Выделить всё
if(stepper0Pos != stepper0Goto){busy++;if(stepper0Pos > stepper0Goto){PORTC |= (1<<7);PORTC &= ~(1<<5);stepper0Pos--; delayMicroseconds(10);PORTC |= (1<<5);}else{PORTC &= ~(1<<7);PORTC &= ~(1<<5);stepper0Pos++;delayMicroseconds(10);PORTC |= (1<<5);}}
Мне уже говорил " пилот " что без работы с прерываниями хорошего результата не получится, пытаюсь изучать программирование С++ ( правда пока очень туго продвигается) Если кто то поможет с программирование буду весьма признателен
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: LCNC->USB->Arduino-> ШД step, dir
Не нужно пока изучать C++ - только хуже будет. Для программирования МК это вообще вредно.
А вот учится использовать прерывания полезно.
А вот учится использовать прерывания полезно.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: LCNC->USB->Arduino-> ШД step, dir
А какие именно тут нужны?UAVpilot писал(а):А вот учится использовать прерывания полезно.
Вот бы узнать, а то я тоже в этом
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: LCNC->USB->Arduino-> ШД step, dir
В данном случае нужны прерывания от таймера.
Нужно "завести" таймер, чтоб он генерировал прерывания раз в 10 мкс (или какая там минимальная задержка в проге?) и переписать программу так, чтобы вместо всяких delayMicroseconds(10) использовать эти прерывания. А то тут получается, что пока для одной оси выполняется delayMicroseconds(10) (по сути простой процессора, скорости которого и так не хватает) все остальные оси стоят и тупо ждут своей очереди.
Правда остаётся ещё вопрос успеет-ли ардуина исполнить код такого обработчика прерываний за эти 10 мкс?..
Нужно "завести" таймер, чтоб он генерировал прерывания раз в 10 мкс (или какая там минимальная задержка в проге?) и переписать программу так, чтобы вместо всяких delayMicroseconds(10) использовать эти прерывания. А то тут получается, что пока для одной оси выполняется delayMicroseconds(10) (по сути простой процессора, скорости которого и так не хватает) все остальные оси стоят и тупо ждут своей очереди.
Правда остаётся ещё вопрос успеет-ли ардуина исполнить код такого обработчика прерываний за эти 10 мкс?..
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- solo
- Мастер
- Сообщения: 1374
- Зарегистрирован: 20 окт 2011, 18:39
- Репутация: 272
- Настоящее имя: Юрий Соловьев
- Откуда: Украина Харьков
- Контактная информация:
Re: LCNC->USB->Arduino-> ШД step, dir
А вообще как вы оцените этот проект имеет перспективу или это мертво рожденное дитя
Читая про ардуино в некоторых проектах люди получали частоту на прерываниях до 250 кГц
вот код данного скетча
Читая про ардуино в некоторых проектах люди получали частоту на прерываниях до 250 кГц
вот код данного скетча
Код: Выделить всё
#define STEP 10 // шаг, в Гц
#define STEP1 500 // шаг при удержании кнопки, в Гц
#define OUT 9 // вывод выходного сигнала
#define BUTTON_UP 3 // вывод кнопки "выше"
#define BUTTON_DOWN 4 // вывод кнопки "ниже"
int frequency = 1000; // частота по умолчанию (при включении), в Гц
void setup()
{
Serial.begin(9600);
digitalWrite(BUTTON_UP, HIGH);
digitalWrite(BUTTON_DOWN, HIGH);
pinMode(OUT, OUTPUT);
Serial.println(Set_frequency(frequency));
}
void loop()
{
Pressed(BUTTON_UP);
Pressed(BUTTON_DOWN);
}
void Pressed(byte button)
{
static bool f_up, f_down;
static uint32_t time_out;
if(!digitalRead(button))
{
if(button==BUTTON_UP ? !f_up : !f_down)
{
frequency = button==BUTTON_UP ? frequency+STEP: frequency-STEP;
button==BUTTON_UP ? f_up=1 : f_down=1;
time_out = millis() + 1000;
}
if(millis() > time_out)
{
frequency = button==BUTTON_UP ? frequency+STEP1: frequency-STEP1;
delay(350);
}
frequency = constrain(frequency, 40, 40000);
Serial.println(Set_frequency(frequency));
delay(150);
}
else button==BUTTON_UP ? f_up=0 : f_down=0;
}
uint16_t Set_frequency(uint16_t freq)
{
cli();
TCCR1A = 0b01000000;
uint16_t ocr;
if(freq < 134)
{
TCCR1B = 0b00001010;
ocr = 1000000UL/freq - 1;
freq = 1000000UL/(ocr+1);
}
else
{
TCCR1B = 0b00001001;
ocr = 8000000UL/freq - 1;
freq = 8000000UL/(ocr+1);
}
OCR1AH = highByte(ocr);
OCR1AL = lowByte(ocr);
TIMSK1 = 0b00000010;
sei();
return freq;
}
ISR(TIMER1_COMPA_vect){}
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: LCNC->USB->Arduino-> ШД step, dir
LPT порт оно не переплюнет, поэтому не имеет смысла. Попробуйте лучше pluto-p.solo писал(а):А вообще как вы оцените этот проект имеет перспективу или это мертво рожденное дитя
Сферический конь в вакууме. Даже если 250 кГц, то это только один канал, а у нас их минимум 3, плюс накладные расходы на вычисления частоты из данных от LCNC + плюс расходы на комуникацию с LCNC - а это добвольно большой поток данных.solo писал(а):Читая про ардуино в некоторых проектах люди получали частоту на прерываниях до 250 кГц
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- michael-yurov
- Почётный участник

- Сообщения: 11730
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: LCNC->USB->Arduino-> ШД step, dir
Не знаю, про какой чип идет речь...
Но тут, вроде, операция деления используется, так что, наверное, речь про достаточно мощный микропроцессор.
Мне кажется, что в идеале стоило бы генерировать импульсы аппаратным таймером, а другим таймером подсчитывать сколько импульсов сгенерировано (проще, конечно, использовать прерывание для подсчета сгенерированных импульсов, но это сильно замедлит работу). Только вот я уже совсем запутался... В этой ардуине можно таймером считать импульсы пришедшие извне (с другой ножки)?
Тогда можно получить практически любые частоты, если правильно рассчитать делители первого таймера.
Простите, если я совсем не в тему, и глупости написал.
Но тут, вроде, операция деления используется, так что, наверное, речь про достаточно мощный микропроцессор.
Мне кажется, что в идеале стоило бы генерировать импульсы аппаратным таймером, а другим таймером подсчитывать сколько импульсов сгенерировано (проще, конечно, использовать прерывание для подсчета сгенерированных импульсов, но это сильно замедлит работу). Только вот я уже совсем запутался... В этой ардуине можно таймером считать импульсы пришедшие извне (с другой ножки)?
Тогда можно получить практически любые частоты, если правильно рассчитать делители первого таймера.
Простите, если я совсем не в тему, и глупости написал.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: LCNC->USB->Arduino-> ШД step, dir
В том-то всё и дело, что делители там очень убогие и не позволят получить диапазон частот с необходимой градацией.michael-yurov писал(а):Тогда можно получить практически любые частоты, если правильно рассчитать делители первого таймера.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
