Programar como un electrónico

Programando hoy en día las llamadas librerías nos quitan un montón de trabajo, el mejor ejemplo de esto es programar en el Arduino IDE. En él ni siquiera te tienes que preocupar de importar las librerías más usadas, y puedes cambiar de placa sin tener que cambiar ni un poquito del código que has escrito, es casi magia.

Si no sabes de qué te estoy hablando, no pasa nada, se explicará según avance este hilo.

Pero hubo un tiempo, no muy lejano, en el que las cosas eran más complejas y se programaban con ensamblador. Este es el lenguaje de programación más puro (por describirlo de alguna forma) al que te vas a enfrentar cuando programes algo, aunque estoy seguro de que no lo tendrás que usar porque, como digo, es cosa del pasado. Sin embargo está bien, estuvo bien por mi parte aprender eso, porque da una visión mucho más cercana de lo que es en realidad un sistema de este tipo, un microcontrolador, un procesador, su memoria, por dónde van los datos... Que parece innecesario, pero luego hasta los ordenadores se manejan con esto en el fondo. Y eso es lo que quiero transmitir.

Como decía, el ensamblador es el lenguaje de programación más básico, lo que le transmites al programador con lo que escribes no es más que mover unos bits aquí y allá, hacer operaciones lógicas básicas, todo funciona leyendo y escribiendo registros.

¿Qué es un registro?

Bueno, no me voy a poner ahora a explicar qué tiene un ordenador por dentro (RAM, CPU, almacenamiento, buses de datos), pero sí extender esto a los microcontroladores.

En primer lugar, el programa se escribe en la memoria permanente del micro, ahora por lo general son memorias tipo FLASH, ahí se almacena en unos y ceros todo el programa y es el único lugar donde se mantienen los datos inalterados aunque se apague y se encienda. A no ser que el micro tenga otra memoria para datos del usuario, por ejemplo una EEPROM, que ahí también son permanentes, hasta que los borres.

En los micros la CPU es un concepto un poco abstracto, ya que está desperdigada por el resto de componentes. Se encarga de leer la memoria de programa, mover los datos y llevarlos a la unidad aritmético-lógica (ALU), el lugar donde se realizan operaciones matemáticas o lógicas muy simples, como sumar, multiplicar o hacer AND u OR.

Hay memoria RAM, está por ahí para guardar las variables mientras corre el programa, esas variables que se borran tras el apagado.

Hay vida más allá de estos tres componentes, hay lo que se llama registros. Un registro es como otra memoria que se borra al apagar el micro, y está hecha de la misma forma, de una serie de bits. Además tiene una dirección, a la que la CPU puede ir para leer o escribir los datos. Es igual que una memoria simple, pero los registros tienen funciones especiales. Vamos a ver un ejemplo.

El micro está leyendo el programa en la FLASH, y el programa le dice que escriba dos variables en la RAM, que son dos números en binario 110 (6) y 010 (2), y quiere que esas dos variables se sumen. El proceso no es nada simple.

En primer lugar va a coger uno de esos números y lo va a poner en un registro auxiliar (el registro W por ejemplo en el PIC), para ello tiene que pasar por la ALU sin realizar ninguna operación.

En el siguiente paso va a coger el otro número y lo va a poner en la ALU a la vez que el primer número, que estaba en el registro auxiliar, también entra en la ALU por el otro lado. La ALU tiene la instrucción de sumar y obtiene 1000 (8) que se guarda en, ojo cuidado, el registro auxiliar. Una vez terminada la operación hay un registro de estado (STATUS en el PIC), que tiene un bit que se pone a 1 cuando la ALU ha terminado. Se mira este bit y como ya lo hemos visto, hay que decirle que se ponga a 0 para que avise la próxima vez.

Ya sabemos que el resultado está preparado, ahora se puede mover a la RAM para guardar el resultado o incluso enviarlo a un registro de los periféricos, por ejemplo un pin de salida digital, si se envía al registro del puerto digital (p.ej. PORTB), esto haría que (con otras configuraciones previas) el pin correspondiente al bit número 4 de ese registro se pusiese en 1, y encendería... No sé, digamos que se enciende el LED, que siempre queda bonito.

Espero que con esto más o menos ya tengas una idea de qué es un registro. Es eso, un lugar en las direcciones de memoria del micro donde cambiamos bits para que ocurran ciertas cosas. Ya estamos un poquito más cerca de entender qué hace un código en C.

Direcciones

Ahora hablemos de las direcciones, hemos dicho que los registros son lugares en la memoria y que la CPU puede dirigirse a ellos mediante su dirección. Esta viene dada en las hojas de características del micro, es decir, te lo chiva el fabricante, y en numeración hexadecimal, lo que no lo hace muy amigable pero sí algo más compacto. Y tu se lo transmites al programa previamente, aunque aún no lo sepas.

Continuando con el ejemplo, en ensamblador tu no le dices al programa "manda lo que hay en el registro auxiliar al puerto b", lo que dices realmente es "mueve lo que hay en el registro auxiliar al registro con dirección 0x06". En este caso no tienes que decir la dirección del registro auxiliar porque ya está implícita en la función de ensamblador, MOVWF. Al fin y al cabo casi todo lo que se mueve pasa por ese registro, así se escribe menos. Vamos a escribir esta línea en ensamblador:

MOVWF 0x06

Nota: no todo lo que se mueve en todos los micros pasa por ese registro, pero sí la absoluta mayoría. Los más actuales tienen un módulo llamado DMA (direct memory access) que evita precisamente eso, pasando directamente de un registro a otro o a la memoria, con lo que la CPU puede usar el registro auxiliar para otra cosa mientras tanto.

Librerías

