Написание плагинов движения для mach3

Mach, популярные и не очень CAD, CAM. Обсуждение и разработка программ для управления станками.
2cme
Почётный участник
Почётный участник
Сообщения: 1043
Зарегистрирован: 24 янв 2012, 13:18
Репутация: -209

Re: Написание плагинов движения для mach3

Сообщение 2cme »

ipr писал(а):Пару дней назад посетила меня такая (бредовая) мысль - сделать что-то вроде "материнской платы", где будут размещены разъемы входов/выходов/моторов, входные интерфейсы, опторазвязки, расширители портов ввода-вывода, и прочая крупногабаритная рассыпуха. А "мозги" сделать сменными, маленькой платкой с разьемами PLS, чтобы каждый раз, когда мне захочется поэкспериментировать, не переделывать всю плату.
Для этого тебе необходимо создать стандарт этих самых разъемов, то уже есть, например, да и ряд других как open hardware так и закрытых.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение Impartial »

ipr писал(а):Вкратце принцип был такой: есть счетчик общего кол-ва шагов за сервоцикл, есть счетчик длины импульса степ, и счетчик длины промежутка между степами. Как они связаны, думаю, понятно.
Что то Вы намудрили.
А откуда берется сигнал направления?
Я пока не разбирался что выдает мач на систему движения. Если на пальцах, как это выглядит?
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение ipr »

2cme писал(а):то уже есть, например, да и ряд других
С одной стороны, так конечно можно сделать - но все-таки, приведенные решения ориентированы на универсальность. А у меня конкретная задача. Есть скоростные выходы на моторы (12 линий), есть медленные входы и выходы (если использовать регистры, то 6 линий) + USB и(или) LAN. И далеко не все имеющиеся на микроконтроллере/плисе выводы будут использованы. Но это, конечно, спорное мнение...

Еще есть вопросик по поводу алгоритма генерации шагов: то, что я привел выше, очень ресурсоемкое решение. Может, есть другие варианты, а я их не вижу "замылившимся" взглядом? Я пробовал использовать ширину импульса степ равную тактирующему импульсу, так конечно макроклеток требует меньше - но возникает проблема, которую я обозначил в "статье" про генерацию шагов (если не ошибаюсь, это называется джиттером). Плюс, я использую 16 разрядные счетчики, можно снизить разрядность (соответственно уменьшив время сервоцикла) - но хватит ли быстродействия канала связи... Больше мне ничего не приходит в голову.
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение ipr »

Impartial писал(а):А откуда берется сигнал направления?
Просто не упомянул, тоже загружается в буфер, и при его смене устанавливается
Impartial писал(а):что выдает мач на систему движения. Если на пальцах, как это выглядит?
Просто отдает количество шагов (знаковое - задает направление) по осям для каждого сервоцикла.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение Impartial »

ipr писал(а):Просто отдает количество шагов (знаковое - задает направление) по осям для каждого сервоцикла.
Ну что это? Число со знаком?
Сколько разрядов?
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение ipr »

Impartial писал(а):Ну что это? Число со знаком? Сколько разрядов?
Вообще, в маче имеет тип double (но при этом всегда содержит целочисленное значение). Учитывая длину сервоцикла, и частоту тактовых импульсов (а мач их учитывает), я получил, что хватит 2 байтного целого числа.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение Impartial »

Генератор шагов это синтезатор частоты.
Вот как это приблизительно выглядит. Без верилога.
stepgen.jpg (6052 просмотра) <a class='original' href='./download/file.php?id=12122&sid=067d5bd2e16e0a74b5b463b994d317a5&mode=view' target=_blank>Загрузить оригинал (291.99 КБ)</a>
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение ipr »

Impartial писал(а):Вот как это приблизительно выглядит
В общем-то я тоже самое и делал, только на верилоге. Плюс счетчик, чтобы вовремя перейти к следующему сервоциклу, и буфер для хранения параметров этого цикла. Можно и без буфера и параллельного порта, но это же сколько ног нужно!

Попробовал повторить приведенную схему: результат 66 занятых макроклеток.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение Impartial »

ipr писал(а):Попробовал повторить приведенную схему: результат 66 занятых макроклеток.
А откуда тогда 300? :)
Вот исходник реального генератора шагов из прошивки плуто.

Код: Выделить всё

module stepgen(clk, enable, position, velocity, dirtime, steptime, step, dir, tap);
`define STATE_STEP 0
`define STATE_DIRCHANGE 1
`define STATE_DIRWAIT 2

parameter W=12;
parameter F=10;
parameter T=5;

input clk, enable;
output [W+F-1:0] position; reg [W+F-1:0] position;
input [F:0] velocity;
input [T-1:0] dirtime, steptime;
input [1:0] tap;

output step, dir;
reg step, dir;

reg [T-1:0] timer;
reg [1:0] state;
reg ones;
wire dbit = velocity[F];
wire pbit = (tap == 0 ? position[F] 
: (tap == 1 ? position[F+1]
: (tap == 2 ? position[F+2]
: position[F+3])));

wire [W+F-1:0] xvelocity = {{W{velocity[F]}}, {1{velocity[F-1:0]}}};

//`ifdef TESTING
// for testing:
//initial position = 1'b0;
//initial state = `STATE_STEP;
//initial timer = 0;
//initial dir = 0;
//initial ones = 0;
//`endif

