Autor Tema: Construccion maquina de posicionamiento 2D -3D impresora, cnc, ...  (Leído 14528 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Construccion maquina de posicionamiento 2D -3D impresora, cnc, ...
« Respuesta #15 en: 20 de Septiembre de 2015, 21:33:33 »
Comp, veo que los drivers en la RAMPS sugieren los A4988. A mi me interesa fabricar los modulitos con el DRV8825, sabes si son pin a pin compatible? o sea, se puede enchufar cualquiera de los dos en la placa RAMPS sin modificar nada?

Saludos!

Edito:
Comparo esta imagen:
https://www.pololu.com/picture/view/0J1418
con esta
https://www.pololu.com/picture/view/0J4231

y hay pequeñas diferencias. se podrán salvar?

EDITO2: Si, se pueden salvar. Acá esta explicado: https://www.pololu.com/product/2133 abajo de todo.

saludos!
« Última modificación: 20 de Septiembre de 2015, 22:22:42 por elgarbe »
-
Leonardo Garberoglio

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re: Construccion maquina de posicionamiento 2D -3D impresora, cnc, ...
« Respuesta #16 en: 20 de Septiembre de 2015, 22:31:21 »
Esto es lo que encontré

Por qué preferir el Driver DRV8825  frente al A4988?
•Mejor protección frente a incremento de temperatura.
•Puede liberar hasta 1.5A por fase! sin necesidad de disipador ni ventilación. Eso repercute en una vida útil más larga.
•Tiene mayor resolución de micropasos (1/32) frente a sólo (1/16) del A4988
•Ruido: mejor escucharlo que decirlo  
•Los pines son idénticos al driver A4988 por lo que pueden reemplazarlos sin problema para tener un mayor rendimiento.
« Última modificación: 20 de Septiembre de 2015, 22:35:03 por CompSystems »
Desde Colombia

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
-
Leonardo Garberoglio

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Construccion maquina de posicionamiento 2D -3D impresora, cnc, ...
« Respuesta #18 en: 20 de Septiembre de 2015, 23:02:17 »

EDITO2: Si, se pueden salvar. Acá esta explicado: https://www.pololu.com/product/2133 abajo de todo.


The SLEEP pin on the DRV8825 is not pulled up by default like it is on the A4988, but the carrier board does connect it to the FAULT pin through a 10k resistor.

Ahi explica por que tenia ese pull-up la placa RAMPS.

Pregunta elgarbe, tuviste suerte con aliexpress al comprar? tengo ganas de comprarme un USB Blaster Clon de Altera, pero no se si pasara, por DX no tengo ningun problema, todo me llego, pero pedi una cosa a ebay y no hubo forma.
« Última modificación: 20 de Septiembre de 2015, 23:06:06 por KILLERJC »

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Construccion maquina de posicionamiento 2D -3D impresora, cnc, ...
« Respuesta #19 en: 20 de Septiembre de 2015, 23:32:55 »

EDITO2: Si, se pueden salvar. Acá esta explicado: https://www.pololu.com/product/2133 abajo de todo.


The SLEEP pin on the DRV8825 is not pulled up by default like it is on the A4988, but the carrier board does connect it to the FAULT pin through a 10k resistor.

Ahi explica por que tenia ese pull-up la placa RAMPS.

Pregunta elgarbe, tuviste suerte con aliexpress al comprar? tengo ganas de comprarme un USB Blaster Clon de Altera, pero no se si pasara, por DX no tengo ningun problema, todo me llego, pero pedi una cosa a ebay y no hubo forma.

yo he comprado unos 20 paquetitos en lo que va del año. me han quedado en aduana (27km de donde vivo) unos 4, de los cuales 2 saque pagando impuestos y haciendo el 4550 y los otros 2 los perdi. los otros 16 (mas o menos) llegaron a  mi casa sin pagar nada. Una vez me llego el touch de la tablet, de 10", un paquete grande que costó USD25 y no me lo retuvieron! uno de los paquetes qu me retuvieron fue un protoboard con un modulito fuente multitension (entrada en 12v y varias salidas, para enchufar en el protoboard) de unos usd4!! no tienen lógica.

Lo que no me llego nunca fue unas cosas de bangood. DX no sé si compré alguna vez. De aliexpress me llegan cosas hasta sin traking...

Saludos!
-
Leonardo Garberoglio

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re: Construccion maquina de posicionamiento 2D -3D impresora, cnc, ...
« Respuesta #20 en: 20 de Septiembre de 2015, 23:44:38 »
una pequeña info sobre el motor paso a paso



Importante! Tiene el eje con corte tipo D, es decir, que tiene una porción plana donde se ajusta la polea GT2 o un acople y que evita el deslizamiento axial de éste.

El motor NEMA17 de 40mm de largo es perfecto para los trabajos de una RepRap, Prusa Mendel o cualquier otra impresora 3D. Válido para los ejes X, Y y Z, además tiene suficiente torque para hacer funcionar cualquier extrusor con filamentos de 1.75mm y de 3.00mm.

Angulo por paso 1.8°
Rated Voltage 2V
Número de fases 2
Rated Current 1.2A
Resistencia de aislamiento 100MOhms - min
Resistencia por fase  1.7 Ohms ­- 10%  
Aislamiento Clase B  
Inductancia por fase 4.5mH -­ 20%  
Inercia de rotor 57 gr/cm²
Holding Torque 0.4 N m - min
Peso 240 gramos
Detent torque 15 mN m

un vidio
Desde Colombia

Desconectado miquel

  • PIC12
  • **
  • Mensajes: 69
Re: Construccion maquina de posicionamiento 2D -3D impresora, cnc, ...
« Respuesta #21 en: 21 de Septiembre de 2015, 04:04:07 »
Hola!  Aqui teneis la estructura de la impresora en OpenScad:

https://drive.google.com/file/d/0B5bg_pUMLUPkSHpkck94YXBfalk/view?usp=sharing

Saludos,

Miquel

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re: Construccion maquina de posicionamiento 2D -3D impresora, cnc, ...
« Respuesta #22 en: 21 de Septiembre de 2015, 16:01:54 »
gracias miguel,

Desearía en conjunto explorar el código fuente del arduino para el control de estas maquinas, posiblemente tenga este fin de semana los primeros componentes, la idea no solo es "copiar y pegar el código" sino explorarlo par ver como posiciona los motores, etc y de ahí partir para personalizarlo e inclusive mejorarlo
Desde Colombia

Desconectado miquel

  • PIC12
  • **
  • Mensajes: 69
Re: Construccion maquina de posicionamiento 2D -3D impresora, cnc, ...
« Respuesta #23 en: 21 de Septiembre de 2015, 16:35:24 »
Hola CompSystems!

Aqui tienes mi Marlin esta preparado para funcionar con lcd y tarjeta SD :

https://drive.google.com/file/d/0B5bg_pUMLUPkbnRnbWRtNHRnTGs/view?usp=sharing

Saludos,

Miquel

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
-
Leonardo Garberoglio

Desconectado miquel

  • PIC12
  • **
  • Mensajes: 69
Re: Construccion maquina de posicionamiento 2D -3D impresora, cnc, ...
« Respuesta #25 en: 22 de Septiembre de 2015, 08:06:36 »
Hola elgarbe!

No tengo experiencia con los controladores Full Graphics, yo utilizo el LCD de 4 lineas, pero por lo que he leido en los foros la gente que lo utiliza esta muy satisfecha.
Lo que creo es que es muy caro el que aparece en el enlace que pusiste(1$Usa > 9,4Pesos). En china esta sobre los 15$USA

Saludos,

Miquel

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re: Construccion maquina de posicionamiento 2D -3D impresora, cnc, ...
« Respuesta #26 en: 22 de Septiembre de 2015, 17:33:44 »
recolectando info... hay ucho por digerir  :-)
gracias Miguel por los códigos

