Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Генерация импульсов dir step
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
sergey sva
Есть задачка управлять серво приводом(3шт) от платы с микроконтроллером at91. Плата получает по 485 команду в формате, система отсчета абсолютная:
Код
struct{
double x; // все в мм
double y;
double z;
double a;
double b;
double c;
double feed;
double pulse_mm;
}freemovG00;

В микроконтроллере нужно сформировать импульсы step dir. Понятно что это не просто поэтому буду благодарен любой информации,может есть готовые примеры.
Думаю сделать все в прерываниях по таймеру, может как по другому можно сделать.
Код
freemovG00 indata; //данные которые пришли по 485
freemovG00 actualdata; // где сейчас находится супорт

void interrupttimer_10us()
{
//здесь вычислять сколько импульсов step и направление dir на каждый серво-привод в зависимости от отношения ><xyz feed


}

izerg
Вычислять математику в прерывании - дурная примета, при большом объеме математики - есть вероятность из прерываний не вылезать.
Прерывание таймера - для того, что бы формировать вовремя 0 и 1 заданной длительности вполне подходит.

Планируется тольок "freemovG00", или друние Gxx тоже будут?
sergey sva
Да вы правы сделаю генерацию в прерывании, а вычислять буду в основном цикле. Сейчас хочу попробовать как будет работать, поэтому нужен только генератор step dir для ускоренного перемещения.
sergey sva
.
izerg
Цитата(sergey sva @ Nov 29 2013, 06:44) *
нужен только генератор step dir для ускоренного перемещения.


Вы хотели сказать "нужно генерировать в прерывании только сигнал step, ведь dir - напрямую зависит от математики координат, и в прерывании - тоже не нужен "?
Corvus
Step формировать таймером в режиме ШИМа. Примерно, как здесь http://www.atmel.com/images/doc8017.pdf
sergey sva
Благодарю. еще вопрос, для линейной интерполяции в самый раз, а если нужно переместить ось по дуге? Что еще нужно будет в контроллере кроме этих параметров step acc dacc speed ?
kolobok0
Цитата(sergey sva @ Dec 1 2013, 13:01) *
... Что еще нужно будет в контроллере...


когда-то делал такое под писюк. там чтоб не напрягать мозги постоянно - внешний PIT ставил и PPI. Таймер - то задавал
кол-во шагов и частоту, интерфейс - сохранял все остальные сигналы.

Собственно при решении на МК - всё есть на борту. ШИМ, прерывание по окончанию счёта, фиксация других сигналов.
Если подумать хорошенько, то думаю можно внешней обвзякой(а может и без неё - зависит от протокола обмена с железом)
и парочкой таймеров - решать задачу одновременного
перемещения по двум векторам или ышо круче - элептическим кривым(думаю можно попробывать).
sergey sva
Хорошо бы исходники на генератор для круговой интерполяции. виртуально вроде проверил. видево
sergey sva
Вот картинка
Нажмите для просмотра прикрепленного файла
Точка из которой должно начаться перемещение X0Y1Z0 до X1.2803 Y1.5303 R-.750
В плату приходит команда в формате:
Фактическое положение X0Y1Z0 и конечная точка X1.2803 Y1.5303 центр радиуса X0.5303 Y1.5304 и скорость F мм/сек.
Как вычислить путь для X для Y и скорости. По скорости думаю сделать таблицу. Скорость должна меняться по синусоидальному закону что бы получить радиус? Не обязательно подробно писать может просто примеры или советы, есть немного исходников, просто думаю как лучше сделать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.