DCC Topics

Links

DCC Decoder español (for english click here)

Las características principales del decodificador son:

  • 28 and 128 Speed Steps
  • Programación "on the main" que usa el protocolo DirectMode CV programming de la NMRA (Programming on the main track)
  • AddressOnly mode (Phisical register addressing)
  • Operación en DC si se configura en la CV29 apropiadamente
  • Implementación de las siguientes variables
  1. CV1: Obviusly had to be implemented
  2. CV2 : Minimum motor voltage
  3. CV3: Acceleration time
  4. CV4: Desceleration time
  5. CV5: Maximum motor voltage
  6. CV6: Mid voltage configuration
  7. CV7: Manufacturers version.
  8. CV8: Manufacturers code (For this project is always 0xA5 because I don't have a NMRA DCC code)
  9. CV19 : Advanced Consist address
  10. CV29: Configuration variable

Uno de los retos más grandes de este proyecto fue desarrollar los decodificadores móviles que van dentro de cada locomotora. Varias veces quise desistir del proyecto pues después de muchas horas, días, incluso semanas, no podía encontrar los problemas que ocasionaban un mal funcionamiento del decodificador.

El problema más grande que tuve que sortear fue el ruido eléctrico que hacía que el microcontrolador se reseteara constantemente una vez empezaba a dar energía al motor. En las terminales del motor tenía unos picos de voltaje inversos cada vez que la señal del PWM hacía un cambio.

 

Para tratar de eliminar estos picos puse condensadores de todos los tipos y valores en paralelo al motor sin obtener resultados positivos. También traté con diodos Zener con un voltaje de zener ligeramente superior al voltaje DCC pero luego de quemar dos diodos no obtuve resultado satisfactorio.

La solución, aunque suene excesivamente básica y que es un tema clave en cualquier curso de electrónica digital, fue incrementar las conexiones a tierra. Lo que estaba sucediendo es que el protoboard donde monté el circuito del decodificador no tenía las suficientes conexiones directas de la tierra para distribuirlas por todo el circuito y esto causaba que el voltaje de tierra del microprocesador variara y por lo tanto lo bloqueaba o reseteaba. Esta solución la encontré después de 2 meses de haber luchado contra estos picos de corriente.

 

El circuito por etapas

El circuito de decodificador tiene 5 módulos básicos, aunque hay algunos decodificadores con algunos adicionales que describiré luego.

  1. Etapa de rectificación (AC - DC)
  2. Etapa de regulación de voltaje
  3. Etapa de procesamiento
  4. Etapa de potencia motor
  5. Etapa de Funciones (F0 rear, F0 front, F1, F2, etc)

1. La etapa de rectificación

Consiste de un puente rectificador de 4 diodos que reciben la señal DCC de la carrilera y la convierte en una señal de corriente directa para poder alimentar al circuito decodificador.

Al momento de diseñar los circuitos impresos, las conexiones de tierra y de +DCC deben ser lo suficientemente amplias para manejar la máxima corriente del motor en estado de STALL (bloqueado).

En esta etapa también es necesario ubicar un diodo Zener en la salida de +DCC V para proteger al circuito de un sobrevoltaje en la carrilera. En mi diseño no lo incluí.

Volver arriba

2. Etapa de regulación

La regulación de voltaje es vital para poder alimentar al microcontrolador con un voltaje constante de 5 voltios. Pueden existir diseños que trabajen con voltajes menores, como 3.3 voltios, pero no tiene mucho sentido pues esta aplicación no es necesario que sea portable.

Para mi diseño usé el circuito KA78L05A de Fairchild Semiconductor que viene en un encapsulado 8-SOP 150 milesimas de pulgada de ancho. Este circuito también viene en TO-92 y en SOT-89 que fue el que debí haber usado pero no lo ví hasta después de diseñado el circuito. Cada uno de estos reguladores es capaz de entregar 100 mA con 5 voltios constantes.

Es necesario instalar un condensador pequeño a la entrada (1 a 10 uf) y uno de mayor capacitancia en la salida de 5 voltios. Esto mantiene el voltaje del microprocesador por un tiempo incluso si el decodificador se desconecta de la carrilera debido a suciedad o aislamiento de la misma. El tiempo de duración tampoco es muy grande y se podrá calcular con las fórmulas para descarga de condensadores.

Volver arriba

Etapa de procesamiento

En el diseño del decodificador hay un punto que tiene prioridad ante todos y ese es el tamaño del circuito. Teniendo esa premisa en mente, el diseño inicial usaba un microcontrolador de 8 pines (12F689) el cual tiene 1KB de EEPROM, anque después se creció el software y ya no cabía en esa memoria.

Otro problema que tenía para usar un microcontrolador tan pequeño era que no podría usar un cristal externo al mismo tiempo que usar el módulo de programación ICSP (In Circuit Serial Programming) para poder programar el PIC una vez estuviera instalado en el circuito impreso. Era necesario usar cristal pues no pude diseñar un software tan veloz que fuera capaz de procesar las señales DCC que tienen intervalos de 55 us en el caso más rápido y al mismo tiempo manejar el PWM del motor. Si hubiera logrado que el software funcionara correctamente a 4MHz con las señales DCC hubiera podido usar estos microcontroladores mucho más pequeños que el que usé. Esta idea no la descarto y será la versión 3 del circuito.

En este diseño se usó el PIC16F628A que tiene 18 pines (16 pines I/O) con un cristal que corre a 20MHz, lo cual da tiempo suficiente para procesar todas las tareas de DCC, PWM, luces, etc.

Para detectar los cambios en la señal de DCC se usó el módulo de Capture/Compare, en vez de hacer pooling a un pin específico para detectar su estado y por lo tanto su cambio.

El módulo de Capture / Compare lo que hace es detectar con el valor del TMR1 cuando cambia el estado de RB3. Apenas se detecta un cambio en RB3, sea flanco de subida o flanco de bajada según sea el estado en el que se encuentre el PIC, se incrementará el TIMER1 hasta que vuelva a ocurrir un cambio rn RB3. En ese momento se determina si el tiempo corresponde a un '1' lógico (58 us) o a un '0' lógico (100 us) y se procede con el análisis.

Es necesario poner una resistencia un poco más baja que lo que otros circuitos en la red sugieren, entre la entrada DCC de la carrilera y el pin RB3. Esta resistencia es necesaria pues cuando la señal DCC es negativa con respecto a la tierra del decodificador, circulará corriente desde el PIC por un diodo de protección que tiene en todos sus puertos. La resistencia utilizada es de 4.7K pues con una de 10K no funcionó debido al voltaje tan alto que se quedaba ahí no permitía detectar el flanco de caída de la señal DCC.

Los pines RB6, RB7 y RA5 son usados por el módulo de ICSP para poder programar el microcontrolador una vez se encuentre en el circuito. esto permitirá actualizar los decodificadores una vez se descubra algún problema o se implementen mejoras. El único inconveniente de esta flexibilidad en programar los procesadores es el espacio en el circuito impreso que se requiere para poner un conector. Para futuros diseños y cuando el software esté mucho más maduro, se omitirá este conector para poder diseñar decodificadores más pequeños.

Volver arriba

Etapa de potencia motor

La etapa de potencia inicialmente se basó en el diseño que encontré en DCC Mobile Decoder, y usaba un apmplificador operacional dual para manejar la potencia del motor. El L272 producido por Fairchild Semiconductors y por STMicroelectronics parecia ser una solución efectiva para entregar 1 amperio al motor.

Las entradas a los OP AMP son las salidas de PWM del microcontrolador

PWM OUT 1
1
0
0
1
PWM OUT 2
0
1
0
1
Dirección del MOTOR
Derecha
Izquierda
Stop
Stop

Aunque la condición PWM 1 = 1 y PWM 2 = 1 no debería ser permitida, lo que hace en el motor es poner +DCC V en los dos terminales osea que no hay diferencia de potencial y por lo tanto no se moverá. En los circuitos de MOSFETS esta condición NO ES PERMITIDA pues causará la destrucción de los transistores.

El problema que tenía este circuito es que en los amplificadores operacionales había una caida de voltaje de aproximadamente 2 voltios y eso hacía correr más lento los trenes, además que recalentaba mucho el circuito del L272.

Fue por estas dos razones que decidí empezar a experimentar con MOSFET que tenían una menor pérdida de voltaje y podían manejar más corriente que el L272.

En Fairchild Semiconductor encontré los chips de MOSFET complementarios (N y P) que podían manejar hasta 7 amperios. No obstante decidí experimentar con los FDS8333C que pueden manejar hasta 3.4 amperios por la restricción que tiene el MOSFET canal P.

El resultado de estos experimentos fue excelente pues ya hasta con 2 motores funcionando a full potencia no tenía recalentamiento en los transistores. Ya la limitante era la corriente que puede manejar el puente de diodos de la etapa de rectificación. El circuito con MOSFET lo basé en un diseño que encontré en internet y funcionó perfecto. Hice algunos ajustes en los valores de las resistencias para que estas se acoplaran a las resistencias de montaje superficial SMT, que tenía.

En este circuito es muy importante que no estén al mismo tiempo encendidas PWM1 y PWM2 pues esto ocasionará un corto circuito que el microprocesador no es capaz de detectar.

Volver arriba

 

Etapa de funciones del decodificador

 

Volver arriba