Ya sabemos cómo controlar la velocidad y el sentido de la marcha de un tren con Arduino, ahora vamos a ver cómo aplicarlo a una maqueta analógica. El principal problema que se nos presenta es el de las transiciones entre cantones de vía alimentados con diferentes fuentes PWM. No voy a extenderme explicándolo ya que hay dos blogs que lo hacen estupendamente, mejor de lo que yo lo haría.
El primero es “AGP SchwarzWaldBahn 220” de A. G. Pino, dónde plantea el problema que ocurre cuando un tren toma la corriente de dos tramos de vía alimentados cada uno por una fuente PWM diferente:
El segundo es “Mi Maqueta Marklin Z”de Ignacio de la Fuente, donde explica una posible solución al problema planteado:
Bueno, pues yo propongo otra solución. Una solución que sólo funciona en teoría pero no en la práctica ya que el ancho de los pulsos PWM dependerá de la tolerancia de los componentes utilizados.
Mi idea es la de sincronizar un número n de generadores PWM alineados a la izquierda. ¿Y cómo se consigue esto? Pues muy sencillo, con una señal de reloj y n generadores de un único pulso de una duración menor o igual que la frecuencia de dicho reloj. Veamos la siguiente imagen:
El primero es “AGP SchwarzWaldBahn 220” de A. G. Pino, dónde plantea el problema que ocurre cuando un tren toma la corriente de dos tramos de vía alimentados cada uno por una fuente PWM diferente:
-
Transiciones (I): Pruebas con distintos reguladores.
Transiciones (II): Solución mediante conmutación de reguladores.
El segundo es “Mi Maqueta Marklin Z”de Ignacio de la Fuente, donde explica una posible solución al problema planteado:
-
PWM (y III): Solución bidireccional.
Cab Control: Varios reguladores que pueden asignarse a cualquier cantón aislado del circuito.
Bueno, pues yo propongo otra solución. Una solución que sólo funciona en teoría pero no en la práctica ya que el ancho de los pulsos PWM dependerá de la tolerancia de los componentes utilizados.
Mi idea es la de sincronizar un número n de generadores PWM alineados a la izquierda. ¿Y cómo se consigue esto? Pues muy sencillo, con una señal de reloj y n generadores de un único pulso de una duración menor o igual que la frecuencia de dicho reloj. Veamos la siguiente imagen:
We know how to control the speed and direction of a train with Arduino, now let's see how to apply it to an analog layout. The main issue we have to overcome are transitions between isolated blocks of track using different PWM sources. I will not dwell explaining it as there are two blogs that do this great, better than I would do (Sorry, these blogs are only in spanish)
The first is “AGP Schwarzwaldbahn 220” by A. G. Pino, where the problem happens when a train is powered from two different sections of track, each with a different PWM source:
The second one is “Mi Maqueta Marklin Z” by Ignacio de la Fuente, explaining a possible solution to the problem:
Well, I propose another solution. A solution which works only in theory but not in practice since the PWM pulse widths depend on the tolerances of the components used.
My idea is to synchronize n left-aligned PWM sources. And how is this achieved? Very simple, with a clock signal and n single pulse sources with a pulse duration less or equal than clock frequency.
Consider the following image:
The first is “AGP Schwarzwaldbahn 220” by A. G. Pino, where the problem happens when a train is powered from two different sections of track, each with a different PWM source:
-
Transitions (I): Tests with different controllers.
Transitions (II): Solution by switching regulators between blocks.
The second one is “Mi Maqueta Marklin Z” by Ignacio de la Fuente, explaining a possible solution to the problem:
-
PWM (and III): Bidirectional solution.
Cab Control: Several controllers can be assigned to any isolated block.
Well, I propose another solution. A solution which works only in theory but not in practice since the PWM pulse widths depend on the tolerances of the components used.
My idea is to synchronize n left-aligned PWM sources. And how is this achieved? Very simple, with a clock signal and n single pulse sources with a pulse duration less or equal than clock frequency.
Consider the following image:
Teoría de PWM síncrono
Synchronous PWM theory


Cada una de las fuentes de pulso genera un único pulso cada vez que el reloj pasa de estado alto a bajo. Si el reloj es constante, se generarán pulsos constantes. Para construir estos circuitos se emplea el circuito integrado 555 en configuración monoestable y para el reloj una salida PWM de Arduino con un valor de entre 240 y 250 (sobre 255). Para evitar disparos erróneos se coloca al final del reloj una resistencia pullup de 10K.
Each of the pulse sources produces a single pulse each time clock goes from high to low. If clock is constant, constant pulses are generated. To make these circuits we have to use 555 ic in monostable configuration and an Arduino PWM output for generating clock, with a PWM value of between 240 and 250 (about 255). To prevent erroneous triggering, a 10K pullup resistor must be placed at the end of the clock line.
555 monoestable
Monostable 555


