viernes, 28 de abril de 2017

PWM74



Este mes de Abril, entre la Semana Santa, y unos pequeños problemas de espalda, que me han tenido un poco tieso, no he avanzado mucho en la construcción de la maqueta, pero si ha sido productivo en otro sentido.

En la fotografía de la cabecera, se ve un prototipo de que seguramente acabará siendo el controlador PWM74.  En algún momento (Un poco de sal), he comentado que renunciaba a intentar construir un controlador más de la serie PWM71, PWM72 y  PWM73 ya que el tema se me había ido complicando demasiado. a pesar de que en mis planes iniciales había un cuarto controlador que debía permitir realizar de forma automática paradas y arrancadas progresivas.

Sin embargo, hace unas semanas me vino a la cabeza la idea de que en realidad había una forma relativamente simple de realizar un controlador con esas características, y que de hecho, el problema es que había tomado un camino equivocado. incluso con el propio PWM73.

El tema es el siguiente:

Como ya he comentado alguna vez, todos mis controladores que tienen simulación de inercia  se basan en utilizar un potenciómetro digital, concretamente el DS1804 en sustitución del potenciómetro manual que se utiliza en los controladores PWM71 y PWM72 para variar el ancho de pulso de la señal PWM, y consecuentemente la velocidad de los trenes. La forma de mover este potenciómetro es hacerle llegar pulsos que cada uno de los cuales hacen subir o bajar una centésima parte de su recorrido, de manera que estando en cero, si le vamos enviado pulsos, al llegar a cien, estará en el máximo. Para que estos pulsos hagan subir o bajar el potenciómetro, hay otra entrada que según esté alta o baja manda el sentido del movimiento.

Los pulsos se generan con una frecuencia determinada, de manera que si se generan 100 pulsos por minuto, el potenciómetro subirá de cero a su máximo en un minuto, y si se generan 200 por minuto, el tiempo para subir de cero al máximo será de medio minuto. Como la posición del potenciómetro controla la velocidad del tren, la velocidad de éste pasará de cero a su velocidad máxima en un tiempo más pequeño cuanto mayor sea la frecuencia de los pulsos. Es decir acelerará o frenará más o menos rápidamente según esa frecuencia. En mis controladores el mando que llamamos "inercia" controla en realidad esa frecuencia, de modo que cuanto más subimos la inercia lo que en realidad se hace es que la frecuencia disminuya, con lo cual la aceleración o la frenada es más lenta.

El DS1804 tiene la amabilidad de ignorar los pulsos que le lleguen por encima o por debajo de los que le hacen subir al máximo o bajar al mínimo, de manera que cuando hacemos llegar pulsos hasta hacerle llegar al máximo y seguimos enviando pulsos, estos no hacen nada, y en cuanto llega un pulso para hacerle descender empieza a hacerlo. Y lo mismo si está en el mínimo, se ignoran los pulsos que le harían bajar. Esto evita tener que "contar" los pulsos. Simplemente para acelerar se envían pulsos hacia arriba y para decelerar hacia abajo, sin preocuparnos si sobrepasamos el máximo o el mínimo, con lo cual el circuito para hacer esto es bastante sencillo.

Pero aquí es donde surge el problema: Si yo quiero hacer un controlador que gestione de forma automática la parada progresiva de un tren, por ejemplo ante una señal roja, debo ser capaz de que cuando la señal se abra, el tren haga una arrancada progresiva, pero no hasta su velocidad máxima, sino justamente hasta la que llevaba al empezar a frenar ante la señal. Esto implica que el sistema tiene que saber cuál era la velocidad inicial del tren cuando empezó frenar, para luego detener la aceleración en esea velocidad, y esto implica que hay que saber en que punto estaba la posición del DS1804 cuando empezó la frenada.

Y aquí estaba mi error: me empeñé en contar los impulsos para llevar la cuenta, subiendo o bajando un contador digital con los mismos pulsos que actuaban sobre el DS1804. En teoría esto es correctísimo, pero tiene dos problemas: El primero es que los controladores digitales son cíclicos, de manera que si están en su valor más alto, y reciben un pulso más pasan a cero y viceversa. Asi que ya no podía generar pulsos despreocupadamente, sino evitar pasar de 99 hacia arriba y de cero hacia abajo. Esto resulta complicado. El segundo es que para restaurar la velocidad inicial después de una parada había que guardar en una memoria la cuenta de pulsos en ese momento y luego mediante un circuito comparador ir comprobando en qué momento se alcanza esa cuenta durante la aceleración. Todo es perfectamente lógico y posible pero bastante complicado de llevar a cabo.

El controlador PWM73 es un primer paso en este sentido. Tiene el contador de impulsos con toda la circuitería para evitar que suba de 99 y baje de 00, pero no guarda el dato en memoria ni puede hacer la comparación durante la aceleración. Lo que si tiene, es, que como tiene el contador de pulsos, el estado de ese contador se muestra en un display, que por lo tanto sirve como "tacómetro" para indicar la velocidad del tren.

Y digo "tacómetro" y no "velocímetro" porque la cifra mostrada no es la velocidad del tren sino realmente la cuenta de impulsos en cada momento.Por eso varía de 00 a 99 y su significado sería el porcentaje de velocidad en cada momento respecto de la velocidad máxima de la locomotora.