les dejo un link de un Tutorial Arduino con motor paso a paso, servomotores, pwm etc

http://www.electroensaimada.com/motor-paso-a-paso.html
http://blascarr.com/control-motor-paso-a-paso/
Desde Colombia

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re:Construccion maquina de posicionamiento 2D -3D impresora, cnc, ...
« Respuesta #27 en: 16 de Octubre de 2015, 17:32:57 »
Realizando un primer montaje de prueba con un chasis de impresora, además e creado mi primer programa en Arduino  :smiley:
 


En seguida anexo el código fuente elemental para desplazar de un lado a otro el carrete,  agregue un final de carrera para tener una referencia, quiero detectar esta señal como una interrupción IRQ, pero según un sitio web dice que si habilita una interrupción no se puede usar las instrucciones de tiempo como delayMicroseconds(); delay(); etc  :'( http://geekchickens.blogspot.com.co/2014/04/tutorial-de-arduino-desde-0-tutorial-21.html esto es verdad? si es así estoy un poco desilusionado con arduino.

He visto que las impresora 3d tiene varios finales de carrera, para los que han cachareado el código fuente, como detecta el programa el cambio de señal de estos suiches?
Desde Colombia

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Construccion maquina de posicionamiento 2D -3D impresora, cnc, ...
« Respuesta #28 en: 16 de Octubre de 2015, 18:27:34 »
Citar
En seguida anexo el código fuente elemental para desplazar de un lado a otro el carrete,  agregue un final de carrera para tener una referencia, quiero detectar esta señal como una interrupción IRQ, pero según un sitio web dice que si habilita una interrupción no se puede usar las instrucciones de tiempo como delayMicroseconds(); delay(); etc  :'( http://geekchickens.blogspot.com.co/2014/04/tutorial-de-arduino-desde-0-tutorial-21.html esto es verdad? si es así estoy un poco desilusionado con arduino.