Pero menudo lío, ¿no? Pues llegan al rescate las librerías. ¿Qué hacen las librerías? Predefinir las cosas para que no lo tengas que hacer tu, y con esto me refiero a que, con la tecnología tan avanzada que tenemos, podemos hacer lo siguiente:

MOVWF portb

¿Qué acaba de hacer esta librería? Asignar un nombre bonito a una dirección de memoria, para que no tengamos que recordar los numeritos, ha hecho algo tan simple como esto:

portb equ 0x06

Hagamos otro ejemplo, esta vez vamos a poner a 1 un pin del puerto b directamente, pero sin alterar el estado del resto de los pines como hemos hecho (ups) accidentalmente antes. Para ello el ensamblador tiene que hacer:

  • Leer el puerto b y llevarlo al registro auxiliar W
  • Operar con un número binario cuyo resultado cambie el bit exacto que queremos sin alterar el resto
  • Limpiar el bit de STATUS que indica que ha terminado la operación
  • Llevar el resultado del registro W al registro del puerto b

¿Qué has hecho tu en un código C con librerías? Si estamos en Arduino IDE por ejemplo:

digitalWrite(pin4, HIGH)

Pero la ejecución es exactamente la misma, y esto ya viene hecho de antes por otra persona entonces no tienes que preocuparte.

"Bueno no es para tanto"

Pues no, no es para tanto si hablamos de un micro de 8 bits como es el PIC o los más comunes Atmel de Arduino, en estos la dirección de un registro se puede describir mediante un número hexadecimal de 2 dígitos, por ejemplo el 0x06 que hemos visto antes.

PERO. Luego vienen los micros de 32 bits. Los ordenadores son de entre 32 y 64 bits, recordemos. En estos casos la dirección del registro se tiene que escribir con 8 dígitos. 0x00000000. Ya va empeorando el asunto, pero esto no es nada.

En un micro de arquitectura ARM, la configuración de cada uno de los pines alcanza tal grado de complejidad (resistencias pullup/down, multiplexores, funciones analógicas, pwm, comunicación, velocidad, etc etc etc) que los registros empiezan a tener registros dentro. Y sin embargo, gracias a las librerías, logramos compactarlo todo a una serie de instrucciones muy simples y fáciles de recordar, por ejemplo lo que expliqué aquí.

¿Pero entonces se usa para algo el ensamblador? No, el ensamblador se ha sustituído completamente por las librerías, pero sí que usamos de vez en cuando un sucedáneo. Ya no nos gusta escribir la función movwf, sino que podemos hacer algo como:

portb = 0x08

Y en ocasiones, se da que no existen librerías para lo que quieres o simplemente lo vas a hacer más rápido tu directamente que ponerte a buscarlo, por lo que sí que puede pasar que escribas direcciones a mano...

0x06 = 0x08

Como esto cambiaba todo el puerto voy a hacer algo que sólo cambia el pin 4:

0x06.4 = 1

¿Entonces qué es eso de programar como un electrónico?

La programación que se hace en los ordenadores es muchísimas veces independiente del hardware, es decir, vas a hacerlo funcionar en cualquier ordenador, y no importan sus registros, direcciones, ni su configuración porque eso ya lo han implementado previamente los fabricantes de cada uno de los componentes (drivers) y se ha agrupado todo bajo el sistema operativo para hacerlo funcionar sin que te enteres.

En electrónica programamos microcontroladores muy dependientes del hardware y sus periféricos. Cuando hacemos una placa con un micro, le añadimos una señal de reloj, esta señal tiene que ser tratada previamente para que llegue a todos los periféricos correctamente, y esto se hace a nivel de registros (pero con librerías). Nosotros somos el fabricante. Cuando añadimos las entradas y salidas, configuramos cada uno de los pines para que haga exactamente su tarea. Se trata de saber dónde están y a dónde van los bits que quieres manejar, más que poner una función y dejar que el sistema operativo se preocupe por tí.

Estos métodos tienen ciertas ventajas, un mayor control sobre lo que estás haciendo y muchas veces, en vez de usar una librería que lo hace todo, puedes encender únicamente los periféricos que necesitas, con lo que ahorras energía. Otra ventaja es que durante el diseño tienes libertad de colocar las cosas como mejor te convenga, sin tener que seguir los esquemas del fabricante.

Espero que os haya parecido interesante

Potencia 2: Fuentes Conmutadas

Ahora nos vamos a centrar en conversores DC/DC que se encargan de elevar o bajar la tensión basándose en la conmutación de un semiconductor controlado. El circuito de control no es importante (aunque se verá un integrado y su funcionamiento para hacerse una idea).

La conmutación de dicho semiconductor es a una frecuencia alta, aunque no demasiado, todo tiene su punto. La frecuencia será fija y se podrá variar la tensión mediante PWM, es decir, regulando el ancho de pulso. Con ésto logramos un alto rendimiento (mayor a un 80%) y un filtro más pequeño.

Entre las fuentes conmutadas hay que distinguir entre las que tienen aislamiento y las que no.

Las aisladas tienen un transformador de impulsos cuyo secundario está aislado del primario, lo que da protección, menores ruidos y más dolores de cabeza. Empezamos por las no aisladas.

Fuentes conmutadas no aisladas

Convertidor Buck

Ésta fuente sólo es capaz de disminuir la tensión. Durante un instante de tiempo entre 0 y Delta*T, el semiconductor está en ON, y la corriente que pasa por la bobina es la misma que pasa por la carga. En el siguiente tramo de tiempo, hasta T, el semiconductor está en OFF, pero un diodo de libre circulación deja pasar la corriente que ha quedado cargada en la bobina hasta que ésta se descarga.

buck

Si la bobina es lo suficientemente "grande", podemos decir que la corriente que pasa por la carga es constante.

El condensador se encarga de eliminar el rizado de tensión. En un principio se considera que su capacidad es infinita, así que tendremos una tensión de salida Vo constante.

