miércoles, 23 de agosto de 2017

Como usar el TL431 (muy facil)

En este artículo, no vamos a entrar en el funcionamiento interno de este IC, ni tampoco en sus características técnicas, puesto que para esos fines ya existe su hoja de datos correspondiente.

Más bien, lo que pretendo aquí es dejar constancia de como podemos utilizar este IC desde un punto de vista práctico, útil y sobre todo de una manera sencilla, con el objetivo de que cualquiera pueda utilizarlo.

Si has llegado hasta aquí, probablemente ya sabes que por internet hay mucha información sobre este IC, pero también bastante confusa o excesivamente técnica, sin mostrar tan siquiera un ejemplo de funcionamiento, o como calcular sus pasivos. Pues se acabó, a partir de hoy y después de leer este post, ya te quedará claro como utilizar el TL431 para obtener una tensión de referencia estable y precisa.

Vamos al grano y que mejor que empezar aclarando que el TL431 NO ES EXACTAMENTE UN ZENER como se empeñan en decir en muchos sitios, es verdad que se le conoce como el Zener Programable, y en muchos sitios verás que el símbolo utilizado para su representación es "similar" al de un diodo Zener, pero esto no significa que sea un diodo Zener.

Realmente se trata de un circuito integrado compuesto por varios transistores, resistencias, condensadores y diodos en su interior, el cual dispone a su vez de una referencia interna (Ej. 2,5 voltios)



Por lo tanto, fuera el mito o confusión de que el TL431 es un "Zener Programable", en realidad es un IC conocido como Referencia Programable de Precisión.

Y ahora vamos a lo que nos interesa de verdad, a utilizar el TL431 en un caso práctico con el fin de obtener una tensión de referencia precisa, la cual podremos utilizar posteriormente junto con otros circuitos, por ejemplo, para usarlo como referencia de tensión en un ADC, o en un Arduino, o para una fuente de alimentación etc.

Pero, ¿Cuál es la configuración necesaria que debemos utilizar en un TL431 para generar una tensión de referencia? Pues aquí la tenéis:



Como dije, no vamos a entrar en cuestiones muy técnicas, pero si que es preciso saber que la corriente de trabajo del TL431 debe ser mayor que 1mA y no debe exceder los 100mA y nos permitirá obtener una tensión de salida ajustable que puede ir desde Vref (Ej. 2.5V) hasta 36 voltios, estos datos podrían variar de unas versiones a otras o incluso de un fabricante a otro.

Vale, pues con estos datos en mente, vamos a ver como se obtienen los valores de las resistencias para la tensión de salida que nos interese, para este ejemplo supongamos que queremos obtener una tensión de salida de 5V, pues bien, con esta sencilla ecuación podremos calcular los valores de R necesarios:

Vout = (1 + R1/R2)· Vref

En realidad, la ecuación completa sería esta:

Vout = (1 + R1/R2)· Vref + (Iref * R1)

pero según el caso podemos obviar la segunda parte de la ecuación (+ Iref * R1), dado que se trata de un valor muy pequeño (2mA), aunque como digo, esto dependerá de la aplicación donde lo vayamos a utilizar.

De esta ecuación podemos observar que para una tensión de salida de 5V, tan solo debemos utilizar un par de resistencias de 1K en el divisor de tensión y listo!, así de simple, veamos:

Vout = (1 + R1/R2) · Vref
5V = (1 + R1/R2) · 2.5
1 = R1/R2
  

Como podemos ver, para que se cumpla la igualdad, es necesario que R1/R2 sea igual a 1, por lo tanto ambas resistencias deben ser iguales.

Otro ejemplo, para una tensión de referencia de 2,75V deberíamos utilizar un valor de R1 de 1K y R2 de 10K:

Vout = (1 + R1/R2) · Vref
2.75V = (1 + R1/R2) · 2.5
0.1 = R1/R2

En esta ocasión, como podemos observar, la relación que hay entre ambas resistencias del divisor de tensión es de 0.1

Una última anotación con respecto al circuito básico de generación de tensión de referencia, es que, como podemos apreciar existen en realidad tres resistencias, y hasta ahora, tan solo hemos calculado el valor de las que forman el divisor de tensión del pin VRef del TL431.