Y aquí viene la idea que me ha hecho considerar que contar pulsos no es realmente un buen camino. La idea es la siguiente: El problema es que del DS1804 que controla la velocidad, no puede sacarse información alguna ya que forma parte de un circuito oscilante que genera los pulsos, pero si pongo OTRO DS1804, justo en paralelo, de manera que reciba los mismos pulsos y por supuesto el mismo control de subida y bajada, garantizo que ambos circuitos están siempre sincronizados en la misma posición, y si se generan pulsos en exceso por arriba o por debajo, ambos circuitos los van a ignorar a la vez. Pero ahora de este segundo potenciómetro digital, puedo sacar exactamente su posición simplemente metiéndole una tensión fija en los extremos y midiendo la tensión en el terminal que hace de cursor. Es decir si le meto 5 V en los extremos, cuando el cursor esté por ejemplo al 70%, la tensión del cursor será el 70% de 5, o sea 3,5 V.  De manera que si en ese punto mido 3,5 V tengo la seguridad de que este segundo DS1804 está en la posición del 70% y por lo tanto el primero también lo estará, y por lo tanto los pulsos de la corriente PWM serán del 70% de anchura con lo que el tren se estará moviendo al 70% de su velocidad máxima. Y así con cualquier otra posición.

Ventajas: Dos fundamentales: Hacer esto así es mucho más fácil que mediante conteo de impulsos, y en segundo lugar tengo un valor de tensión, por lo tanto analógico, que es proporcional a la velocidad. . Desde luego si pongo un simple voltímetro que lea ese valor, ya tengo la forma de mostrar la velocidad de una forma también mucho más sencilla.

Pero es que además, con esto puedo conseguir que la indicación del voltímetro sea realmente la velocidad en kilómetros por hora. Por ejemplo con ese valor de 3,5, y un simple divisor de tensión formado por un potenciómetro y una resistencia puedo convertir esos 3,5 voltios en el valor que me interese. Por ejemplo si mi locomotora tiene una velocidad máxima de 120 Km/h, cuando esté yendo al 70% irá a 84 Km/ de manera que si ajusto el divisor de tensión para que la relación de la entrada y la salida sea 1 a 0,24  los 3,5 voltios se convertirán en 3.5 x 0,24 = 0,84. Asi que un voltímetro que lea esa salida y está ajustado para milivoltios mostrará "84" y por lo tanto se leerá que la locomotora viaja a 84 Km/h.

El video que aparece a continuación es una primera prueba de un controlador basado en este principio, aunque con una salvedad importante: El control de cuando la velocidad deja de aumentar o disminuir, no se hace por comparación con la velocidad inicial cuando se inició la parada, sino por un tiempo que es ajustable. De esta forma se pueden conseguir aceleraciones  escalonadas y también deceleraciones que no tienen porqué acabar en parada. Seguramente este será el sistema que saque como PWM74, porque resulta más flexible incluso que lo que sería hacerlo por velocidad objetivo.



Y aquí hay una cuestión importante: El controlador PWM73, basado en contadores de impulsos,  queda superado por esta nueva forma de control, y por lo tanto no tiene sentido mantenerlo como está. Tengo la intención de hacer una nueva versión con sus mismas característricas, pèro con control de velocidad real, tal como se ve en el video. Seguramente puede hacerse con esta técnica más completo y más barato que la versión actual. Asi que de momento he retirado el PWM73 de la venta en la tienda.


2 comentarios:

  1. Hola Ignacio,

    Muchas gracias de nuevo por compartir tus progresos. Espero que te en encuentres mejor de la espalda :) y puedas seguir viento en popa tanto con la maqueta como ilustrándonos en el blog.

    En relación al potenciómetro digital que usas, no sé si te puede ser de ayuda, o si ya lo habías considerado, pero he visto que en su datasheet tiene una memoria eeprom que memoriza la posición bajo unas ciertas condiciones de las entradas. En concreto, lo hace cuando se produce una transición de deselección del chip (terminal CS pasa de bajo a alto) estando el pulso (terminal INC) en alto. No sé la forma que tu circuito controla estas entradas, pero quizás sí que se podría tomar esa posición justo al inicio de una deceleración de parada, con una pequeña circuitería adicional que al dar la orden de iniciar la parada, fuerce estas condiciones.

    Luego indica que ese valor se vuelve a cargar como posición de salida (terminal W) cuando se realimenta el chip (Vcc pasa a alto), de manera que para poder usar la posición memorizada habría que hacer un circuito que pueda desconectar Vcc al iniciar la parada del tren y reconectar Vcc al reemprender la marcha (que controle Vcc alto/bajo en vez que Vcc sea fijo a la alimentación).

    Si funcionase, luego el tema de convertir la señal de control (0-99) a velocidad real (km/h) se podría solucionar de alguna otra manera, sin tener que emplear el otro chip, aunque habría que darle una vuelta :)

    Saludos!

    ResponderEliminar
    Respuestas
    1. Hola Gerard.

      Te agradezco mucho tu interés tanto por mi espalda como por mis chips!

      Tienes razón, el DS1804 puede guardar una posición en determinadas condiciones y luego volver a recuperarla, pero eso está pensado para que cuando este chip actúa sobre un dato de un aparato (por ejemplo el volumen de un amplificador) al apagar el aparato y volverlo a encender se recupere la misma posición que tenía al apagarlo. Pero como habrás podido ver esto se hace cuando Vcc pasa a bajo y se recupera cuando Vcc vuelve a alto. El tema es que yo no puedo apagar la alimentación del chip asi porque éste tiene que seguir funcionando mientras el tren va decelerando.

      Lo que si he investigado es que hay chips dobles, es decir con dos potenciómetros (supongo que pensados para aparatos estereo) y podría usarlos en lugar de dos chips iguales, pero la verdad es que los que he visto no suponen apenas un coste menor que dos sencillos, y prefiero tener un solo tipo que me valga para cualquier montaje.

      Un Saludo

      Eliminar

Gracias por expresar tus opiniones.

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