El análisis de éste circuito es bastante simple una vez te acostumbras. Nos fijamos en la bobina: entre 0 y delta*T tendremos que la tensión en ella (considerando ideal al semiconductor) es VL = Vi - Vo. Y entre delta*T y T, considerando que el diodo es ideal también, VL = -Vo.

\displaystyle V_{L}(t) = \left\lbrace\begin{array}{cc}V_{i}-V_{o}&\textup{si }0<t\leq\delta T\\ -V_{o}&\textup{si }\delta T<t\leq T\end{array}\right.

Sabemos de la introducción que la tensión media en la bobina es 0. Y la definición de la tensión media es 1/T por la integral de la tensión respecto del tiempo. Dicha tensión se divide en 2 tramos, y podemos hacer una integral por partes.

buck2

Sacamos la conclusión de que la salida depende de delta, que es siempre menor que 1, por lo tanto la tensión de salida siempre es menor a la de entrada. Delta es en % el ciclo de trabajo del semiconductor, que se puede controlar para obtener a la salida la tensión deseada. Además, muy eficientemente.

Y no digo que éste circuito no vaya a funcionar, pero no lo he probado y creo que es recomendable no hacerlo.

Ahora nos vamos a poner algo más "exquisitos": vamos a suponer que la bobina no es grande y por lo tanto la corriente que pasa por ella no es constante. Cuando el semiconductor esté en ON, la corriente irá subiendo, y cuando esté en OFF, irá bajando, lo que da lugar a un rizado de corriente.

Dicho rizado lo calculamos, irónicamente, mirando cuál es la tensión en la bobina.

buck3

buck4

Además, la corriente de rizado en la bobina tiene la gracia de ser simétrica, por lo que podemos sacar fácilmente un valor de tensión máxima para que no se nos funda el transistor:

buck5

Ahora vamos a rizar el rizo, y vamos a considerar que el condensador tampoco es ideal, de forma que, muy a nuestro pesar, la tensión de salida no va a ser continua, sino que va a tener un pequeño rizado de tensión.

Dicho rizado de tensión viene del rizado de corriente de la bobina, me explico: el condensador se traga el rizado de corriente de la bobina. Y aplicando otra vez los conocimientos de la introducción:

buck6

Y todavía podemos ponerlo un poquito más complicado, porque los condensadores reales tienen una propiedad denominada ESR que es una resistencia interna, lo que provocaría también un aumento en la tensión de rizado:

buck7

Por ello es conveniente mirar en las hojas del fabricante si la ESR es lo suficientemente baja como para que no nos haga un rizado enorme. En dichas hojas nos encontramos la tensión nominal, la capacidad, y distintas ESR a distintas frecuencias, de las que hay que seleccionar la más cercana a la frecuencia de conmutación de nuestro circuito.

ESR

Por suerte todo ésto no lo voy a repetir para cada fuente. Respirad tranquilos.

Fuente boost

Es la misma que la Buck pero girando los componentes a la izquierda. El funcionamiento de ésta fuente se basa en cargar la bobina mientras el semiconductor está ON, y luego descargarla de golpe sobre la carga cuando el semiconductor está en OFF.

boost

En éste caso tenemos que tener en cuenta que los potenciales en la inductancia son:

\displaystyle V_{L}(t) = \left\lbrace\begin{array}{cc}V_{i}&\textup{si }0<t\leq\delta T\\ V_{i}-V_{o}&\textup{si }\delta T<t\leq T\end{array}\right.

La tensión de salida se define por la expresión:

boost2

Como delta es menor que 1, la tensión de salida siempre es mayor que la de entrada. La corriente de rizado cambia:

boost3 boost4

Y también la tensión de rizado en el condensador:

boost5

Fuente buck-boost

Volvemos a girar los componentes hacia la izquierda, y en éste caso tenemos una combinación de las dos fuentes vistas anteriormente: con un delta menor a 0.5 disminuye la tensión y mayor a 0.5 la aumenta. Pero la tensión de salida es negativa (lo único que tenemos que hacer es cambiar la referencia)

bb

Cuando el semiconductor está ON, la corriente circula a través de la bobina, cargándola, y el condensador mantiene tensión y corriente. Cuando el semiconductor está en OFF, la bobina se descarga, se cierra el circuito por el diodo y se suman las corrientes.

Los potenciales en la bobina son:

\displaystyle V_{L}(t) = \left\lbrace\begin{array}{cc}V_{i}&\textup{si }0<t\leq\delta T\\-V_{o}&\textup{si }\delta T<t\leq T\end{array}\right.

Dando una tensión de salida:

bb2

En el próximo capítulo, las fuente conmutadas con aislamiento. Son transformadores sanos.

Potencia 1: Introducción

"Introducción" se llama el tema, e introducción le pongo como título. Más bien es una presentación extensa de 107 diapositivas, pero aquí estoy yo, otra vez, para resumirlo. Así que sin miedo, vamos a ponernos a ello:

¿Por qué electrónica de potencia? Otra vez más, nos surge la necesidad de transformar la energía eléctrica de la red de suministro eléctrico a otra de sus formas, AC o DC, que sea útil para el consumidor. De ésto ya hemos visto un poco en analógica, fuentes de alimentación, sin embargo, las fuentes lineales pueden no ser lo suficientemente potentes para la aplicación que buscamos, además de que queremos transformar la energía de distintas formas:

  • AC a AC: regulador de alterna.
  • DC a AC: Inversor.
  • AC a DC: Rectificador, controlado o no.
  • DC a DC: Troceador.

