Índice general Foros Digital, Electricidad e Informática Decoder locomotora con Arduino

Decoder locomotora con Arduino

Moderador: 241-2001


Nota 17 Abr 2016 18:48

Desconectado
Mensajes: 46
Registrado: 15 Jul 2013 00:41

Saludos a todos!!! Esto en principio es solo un boceto o una idea, pero creo que con un poco de maña se puede dejar más o menos aceptable. Todo se me ocurrio el otro día cuando trasteando con el decoder de una de las locomotoras que ya estaba más para allá que para acá, al final dejo de estar :( y pensé que no sería tan difícil hacer un decodificado para una locomotora con Arduino. Evidentemente solo seria útil para locomotoras con espacio suficiente para poder colocar un Arduino micro, el circuito lector de DCC con el 6N137 y un driver L293D y un puente de diodos . Todo esto bien juntito y colocadito dentro de una de nuestras pequeñas.
Ventajas: Muchas, tendríamos un decodificador de muy bajo coste unos 5 o 6 € y múltiples configuraciones.
Contras: No se que precisión puede llegar a dar la frecuencia de PWM de Arduino y no valdría para locomotoras pequeñas.

Este seria el boceto del circuito:

Imagen

Así que entre ayer y un ratito de hoy he hecho el "experimento" y la verdad ha salido mejor de lo que esperaba, la maquina se mueve según la velocidad indicada en el mando, pudiendo cambiar de dirección.
He utilizado como base el sketch de ejemplo de la librería NmraDcc llamado NmraDccMultiFunctionDecoder.ino

Queda algo así:



Este post más que enseñaros lo que he hecho es para pedir colaboración para poder mejorar el código añadirle luces y funciones extras, o para que me deis vuestra opinión sobre como veis este tipo de decoder si seria viable o no.

Creo que el mayor problema es la frecuencia del PWM y que harían algo de ruido a bajas revoluciones. Pero la idea en general creo que es bastante buena tanto para los que pueden gastarse un dinero en decoders como para los que no pueden tanto.

Me encantaría saber vuestras opiniones Saludos a todos!!!
Maqueta modular http://lamaquetade.infotronikblog.com/
Electrónica, digital y cacharreo http://www.infotronikblog.com/


Desconectado
Mensajes: 761
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Creo que los descodificadores DCC para locomotoras están suficientemente bien hechos y una solución casera no los mejoraría. Además prefiero usar el Arduino y los demás micros como él para hacer cosas que todavía no existen, que las hay y son muchas. La imaginación es el límite ;) .
Pero sin iniciativas como la tuya no se habría conseguido nunca nada. Quién sabe si no estás en camino de un invento revolucionario. Ánimo.
Saludos

[Multimaus + GenLi-S88 + +z21f. + RocRail (MacOsX)]
H0 Renfe, sin catenaria


Desconectado
Mensajes: 46
Registrado: 15 Jul 2013 00:41

Buenas a todos!!! Por temas laborales ahora mismo no estoy muy activo ni con la maqueta ni con nada en general, pero antes de que llegara el mogollón (vivo en zona de costa) termine la primera versión del decoder para locomotoras, ya tiene todas las funciones básicas, adelante, atrás, parada, luces en sentido de la marcha.
Por el momento esta en fase de pruebas y tengo que montarlo en una locomotora, posiblemente en la 2005-T de Ibertren. para hacer las primeras pruebas. Supongo que ya será para Septiembre, y ya apartir de tenerlo montado empezare a investigar el tema de programar las CV's para no tener que estar desmontando la carcasa y enchufando el USB cada vez que quiera reprogramar la locomotora.
Os dejo un vídeo de como va la historia:



Las luces según el sentido de la marcha son los dos led's montados en la placa de pruebas, uno blanco y otro amarillo.

También he comprado unos motores de CD para remotorizar la 333 y la 2005-T después de ver un post sobre ello en este mismo foro... Pero eso ya es otra historia

