ESTE BLOG COMENZÓ A PUBLICARSE EN 2008, POR LO TANTO MUCHOS DE LOS TEMAS HAN QUEDADO DESACTUALIZADOS U OBSOLETOS. LOS LECTORES QUE DESEEN UTILIZAR ALGUNO DE LOS ELEMENTOS AQUI DESCRITOS DEBERÏAN ASEGURARSE DE BUSCAR LAS REFERENCIAS MAS MODERNAS DE LOS TEMAS DE SU INTERÉS. EL BUSCADOR INCLUIDO SERÄ UNA AYUDA PARA ESA BÚSQUEDA

lunes, 9 de junio de 2014

PWM05I (I)


Hace unos meses, publiqué el artículo "Tormenta de ideas" en la que exponía una serie de ideas que me rondaban por la cabeza, respecto de las posibilidades que se abrían con la utilización de controladores de tipo PWM para generar la corriente de tracción de los trenes.

Sin embargo no debí ser muy claro, porque algunos comentarios que se hicieron, parecen demostrar que no se entendía demasiado lo que quería decir. Evidentemente, el título estaba bien puesto, porque una tormenta de ideas no es mas que una serie de relámpagos mentales que necesitan ser ordenados y concretados.

Desde entonces se han producido algunos hechos interesantes, entre ellos el éxito que está teniendo mi diseño de controlador PWM04 entre los aficionados, tanto en escala N como en escala Z.

Hoy quiero explicar con más detalle alguna de aquellas ideas, porque se han concretado en un nuevo desarrollo que he llamado PWM05I.

Para proceder con orden, habría que comenzar diciendo que la generación de la corriente pulsada PWM se hace en mis diseños de una forma muy simple. Un circuito tan sencillo como el de la figura siguiente genera una señal de tipo PWM con un circuito NE555 y unos pocos componentes más.


La forma de trabajar de este circuito consiste en que el condensador C1 se carga y se descarga alternativamente a través del potenciómetro RV1. La presencia de los diodos D3 y D4 obliga a que la carga se efectúe por una de las ramas del potenciómetro y la descarga por la otra rama, de modo con el cursor del potenciómetro centrado, el tiempo de carga y de descarga es igual, pero al desplazar el cursor hacemos que el tiempo de carga aumente en la misma medida que disminuye el de descarga. La tensión resultante se aplica como señal de disparo para el circuito timer Ne555 que produce en su salida una tensión alta o baja cuando la tensión de disparo está por encima o por debajo de una tensión umbral. Como consecuencia se produce una onda cuadrada que tiene la particularidad de que el tiempo en que la salida está alta o baja corresponde a los tiempos de carga y descarga del condensador y por lo tanto podemos variar la una respecto de la otra moviendo el cursor del potenciómetro a lo largo de su recorrido.

En resumen que la resistencia total del potenciómetro y la capacidad del condensador C1 definen la frecuencia de la señal PWM generada, y estos datos en principio son fijos, pero la situación del cursor en el potenciómetro consigue que los pulsos sean más o menos anchos, al ser relativamente más larga la parte alta de la onda respecto de la parte baja. (Véase el artículo: PWM (I) ). 

Con el potenciómetro de 100 K y el condensador de 330nF se genera una señal PWM de frecuencia 40 Hz.

Como decía, este circuito es muy simple, pero necesita precisamente un potenciómetro porque se basa en las propiedades de este elemento, cuya resistencia total es fija, pero que tiene un cursor que según donde lo situemos, por un lado presenta una resistencia mayor o menor, mientras que por el otro lado la resistencia es la complementaria hasta la total del potenciómetro. 

Así que mi diseño PWM04, lleva precisamente un potenciómetro con su correspondiente mando para que al variar el ancho de pulso de la corriente generada, los trenes circulen más o menos deprisa.

Esto está muy bien para hacer un controlador de tipo manual, (Como PWM04) en el que el usuario va a mover con sus dedos el mando del potenciómetro. Pero, ¿Qué pasa si queremos hacer un dispositivo que maneje automáticamente la velocidad de los trenes? por ejemplo para conseguir un controlador manejado desde un PC o un Arduíno, o algo similar. Estos elementos no tienen "deditos" asi que no pueden manejar el potenciómetro, y sustituir la función del potenciómetro por algún tipo de circuito electrónico es difícil, porque como decíamos el funcionamiento se basa en la diferencia de resistencias entre las dos ramas del potenciómetro, es decir, en una característica esencialmente analógica. No se trata de generar una tensión variable en un punto determinado,cosa  mucho más habitual en circuitos lógicos que manejan dispositivos analógicos.