Por ahora lo que nos va a ocupar, ya que es la base del resto, es el troceador. Éste se basa en un "simple" circuito compuesto por un semiconductor de potencia trabajando en conmutación, cuya función es, precisamente, trocear la señal continua de entrada; y un filtro antes de la carga, que se encargue de dejar la señal cuadrada que queda tras el semiconductor lo más continua posible. El semiconductor está controlado por un circuito de disparo, que no se va a ver todavía, que muestrea la salida, la referencia y cambia o bien el periodo o bien el ancho de pulso de la señal.

Análisis de los circuitos

Pero ésto que me cuentas ¿será verdad?¿Cómo puede funcionar así? Pues hay gente que antes que nadie se preocupó de estudiar ésto y sacar fórmulas que nos ayudan a calcular lo que ocurre en los circuitos. Vamos a empezar por los componentes del filtro, los pasivos:

  • La bobina

Es un componente que se crea mediante un conductor enrollado sobre sí mismo. Normalmente, en potencia tendrán un núcleo de algún material ferromagnético que le otorga unas propiedades distintas al campo magnético que la bobina crea con el paso de corriente.

La corriente, es lo que le importa a las bobinas. Éstas van a intentar por todos sus medios posibles que la variación de corriente en un circuito sea la menor posible. Si tu intentas variar la corriente que pasa por una bobina, ésta va a responder mediante un aumento de tensión en el sentido contrario. Las fórmulas que expresan ésto son:

Potbob

Donde L es la inductancia, propiedad de cada bobina, y se mide en Henrios. La que más se utiliza es la fórmula de la tensión, y lo que nos indica, a simple vista, es que si se aplica un aumento de corriente muy grande, en muy poco tiempo, la tensión en la bobina aumenta. Por ésta razón, no podemos usar (aunque en la vida real no existan) pulsos 100% cuadrados, ya que la variación en t=0 hace la tensión infinita.

Otra propiedad de las bobinas es que si su L es muy grande, tiene mayor capacidad de evitar los cambios de corriente, por lo tanto podemos considerar, a efectos teóricos, que es una fuente de corriente constante.

Y otra cosa que nos interesa es sabe que, en régimen estacionario (la señal se ha estabilizado, las tensiones y corrientes empiezan y terminan en el mismo punto cada periodo) el valor medio de la tensión en extremos de la inductancia es nulo, VL(av)=0.

  • El condensador

Ya escribí sobre él en 2 ocasiones: condensadores I y condensadores II.

Sus fórmulas (ésta vez con diferenciales) son:

Potcon

Y la más utilizada es la segunda, que indica lo mismo pero al contrario: si aplicamos una variación de tensión, se produce una corriente en el condensador. Ésto va a hacer, igualmente, que no podamos tener señales puramente cuadradas, por la razón de que la corriente se haría infinita, cosa que no puede ser.

También de la misma forma, si la capacidad del condensador es muy grande, podemos considerar que las variaciones de tensión son muy pequeñas, y por lo tanto sería una fuente de tensión. Ésto hace que consideremos una tensión de salida constante a la hora de analizar algunos circuitos.

Por último, es el valor medio de la corriente por el condensador el que toma valor 0 en régimen estacionario.

  • Magnitudes periódicas

Son valores de magnitudes que ya hemos mencionado antes:

Potmag

No os asustéis con las integrales, porque luego son funciones periódicas totalmente que se pueden trocear en 2 partes y hacer la integral sin tablas ni historias.

  • Balance energético

Ahora vamos a hablar de potencias, igual que se hizo en electricidad, pero con unas fórmulas que sirven para todo tipo de corriente, no sólo AC.

Potene

  • Circuito R en conmutación

Basado sólo en una fuente, un semiconductor en conmutación y una resistencia como carga,  lo que obtendremos son formas puramente cuadradas de todas las magnitudes (excepto la de entrada, claro). En realidad no necesitaríamos éste apartado, ya que aplicando las fórmulas anteriores sale lo mismo.

PotR

Y ahí os presento a delta, el símbolo ése extraño. Es el ciclo de trabajo, en porcentaje. Más bien es la relación de tiempo activo (el semiconductor está en ON) con el tiempo total. Así, por ejemplo delta*T es el tiempo total que pasa corriente por el semiconductor.

  • Circuito R y L (muy alta) en conmutación

Aquí la cosa cambia porque la bobina tiene un transitorio, un tiempo de carga y descarga. Lo más destacable es que se considera que la corriente es constante.

PotRL

Semiconductores de potencia

Para trocear  la señal de entrada se utilizan semiconductores de potencia, cuyas características difieren un poco de los semiconductores normales. Para empezar, ya no vamos a considerar que la conmutación se produce instantáneamente, que no hay pérdidas de potencia o que la temperatura no nos importa, cada semiconductor va a tener unas características que irá demostrando conforme vaya desempeñando sus funciones:

  • Conmutación a ON

Cuando el semiconductor recibe la señal de activarse por su terminal correspondiente, éste tarda un poco en reaccionar, éste es el tiempo de retardo (delay, td), y las magnitudes no empiezan a cambiar hasta que éste se acaba. Una vez pasado éste pequeño tiempo, hay un tiempo de subida (rise, tr), tiempo que tarda la corriente que pasa por el semiconductor en alcanzar su máximo. Cuando hay una bobina en el circuito con un valor de inductancia muy grande, éste tiempo se distribuye en 2:

  1. tri: cuando pasa el tiempo de delay, la corriente empieza a aumentar, pero la tensión se mantiene
  2. tfv: una vez la corriente llega a su máximo, la tensión que cae en el semiconductor empieza a disminuir (voltage fall)
  • Conmutación a OFF