Saludos!!!
Maqueta modular http://lamaquetade.infotronikblog.com/
Electrónica, digital y cacharreo http://www.infotronikblog.com/


Desconectado
Mensajes: 761
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Muy bien. Buen progreso!

Para el control del motor el PWM que ofrece la instrucción analogWrite() de Arduino no es lo más adecuado. Me di cuenta al hacer el circuito Lanzadera, que también mueve una locomotora controlando su motor a pulsos. Y el problema era el ruido. Yo opté finalmente por frecuencias muy bajas (pulsos largos pero poco frecuentes) pero los descodificadores comerciales hacen lo contrario: frecuencias ultrasónicas para dar pulsos tremendamente breves. En este foro he puesto alguna pantalla de osciloscopio mostrándolos...

Para programar eso en Arduino yo recomendaría dos cosas: a) hacer el PWM "a mano", es decir, mediante una interrupción dedicada solo a ello (variando el valor del registro OCR correspondiente, etc.) y b) para que el microprocesador pueda dedicarse a ella sin perder tiempo en otras cosas, no emplearía ningún "paquete" de código para descodifcar el DCC sino que usaría el código de Germán (Rfe7747) que hace lo mismo y no enreda al procesador en nada más que lo imprescindible.

Tanto él como yo descodificamos DCC así y el resultado es muy satisfactorio en el 99% de los casos. Tanto que me permitió, por ejemplo, liberar al procesador lo suficiente como para poder mover tropecientos servos a la vez desde un Multimaus (no recuerdo, pero creo que 18 por lo menos, y sin ningún problema).

Desgraciadamente luego necesitarás el leer la fuerza contraelectromotriz del motor (en los espacios entre pulsos) para hacer la regulación de carga que traen de serie casi todos los descodificadores ya, y eso es muy difícil hacerlo bien. Ahí nos hemos atascado algunos...

Y otra cosa: no con Arduino sino con ATtiny84, que es capaz y mucho más pequeño!!

Ánimo!!
Saludos

[Multimaus + GenLi-S88 + +z21f. + RocRail (MacOsX)]
H0 Renfe, sin catenaria


Desconectado
Mensajes: 995
Registrado: 31 May 2013 22:09
He visto este vídeo en una web vecina y, sería una pasada poder hacer todo esto con una sola placa de Arduino, para los que tienen en digital solo las locomotoras.




El problema, conseguir el código, por qué los legos como yo no tenemos forma de de sacarle punta al asunto. Y no soy el único, por lo visto.
Saludos
José

Viva la vía verde


Desconectado
Mensajes: 452
Ubicación: L'H - Barcelona
Registrado: 19 Mar 2011 17:40
Hace unos 4 meses ni idea de Arduino, ahora ya manejo un stepper y 2 servos, con programas bajados de la red, simplemente modificando valores para la velocidad y recorridos, todo es ponerse, hoy en día hay una gran facilidad para conseguir la información necesaria.
Saludos.
Jordi


Desconectado
Mensajes: 761
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Esta tarde he estado jugando con un motor de 12V al que alimentaba con 5V a pulsos PWM de frecuencia ultrasónica (al menos para mí, pero mi hijo pequeño a veces tenía otra opinión :lol: ). El comportamiento es algo mejor que a frecuencias muy bajas (dudo que se diga infrasónicas) pero con 5V no tenía apenas par de arranque. Por software, sin embargo, le programé un pequeño impulso largo al arrancar, solo al arrancar, para desatrancarlo, y la verdad es que he quedado convencido: lo mejor es que los pulsos para los motores sean ultracortos, del orden de 10-20 µs (aunque con 3 µs ya se movía el pobrecito).

Este resultado coincide aproximadamente con el que mostré hace poco referido a la tensión digital del DCC: en esta imagen se comprueba que un descodificador Lenz alimenta el motor de una Roco a base de pequeños pulsos de unos 20 µs más o menos.