Entonces, ¿Qué pasa con la R que falta? ¿Qué valor debe tener? Pues bien sencillo, esta R es la encargada de proporcionar al menos una corriente mínima de 1mA en el cátodo del TL431 y por supuesto, impedir que se superen los 100mA de corriente máxima, como había comentado anteriormente. En los dos ejemplos que he expuesto y para una tensión de entrada (INPUT) de 12Voltios, un valor de R normalizado de 680 ohmios sería suficiente para estar dentro de estos límites (17mA aprox.). Como es lógico, esta corriente va en función del uso que queramos hacer de la tensión de referencia obtenida con el TL431.

Obviamente, esto no es más que la punta del iceberg, pero es la esencia de como utilizar el TL431 para obtener una tensión de referencia de precisión.

Próximamente un video con un caso de estudio práctico con el TL431, permaneced atentos.

domingo, 14 de mayo de 2017

Análisis del ransomware WannaCry

A estas alturas, ya todos los ciudadanos debemos saber casi por obligación qué es un Ransomware y más aún, en estos días (14 de Mayo de 2017) con el ataque masivo que se ha producido con el ransomware WannaCry. Un "juguete" más de los cyber-delincuentes que parece ser que han hecho uso del exploit EnternalBlue/DoublePulsar "fugado" de la NSA (National Security Agency US).


Básicamente se trata de un "malware" que codifica todos tus archivos importantes para pedirte una recompensa, por supuesto económica, a cambio de devolvértelos a su estado normal.


Así que, voy al grano con un pequeño y rápido análisis que acabo de hacer sobre este malware.






Partimos de una muestra capturada de dicho malware, la cual es un archivo binario (un ejecutable en sistemas operativos Windows). Un primer vistazo rápido para ver que tipo de archivo tenemos entre manos nos muestra lo siguiente:





Como podemos ver, se trata de un archivo PE de 32 bits, a priori programado en C++ y parece ser que utilizando el IDE de Microsoft Visual C++ 6.0. En este caso el malware viene como un archivo ejecutable con nombre "diskpart.exe" obviamente para intentar engañar a los técnicos haciéndoles creer que se trata de la herramienta del sistema que nos permite gestionar las particiones de un disco duro.

A continuación y como de costumbre echamos un vistazo a las secciones para ver si nos encontramos con las típicas de "casi" todo ejecutable de estas características o, por el contrario vemos alguna otra con nombre extraño que nos haga pensar que se trata de un binario compactado o empaquetado:


A priori nada raro que nos haga sospechar que estamos ante un empaquetado, aunque no tiene por que ser así. En cualquier caso, el siguiente paso que hago es echar un vistazo a la sección de datos y finalmente a la de recursos ".RSRC" la cual arroja una "grata" sorpresa. En los recursos tenemos una entrada con nombre "XIA":


Así que voy a ver que hay en ese recurso con un editor hexadecimal y en cuanto veo los caracteres de su comienzo, no hay duda, se trata de un archivo comprimido "ZIP", como vemos con su clásica cabecera "PK" comenzando en la dirección (OFFSET) previamente calculada (0x000100F0):


Ya os podéis imaginar cual es el siguiente paso que sigo, la adrenalina ya está a niveles casi descontrolados, así que a por ello ¿Qué habrá dentro de ese ZIP? Procedo en primer lugar a extraerlo del binario principal y guardarlo en un archivo, para su posterior descompresión.

¡Vaya! Resulta que se trata de un archivo comprimido en formato ZIP con contraseña. Bueno, ahora me tocará pegarme con el debugger para localizar la password, pensé en un primer momento. Pero, ¿y si antes miro las cadenas del binario principal?, para ver si los "inútiles" de los cyber-delincuentes no han sido del todo precavidos, o son unos novatillos. Pues voy a por ello y ¡zás! la suerte y la mediocridad de los cyber-delincuentes (menos mal) están de nuestro lado, como podemos ver en este pantallazo:


Ahí podemos ver una la cadena de texto, entre otras muchas, que nos abrirá las puertas al ZIP y por lo tanto nos permitirá descomprimirlo: 'WNcry@2ol7' Obviamente esto no salió a la primera, salió a la tercera ;)

Descomprimo el archivo ZIP para ve que me encuentro en su interior y esto es lo que hay:

Unos cuantos archivos interesantes con la extensión "WNRY", un par de archivos ejecutables con nombres: "TASKDL.EXE" y "TASKSE.EXE" que por buenas prácticas renombré a la extensión ".BIN" y finalmente una carpeta (directorio de toda la vida) llamada "MSG" y en cuyo interior nos encontramos con esta lista de archivos que hacen referencia a idiomas:


Todos como vemos también tienen esa curiosa extensión "WNRY" hemos de suponer que por abreviar el propio nombre del ransomware "WANNACRY". Por lo que se de analizar otros ransomware, posiblemente sean los pantallazos que muestran este tipo de malwares para pedirte la recompensa, pero eso ya lo veré.


Hasta este momento, parece obvio que el malware lo primero que va a hacer es extraer su recurso "XIA", descomprimirlo con la password mencionada y posiblemente comenzar a ejecutar uno de los dos archivos ".EXE". A partir de ahí comenzará muy probablemente a buscar archivos en el ordenador que cumplan ciertos requisitos, tipo documentos, archivos de proyectos de software conocido, etc. básicamente mirará sus extensiones (.DOC .PDF .JPG .PNG .C .CPP .TXT y un largo etc.)

Fijaros que curioso, un malware tan "dañino" que posiblemente no serviría PARA NADA, si todos nuestros archivos no tuvieran esas extensiones. Obviamente ya sacarían después alguna variante para atacar buscando en el contenido de los archivos para saber su tipo, pero de momento, en este caso no habría podido hacer NADA.

Y, finalmente, el malware intentará replicarse por la RED en la que se encuentre, aprovechándose de la vulnerabilidad en el servicio SMB, que dicho sea de paso se parcheó el 14 de Marzo del presente año 2017.

En fin, con más tiempo seguiría con el análisis, pero, el deber me llama y a estas alturas ya habrá muchas empresas/individuales haciendo un análisis más extenso del ransomware.

jueves, 11 de mayo de 2017

Parkinson Emma Project (Microsoft Build 2017)

Hoy me entero a través de la conferencia anual de desarrolladores Microsoft Build 2017 de una gran innovación que no se puede pasar por alto. Sin duda, esta es una de esas cosas que le hace a uno estar orgulloso de pertenecer a la especie humana y, sin duda nuevamente, esta otra de esas cosas que me hace sentir bien por pertenecer al mundo de las TI. Pues sí, así es, no todo lo que hacemos en el mundo de la tecnología busca destruir al ser humano (como algunos predicen), ni quitarle a la gente sus trabajos (como otros auguran), el problema en esos casos no es la tecnología, es el sistema político/económico que mueve el mundo.






La tecnología ha venido para ayudarnos, ha venido para facilitarnos la vida, ha venido para que no necesitemos trabajar tanto, y por más que le pese a muchos, la tecnología a venido para quedarse.

Más allá de esta apreciación personal, desde mi humilde blog no puedo menos que felicitar a Haiyan Zhang, la ingeniera que está detrás del "Proyecto EMMA" un wearable cuya finalidad es facilitar la vida a las personas que padecen Parkinson y para ello, ha estado junto a Emma Lawton, quien ha podido probar y experimentar con este wearable y ha juzgar por sus lágrimas, con unos resultados excelentes.






Pero, ¿Cómo lo hace? Hasta donde he podido ver, la idea, en apariencia sencilla, pero seguramente no tanto en la práctica, se vale de unos pequeños motores (LRA Coin style Motors), cuya finalidad es "contrarrestar" los "espasmos" producidos por el Parkinson en la zona de la muñeca, que es donde se coloca el wearable al estilo de un reloj de pulsera.