De la misma forma, cuando llega la señal de desactivar el semiconductor, tarda un tiempo en reaccionar que llamamos tiempo de almacenamiento (storage, ts, tdoff), y después hay un tiempo de bajada (fall, tf), tiempo que tarda la corriente en llegar a su mínimo. Con inductancia también se distribuye en 2:

  1. trv: al pasar el delay, la caída de tensión en el semiconductor empieza a aumentar, manteniendo la corriente constante.
  2. tfi: una vez la caída de tensión llega al máximo, la corriente empieza a caer hasta el mínimo.

Son éstos tiempos de subida y bajada los que hacen que la potencia en el momento de la conmutación aumente (porque se encuentran la corriente y la tensión máximas en un punto). Para evitar excesos de disipación se deben tener en cuenta éstas propiedades y ajustar un periodo y ciclo de trabajo adecuados:

PotT

 

Tipos de semiconductores de potencia

Sí, hay semiconductores más allá de los transistores, y es necesario saber cuál usar en su aplicación. Por ejemplo, un tiristor soportaría una potencia enorme (es el dispositivo con más capacidad de potencia), pero trabaja a frecuencias bajas, y un MOSFET trabajaría a frecuencias muy altas, pero la potencia que soporta no es ni parecida.

  • Diodo de potencia

Ya conocido, es un dispositivo unidireccional, sin control. Los de potencia son capaces de soportar mayor corriente por tener una sección más grande, y una tensión más elevada debido a la región de deriva añadida en su estructura interna. Lógicamente no tienen la misma forma:

  • Tiristores: SCR

Éste va a ser nuevo para nosotros: se trata de un diodo con una entrada de disparo, que se activa de una forma bastante sencilla aplicando tensión en la puerta, pero su bloqueo no lo es tanto, ya que es necesario el paso por 0 de la tensión en ánodo. En AC el bloqueo es natural en cada semiciclo, pero en DC es necesario un circuito para forzarlo.

Se recomienda retirar el pulso una vez disparado el dispositivo para evitar que disipe potencia por su terminal de activación, así como hacer el pulso compuesto por un tren de pulsos. Ésto ayudará a aumentar su vida útil.

  • Tiristores: TRIAC

Es igual que el SCR, pero como si hubieran puesto dos en antiparalelo, de forma que conduce bidireccionalmente.

  • BJT de potencia

Es igual que el BJT normal, sólo que soporta más corriente y tensión, aunque menos que un SCR. Se controla mediante corriente por la puerta. Al ser de potencia, se añaden dos nuevos conceptos:

  1. Área de trabajo seguro (SOA): es una gráfica que relaciona Ic y Vce, y mediante unas líneas delimita el área de trabajo en la que el transistor no se destruye. Los límites vienen dados por la corriente máxima de colector, la tensión Vce máxima, la potencia disipable, y la segunda ruptura, que es un efecto producido por haber puntos de mayor conducción en la estructura interna, y por lo tanto de mayor potencia y temperatura, que puede alcanzar su máximo valor y fundir el componente.
  2. Embalamiento térmico: es un efecto producido por el aumento de temperatura en el componente. Al aumentar la temperatura, es capaz de aumentar la corriente que pasa a través de él, y ésto hace que aumente la temperatura, aumente la corriente, aumente... Y así hasta que se destruye. Se puede evitar controlando la temperatura o mediante circuitos externos, como se hace en amplificadores de audio.
  • MOSFET de potencia

No es igual que el MOSFET normal, ya se verá después por qué. Lo que sí es igual es su alta impedancia de puerta. Los MOSFET de potencia tienen, en su mayoría, un diodo de protección entre drenador y surtidor, y son muy fáciles de poner en paralelo, ya que no necesitan resistencias para trabajar a la vez.

Tiene un SOA delimitado únicamente por la tensión Vds máxima, la corriente Id máxima y la temperatura máxima, Tjmax. Al contrario que el BJT, cuando aumenta la temperatura se reduce la corriente máxima que es capaz de conducir.

  • IGBT

Es un híbrido entre MOSFET y BJT. Tiene puerta a la entrada, con impedancia muy elevada (se dispara igual que el MOSFET de potencia), un SOA sin segunda ruptura, y unas características de tensión y corriente de conducción similares a las de un BJT. También es fácil ponerlos en paralelo.

Disparo de los semiconductores

Uno de los inconvenientes que se van a encontrar a la hora de diseñar el circuito de potencia, es que los semiconductores necesitan ser disparados aplicando el disparo entre puerta  y surtidor o puerta y cátodo, depende de cómo se llame. Para ello se deberán utilizar:

  • Transformadores de impulsos: transforman un impulso del primario al secundario, siguiendo también una relación dependiente de su número de espiras. El inconveniente es que no transmite continua. Lo bueno, elimina interferencias debidas a las altas frecuencias.
  • Optoacopladores: éstos sí que pueden transmitir continua, pero necesitan una fuente de alimentación auxiliar que esté aislada del circuito principal.

Además, los MOSFET de potencia tienen una forma distinta de dispararse, siguiendo una secuencia:

  1. Conmutación a ON: se aplica una corriente (sí, corriente) mayor que 0 en la puerta
  2. Mientras conduce, la corriente tiene que ser igual a 0
  3. Para conmutar a OFF se aplica una corriente menor que 0 (básicamente, se va a descargar el condensador parásito).

Caracterísiticas térmicas

Éstas van a depender de la serie de semiconductor, el tipo de encapsulado (TO92, TO126, TO220 y TO3 son los más comunes) e incluso afecta el fabricante, aunque intenten que las características sean aproximadamente las mismas.

Para hacer un cálculo aproximado de la temperatura, la potencia máxima, o la resistencia térmica del disipador que necesitamos, hacemos una analogía con la ley de ohm: la temperatura es la tensión (hay una diferencia, temperatura interna y externa), la potencia es la corriente y la resistencia térmica es la resistencia. Tj-Ta = P*Rt