always @(posedge clk) begin
if(enable) begin
// $display("state=%d timer=%d position=%h velocity=%h dir=%d dbit=%d pbit=%d ones=%d", state, timer, position, xvelocity, dir, dbit, pbit, ones);
if((dir != dbit) && (pbit == ones)) begin
if(state == `STATE_DIRCHANGE) begin
if(timer == 0) begin
dir <= dbit;
timer <= dirtime;
state <= `STATE_DIRWAIT;
end else begin
timer <= timer - 1'd1;
end
end else begin
if(timer == 0) begin
step <= 0;
timer <= dirtime;
state <= `STATE_DIRCHANGE;
end else begin
timer <= timer - 1'd1;
end
end
end else if(state == `STATE_DIRWAIT) begin
if(timer == 0) begin
state <= `STATE_STEP;
end else begin
timer <= timer - 1'd1;
end
end else begin
if(timer == 0) begin
if(pbit != ones) begin
ones <= pbit;
step <= 1'd1;
timer <= steptime;
end else begin
step <= 0;
end
end else begin
timer <= timer - 1'd1;
end
if(dir == dbit) 
position <= position + xvelocity;
end
end
end

endmodule
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение ipr »

Impartial писал(а):А откуда тогда 300?
Это один весит 66, а три - уже 198 :-)
Плюсом буфер и дополнительный счетчик.
Impartial писал(а):Вот исходник реального генератора шагов
Интересно, надо будет попробовать разобраться в нем... Хотя, есть подозрения, что тоже в cpld не войдет, все-таки плуто сделан на fpga, и наверное, не зря ;-)
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение Impartial »

ipr писал(а):Интересно, надо будет попробовать разобраться в нем... Хотя, есть подозрения, что тоже в cpld не войдет, все-таки плуто сделан на fpga, и наверное, не зря
Четыре генератора и интерфейс ЕРР влазит где то в 500 LEs.
CPLD EPM570T144C5N хватает с запасом.
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение ipr »

Impartial писал(а):EPM570T144C5N хватает
В эту то войдет. Хотя кое-кто говорил:
Impartial писал(а):
ipr писал(а):CPLD примерно на 128 макроячеек
Влезет даже три.
;-)
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение Impartial »

Влезет, влезет. Оптимизировать нужно.
Для регулировки длительности стер 8 разрядного сумматора много, хватит 4+делитель. А можно и вообще без этого. Ну и так далее.
Только на картинке показан принцип. От реальности далеко.
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение ipr »

Impartial писал(а):8 разрядного сумматора много
Я делал вообще нерегулируемый степ равный одному такту, и восьмибитные счетчики - тогда 3 генератора влазили и в 64 ячейки. Но так же неинтересно, делать - так нормально :-)
2cme
Почётный участник
Почётный участник
Сообщения: 1043
Зарегистрирован: 24 янв 2012, 13:18
Репутация: -209

Re: Написание плагинов движения для mach3

Сообщение 2cme »

ipr, забросил?
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение ipr »

нет, не забросил, свободного времени катастрофически не хватает...
antonixx
Новичок
Сообщения: 1
Зарегистрирован: 21 мар 2013, 16:14
Репутация: 0
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение antonixx »

Приветствую! Заранее извеняюсь если несколько не по теме.
А есть ли возможность внешнему приложению получить координаты мача и сделать движение по оси. Я так понимаю это должно быть в плагине. Как регистрируется DLL в системе мача, при загрузке? Может быть подскажите где глянуть, в какую сторону копать?
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение ipr »

Смотреть следует примерно сюда:
отрывок из определения структуры TrajBuffer

Код: Выделить всё

TrajPoint Trajectories[0x1000];
int   TrajIndex;	// Trajectory buffer current Index
int   TrajHead;	// Trajectory buffer Fill point
Собственно, TrajPoint имеет такие поля:

Код: Выделить всё

struct TrajPoint
{
  int Points[6];
  int Command;
  int ID;
  char shifter[6];
};
Я не уверен, но вроде-бы int Points[6] - координаты по каждой оси. Наверное, зная координаты, можно и самостоятельно рассчитывать движение. Я сам так не пробовал...
DLL-ки плагинов Mach3 находит и загружает при запуске.
BosniaCNC
Новичок
Сообщения: 1
Зарегистрирован: 02 мар 2013, 22:07
Репутация: 0
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение BosniaCNC »

Я сделал pic_puls и установлены Pulse 2 в Mach3. Я должен сказать, что не работает хорошо, и что многие проблемные особенности.
Если кто-то хочет сделать, что я бы не рекомендовал - Mach3 работает лучше, чем LPT работает с этим плагином.
andrey75-51
Новичок
Сообщения: 11
Зарегистрирован: 04 май 2016, 19:28
Репутация: 0
Настоящее имя: Андрей
Контактная информация:

Re: Написание плагинов движения для mach3

Сообщение andrey75-51 »

Уважаемые, как и куда вписать макрос для Мач3, который сохраняет последний (или предпоследний?) выполненный номер строки УП в файл.
Sub main
Open "С:\Stop\stop.txt" for output as #1
Print #1, "Number=", getdro(16);" x=", getdro(0);" y=", getdro(1);" z=", getdro(2)close #1
End sub
Ответить

Вернуться в «Windows / Mach»