реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Генерация импульсов dir step
sergey sva
сообщение Nov 28 2013, 17:20
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Есть задачка управлять серво приводом(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


}

Go to the top of the page
 
+Quote Post
izerg
сообщение Nov 28 2013, 19:09
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 531
Регистрация: 1-02-05
Из: Украина, Киев
Пользователь №: 2 342



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

Планируется тольок "freemovG00", или друние Gxx тоже будут?
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Nov 29 2013, 04:44
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Да вы правы сделаю генерацию в прерывании, а вычислять буду в основном цикле. Сейчас хочу попробовать как будет работать, поэтому нужен только генератор step dir для ускоренного перемещения.
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Nov 29 2013, 14:04
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



.
Go to the top of the page
 
+Quote Post
izerg
сообщение Nov 30 2013, 13:53
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 531
Регистрация: 1-02-05
Из: Украина, Киев
Пользователь №: 2 342



Цитата(sergey sva @ Nov 29 2013, 06:44) *
нужен только генератор step dir для ускоренного перемещения.


Вы хотели сказать "нужно генерировать в прерывании только сигнал step, ведь dir - напрямую зависит от математики координат, и в прерывании - тоже не нужен "?
Go to the top of the page
 
+Quote Post
Corvus
сообщение Nov 30 2013, 18:45
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 24-04-08
Из: Зеленоград
Пользователь №: 37 056



Step формировать таймером в режиме ШИМа. Примерно, как здесь http://www.atmel.com/images/doc8017.pdf
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Dec 1 2013, 09:01
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Благодарю. еще вопрос, для линейной интерполяции в самый раз, а если нужно переместить ось по дуге? Что еще нужно будет в контроллере кроме этих параметров step acc dacc speed ?
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Dec 1 2013, 09:45
Сообщение #8


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(sergey sva @ Dec 1 2013, 13:01) *
... Что еще нужно будет в контроллере...


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

Собственно при решении на МК - всё есть на борту. ШИМ, прерывание по окончанию счёта, фиксация других сигналов.
Если подумать хорошенько, то думаю можно внешней обвзякой(а может и без неё - зависит от протокола обмена с железом)
и парочкой таймеров - решать задачу одновременного
перемещения по двум векторам или ышо круче - элептическим кривым(думаю можно попробывать).
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Dec 2 2013, 15:21
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Хорошо бы исходники на генератор для круговой интерполяции. виртуально вроде проверил. видево
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Dec 4 2013, 14:50
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Вот картинка
Прикрепленное изображение

Точка из которой должно начаться перемещение X0Y1Z0 до X1.2803 Y1.5303 R-.750
В плату приходит команда в формате:
Фактическое положение X0Y1Z0 и конечная точка X1.2803 Y1.5303 центр радиуса X0.5303 Y1.5304 и скорость F мм/сек.
Как вычислить путь для X для Y и скорости. По скорости думаю сделать таблицу. Скорость должна меняться по синусоидальному закону что бы получить радиус? Не обязательно подробно писать может просто примеры или советы, есть немного исходников, просто думаю как лучше сделать.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01413 секунд с 7
ELECTRONIX ©2004-2016