Для этого тебе необходимо создать стандарт этих самых разъемов, то уже есть, например, да и ряд других как open hardware так и закрытых.ipr писал(а):Пару дней назад посетила меня такая (бредовая) мысль - сделать что-то вроде "материнской платы", где будут размещены разъемы входов/выходов/моторов, входные интерфейсы, опторазвязки, расширители портов ввода-вывода, и прочая крупногабаритная рассыпуха. А "мозги" сделать сменными, маленькой платкой с разьемами PLS, чтобы каждый раз, когда мне захочется поэкспериментировать, не переделывать всю плату.
Написание плагинов движения для mach3
Re: Написание плагинов движения для mach3
-
Impartial
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: Написание плагинов движения для mach3
Что то Вы намудрили.ipr писал(а):Вкратце принцип был такой: есть счетчик общего кол-ва шагов за сервоцикл, есть счетчик длины импульса степ, и счетчик длины промежутка между степами. Как они связаны, думаю, понятно.
А откуда берется сигнал направления?
Я пока не разбирался что выдает мач на систему движения. Если на пальцах, как это выглядит?
-
ipr
- Кандидат
- Сообщения: 65
- Зарегистрирован: 13 ноя 2012, 17:03
- Репутация: 1
- Откуда: Екатеринбург
- Контактная информация:
Re: Написание плагинов движения для mach3
С одной стороны, так конечно можно сделать - но все-таки, приведенные решения ориентированы на универсальность. А у меня конкретная задача. Есть скоростные выходы на моторы (12 линий), есть медленные входы и выходы (если использовать регистры, то 6 линий) + USB и(или) LAN. И далеко не все имеющиеся на микроконтроллере/плисе выводы будут использованы. Но это, конечно, спорное мнение...2cme писал(а):то уже есть, например, да и ряд других
Еще есть вопросик по поводу алгоритма генерации шагов: то, что я привел выше, очень ресурсоемкое решение. Может, есть другие варианты, а я их не вижу "замылившимся" взглядом? Я пробовал использовать ширину импульса степ равную тактирующему импульсу, так конечно макроклеток требует меньше - но возникает проблема, которую я обозначил в "статье" про генерацию шагов (если не ошибаюсь, это называется джиттером). Плюс, я использую 16 разрядные счетчики, можно снизить разрядность (соответственно уменьшив время сервоцикла) - но хватит ли быстродействия канала связи... Больше мне ничего не приходит в голову.
-
ipr
- Кандидат
- Сообщения: 65
- Зарегистрирован: 13 ноя 2012, 17:03
- Репутация: 1
- Откуда: Екатеринбург
- Контактная информация:
Re: Написание плагинов движения для mach3
Просто не упомянул, тоже загружается в буфер, и при его смене устанавливаетсяImpartial писал(а):А откуда берется сигнал направления?
Просто отдает количество шагов (знаковое - задает направление) по осям для каждого сервоцикла.Impartial писал(а):что выдает мач на систему движения. Если на пальцах, как это выглядит?
-
Impartial
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: Написание плагинов движения для mach3
Ну что это? Число со знаком?ipr писал(а):Просто отдает количество шагов (знаковое - задает направление) по осям для каждого сервоцикла.
Сколько разрядов?
-
ipr
- Кандидат
- Сообщения: 65
- Зарегистрирован: 13 ноя 2012, 17:03
- Репутация: 1
- Откуда: Екатеринбург
- Контактная информация:
Re: Написание плагинов движения для mach3
Вообще, в маче имеет тип double (но при этом всегда содержит целочисленное значение). Учитывая длину сервоцикла, и частоту тактовых импульсов (а мач их учитывает), я получил, что хватит 2 байтного целого числа.Impartial писал(а):Ну что это? Число со знаком? Сколько разрядов?
-
Impartial
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: Написание плагинов движения для mach3
Генератор шагов это синтезатор частоты.
Вот как это приблизительно выглядит. Без верилога.
Вот как это приблизительно выглядит. Без верилога.
-
ipr
- Кандидат
- Сообщения: 65
- Зарегистрирован: 13 ноя 2012, 17:03
- Репутация: 1
- Откуда: Екатеринбург
- Контактная информация:
Re: Написание плагинов движения для mach3
В общем-то я тоже самое и делал, только на верилоге. Плюс счетчик, чтобы вовремя перейти к следующему сервоциклу, и буфер для хранения параметров этого цикла. Можно и без буфера и параллельного порта, но это же сколько ног нужно!Impartial писал(а):Вот как это приблизительно выглядит
Попробовал повторить приведенную схему: результат 66 занятых макроклеток.
-
Impartial
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: Написание плагинов движения для mach3
А откуда тогда 300?ipr писал(а):Попробовал повторить приведенную схему: результат 66 занятых макроклеток.
Вот исходник реального генератора шагов из прошивки плуто.
Код: Выделить всё
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
Это один весит 66, а три - уже 198Impartial писал(а):А откуда тогда 300?
Плюсом буфер и дополнительный счетчик.
Интересно, надо будет попробовать разобраться в нем... Хотя, есть подозрения, что тоже в cpld не войдет, все-таки плуто сделан на fpga, и наверное, не зряImpartial писал(а):Вот исходник реального генератора шагов
-
Impartial
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: Написание плагинов движения для mach3
Четыре генератора и интерфейс ЕРР влазит где то в 500 LEs.ipr писал(а):Интересно, надо будет попробовать разобраться в нем... Хотя, есть подозрения, что тоже в cpld не войдет, все-таки плуто сделан на fpga, и наверное, не зря
CPLD EPM570T144C5N хватает с запасом.
-
ipr
- Кандидат
- Сообщения: 65
- Зарегистрирован: 13 ноя 2012, 17:03
- Репутация: 1
- Откуда: Екатеринбург
- Контактная информация:
Re: Написание плагинов движения для mach3
В эту то войдет. Хотя кое-кто говорил:Impartial писал(а):EPM570T144C5N хватает
Impartial писал(а):Влезет даже три.ipr писал(а):CPLD примерно на 128 макроячеек
-
Impartial
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: Написание плагинов движения для mach3
Влезет, влезет. Оптимизировать нужно.
Для регулировки длительности стер 8 разрядного сумматора много, хватит 4+делитель. А можно и вообще без этого. Ну и так далее.
Только на картинке показан принцип. От реальности далеко.
Для регулировки длительности стер 8 разрядного сумматора много, хватит 4+делитель. А можно и вообще без этого. Ну и так далее.
Только на картинке показан принцип. От реальности далеко.
-
ipr
- Кандидат
- Сообщения: 65
- Зарегистрирован: 13 ноя 2012, 17:03
- Репутация: 1
- Откуда: Екатеринбург
- Контактная информация:
Re: Написание плагинов движения для mach3
Я делал вообще нерегулируемый степ равный одному такту, и восьмибитные счетчики - тогда 3 генератора влазили и в 64 ячейки. Но так же неинтересно, делать - так нормальноImpartial писал(а):8 разрядного сумматора много
Re: Написание плагинов движения для mach3
ipr, забросил?
-
ipr
- Кандидат
- Сообщения: 65
- Зарегистрирован: 13 ноя 2012, 17:03
- Репутация: 1
- Откуда: Екатеринбург
- Контактная информация:
Re: Написание плагинов движения для mach3
нет, не забросил, свободного времени катастрофически не хватает...
-
antonixx
- Новичок
- Сообщения: 1
- Зарегистрирован: 21 мар 2013, 16:14
- Репутация: 0
- Контактная информация:
Re: Написание плагинов движения для mach3
Приветствую! Заранее извеняюсь если несколько не по теме.
А есть ли возможность внешнему приложению получить координаты мача и сделать движение по оси. Я так понимаю это должно быть в плагине. Как регистрируется DLL в системе мача, при загрузке? Может быть подскажите где глянуть, в какую сторону копать?
А есть ли возможность внешнему приложению получить координаты мача и сделать движение по оси. Я так понимаю это должно быть в плагине. Как регистрируется DLL в системе мача, при загрузке? Может быть подскажите где глянуть, в какую сторону копать?
-
ipr
- Кандидат
- Сообщения: 65
- Зарегистрирован: 13 ноя 2012, 17:03
- Репутация: 1
- Откуда: Екатеринбург
- Контактная информация:
Re: Написание плагинов движения для mach3
Смотреть следует примерно сюда:
отрывок из определения структуры TrajBuffer
Собственно, TrajPoint имеет такие поля:
Я не уверен, но вроде-бы int Points[6] - координаты по каждой оси. Наверное, зная координаты, можно и самостоятельно рассчитывать движение. Я сам так не пробовал...
DLL-ки плагинов Mach3 находит и загружает при запуске.
отрывок из определения структуры TrajBuffer
Код: Выделить всё
TrajPoint Trajectories[0x1000];
int TrajIndex; // Trajectory buffer current Index
int TrajHead; // Trajectory buffer Fill point
Код: Выделить всё
struct TrajPoint
{
int Points[6];
int Command;
int ID;
char shifter[6];
};
DLL-ки плагинов Mach3 находит и загружает при запуске.
-
BosniaCNC
- Новичок
- Сообщения: 1
- Зарегистрирован: 02 мар 2013, 22:07
- Репутация: 0
- Контактная информация:
Re: Написание плагинов движения для mach3
Я сделал pic_puls и установлены Pulse 2 в Mach3. Я должен сказать, что не работает хорошо, и что многие проблемные особенности.
Если кто-то хочет сделать, что я бы не рекомендовал - Mach3 работает лучше, чем LPT работает с этим плагином.
Если кто-то хочет сделать, что я бы не рекомендовал - Mach3 работает лучше, чем LPT работает с этим плагином.
-
andrey75-51
- Новичок
- Сообщения: 11
- Зарегистрирован: 04 май 2016, 19:28
- Репутация: 0
- Настоящее имя: Андрей
- Контактная информация:
Re: Написание плагинов движения для mach3
Уважаемые, как и куда вписать макрос для Мач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
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