¿Qué es la resistencia térmica? Es la proporción en la que va a aumentar la temperatura cuando se aplica una potencia. En las hojas de datos podemos encontrar varias resistencias térmicas que vienen con nuestro semiconductor:

  • Rjc: Resistencia junction-case, la junction es la estructura interna del semiconductor, a veces llamadas pastillas por su forma cuadrada, y case es lo que vemos, lo que cubre la pastilla.
  • Rca: Resistencia case-ambient, la resistencia térmica que hay entre la "cáscara" y el ambiente.

Encontraremos también la Tjmax, la temperatura máxima que puede alcanzar la pastilla, será la temperatura inicial. Para tener un estándar aproximado, la temperatura al otro extremo del "circuito", la temperatura ambiente, se suele considerar de 40ºC, pero se debe aumentar si se va a trabajar en un ambiente industrial especialmente cálido.

Así pues, ya hemos calculado la potencia que tiene que disipar el semiconductor, y necesitamos saber qué disipador le vamos a añadir para que no se queme. Lo que hacemos es poner las resistencias Rjc, Rcr (case-radiator) y Rra (radiator-ambient) en serie, las temperaturas a los extremos y que las atraviese la potencia. Calculamos entonces la Rra, y con éste dato consultamos las hojas de datos de los fabricantes de disipadores.

(Ésta imagen no incluye la Rcr, ésto puede ser debido al uso de pasta térmica [prácticamente obligatorio en todos los casos], cuya resistencia térmica es despreciable)

Y éste es el final de la "introducción". Si queréis más, lo próximo son fuentes conmutadas, y empezaremos a hablar de circuitos e integrados para el control, pero habrá que esperar a que yo termine el tema. ¡Buena suerte!.

Digital 1: Familias lógicas

Si habéis decidido saltaros la introducción y habéis llegado hasta aquí, supongo que ya sabréis de qué va la cosa. Para el resto, como dije en dicho apartado, una vez tenemos el circuito, cuando lo vamos a montar, es decir, a la hora de utilizarlos en la realidad, utilizamos un circuito integrado que tiene unas características propias. Dichas características son otra excusa para darnos dolor de cabeza e introducir éste tema.

En primer lugar veremos que hay dos familias muy fácilmente distinguibles de integrados: TTL y CMOS. Como su nombre indica, la CMOS utiliza transistores tecnología MOS (MOSFET), y la TTL utiliza transistores BJT. Y ésto las hace diferentes.

Vamos a ver la nomenclatura de dichos integrados:

  • 74: Estándar TTL
  • 40 o 140: Estándar CMOS
  • 74S: TTL Schottky
  • 74L: TTL baja potencia
  • 74LS: TTL baja potencia Schottky (Ésta es la más usada)
  • 74H: TTL alta velocidad
  • 74AS: TTL Schottky avanzada
  • 74C: CMOS compatible con el patillaje de las TTL
  • 74HC: CMOS alta velocidad (Más usada, actualmente más que la TTL)
  • 74HCT: CMOS alta velocidad compatible con patillaje y tensiones de TTL

La familia 74HCT es muy importante hoy en día para reemplazar antiguos TTL o como compatibilidad con otros integrados de ésta tecnología, ya que tienen la misma distribución de patillas y semejantes características.

Características de Entrada / Salida

Ahora vamos a ver cómo sería una puerta inversora de tecnología TTL por dentro:

Dnotttl

Como veis la entrada está conformada por un transistor puesto al revés, un transistor especial que se comporta como dos diodos, uno mirando hacia la base de Q2 y otro mirando hacia la entrada. Si ponemos la entrada a 0, la corriente va de VCC por la base hasta la entrada, drenando la corriente de la base de Q2 y poniéndolo en corte, de forma que a la salida tenemos un 1. Si ponemos la entrada a 1, la corriente no tiene otra que ir hacia la base de Q2 y polarizarlo en saturación, así que en la salida habrá un 0.

Por ésta cuestión es que si dejamos una patilla de entrada TTL al aire (no conectada a VCC, a tierra, a ningún sitio con referencia), se toma como si hubiese un 1, porque la corriente no puede fluir a través del diodo, que está ahí por protección.

Muy importante: patilla de entrada TTL al aire = 1. Si se recuerda ésta regla, se pueden simplificar bastante algunos diseños en el futuro.

Y ahora observemos una puerta inversora CMOS:

DnotcmosEs muy importante que la entrada de una puerta CMOS siempre esté conectada a algo, ya sea HIGH o LOW, si no, tendremos un estado indeterminado.

Aquí no es necesario resitencias ni nada... Bueno, ésto se debe al control por tensión de las puertas, supuestamente su impedancia de puerta es infinita, por lo tanto no habría corriente de entrada. Vale, ésto es falso, pero si comparamos la corriente de polarización entre una TTL y una CMOS (74LS04 y 74HC04):

DIttls

DIcmos

Vemos que la CMOS tiene una corriente enana en comparación a la TTL. De 0.1uA (25ºC) a entre 20 y 100uA, hay bastante.

Otra cosa que se puede ver en la datasheet es la corriente a entrada LOW, es decir, cuando pongamos la entrada a masa (0), va a salir una corriente desde dicha entrada que polariza al transistor, por éso se expresa en negativo:

DIttll

Vemos un máximo de 0.4 mA en la TTL ¿Y en la CMOS? La diferencia es tan poca que, si os fijáis, ya viene dada en la tabla de antes (la datasheet no especifica Input HIGH o Input LOW para CMOS, sólo Input Current).

También a la salida tenemos unas especificaciones diferentes de corriente:

DIottlDIocmos

Como veis la TTL es capaz de entregar más corriente, sin embargo, debido a la corriente que necesita de entrada, no se pueden poner tantas puertas TTL en paralelo detrás de otra como si se tratase de CMOS. A ésto lo llamamos cargabilidad y va en número de puertas. Dados éstos datos podríamos poner unas 50 TLL o unas 200 CMOS.

