Autor Tema: lazo cerrado motor a pasos encoder linuxcnc  (Leído 8214 veces)

maytzuc

  • Visitante
lazo cerrado motor a pasos encoder linuxcnc
« en: 30 Enero 2013, 16:11 »
hola, hace unas semanas he comenzado a usar linuxCNC para algunos proyecto pero me encontrado con la duda de como hacer un lazo cerrado entre el encoder y el motor a pasos, por lo que he leido, esta es una de las ventajas que tiene este software respecto a Match3. He logrado realizar lecturas desde el encoder, y el control de los motores pero aun no encuetro la manera de hacer el lazo cerrado. El codigo que llevo hasta ahora es el seguiente. espero que me puedan ayudar porfavor:

# Generated by stepconf at Fri Jan 25 09:34:03 2013
# If you make changes to this file, they will be
# overwritten when you run stepconf again
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_periXES
loadrt probe_parport
loadrt hal_parport cfg="0x378 out  "           
loadrt encoder num_chan=1                  
loadrt pid num_chan=1                     
loadrt stepgen step_type=0,0,0             

addf parport.0.read           
addf encoder.update-counters   
addf stepgen.make-pulses       
addf parport.0.write           


addf encoder.capture-position 
addf stepgen.capture-position 
addf pid.0.do-pid-calcs       
addf motion-command-handler   
addf motion-controller         


setp encoder.0.position-scale 2500.00         
addf stepgen.update-freq servo-thread             
net spindle-cmd <= motion.spindle-speed-out      
net Xpos-fb =>     pid.0.feedback             
net xoutput <=     pid.0.output            


net enc0A encoder.0.phase-A <= parport.0.pin-10-in   
net enc0B encoder.0.phase-B <= parport.0.pin-12-in   

net Xpos-fb <=  encoder.0.position         

net estop-out => parport.0.pin-01-out         
net xstep =>     parport.0.pin-08-out         
net xdir =>      parport.0.pin-14-out         
net xenable =>   parport.0.pin-17-out         

setp stepgen.0.position-scale [AXIS_0]SCALE      
setp stepgen.0.steplen 1            
setp stepgen.0.stepspace 1            
setp stepgen.0.dirhold 40000            
setp stepgen.0.dirsetup 40000
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL      
net xpos-cmd axis.0.motor-pos-cmd => stepgen.0.position-cmd   
net xpos-fb stepgen.0.position-fb => axis.0.motor-pos-fb   
net xstep <= stepgen.0.step               
net xdir <= stepgen.0.dir               
net xenable axis.0.amp-enable-out => stepgen.0.enable      

#set PID output limit to /- 1.00
setp pid.0.maxoutput [AXIS_0]MAX_VELOCITY   

# establecemos los parametros los cuales vendran del archivo ini
setp pid.0.Pgain [AXIS_0]P
setp pid.0.Igain [AXIS_0]I
setp pid.0.Dgain [AXIS_0]D
setp pid.0.bias [AXIS_0]BIAS
setp pid.0.FF0 [AXIS_0]FF0
setp pid.0.FF1 [AXIS_0]FF1
setp pid.0.FF2 [AXIS_0]FF2

#deadband should be just over 1 count
setp pid.0.deadband [AXIS_0]DEADBAND           

#posotion comand signal
#net xpos-cmd axis.0.motor-pos-cmd =>pid.0.command   
net xpos-fb axis.0.motor-pos-fb => pid.0.command

#axis enable signals
net xenable axis.0.amp-enable-out => pid.0.enable   

net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in

loadusr -W hal_manualtoolchange
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared


« última modificación: 30 Enero 2013, 16:32 por maytzuc »

Desconectado Jbecerra

  • Aprendiz
  • *
  • Join Date: Feb 2011
  • Mensajes: 772
  • Ubicación: Mairena del Alcor, Sevilla.
Re:lazo cerrado motor a pasos encoder linuxcnc
« Respuesta #1 en: 30 Enero 2013, 16:26 »
Hola.

 que mareo... no puedo leer tan rápido con esas letras bailando por la pantalla,

Pero has metido el dedo en "toa" la llaga. :)
Torno chino 280 -700, Fresadora BF-20. Ceneados.Con Linuxcnc.

maytzuc

  • Visitante
Re:lazo cerrado motor a pasos encoder linuxcnc
« Respuesta #2 en: 30 Enero 2013, 16:34 »
disculpen es que apenas soy nuevo en esto y confundi la instrucción con un scroll, y osando preguntar un poco mas a que se refiere con toda la llaga, esta mal lo que he hecho o algo asi ?