Afortunadamente no soy el único friky que se ha enfrentado con este problema, y la industria lo ha solucionado. Existen unos circuitos integrados, denominados "potenciómetros digitales" que resuelven este tema. 

Antes de nada, quiero advertir que al aparecer en este artículo la palabra "digital" no estoy para nada hablando de sistemas digitales para control de trenes. Así que esto no tiene nada que ver con la posibilidad (que existe) de generar una señal DCC o mfx, o del protocolo que queramos,  desde un ordenador o incluso desde un Arduino. Aquí estoy hablando de trenes analógicos de corriente continua y por lo tanto las locomotoras no tienen ningún decoder ni nada parecido. La única aportación es que lo que llega por la vía, en lugar de ser una corriente continua uniforme es una corriente continua pulsada a la que llamamos PWM, y que no tiene nada que ver con la corriente digital que llega por las vías a una locomotora digital que llevará internamente su decoder. El hecho de que haya mencionado la posibilidad de manejar los controladores PWM con un PC o con un Arduino se refiere a la posibilidad de usar estos aparatos también para controlar los controladores analógicos PWM pero el tipo de control que se necesita desde estos sistemas para manejar un sistema digital o un sistema analógico con PWM es radicalmente distinto (y por cierto infinítamente más simple en el caso del PWM)

Me gustaría evitar la palabra digital, para evitar malos entendidos, pero es que estos elementos a los que voy a referirme se llaman precisamente "potenciómetros digitales" Concretamente el que yo he usado es el DS1804 que es un potenciómetro digital de 100 K de resistencia. total. Por supuesto, su aspecto difiere totalmente de un potenciómetro, porque aquí no hay ningún eje que mover. Realmente es un chip con el formato habitual para estos elementos. De hecho su aspecto exterior es idéntico al de un NE555. Los podemos ver en la fotografía de cabecera, en el centro la parte superior de la imagen, uno junto a otro.

Lo característico de estos elementos, es que entre sus ocho terminales, hay tres que se comportan exactamente como un potenciómetro. Concretamente en la hoja de datos del DS1804 que he apuntado antes vemos que los terminales H, L, y W se identifican como los terminales alto, bajo y cursor de un potenciómetro. En definitiva que al ser de 100 K, entre H y L tendremos 100 K y entre H y W una resistencia variable cuyo complemento a 100 K lo tendremos entre W y L. Por lo tanto si en nuestro circuito generador de pulsos PWM sustituimos el potenciómetro de 100 K por un DS1804 de 100 K el generador de pulsos sigue funcionando exactamente igual.

Y ¿Cómo movemos el cursor de este potenciómetro? Pues enviando pulsos por el pin 1. Cada vez que la tensión del terminal 1 pasa de un valor alto (5V) a cero, el cursor da un salto de 1/100 de posición. Esto es con 100 pulsos el cursor hace el recorrido completo del potenciómetro como si en uno manual diésemos toda la vuelta al eje. El sentido de este movimiento lo define el pin  2. Si está a un nivel alto el cursor sube, y si está aun nivel bajo el cursor baja. Tiene además un selector en el terminal 7 que debe estar a nivel bajo para que el chip funcione y tiene dos terminales más de alimentación. Y eso es todo. En la siguiente imagen vemos el circuito formado por el DS1804 y el NE555 y vemos como el DS ha sustituído al potenciómetro de la imagen anterior.


¿Y qué hemos conseguido con eso? Pues tener un sistema que puedo controlar de forma electrónica. En el esquema vemos que hay una entrada denominada INC (incremento) que recibe los pulsos que harán moverse el cursor, y una segunda entrada marcada como UP/DO que según su valor alto o bajo harán que el movimiento del cursor sea en un sentido o en otro, y por tanto que el tren que estemos manejando acelere o frene. Creo que cualquiera que haya manejado un Arduino sabe hacer que una salida oscile entre un valor alto (H) y uno bajo (L) y que otra salida presente permanentemente un valor H o L Bueno pues sencillamente conectando esas dos salidas a los puntos INC e UP/DO de este circuito ya estará manejando la velocidad de los trenes con un Arduino. Por algo afirmaba yo antes que esto era mucho más simple que pretender generar la señal de un protocolo digital.

 Adviértase que este circuito genera su propia señal PWM cuya frecuencia depende como decía de la capacidad del condesador C6 y de la resistencia del DS1804. Ya se que Arduino puede generar directamente señales PWM pero ajustar las frecuencias a valores bajos requiere programación y puede ser complicado. Aquí las generamos por hardware de una forma muy simple, dando lugar a que por ejemplo un único Arduino maneje un montón de controladores.