La frecuencia que he elegido para el reloj es de 62500Hz, o lo que es lo mismo un pulso cada 16us. En Arduino UNO, por ejemplo, esta frecuencia sólo se puede conseguir con los pins 5 y 6 que son los que están conectados al TIMER0.
Para calcular los valores de los componentes en configuración monoestable se utiliza la siguiente función:
Para calcular los valores de los componentes en configuración monoestable se utiliza la siguiente función:
I've chosen 62500Hz as clock frequency, or a pulse every 16us. In Arduino UNO, for example, this frequency can only be achieved using pins 5 and 6, which are currently connected to TIMER0.
Use the following function in order to calculate the values for the components in monostable configuration:
Use the following function in order to calculate the values for the components in monostable configuration:
- T = 1.1 * R * C
Dónde los valores son en unidades:
-
T en segundos.
R en ohmios.
C en faradios.
Where the values are in units:
-
T in seconds.
R in ohms.
C in farads.
Para obtener 16us usando un potenciómetro de 10K tenemos que:
To obtain a 16us pulse using a 10K potentiometer we have:
-
16us = 1.1 * 10K * C
C = 16us / (1.1 * 10K)
C = 1.45e-9
C ~ 1500pF
Resolviendo T con C = 1500pF:
Solving T with C = 1500pF:
-
T = 1.1 * 10K * 1500pF
T = 0.0000165s
T = 16.5us
Obtenemos un tiempo superior al del reloj, por lo tanto el valor máximo que usaremos en el potenciómetro será:
We get a time higher than the clock time, therefore the maximum value that we will use in the pot will be:
-
R = T / (1.1 * C)
R = 16us / (1.1 * 1500pF)
R ~ 9K70
A partir del 97% del potenciómetro tendremos una señal PWM del 100%.
Para la primera prueba he utilizado 3 circuitos monoestables con resistencias fijas de 4K7 para obtener aproximadamente la mitad del ciclo PWM en las tres salidas:
Para la primera prueba he utilizado 3 circuitos monoestables con resistencias fijas de 4K7 para obtener aproximadamente la mitad del ciclo PWM en las tres salidas:
With a pot value upper than 97% we will have a 100% PWM signal.
For the first test I used three monostable circuit with 4K7 fixed resistors, to get about half of the PWM cycle at all three outputs:
For the first test I used three monostable circuit with 4K7 fixed resistors, to get about half of the PWM cycle at all three outputs:
Se puede observar como el inicio del pulso de las tres señales está perfectamente sincronizado, no ocurre lo mismo con el final, ya que ni las tres resistencias ni los tres condensadores son exactamente iguales entre sí. Las resistencias tienen una tolerancia de 5%, por lo tanto sus valores pueden variar entre 4465 y 4935 ohmios. Los condensadores que he utilizado también tienen una tolerancia del 5%, por lo tanto sus valores oscilan entre 1425 y 1757 picofaradios.
Para la segunda prueba he sustituido las resistencias fijas de 4K7 por un potenciómetro digital de 10K de Microchip, el MCP4131.
Para la segunda prueba he sustituido las resistencias fijas de 4K7 por un potenciómetro digital de 10K de Microchip, el MCP4131.
It can be seen that the pulse start of all three signals are perfectly synchronized, not so with the signal end, as neither the three resistors and three capacitors are exactly equal. The resistors have a tolerance of 5%, so their values may vary between 4465 and 4935 ohms. The capacitors I've used also have a tolerance of 5%, so their values range are between 1425 and 1757 pF.
For the second test I replaced the 4K7 fixed resistors by a digital 10K potentiometer from Microchip, the MCP4131.
For the second test I replaced the 4K7 fixed resistors by a digital 10K potentiometer from Microchip, the MCP4131.
Se puede apreciar una mayor diferencia en la salida ya que estos potenciómetros tienen una tolerancia del 20%.
Como ya he dicho antes, esta es una solución teórica, una solución que sólo funcionaría si los componentes tuviesen tolerancia 0%.
Para finalizar, me gustaría recomendar la lectura de los dos blogs a los que he hecho referencia al inicio de este artículo:
Como ya he dicho antes, esta es una solución teórica, una solución que sólo funcionaría si los componentes tuviesen tolerancia 0%.
Para finalizar, me gustaría recomendar la lectura de los dos blogs a los que he hecho referencia al inicio de este artículo:
We can see a major difference at the outputs, as these potentiometers have a tolerance of 20%.
As I said before, this is a theoretical solution, a solution that would only work if all of the components had a tolerance of 0%.
Finally, I'd recommend reading the two blogs to which I referred at the beginning of this article:
As I said before, this is a theoretical solution, a solution that would only work if all of the components had a tolerance of 0%.
Finally, I'd recommend reading the two blogs to which I referred at the beginning of this article:
Descargas:
Downloads:
TestFixRes.zip
TestMCP4131.zip
Enlaces:
Links:
Cantón ferroviario (ES): http://es.wikipedia.org/wiki/Cantón_ferroviario
Model RR blocks (EN): http://modeltrains.about.com/od/bmodelrailroadterms/g/block.htm
Circuito integrado 555 (ES): http://es.wikipedia.org/wiki/Circuito_integrado_555
555 integrated circuit (EN): http://en.wikipedia.org/wiki/555_IC
NE555 (EN): http://www.ti.com/lit/ds/symlink/ne555.pdf
MCP4131 (EN): http://ww1.microchip.com/downloads/en/DeviceDoc/22060b.pdf
AGP SchwarzWaldBahn 220 (ES): http://agp-schwarzwaldbahn.blogspot.com.es
-
Transiciones (I): http://agp-schwarzwaldbahn.blogspot.com.es/2009/03/transiciones.html
Transiciones (II): http://agp-schwarzwaldbahn.blogspot.com.es/2009/03/transiciones-ii.html
-
PWM (y III): http://mimaquetaz.blogspot.com.es/2011/11/pwm-y-iii.html
Cab Control: http://mimaquetaz.blogspot.com.es/2012/01/cab-control.html