Como el diseño TTL que hemos visto al principio otorgaba todavía menos corriente, se inventaron la salida totem-pole, que se basa en otra configuración de transistores añadida para aumentar la corriente de salida. Ésta configuración, creo, viene dada ya en todos los integrados. Los CMOS no la necesitan, pero se usan si son HCT para adaptar mejor.

Dtotem

Pero ahora vamos a meternos en el tortuoso mundo de los niveles de entrada salida en tensión.

Éstos niveles también nos los da el fabricante y nos dicen a partir de qué tensión nos aseguran que tenemos un 1 o un 0 a la entrada o a la salida. Se pueden ver en forma de gráfico, para simplificarlo, empecemos con un 74LS04:

Dvttl

Dvttl2

Ésto nos indica que a la entrada, lo que nosotros controlamos, si ponemos un rango de tensión de 0 a 0.8 voltios, el integrado seguro que lo capta como un LOW. Y lo mismo ocurre si ponemos, una tensión entre 2 y 5 voltios, el integrado seguro lo capta como HIGH. ¿Y por qué lo remarco? Porque ésto en realidad es cosa de estadística ¿Habéis visto el rango entre 0.8 y 2 voltios, el inaceptable? Supongamos que hemos elegido un integrado cualquiera, ponemos un regulador de tensión variable a la entrada y observamos cómo lo capta el integrado. Llegamos hasta 0.8 y subimos, quizás hasta 1 voltio no pase nada, 1.2, 1.4 ... Quién sabe, el caso es que en un punto desconocido entre 0.8 y 2 voltios el integrado dejará de captar un 0 y captará un 1, pero no nos vamos a poner a mirar integrado por integrado cuál es éste punto (que además cambia por temperatura, humedad, calidad de alimentación, etc.), sino que hacemos una estadística y sacamos los márgenes. Es más un caso de asegurarse.

Y a la salida, cosa que no controlamos, obtendremos un rango de tensión que va entre 0 y 0.4 para un OUTPUT LOW y entre 2.4 y 5 voltios para un OUTPUT HIGH. Nos interesa éste dato para saber el margen de ruido, es decir, cuánto se puede mover la señal arriba o abajo para que el siguiente integrado de la cola lo capte bien y no se meta en zona "inaceptable". Es cosa de restar:

  • Margen de ruido HIGH: 2.4 - 2 V = 0.4V
  • Margen de ruido LOW 0.8-0.4 = 0.4V

Importante para líneas que cojan ruido del ambiente o aparatos cercanos.

Para la tecnología CMOS ocurre algo similar, pero los márgenes son bastante más amplios, además de incluir en las datasheet varios en condición de la alimentación, ya que un integrado CMOS puro (no HCT), puede ser alimentado en rangos muy distintos de tensión, límites recomendados por el fabricante que podrían llegar a estar entre 1.2 y 15 voltios.

Dvcmos

Así por ejemplo, con unos 5V de alimentación tendríamos HIGH con un input de 3.15 hasta Vcc y LOW entre 0 y 1.35V

En la salida tendríamos un HIGH con tensión mínima de 4.4V y un LOW con tensión máxima de 0.1V.

Otra cosa a tener en cuenta son los tiempos de retardo, es un pequeño tiempo que necesitan los transistores para polarizarse. Ésto hace que la reacción entre que se aplica una entrada y hay una salida no sea inmediata, sino que tarde un poco, aunque sean nanosegundos (del orden éste van las cosas). La tecnología TTL siempre ha sido más rápida que la CMOS, razón por la que se usa la familia HC (high speed CMOS), aunque hoy en día casi se podría decir lo contrario.

Control de entrada con botón y resistencia pull-up o pull-down

En muchos sistemas, sobre todo ya podéis haberlo visto en PICs y Arduinos, se utiliza un pequeño circuito de input con un botón y una resistencia, uno de ellos va a tierra y otro a alimentación. Si la resistencia va a masa, entonces la llamamos pull-down, y si va a alimentación es de pull-up. Entonces el circuito puede ir así:

Dsw1

Dsw2

Pero ojo, porque ésto nos trae otro dolor de cabeza. Tenemos que buscar el equilibrio entre resistencia-tensión LOW-corriente HIGH.

En el primer caso, hay que ponerle un valor a la resistencia de tal forma que cuando el interruptor esté abierto y queramos un LOW a la entrada, la corriente que se drena no aumente la tensión hasta V input HIGH y confunda al integrado. Por ejemplo en un TTL como el que ya hemos visto tendríamos un rango de resistencia con máximo de 0.8/0.0004 = 2k ohmios, pero no podemos ponerle el valor demasiado pequeño, porque entonces disiparía demasiada potencia, y el circuito consumiría muchísimo.

En el segundo caso, la resistencia debe ser lo suficientemente pequeña para dejar pasar la corriente mínima de polarización: 5/0.00002 = 250k ohmios máximo.

Entre otras maldades, podemos poner en la entrada un sensor de luz, basado en sólo una resistencia y un LDR, y calcular el divisor de tensión, dimensionando la resistencia para tener el margen necesario y que la puerta se active con cierto nivel de luz.

Existen puertas con histéresis que realmente, en la zona "inaceptable", no cambian hasta llegar a los niveles máximos y mínimos. Éstas se usan para señales con mucho ruido, distorsionadas o que entran con defectos.

Digital 0: Introducción

Bienvenidos al nuevo curso. Éste año tendréis por aquí más cosas nuevas como electrónica digital y electrónica de potencia. Otra vez más me voy a permitir el lujo de saltarme la gran mayor parte de la introducción, es decir, el porqué de las cosas, y vamos directos a aprender.