No se cual es el codigo de esos delays, normalmente los delays son NOPs ejecutados una y otra ves. Por lo cual no usarian interrupciones. milis() por otra parte SI usa la interrupcion del Timer 1 si no mal recuerdo.
Las interrupciones de los Atmega son incluso mejores que de los PICs, ya que cada modulo tiene su propio vector de interrupcion.

Es decir podes crear una funcion para la interrupcion del Timer ( por ejemplo para el milis() ) y  podes tener tranquilamente una interrupcion externa, con codigos totalmente separados desde el punto de vista del assembler. Si por alguna razon las funciones de Arduino evitan esto ( no creo que lo hagan ) ese es otro tema. El micro es capaz de manejar varias interrupciones y no veo el por que uno deberia desabilitar una interrupcion a favor de otra.

Eso si. OJO!, tu rutina de interrupcion debe durar menos que lo que dura los intervalos de interrupcion de milis() por ejemplo. De todas formas una rutina de interrupcion debe ser lo mas rapida posible. Asi que no creo que exista problema con eso. Si vos tenes funcionando milis() por ejemplo, los milisegundos contados no van a avanzar por que esta atrapado en la interrupcion (generado por la interrupcion externa). Y ese es el principal problema. No podrias usar milis() ni en tu programa principal por que no va a respetar el tiempo, lo cual si por ejemplo sucedio la interrupcion externa y luego la de milis, tal ves cuando pasaron 10ms solo conto 1ms (y tenes problemas si esta basado en tiempo tu programa). Pero, si tu interrupcion es rapida la cual dure menos de 1ms, supongamos 0.5ms lo cual estamos hablando de cerca de 2000 ciclos(instruccion de 1 ciclo) en ASM facilmente a 4Mhz entonces no vas a tener problemas.

Y creo que a lo otro que se refiere la persona del articulo es que ADENTRO de la interrupcion no podes usar delays o milis (por las mismas razones que antes y por obvias razones). Y Por que como dije antes: la interrupcion debe ser lo mas rapido posible.