Desconectado Jbecerra

  • Aprendiz
  • *
  • Join Date: Feb 2011
  • Mensajes: 772
  • Ubicación: Mairena del Alcor, Sevilla.
Re:lazo cerrado motor a pasos encoder linuxcnc
« Respuesta #3 en: 30 Enero 2013, 21:43 »
Hola.

Lo de el dedo en la llaga, es que has hecho la pregunta del millón :),  o le has dado donde mas duele. Vamos que la cosa tiene miga. Espero que alguna de estas expresiones también se usen en tu tierra.

Es un tema que por ahora en el foro no esta solucionado, al menos que yo sepa.

En este enlace http://www.linuxcnc.org/index.php/english/forum/30-cnc-machines/5487-lathe-with-servo-drive-stepdir-and-encoder hay un HAL que lo usa.
« última modificación: 31 Enero 2013, 00:09 por Jbecerra »
Torno chino 280 -700, Fresadora BF-20. Ceneados.Con Linuxcnc.

borondes2010

  • Visitante
Re:lazo cerrado motor a pasos encoder linuxcnc
« Respuesta #4 en: 31 Enero 2013, 14:32 »
A ver quien es el primero que nos hace felices con una informacion clara y concisa de como hacerlo y que funcione bien,tanto motores de pasos como en servomotores

Desconectado Jbecerra

  • Aprendiz
  • *
  • Join Date: Feb 2011
  • Mensajes: 772
  • Ubicación: Mairena del Alcor, Sevilla.
Re:lazo cerrado motor a pasos encoder linuxcnc
« Respuesta #5 en: 31 Enero 2013, 15:05 »

La historia es mas complicada. Lo que seria bueno es realimentar con reglas la posición de los carros y no con encoder en los motores, así te despreocupas de las posibles holguras en las uniones y transiciones.

A mi no me atrae la idea de ponerle unos servos a unos paso a paso, si los motores están trabajando en un rango de potencia suficiente, no hay fallo de pasos, hay trabajos de bastantes horas que lo han demostrado, el salto pasa cuando se les exije mas de lo que pueden dar de si.

Y ya sabemos que muchos trabajamos con "maquinillas de aficionados", mi concepto del cnc al que podemos llegar desde la afición depende de la pasta que dispongas, si hay poca pues motores paso a paso y si hay mas a los servomotores, como pasos intermedios, los husillo de bolas, los dros y las reglas.
Torno chino 280 -700, Fresadora BF-20. Ceneados.Con Linuxcnc.

borondes2010

  • Visitante
Re:lazo cerrado motor a pasos encoder linuxcnc
« Respuesta #6 en: 31 Enero 2013, 15:13 »
yo en todo momento a usar el lazo cerrado con reglas que es lo logico..lo otro no me interesa...yo soy rural y cada cosa aplicada como procede pues es como debe ser,lo que ay que tener muy claro es la maquina que uno tiene y saber los pros y contras de ella y no pedirle peras al olmo y asi obtendremos buenos resultados como por ejemplo la cnc de becerra que trabaja de lujo .brinda

Desconectado tio_gil

  • Global Moderator
  • Oficial 1ª
  • ****
  • Join Date: Sep 2009
  • Mensajes: 3099
  • Ubicación: Madrid - España
Re:lazo cerrado motor a pasos encoder linuxcnc
« Respuesta #7 en: 31 Enero 2013, 20:05 »
Dándole vueltas más que un molino, lo que veo es que ninguno de los dos puede funcionar bien o como queremos que funcione (puede que esté equivocado) por el procedimiento de cómo trabajan. Olvidándonos del Mach, al LinuxCNC está claro que se le pueden meter las reglas, pero, que hace, nos corrige la medida o se mueve a donde digamos (que no es lo mismo)? Si estamos comiendo y  le decimos que se mueva 10mm y nos movemos 10.1, nos corrige, cierto, pero ya nos hemos comido 0.1 de más en cierto sitio. Si le decimos lo segundo, evidentemente se mueve a ese punto sin problemas, pero entonces aparece el problema de sincronismos (mis queridos círculos  ;D): te tienes que mover en cada eje y esperar que se ejecute, porque si en uno no llega, ya no deberías contínuar. Aquí es donde me estrello cuando veo las máquinas profesionales moviéndose a toda leche. Se que hay algo evidente que se me escapa...
Y ya se que las controladoras (cada eje) de estas máquinas valen tanto como una de nuestras fresadoras y el soft es muuuy especial.
Torno Optimun D240x500 modificado, Fresa BF20L Vario modificada, mucha otra herramienta... y pocas ganas de trabajar !!