En digital, ya sabéis, las cosas funcionan mediante un estado binario: alto (1, o voltaje alto Vh, o H) y bajo (0, o voltaje bajo Vl, o L).

Lo que hacemos es combinar éstos estados que nos traen los sensores, botones o actuadores que ponemos a las entradas mediante puertas AND, OR y NOT para al final obtener el resultado que queramos. Sí, mediante éstas puertas se puede conseguir cualquier función lógica. Aunque en realidad la puerta más básica es la NOT seguida de la NAND, la más usada para simplificar.

¿Cómo conseguimos sacar ésas funciones lógicas?

En primer lugar, construiremos una tabla con todos los estados de las entradas posibles y la salida que se le atribuye a cada combinación. La tabla siempre tiene un número de filas correspondiente a una base 2, es decir, si tenemos 3 entradas, 2^3=8 filas. Ahí va el ejemplo:

Dtabla

Como podéis ver, se muestran todas las combinaciones posibles de A, B y C. Y sabemos en cada combinación cuál va a ser la salida que queremos. ¿Y ésto para qué? Bien, podéis sacar de ahí mismo la función mediante sumas de productos o productos de sumas. Ojo:

  • Mediante sumas de productos: lo que hacemos es fijarnos en los 1 de la salida, y para cada 1 hacemos el producto del estado de las entradas (normal si es 1 y negado si es 0), luego sumamos todos esos productos. De ésta forma sale enseguida que:

Dsp

  • Mediante productos de sumas: ésta vez nos fijamos en los 0 de la salida, y para cada 0 hacemos la suma del estado de las entradas (normal si es 0 y negado si es 1), el mundo al revés. Y luego se multiplican todas ésas sumas. No lo voy a hacer porque, he aquí la desventaja del método, es largo, y ya os lo podéis imaginar.

Vaya, ésto se hace demasiado largo, ahora teníamos 8 combinaciones, pero con 4 entradas serían 16 y con 5, 32, y ya mejor ni pensarlo. ¿Qué podemos hacer? Un mapa de Karnaugh. Es un método que, además de hacer la cosa más corta y visual, ya sale la función simplificada al máximo, sin añadir álgebra ni cosas extrañas que no queremos aprender. Aunque, éstos mapas siguen el código Gray, una forma de secuencia del sistema binario en el que las diferencias entre uno y el siguiente ocurren sólo en 1 de los dígitos: 00 01 11 10. Y el mapa se monta así:

DKarn

En éste caso no nos ha salido un mapa muy agraciado, y tenemos un 1 suelto por ahí sin pareja. Sí, la cosa se trata de emparejar unos, de dos en dos, o de 4, o de 8... Siempre en base 2. Y lo bonito es que, tal como dijeron los griegos y ratificaron Magallanes y Elcano sobre nuestro planeta, el mapa es esférico. Vamos a emparejar primero la tabla tal como está y luego la modifico un poco para ver cómo funciona:

DKarn2

En éste caso tendríamos dos grupos, uno de 2 y otro de 1 (es válido porque 2^0=1). Y la función se escribe: cojo un grupo, miro a los lados ¿El número de la entrada A cambia? Sí, pues lo quito, no, pues lo dejo. En éste caso no, y es 0, así que se incluye y negado. Tampoco cambia C y es 1 así que no negado. La B no entra porque cambia. Con el 1 que está sólo no nos queda más remedio que escribir las 3 entradas.

DKarn3

Ahora quizás no lo apreciáis bastante, pero os aseguro que se ha acortado bastante la cosa, sobre todo si vas a dibujar el circuito. Y ya ni digamos si vas a montarlo. Porque habéis pasado de usar unas 11 puertas a 6. Y se nota.

Ahora voy a hacerle un pequeño cambio a la tabla:

DKarn4Como veis, he añadido un 1 abajo a la derecha y los colores han cambiado. En realidad es una chapuza porque, como todos sabemos, azul + amarillo = verde. Lo que he hecho ha sido mantener la pareja de unos que ya teníamos antes, y emparejar a la vez el de abajo a la izquierda con el de abajo a la derecha. Porque cada extremo del mapa se une. Perdón por el mareo, pero lo vamos a ver de otra forma:

DKarn5

Ahora vamos a volver a nuestra tabla de antes, sin modificar. Hemos sacado la función, muy bien simplificada, con el mapa. Pero ahora queremos implementarla en un sistema real y, oh, necesitamos 3 circuitos integrados: 1 NOT, 1 AND y 1 OR. Y éso ocupa espacio y dinero. ¿Podemos hacer que funcione todo el circuito con sólo una compuerta lógica? ¡Sí! Normalmente entre NAND y NOR usamos la NAND, que se hace de la siguiente forma: negamos dos veces la función y aplicamos algo "mágico".

Dboole

De ésta forma, si aplicamos la doble negación:

DNand

Como veis, aún se quedarían las entradas A y C negadas en la entrada, al principio.¿Usaremos NOT igualmente? No, porque podéis usar una puerta NAND uniendo sus dos entradas, convirtiéndola en una y ahí enganchando la entrada para negarla.

¿Qué hemos hecho con ésto? Pues ahora necesitamos 5 puertas, pero sólo 2 integrados. En éste caso, debido al 1 que andaba solitario (sí, estaba para molestar) necesitaremos un circuito integrado que lleve 4 NAND 2-Input y otro que lleve 3 NAND 3-Input, para éste circuito:

Dcircuito

No es lo idóneo que haya una NAND de 3 entradas por ahí, pero bueno, nos ha salido rana el ejemplo, es lo que tiene no preparárselo antes de escribir.

Y ésto va a ser todo por hoy, es la base y el pan digital de cada día. Todos los días nos toca hacer alguno de éstos en clase.