Lamentablemente no esta muy claro a que apunta o no con esa frase, pero estas son las 2 limitaciones que debes tener en cuenta.
Y esto afecta a cualquier microcontrolador, no solo los Atmega ( Arduino como se quieran llamar )
« Última modificación: 16 de Octubre de 2015, 19:01:02 por KILLERJC »

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re:Construccion maquina de posicionamiento 2D -3D impresora, cnc, ...
« Respuesta #29 en: 23 de Octubre de 2015, 00:55:45 »
voy ha necesitar una interrupción para ver el estado de un final de carrera, pero por ahora estoy puliendo mi primer programa

el siguiente código implementa una función llamada runBackAndForth ejecuta la función ir y venir con argumentos velocidad y rotaciones completas de un motor de pasos, el código fue basado en el video siguiente, lo cambie a full-step mode, por facilidad, pero la idea es cambiar los micropasos dentro del código, lo que aun no he comprendido es la fucnion holdHalfCylce(double speedRPS) por favor quien me ayuda documentado esta función para ver que hace cada sentencia

Gracias

próximamente anexare circuito SCH


Código: C++
  1. //Learning how to run a bipolar stepper motor.
  2.  
  3. // Version 0.02 basada en [youtube]https://www.youtube.com/watch?v=PrV-SLxIIFE[/youtube]
  4.  
  5.  
  6. //
  7. //Setup:
  8. //-Power source: 10 V / max 750mA (old mobile phone charger)
  9. //-Motor: 17HS1001-05 stepper motor, bipolar, 4-wire, R/coil 10 ohm, ratings unknown
  10. //-Microcontroller: Arduino MEGA
  11. //-Driver: Pololu A4988 stepper motor driver carrier
  12. //
  13. //Pololu current limiter adjusted with the screw and ref pin value measured to be 0.24 V, which corresponds to 2.5 A/V * 0.24 V = 750 mA (look at the Pololu manual). With this setting, I measured about 500 mA drawn from the power source.
  14. //
  15. //MS1 pin set high (connected to 5 V) to enable half stepping, disconnected results in full-step mode
  16. //
  17. //As suggested by Pololu manual, a capacitor (220uF) is added to the power input.
  18. //
  19. //Rest of the pin setups follow the ones on the Pololu manual page:
  20. //http://www.pololu.com/product/2128 and https://www.pololu.com/product/2133
  21. //
  22.  
  23.  
  24.  
  25.  
  26. #ifndef ARDUINO_BOARDS_H // macro-identificador no está definido?
  27. //#then
  28.   #define ARDUINO_BOARDS_H // definalo
  29.  
  30.   #define Arduino_UNO 0
  31.   #define Arduino_MEGA_2560 10
  32.   #define Genuino_MEGA_2560 Arduino_MEGA_2560
  33.  
  34.   //#define SelectBoard(board) (ARDUINO_BOARD==BOARD_##board)
  35.  
  36. #endif //BOARDS_H
  37.  
  38. // The number of steps in one full motor rotation
  39. const int stepsInFullRound = 200; // full-step mode
  40. // const int stepsInFullRound = 400; // half stepping
  41.  
  42. int statusLED = LOW;
  43.  
  44. void setup() { // put your setup code here, to run once:
  45.   #define ARDUINO_BOARD Arduino_MEGA_2560
  46.  
  47.   #if ARDUINO_BOARD == Arduino_MEGA_2560
  48.     // DRIVER8825 pin conexion to arduino
  49.     #define DRIVER8825_RESET_PIN 52 // Pin 52 connected to RESET pin of DRIVER8825
  50.     #define DRIVER8825_STEP_PIN 50 // Pin 50 connected to STEP pin of DRIVER8825
  51.     #define DRIVER8825_DIRECTION_PIN 48 // Pin 48 connected to DIRECTION pin of DRIVER8825
  52.     #define DRIVER8825_MODE0_PIN 30
  53.     #define DRIVER8825_MODE1_PIN 32
  54.     #define DRIVER8825_MODE2_PIN 34
  55.    
  56.     //
  57.     #define LED_PIN 46
  58.     #define LIMIT_SWITCH_PIN 44 // final de carrera
  59.        
  60.   #else
  61.  
  62.   #endif //BOARDS_H
  63.  
  64.  
  65.   // Set pins
  66.   //pinMode(DRIVER8825_RESET_PIN, OUTPUT);
  67.   pinMode(DRIVER8825_STEP_PIN, OUTPUT);
  68.   pinMode(DRIVER8825_DIRECTION_PIN, OUTPUT);
  69.   pinMode(DRIVER8825_MODE0_PIN, OUTPUT);
  70.   pinMode(DRIVER8825_MODE1_PIN, OUTPUT);
  71.   pinMode(DRIVER8825_MODE2_PIN, OUTPUT);
  72.    
  73.   pinMode(LED_PIN, OUTPUT);
  74.  
  75.   digitalWrite(DRIVER8825_STEP_PIN, LOW);
  76.   digitalWrite(DRIVER8825_DIRECTION_PIN, LOW);  
  77.  
  78.   // Microstep Resolution
  79.   // Full step: low status or disconnected results in full-step mode
  80.   digitalWrite(DRIVER8825_MODE0_PIN, LOW);
  81.   digitalWrite(DRIVER8825_MODE1_PIN, LOW);
  82.   digitalWrite(DRIVER8825_MODE2_PIN, LOW);
  83.  
  84.   // Another
  85.   // MODE0 1 2
  86.   // High Low Low Half step
  87.   // Low High Low 1/4 step
  88.   // High High Low 1/8 step
  89.   // Low Low High 1/16 step
  90.   // High Low High 1/32 step
  91.   // Low High High 1/32 step
  92.   // High High High 1/32 step
  93.  
  94.   digitalWrite(LED_PIN, LOW);
  95. }
  96.  
  97. // Runs the motor according to a chosen direction, speed (rounds per seconds) and the number of steps
  98. void run(boolean runForward, double speedRPS, int stepCount) {
  99.   digitalWrite(DRIVER8825_DIRECTION_PIN, runForward);
  100.  
  101.   for (int i = 0; i < stepCount; i++) {
  102.     digitalWrite(DRIVER8825_STEP_PIN, HIGH);
  103.     holdHalfCylce(speedRPS);
  104.     digitalWrite(DRIVER8825_STEP_PIN, LOW);
  105.     holdHalfCylce(speedRPS);
  106.   }
  107. }
  108.  
  109. // A custom delay function used in the run()-method
  110. void holdHalfCylce(double speedRPS) {
  111.   long holdTime_us = (long)(1.0 / (double) stepsInFullRound / speedRPS / 2.0 * 1E6);
  112.   int overflowCount = holdTime_us / 65535;
  113.   for (int i = 0; i < overflowCount; i++) {
  114.     delayMicroseconds(65535);
  115.   }
  116.   delayMicroseconds((unsigned int) holdTime_us);
  117. }
  118.  
  119. // Runs the motor once in forward direction and once to the opposite direction.
  120. // Holds the motor still for 1 sec after both movements.
  121. void runBackAndForth(double speedRPS, int rounds) { // funcion ir y venir
  122.   run(true, speedRPS, stepsInFullRound * rounds);
  123.   delay(1000);
  124.   run(false, speedRPS, stepsInFullRound * rounds);
  125.   delay(1000);
  126. }
  127.  
  128. void blinkLED(void) {
  129.   statusLED = !statusLED;
  130.   digitalWrite(LED_PIN, statusLED);
  131. }
  132.  
  133.  
  134. // Tests various speeds 2,3 & 4, with 1 to 3 rotations
  135. void loop(){
  136.   blinkLED();
  137.   runBackAndForth(2, 1); // speed 2, 1 rotations
  138.   blinkLED();
  139.   runBackAndForth(3, 2); // speed 3, 2 rotations
  140.   blinkLED();
  141.   runBackAndForth(4, 3); // speed 4, 3 rotations
  142. }
Desde Colombia