De hecho hay algo muy interesante: Si "abandonamos" el circuito, es decir, si tanto INC como UP/Do dejan de recibir señales, el cursor se mantiene en la posición en que estaba, y por lo tanto un tren que se estuviera moviendo manejado por este circuito se seguirá moviendo indefinidamente a la misma velocidad. O sea que el potenciómetro digital hace la labor de "Latch", manteniendo la orden recibida indefinidamente, por ejemplo, mientras el sistema de control atiende a otros circuitos. Asi que podremos hacer un sistema multiplexado con enorme facilidad. Obsérvese que si hubiera que disponer un circuito para conservar la posición del cursor que puede tomar 100 valores distintos, se necesitarían 7 bits

Asi que la primera consecuencia de todo esto, es que la utilización de controladores de tipo PWM para el manejo de los trenes de nuestras maquetas, no solo proporciona un control extraordinriamente preciso de la velocidad de los trenes, y muy especialmente a velocidades bajas, sino que además nos abre la posibilidad de manejar el movimiento de los trenes mediante un sistema automático, ya sea puramente electrónico o ya sea por software.

Incluso, para el manejo puramente manual, aparecen posibilidades muy interesantes: Antes comenté que el potenciómetro digital debe recibir pulsos por el pin 1 (INC); con cada pulso sube o baja un 1 por ciento de la variación total. Ahora bien, si los pulsos se suceden muy rápidamente el potenciómetro se moverá muy deprisa, con lo que el tren aumentará de velocidad muy rápidamente. Por el contrario, si los pulsos llegan con mayor lentitud, el aumento (o disminución) de velocidad será más lento. La velocidad con que cambia la velocidad de un objeto, el tren en este caso, se llama en física aceleración, así que si hacemos que los pulsos se sucedan mas o menos rápidamente, o sea, si aumentamos o disminuímos la frecuencia de los pulsos que llegan por INC, estaremos consiguiendo que la acelaración de los trenes sea mayor o menor. En los trenes reales, la aceleración con que se mueven depende de la relación entre la potencia de los motores y la masa total del tren. En física se suele llamar inercia o fuerza de inercia a la que se opone al aumento (o disminución) de la velocidad de un vehículo ( y que Newton nos dejó dicho que su valor es igual al producto de la masa por la aceleración) , así que los controladores para maquetas que son capaces de producir una aceleración que imita a la de los trenes reales se suele decir que tienen "simulación de inercia" En trenes digitales, los decoders se pueden programar para producir una simulación de inercia más o menos eficaz, pero en analógicos hay muy pocos sistemas comerciales que tengan esa cualidad (La marca Gaugemaster tiene alguno)

Pensando en esto me di cuenta de que lo tenía facilísimo: Como ya necesitaba algún sistema para producir pulsos que llevar a la entrada INC del potenciómetro digital, pensé de nuevo en utilizar un circuito NE555, aunque con una configuración un poco distinta, ya que no se trata de producir pulsos de frecuencia constante y ancho variable como son los PWM, sino de producir pulsos de ancho constante y frecuencia variable. No hay más que mirar la datasheet del NE555 para ver como se hace esto. El circuito es así de simple:


Como puede verse, es parecido a la configuración para generar PWM pero más sencillo, ya que ni siquiera hay diodos. El condensador, ahora llamado C4 es mayor (22 uF), ya que ahora se pretende una frecuencia algo más baja que los 40 Hz del PWM. Por ejemplo si ajustamos el circuito para una frecuencia de 10 Hz, se producirán 10 pulsos por segundo, o sea que para mover los 100 pasos del potenciómetro hacen falta 10 segundos. En definitiva que el tren pasará de cero a su velocidad máxima en 10 segundos. Para un tren real, eso es una barbaridad, pero en una maqueta de trenes se ve bastante real.  

Lo bueno del caso es que variando el potenciómetro (Aquí actuando simplemente como una resistencia variable) esta frecuencia varía en un amplio margen, con lo que podemos ajustar el efecto de simulación de inercia al valor que nos guste más.

La salida (pin 9) de este circuito se llama DWNINC porque es la que se lleva a INC cuando el tren está bajando  la velocidad.

Hay otro circuito idéntico que produce pulsos que pueden ajustarse a frecuencia distinta, para aumentar la velocidad (UPINC)