borondes2010

  • Visitante
Re:lazo cerrado motor a pasos encoder linuxcnc
« Respuesta #8 en: 31 Enero 2013, 20:29 »
gil tu tranquilo que con mis controladoras y una reglas eso esta solucionao..otra cosa sera averiguar como conectarlo fisicamente..ja ja .brinda

Desconectado dedalo1111

  • Aprendiz
  • *
  • Join Date: Jul 2010
  • Mensajes: 918
  • Ubicación: Madrid
Re:lazo cerrado motor a pasos encoder linuxcnc
« Respuesta #9 en: 01 Febrero 2013, 00:07 »
Hola a todos, Maytuc yo me he empapado de todos los manuales pero aún ando en fase teórica por lo que no te puedo decir con hechos concretos hasta que no me ponga al fregao (aún estoy con la electrónica).

Yo creo que el problema está en el EMCMOT, el "core" de LinuxCNC siempre es un algoritmo PID y que salvo que haya algún error en principio es como lo que has hecho: alimentar los datos cmd (command=orden) y fbd (feedback=realimentación=encoder).

Peeero, no recuerdo donde, creo que en manual de HAL indica que EMCMOT implementa un PID "recortado" para usarlo con los PaP ... y de ahí intuyo que no genera pasos de correción si el error que resulta de calcular el PID de una posición resulta negativo.

Siento no poder serte más concreto, pero como te digo aún no he metido mano como tú... pero expero que te sirva de ayuda la pista (si estoy en lo cierto  ::) ).

-------------

Gil, si y no... todos los servos adolecen de lo que comentas. No son como un PaP que "clavan" la posición, siempre tienen un margen que se compensa con el cálculo que hacen a cada milisegundo de la posición.

El pico que comentas de pasarse 0.01, es en primera instancia la ganancia P, un valor muy alto va a producir lo que comentas... que salga como un cohete el servo y se pase de posición (y eso ya no lo devuelve nadie al material cortado). Para mejorar eso, el encoder ha de ser de mayor resolución que tu unidad mínima, para que se pueda pasar algunas unidades, detectar el error y compensar antes de que sea demasiado. De hecho haciéndolo bien hay dos encoders, uno en el eje del motor de mayor resolución y otro el de la regla, y se calcula sobre ambos.

Estas son las curvas típicas de ajuste de las variables P,I,D de un servo (la verde se considera la óptima) y como véis, hay una oscilación siempre sobre el punto de parada salvo "amariconar" el servo y dejarle muy lento (curva roja).



Salu2
Fresadora Wabeco F1200E CNC, Torno Warco WM-180, Sierra FEMI 780XL, cortadora porex FDC4

borondes2010

  • Visitante
Re:lazo cerrado motor a pasos encoder linuxcnc
« Respuesta #10 en: 01 Febrero 2013, 00:12 »
DEDALO yo lo que le comente a gil que queria es que el servo manteniese su encoder de 2000 pulsos y aparte llevase una regla optica conectados de tal manera que entre los dos se comiesen el lazo cerrado para posicionarse adecuadamente..no se si esto es posible o ya tengo que reordenar mis ideas y esperar que gil me asesine .brinda

Desconectado dedalo1111

  • Aprendiz
  • *
  • Join Date: Jul 2010
  • Mensajes: 918
  • Ubicación: Madrid
Re:lazo cerrado motor a pasos encoder linuxcnc
« Respuesta #11 en: 01 Febrero 2013, 00:26 »
Claro que es posible, y hay que contar con los dos encoders el de motor es el que en primera instancia se usa, sobre todo para gobernar la velocidad y que cuando se acerque a la posición de parada que indica la regla vaya en rampa "controlada".

Para ello la mecánica (husillo, reductora, etc.) deben permitir que los pulsos del motor sean xN a los de la regla, cuanto mayor sea N más margen tienes de maniobra. Si son iguales o menor, da por contado que esa oscilación la sufrirás en posición final.

Salu2
Fresadora Wabeco F1200E CNC, Torno Warco WM-180, Sierra FEMI 780XL, cortadora porex FDC4

borondes2010

  • Visitante
Re:lazo cerrado motor a pasos encoder linuxcnc
« Respuesta #12 en: 01 Febrero 2013, 02:58 »
DEDALO muchas gracias ..pense que gil de esta me mataba..ja ja que le tengo loco con mi electronica..como pa ahora decirle que el asunto no vale..ja ja .brinda