Para su investigación y desarrollo he podido "descubrir" que Haiyan Zhang, muy inteligentemente ha estado utilizando una placa de desarrollo de otra gran empresa como es Texas Instruments, concretamente creo que podría tratarse del modelo DRV2605LEVM-MD. Una placa de desarrollo producida por TI, la cual cuenta con 8 drivers del tipo DRV2605L, un microcontrolador del tipo MSP430F5510 con arquitectura RISC y de 16-bits, conexión USB para el PC, desde donde se podrá programar dicho microcontrolador, además de comunicarse con la placa de desarrollo, la posibilidad de controlar de manera independiente o sincronizada los 8 drivers mencionados, una librería de formas de onda, esta última entiendo que con el fin de controlar de una manera más suave y sincronizada el "vibrar" de los motores, etc.

Finalmente, todo esto se habrá convertido en una PCB diseñada a medida del wearable, el cual además parece contar con conexión bluetooth, con el fin, entre otras cosas de calibrar y adaptar el wearable a los distintos "patrones espasmódicos" de cada persona.


¡Congratulations Haiyan Zhang! A great project, a great research, a great innovation, thanks for that!

viernes, 5 de mayo de 2017

Transformada Rápida de Fourier (FFT) - 1

Una de las cosas (de tantas y tantas) que me ha llamado siempre la atención son los temas relacionados con DSP (Digital Signal Processing), el procesado digital de señales. Desde el diseño de filtros digitales (FIR - Finite Impulse Response e IIR - Infinite Impulse Response) hasta el análisis espectral, pasando por los conversores ADC y DAC, etc.


En esta ocasión quiero plasmar aquí para futuras consultas y para todo aquel al que le pueda venir bien, un pequeño estudio sobre una de las herramientas matemáticas más importantes en el procesado digital de señales, se trata de la Transformada de Fourier y más concretamente de la FFT (Transformada Rápida de Fourier).


La FFT es una herramienta o proceso matemático que nos permite transformar una señal en el dominio del tiempo al dominio de la frecuencia. Habitualmente solemos representar las señales en el dominio del tiempo, mostrando su amplitud y frecuencia en función del tiempo, pero en el caso de la transformada de Fourier de lo que se trata es de obtener los valores de frecuencia, amplitud o magnitud y fase de una señal "compleja" que puede estar compuesta por varias señales de distintas frecuencias y amplitudes, así como de una componente en continua (DC - Direct Current).


Supongamos que tenemos una señal compuesta por una componente en continua de 2 voltios, más una señal de 50Hz y 3.3 Voltios y otra de 75Hz 1.35Voltios, como la siguiente:


ph1 = pi*-30/180
ph2 = pi*90/180
S1 = 3.0 * cos(2*pi*50*t+ph1)
S2 = 1.5*cos(2*pi*75*t+ph2)
Signal = 2 + S1 + S2


cuya representación gráfica sería la siguiente:


Partiendo de esta base, podemos calcular la FFT por ejemplo utilizando MATLAB, de la siguiente manera:


Y = fft(Signal, N);     % Calculo de la FFT
YM = (abs(Y));         % Modulo o Magnitud de los N valores de la FFT
plot(YM(1:N));         % Grafica de la FFT


Lo que hacemos en primer lugar es calcular la FFT de la señal, lo cual dejará en el array 'Y' una lista de N valores de números complejos en la forma a+bi. Posteriormente, se calcula la magnitud o módulo de dichos valores y se almacena en un nuevo array 'YM' (sqrt(a^2 + b^2)) y finalmente mostramos la gráfica resultante, la cual podemos ver a continuación:




En esta gráfica ya podemos ver como en N=0 tenemos un pico con un valor de 512 y correspondería con una señal de frecuencia 0Hz, lo cual sabemos que se corresponde con la componente continua (DC) de la señal. El siguiente "pico" que observamos es el de la señal de 50 Hz con un módulo de 380 aprox. y por último otro pico que corresponde con la señal de 75Hz y un módulo de 190 aprox.


Llegados a este punto ya podemos ver como con la FFT estamos siendo capaces de obtener las distintas frecuencias que componen la señal "compleja" original.


En otro post, veremos como calcular la amplitud y la fase de ambas señales así como la tensión de la componente continua u offset de la señal original.