Por tanto, la regulación del motor en el descodificador de locomotora yo la conseguiría con pulsos de unos 20 µs más períodos de pausa de longitud variable (0 a 255 µs sería una idea). Pero, eso sí, programando un único pulso extra largo (10 ms quizá) en el arranque por si es preciso desatrancar el motor parado.
Saludos

[Multimaus + GenLi-S88 + +z21f. + RocRail (MacOsX)]
H0 Renfe, sin catenaria


Desconectado
Mensajes: 46
Registrado: 15 Jul 2013 00:41

Buenas a todos!!! Que tal vamos??? Espero que disfrutando del veranito ;) . Por mi parte como ya comente esta es la época del año en la que más trabajo tengo y esto me deja muy poco tiempo libre para mi pequeño mundo H0, pero bueno hay que trabajar y este hobby no es precisamente barato jajjajaja. Ahora estoy más con decoración y esas cosas ya que se que si me pongo con la electrónica no voy a poder estar todo el tiempo que me gustaría con ella.
Norber: Todo lo que dices suena de maravilla y tienes muchisima razón con el tema de las interrupciones y de hacer el PWM "manual" Pero a día de hoy no he podido probar el código de German, aunque si que le he estado echando un ojo, y aunque no lo comprendo del todo, espero poder empezar con pruebas dentro de poco.
También tengo el probrema que nunca he tenido que usar interrupciones y no me queda muy claro como hacerlas, pero bueno ya aprenderé.

Una cosa que quería comentar a ver si estoy en lo cierto es como se tendría que hacer para poder programar las CV´s desde la central, para no tener que estar desmontando la locomotora cada vez que se quiera cambiar algún parámetro. Creo recordar que el código estaba en este foro en alguna parte :?: :?: o en la misma librería NMRAdcc.h (hablo de memoria) pero no me queda claro como se hace.

No os podéis imaginar las ganas que tengo de poder hacer el montaje y probarlo en una locomotora con todo ya montado, Para las pruebas quiero remotorizar una 2005T "Virgen del Carmen" de la antigua Ibertren... que además creo que esta en este foro como hacerlo (ya tengo los motores de CD y todo jejeje)

Bueno no aporto mucho en este post, pero tenia ganas de saludar a todos los que visitan este foro y en especial a Norber por su gran implicación en el tema y fuente de respuestas y preguntas ;)
Un saludo a todos!!! y espero que el verano haya ido bien!!!
Maqueta modular http://lamaquetade.infotronikblog.com/
Electrónica, digital y cacharreo http://www.infotronikblog.com/


Desconectado
Mensajes: 761
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Peyu escribió:
tengo el probrema que nunca he tenido que usar interrupciones y no me queda muy claro como hacerlas, pero bueno ya aprenderé.

- Usando el Timer0 canal A lo consigues manipulando directamente los registros TCCR0A, TCCR0B, OCR0A, TCNT0 y TIMSK0.
- Para el Timer0 canal B los nombres de los registros se obtienen de los anteriores cambiando la 'A' por la 'B'.
- Para el Timer1 y Timer2, canal A o canal B, los nombres siguen la misma regla.

Desde el entorno Arduino se puede escribir TCCR0A = B00001010 y vale para encender los bits 3 y 1 del registro TCCR0A (es un ejemplo).
Hay que leer el documento de especificaciones del micro controlador AVR328P que lleva cada Arduino para saber qué valor poner en cada registro de esos (en el fondo es igual que cuando manipulamos CVs).

Peyu escribió:
como se tendría que hacer para poder programar las CV´s desde la central

La respuesta puedes encontrarla tu mismo rastreando la librería que quieras usar hasta que localices cómo hace lo exigido por el estándar NMRA para el DCC. Dicho estándar está aquí Descarga del PDF
Saludos

[Multimaus + GenLi-S88 + +z21f. + RocRail (MacOsX)]
H0 Renfe, sin catenaria


Volver a Digital, Electricidad e Informática

Síguenos en Facebook Síguenos en Youtube Síguenos en Instagram Feed - Nuevos Temas
©2017   -   Información Legal