Con esto, de una forma relativamente simple consigo un controlador PWM con simulador de inercia ajustable por separado para aceleración o frenado. Asi que he decidido llamar a este nuevo diseño PWM05I porque evidentemente es una evolución del PWM04 pero con esa "I" de inercia.

Y queda una cosa: Cuando diseñé el controlador PWM04 utilicé por primera vez un chip controlador de motor L293D, en sustitución de los transistores Darlington que utilizaba en diseños anteriores, pero no lo aproveché totalmente, ya que el control de paro/marcha que se puede hacer con la señal enable de este controlador, no la usaba, y tampoco usaba la posibilidad de cambiar el sentido de giro del motor, de manera que el controlador generaba constantemente la salida en un único sentido, y si quería detener el tren o invertir la marcha, había un conmutador manual.

Pero estamos en las mismas: un conmutador manual, requiere unos deditos para ser accionado, con lo cual no podría hacerse un sistema controlado electrónica o informáticamente. Se trataba únicamente de poner a trabajar las posibilidades del L293D, asi que simplemente había que generar los niveles L o H que aplicados a las dos entradas IN1 e IN2 y la Enable de este chip consiguen el movimiento en uno u otro sentido y el paro instantáneo.


Como se ve en el esquema, se usan los dos canales del L293D en paralelo, algo que ya se hacía en el PWM04. De esta forma se dobla la capacidad de potencia del circuito. lo que en teoría le permitiría resistir picos de corriente de 2,4 Amperios

Sin embargo quería mantener la característica de que el controlador siguiera manteniendo la marcha de un tren sin recibir ninguna señal. El potenciómetro digital lo hace respecto de la velocidad, pero el controlador de motor necesita recibir constantemente la señal de sentido de movimiento y de marcha o paro. Solución: poner un circuito Latch (un 4043) que mantiene indefinidamente las salidas al nivel alto o bajo, según la última entrada recibida. Afortunadamente para mantener la situación de IN1 IN2 y ENABLE solo necesito tres bits, asi que el 4043 que tiene cuatro, todavía tiene uno de más.

Al final hay además un par de circuitos lógicos 74HC126 que actúan un poco como un programa cableado, par conseguir que pulsando una tecla para que el tren se mueva hacia delante se activen las entradas del L293D en posición hacia delante y se active el circuito, que pulsando otra se pongan en reversa etc, que al pulsar la tecla de STOP se desactive el circuito etc.  

Todo esto da lugar a la parte lógica del PWM05I cuyo esquema es el siguiente:


A la izquierda vemos las cinco señales de mando que realmente requiere el circuito Son UP (aumenta la velocidad) DOWN (disminuye la velocidad) FWRD (activa el sentido hacia delante) REVR (activa el sentido hacia atrás) y STOP (que inhibe el contralador, parando el motor) Con estas cinco señales se maneja todo el circuito y entre el 4043 y los dos 74HC126 se crean las señales que actúan sobre el potenciómetro digital y sobre el controlador de motor.

Estas cinco señales responden al standard de los circuitos electrónicos en modo "active hight" es decir una tensión positiva de 5 V (H) activa la función, y un nivel de cero voltios (L) la desactiva. Es por tanto perfectamente compatible con cualquier sistema electrónico de control, y podremos manejar desde un sistema externo las funciones de acelerar, frenar, marchar hacia delante, hacia atrás o parar, es decir el control completo de los trenes.

Naturalmente el "sistema externo" más sencillo es un teclado, y eso es lo que lleva este prototipo del controlador PWM05I. La caja que lo contiene, incluye en la tapa cinco teclas, formadas con cinco pulsadores de membrana que simplemente conectan la tensión de 5 V a cada una de las cinco entradas de control. El montaje completo tiene este aspecto:


Y realmente ¡eso es todo! (nada menos) pero al final se obtiene un mando compacto y manejable con todo el sistema en su interior. 

Y.... ¿funciona?......

Bueno, como este artículo se está extendiendo mucho, voy a dejar a los lectores con la intriga. Como en las novelas por entregas, la solución en el próximo capitulo.

1 comentario:

  1. Sencillamente genial!!
    Llevo tiempo diseñando mis propios circuitos, pero no he llegado a este nivel de sencillez, limpieza y seguridad en el funcionamiento.
    Felicidades.
    Fernando.

    No se mucho de informatica asi que te enviare un correo, para identificarme

    ResponderEliminar

Gracias por expresar tus opiniones.

Los comentarios aparecerán en el blog normalmente en unos pocos segundos