Страница 1 из 12
Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 16:28
gendos
Подскажите кто может
Пытался сделать сканер с помощью mach3 но он не может записывать данные с энкодера.Думаю эту задачу можно решить с помощью emc2.
emc2 у меня сейчас в стадии изучения.
Заказал себе плату 7i43.может она для этой задачи подойдет?
Просил помощи для этой задачи для mach3 на форуме по ссылке
http://cnc.userforum.ru/viewtopic.php?id=621#p27060
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 16:47
Nick
Давай определим, что нужно получить...
Нужен тач, нужно считывание данных по событию и как-то все это записывать в файл...
С тачем все просто, направляем внешний пин в probe-input
net probe parport.0.pin-10-in => motion.probe-input
а вот, что делать с записью данных сейчас уточню.
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 16:58
Nick
Так, нашел. Есть такая замечательная ngc управляющая программка для EMC2, которая делает скан прямоугольника и выводит все в файл
smartprobe.ngc, находтся в каталоге nc_files в исходных кодах emc2, куда она попадает при установке, честно говоря, не знаю.
Сохраняется все в файл probe-results.ngc, там в программе есть задание этого файла.
Код: Выделить всё
(smartprobe.ngc)
( Rectangular Probing )
( )
( This program repeatedly probes in a regular XY grid and writes the )
( probed location to the file 'probe-results.ngc' in the same directory )
( as the .ini file )
(Configuration section)
G20 (Inches) (ВОТ ТУТ ЛУЧШЕ ПОСТАВИТЬ G21 - мм)
F20 (probe speed)
#1=-1 (X start)
#2=.04 (X increment)
#3=51 (X count)
#4=-1
#5=.04
#6=51 (Y count)
#7=1.1 (Z safety)
#8=-.1 (Z probe)
(End configuration section)
(LOGOPEN,probe-results.ngc)
#9=0 #10=0
G0Z#7
O1 while [#9 lt #6]
#10=0
G0 Y[#4+#5*#9]
O2 while [#10 lt #3]
O3 if [[#9/2] - fix[#9/2] eq 0]
#11=[#1+#2*#10]
O3 else
#11=[#1+#2*[#3-#10-1]]
O3 endif
(#11 is X target)
#5070=1
O4 while [#5070 NE 0]
G38.5 z#7
G38.3 x#11
O4 endwhile
G38.2Z#8
(LOG,G1 X#5061 Y#5062 Z#5063)
#10=[#10+1]
O2 endwhile
G0Z#7
#9=[#9+1]
O1 endwhile
(LOGCLOSE)
G0Z#7
G0X#1Y#4
M2
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 17:01
aftaev
Такое нужно ???
https://www.youtube.com/watch?v=R9i4DbwZrKI
Модель "щупается" 3D пробником типо Renishaw. Точки записываются в файл, потом иих преобразуют в 3D модель.
В Маче насколько помню для этого есть специальный мастер. Запускаете, задаете параметры и он общупывает модель сканируя ее.
7i43 вам шибко не поможет. Можно было это реализовать в ЕМС и на на LPT. Если портов нехватает втыкаете еще карточку LPT баксов за 15.
Что за щуп у тебя?
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 17:12
gendos
Координата А вращает колодку рычаг двигает энкодер
координата Х смещает рычаг с энкодером через шаг 1мм после поворота оси А на 360 градусов
записывается в текстовый файл
х,а,у
где y данные с энкодера
но нужно еще перевести угловые координаты через sina и cosa
но это я потом буду думать как сделать
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 17:19
gendos
щупа у меня нет
есть ролик который обкатывает модель и через рычаг вращает энкодер
данные которого нужно записать в текстовый файл важна скорость обработки модели так как очень много точек
нужно уложится хотябы в 10 минут
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 17:22
aftaev
фото станка для лучшего усвоения работы.
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 17:25
Nick
Т.е. ты у тебя щуп постоянно находится на объекте, и ты хочешь считывать значения энкодера в определенных точках?
gendos писал(а):но нужно еще перевести угловые координаты через sina и cosa
но это я потом буду думать как сделать
Это две строчки на питоне.
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 17:38
Nick
gendos писал(а):есть ролик который обкатывает модель и через рычаг вращает энкодерданные которого нужно записать в текстовый файл важна скорость обработки модели так как очень много точек нужно уложится хотябы в 10 минут
Тогда вообще просто.
Есть команда, которая пишет в лог данные:
Координаты по осям хранятся в параметрах #5420 - X, #5421 - Y и т.д.
(LOG,G1 X#5420 Y#5421 A#...тут скорее всего... #5423)
И главное, энкодер нужно прикрутить на axis.N.joint-pos-fb.
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 18:13
gendos
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 18:27
gendos
плату 7i43 заказал чтоб поставить серву на 675 фрезерный станок для экспериментов ,а если пойдет для сканера закажу еще.
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 19:37
gendos
Тогда вообще просто.
Есть команда, которая пишет в лог данные:
Координаты по осям хранятся в параметрах #5420 - X, #5421 - Y и т.д.
(LOG,G1 X#5420 Y#5421 A#...тут скорее всего... #5423)
И главное, энкодер нужно прикрутить на axis.N.joint-pos-fb.[/quote]
я думаю это то что нужно.
Только куда записывать команду Log,G1X#5420 в исполняемый G-код ?
и как мне записать y=z(cosa)
x=z(sina)
где а угол поворота сканируемой детали
z- показания энкодера в мм
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 21:07
aftaev
У меня не открывается. Грузи сюды.
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 21:16
Nick
Да, в любом месте Gкода пишешь (LOG, ...) и в указанный (в команде log) выше файл пишется все, что после запятой.
sin и cos пишутся так
#<z> = #5422
#<a> = #5423
(LOG, #<z> * sin[#<a>], #<z> * cos[#<a>], #<z> )
Всю эту конструкцию можно вставить в описанную вверху программку, чтобы самому не задавать решетку, а она генерировалась сама.
Только меня смущает одно но, он может выдать Trajectory Following Error, т.к. EMC2 ось z не двигает, а положение ее изменяется. Сейчас посмотрю можно ли в Gcode использовать пины hal...
-------------
странно, а у меня открылось...
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 21:52
gendos
aftaev писал(а):
У меня не открывается. Грузи сюды.
фото сканера
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 22:08
aftaev
На тюбике было видео как обувь снимают на камеру и переносят в 3D.
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 23:10
Nick
Таких видео и программ есть уйма, но страдает точность и модель получается сложнее. Если есть станок, то сделать через сканирование при помощи энкодера и щупа гораздо проще.
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 23:28
gendos
Nick писал(а):Таких видео и программ есть уйма, но страдает точность и модель получается сложнее. Если есть станок, то сделать через сканирование при помощи энкодера и щупа гораздо проще.
я тоже так считаю
контактный сканер лучше всего,потом не нужно править облако точек
Re: Контактный сканер с помощью EMC2
Добавлено: 06 июл 2011, 23:38
gendos
Nick писал(а):Да, в любом месте Gкода пишешь (LOG, ...) и в указанный (в команде log) выше файл пишется все, что после запятой.
sin и cos пишутся так
#<z> = #5422
#<a> = #5423
(LOG, #<z> * sin[#<a>], #<z> * cos[#<a>], #<z> )
Всю эту конструкцию можно вставить в описанную вверху программку, чтобы самому не задавать решетку, а она генерировалась сама.
Только меня смущает одно но, он может выдать Trajectory Following Error, т.к. EMC2 ось z не двигает, а положение ее изменяется. Сейчас посмотрю можно ли в Gcode использовать пины hal...
Благодарю за помощь. буду пробовать когда приеду домой ,а то я сейчас в отпуске на море.
-------------
странно, а у меня открылось...
Re: Контактный сканер с помощью EMC2
Добавлено: 07 июл 2011, 09:17
Nick
Значит так, есть еще два варианта, один сложный, в компоненте thc.comp используется что-то подобное. THC - Torch Height Control используется для контроля высоты плазменного или газового резака. Можно его слегка переделать и использовать...
thc.comp (для просмотра содержимого нажмите на ссылку)component thc "Torch Height Control";
description
"""
Torch Height Control
Mesa THC > Mesa 5i20 Encoder > EMC THC
The Mesa THC sends a pulse based on the scaled voltage detected.
A velocity is used from the encoder that is being driven by a frequency from
the Mesa THC.
If enabled and torch is on and X + Y velocity is within tolerance of set speed
allow the THC to offset the Z axis as needed to maintain voltage.
If enabled and torch is off and the Z axis is moving up remove any correction
at a rate not to exceed the rate of movement of the Z axis.
If enabled and torch is off and there is no correction
pass the Z position and feed back untouched.
If not enabled pass the Z position and feed back untouched.
Physical Connections
Plasma Torch Arc Voltage Signal => 6 x 487k 1% resistors => THC Arc Voltage In
THC Frequency Signal => Encoder #0, pin A (Input)
Plasma Torch Arc OK Signal => parport.0.pin-15-in
parport.0.pin-16-out => Plasma Torch Start Arc Contacts
HAL Plasma Connections
hm2_5i20.0.encoder.00.velocity => thc.encoder-vel (tip voltage)
motion.spindle-on => parport.0.pin-16-out (start the arc)
thc.arc-ok <= motion.digital-in-00 <= parport.0.pin-15-in (arc ok signal)
HAL Motion Connections
thc.requested-vel <= motion.requested-vel
thc.current-vel <= motion.current-vel
""";
author "John Thornton";
license "GPL";
option singleton yes;
// Input Pins
pin in float encoder_vel "Connect to hm2_5i20.0.encoder.00.velocity";
pin in float current_vel "Connect to motion.current-vel";
pin in float requested_vel "Connect to motion.requested-vel";
pin in float volts_requested "Tip Volts current_vel >= min_velocityequested (SP)";
pin in float vel_tol "Velocity Tolerance (Corner Lock)";
pin in bit torch_on "Connect to motion.spindle-on";
pin in bit arc_ok "Arc OK from Plasma Torch";
pin in bit enable "Enable the THC, if not enabled Z position is passed through";
pin in float z_pos_in "Z Motor Position Command in from axis.n.motor-pos-cmd";
// Output Pins
pin out float z_pos_out "Z Motor Position Command Out";
pin out float z_fb_out "Z Position Feedback to Axis";
pin out float volts "The Calculated Volts";
pin out bit vel_status "When the THC thinks we are at requested speed";
// Parameters
param rw float vel_scale "The scale to convert the Velocity signal to Volts";
param rw float scale_offset "The offset of the velocity input at 0 volts";
param rw float velocity_tol "The deviation percent from planned velocity";
param rw float voltage_tol "The deviation of Tip Voltage before correction takes place";
param rw float correction_vel "The Velocity to move Z to correct";
// Global Variables
variable float offset;
variable float last_z_in;
function _;
;;
#include "rtapi_math.h"
FUNCTION(_) {
// convert encoder velocity to volts
volts = (encoder_vel - scale_offset) * vel_scale;
if(volts < 0){volts = 0;} // make sure volts is not negative
if(enable){
float min_velocity = requested_vel -(requested_vel*(1/velocity_tol));
if(current_vel > 0 && current_vel >= min_velocity){vel_status = 1;}
else {vel_status =0;}
if(torch_on && arc_ok && vel_status){ // allow correction
if((volts + voltage_tol) > volts_requested){
offset -= correction_vel;
}
if((volts - voltage_tol) < volts_requested){
offset += correction_vel;
}
last_z_in = 0;
}
if(!torch_on){ // remove any offset
float z_diff;
z_diff = z_pos_in - last_z_in;
if(z_diff > 0 && offset != 0){ // torch is moving up
if(offset > 0){ // positive offset
if(offset > z_diff){ // remove some
offset -= z_diff;
}
else {offset = 0;}
}
if(offset < 0){ // negative offset
if(offset < z_diff){ // remove some
offset += z_diff;
}
else {offset = 0;}
}
}
last_z_in = z_pos_in;
}
z_pos_out = z_pos_in + offset;
z_fb_out = z_pos_in; // keep axis motor position fb from being confused
}
if(!enable){
z_pos_out = z_pos_in;
z_fb_out = z_pos_in; // keep axis motor position fb from being confused
}
}
И второй путь, гораздо более простой. В .hal заводим пин encoder.0.position на motion.analog-in-00.
Т.е. net encoder.0.position => motion.analog-in-00
После этого при выполнении Gкода
M66 E0 L0
Значение пина motion.analog-in-00 будет сохранено в параметре #5399.
Т.е. вся операция считывания и вывода значения будет выглядеть следующим образом:
M66 E0 L0
#<z> = #5399
#<a> = #5423
(LOG, #<z> * sin[#<a>], #<z> * cos[#<a>], #<z> )