Mostrando entradas con la etiqueta STM32. Mostrar todas las entradas
Mostrando entradas con la etiqueta STM32. Mostrar todas las entradas

lunes, 12 de febrero de 2018

Primera version de SLab

Esta es la primera versión de Small Lab (SLab), un proyecto en el que he estado trabajando durante bastante tiempo.


SLab es un proyecto para desarrollar una herramienta de aprendizaje práctico de electrónica bajo un presupuesto mínimo. La idea es proporcionar, a cualquiera que lo desee, un sistema capaz de inyectar excitaciones en un circuito y obtener mediciones de maner que se a fácil entender, de manera práctica, como operan los circuitos.

Bajo costo significa un costo realmente bajo, menos de 40 € según mis cálculos aproximados para un sistema completo con instrumentación y los componentes para construir los circuitos.

El sistema completo (y algunos avisos)

El sistema Slab está compuesto de la cadena de elementos mostrada en la figura siguiente:


Primero tenemos nuestro circuito bajo prueba. Este es un circuito que nos permite aprender algo sobre electrónica. Luego tenemos una placa de hardware que puede inyectar señales en el circuito y medir el voltaje en algunos de sus nodos. La placa se conecta a un PC donde algunos módulos en lenguaje Python interactúan con la placa enviando comandos a través de una conexión COM serie implementada en USB. El usuario final se halla en el extremo derecho de la cadena enviando comandos de alto nivel para que se ejecuten en el sistema SLab. Esos comandos, si es necesario, se pueden escribir en scripts Python para facilitar las tareas repetitivas. También es posible crear bibliotecas propias que se conecten con las de SLab para ampliar las capacidades del sistema.

Obsérvese la zona de aislamiento roja en el dibujo anterior. Se supone que solo se debe conectar el circuito bajo prueba a la placa de hardware. Ninguna conexión eléctrica, excepto el cable USB, deberá salir de la zona de protección. El circuito también será alimentado solo por la placa de hardware. Operando de esta manera el sistema es bastante seguro.

Si se desea una capa adicional de protección, o no se está seguro de las propias acciones, es posible utilizar un cable USB aislado junto con un HUB con alimentación para conectarse a la placa de harware como en la figura siguiente. De esa forma, es todavía posible podría dañar la placa de hardware o el HUB, pero el PC estará bastante más seguro.

En cualquier caso, siempre se aplica el siguiente descargo de responsabilidad:

El autor de este documento no se hace responsable por ningún daño a usted, sus propiedades o equipos debido al uso del sistema SLab. Esto es cierto tanto si se están siguiendo los procedimientos indicados como si no.
 

El hardware

Para mantener los costes lo más bajos posible, el principal elemento de hardware del sistema es una placa de demostración de un microcontrolador. La placa elegida para esta primera versión es la placa STM32 Nucleo64 F303RE.

Placa Nucleo64 F303RE

¿Por qué esta placa? Bueno, es barata, a dia de hoy solo 9 € en Farnell y es bastante capaz. Incluye el microcontrolador STM32F303RE que tiene dos DACs de 12 bits, cuatro ADCs de 12 bits, 512 KB de flash y 80 KB de SRAM. También soporta MBED. Ello significa que instalar un firmware binario es tan simplemente arrastrarlo sobre la unidad de almacenamiento que aparece en el PC cuando se conecta la placa. Además, la comunicación USB incluye un enlace Serie sobre USB que instala el controlador tan pronto como se conecta la placa a un PC. Finalmente, como MBED es tan fácil de usar, y la placa es mucho más potente que la mayoría de los Arduinos, tener esta placa también te permite jugar con el desarrollo de firmware en tu tiempo libre si así lo deseas.

Usando el software adecuado en la placa, se le puede hacer que envíe señales desde los DAC y lea voltages con las entradas ADC. El problema es que generalmente es necesario añadir algo de buffering para evitar los efectos de carga cuando se conectan ADCs y DACs a un circuito bajo test (CUT).
La siguiente figura muestra una solución adecuada basada en seguidores de tensión, basados en amplificadores operacionales, para todas las salidas DAC y entradas ADC. Observese que también se agrega un LED y una resistencia para poder ver que el CUT está correctamente alimentado.

Drivers para los ADC y DAC
Obsérvese que DAC2, asociado al pin D13, tiene un amplificador no inversor en lugar de un seguidor. Esto es necesario porque, en la placa F303RE, el pin D13 también está conectada a un LED, lo que nos impide utilizar todo el rango de la DAC y estamos limitados a la mitad inferior del rango completo. Esto no es problema, sin embargo, como veremos más adelante.

Es posible implementar el circuito con los drivers en una placa protoboard, sin soldadura, y queda suficiente espacio para un circuito a medir. La siguiente figura muestra la placa F303RE, los drivers y un circuito de prueba compuesto por una resistencia y un diodo.


Si tienes la capacidad de soldar, puedes implementar el circuito de los drivers en un shield. La siguiente figura muestra los controladores en una placa diseñada para Arduino. Esta es un abuena solución porque la placa F303RE tiene conectores compatibles con Arduino.

Driver shield
Si tienes la opción de construir tus propios PCB, se puede crear un shield mejor. La siguiente figura muestra la "Long Board". Incluye la placa F303RE, un shield basado en un PCB fresado que incluye los drivers, una placa de protoboard para el circuito de prueba y un a lámina de aluminio para unirlo todo. Un pequeño laboratorio de electrónica en un sólo 28 x 8 cm. Los detalles están en la documentación de SLab.
 
Long Board

Respecto a la documentación del proyecto. Actualmente está toda en inglés. Ello es debido a que mi tiempo es limitado e intento llegar al máximo de gente. Si tengo tiempo miraré de generarla también en castellano.

La siguiente imagen muestra el diagrama del shield con sus 17 pines macho. Incluye dos pines de masa (GND), un pin de alimentación Vdd de 3,3 V, las dos salidas DAC con búfer, las cuatro entradas ADC con búfer y ocho líneas de E/S digitales. Todo ello se puede controlar desde código escrito en Python.

Dependiendo de los recursos y capacidades disponibles, se puede usar cualquiera de las opciones de hardware para unir la placa MCU de demostración, los controladores y el espacio para montar un circuito a prueba. En cualquier caso, al final, tendrás los elementos que se muestran en la siguiente figura: Una alimentación Vdd, dos salidas DAC y cuatro entradas ADC. También se puede agregar la E/S digital, pero esta no es necesaria para la mayoría de los circuitos analógicos.

Elementos de SLab
Usando los integrados amplificadore operacionales MCP6002 y MCP6004 propuestos, se obtiene una impedancia de entrada muy alta en los ADC, y una operación full rail casi completa dentro del rango de 3,3V de la placa. Las capacidad de suministrar corriente del los amplificadores operacionales no son es muy grande grandes, pero, como estamos alimentando el sistema desde el puerto USB, de todos modos estamos bastante limitados en la corriente disponible.

Sería posible diseñar un circuito de interfaz con más rango de voltaje y corriente. Y se hará en el futuro, pero, por ahora, la idea es mantener el sistema lo más barato y simple posible. Hacer un mejor circuito de interfaz no es difícil en absoluto, el problema es que esté disponible, a bajo costo, para todos.

El software

Un mal software puede hacer que un dispositivo de instrumentación de bajo presupuesto sea una pesadilla de usar, y desarrollar un buen software es difícil y lleva mucho tiempo. Para este proyecto, he aprovechado la gran biblioteca de Python y, en particular, de algunas bibliotecas de SciPy (NumPy y Matplotlib).

Pero Python no es fácil de usar en la placa F303RE y, además, sería muy ineficiente para realizar mediciones temporizadas. Por lo tanto, el sistema completo necesita un elemento adicional: el firmware de la placa que es el elemento intermedio entre los ADCs y DACs de la placa y el código de Python en el PC. Este firmware actúa como un servidor para comandos enviados desde un PC cliente.

Sistema SLab completo
La estructura del software se asemeja un tanto al protocolo firmata con un servidor en la placa de hardware y un cliente en el PC. Pero no es firmata. La diferencia principal, aparte del hecho de que la comunicación no es MIDI, es que los comandos pueden incluir la generación de formas de onda y la lectura de secuencias de valores de voltaje a velocidades  de muestreo constantes (hasta aproximadamente 80 kHz con el firmware actual). Algunas funcionalidades, como las de contínua, se podrían realizar agregando una capa de Python a la firmata, pero no a todas, especialmente para las transitorias y de alterna. En general, el sistema SLab está más orientado a las señales analógicas que a las digitales.

El firmware de la placa

Como la placa F303RE está habilitada para MBED, la primera versión del firmware se ha desarrollado en el compilador en la nube de MBED. Planeo diseñar una versión futura del firmware, probablemente sin MBED, para optimizar el código tan cerca como sea posible de los límites de la placa. En la siguiente tabla, puede ver que, cuando se usa un solo canal, el tiempo de muestreo en mediciones transitorias puede ser tan bajo como 13 microsegundos. Esto no es malo del todo para una placa de microcontrolador, pero está lejos de las capacidades de la placa F303RE que pueden obtener frecuencias de muestreo en el rango de MHz. La mayoría de los problemas asociados a usar más de un canal se deben al hecho de que MBED usa sólo un ADC para todas las entradas analógicas. Los cuatro canales no se pueden leer, por tanto, al mismo tiempo. Siempre hay margen de mejora, y seguramente el firmware mejorará. Cuando tengo tiempo, claro.

Capacidades de muestreo
El firmware de la placa se comunica con el PC y básicamente recibe comandos, interactua con el circuito a través de los DAC y ADC, y responde al PC. Algunos ejemplos de comandos son:

  •     Establecer un voltaje en un DAC
  •     Lee el voltaje en una entrada ADC
  •     Leer una secuencia de valores de ADC con una determinada frecuencia de muestre
  •     Almacenar formas de onda que se generarán más adelante en los DAC
  •     Generar formas de onda y leer  la respuesta del circuito a ellas

Lo más complejo que puede hacer el firmware de la placa es generar dos formas de onda arbitrarias diferentes en las dos salidas DAC y leer simultáneamente las cuatro entradas ADC. Después de generar las ondas y leer los ADCs durante un tiempo, los datos se envían al PC para su procesamiento.El protocolo de comunicación entre la placa y la PC está completamente documentado, de modo que si tienes una placa con al menos dos DAC y cuatro entradas ADC y sabes sobre desarrollo de firmwares, puedes crear tu propio firmware para interactuar con el sistema SLab. El enlace de comunicación implementa verificación CRC, pero, como la comunicación USB es bastante fiable a cortas distancias, el objetivo principal del CRC es detectar errores de software.Las capacidades de la placa se leen en el momento en que ésta se conecta al PC, por lo que no es necesario realizar modificaciones en el código del PC si se desarrolla firmware para una nueva placa.

El firmware actual de la placa ocupa aproximadamente 2500 líneas de código "C". Éste se puede obtener en el proyecto SLab en Github. Pero, si sólo quieres usarlo, basta descargar el archivo binario y arrástrarlo en la unidad masiva asociada a la placa que aparece en el PC cuando ésta se conecta.

El firmwar también está disponible en MBED.


El código Python

El firmware de la placa interactua con el circuito por lo que debe estar lo más optimizado posible ya que es quien establece los límites del sistema completo. No obstante, una parte importante del software, es el código Python. Actualmente el proyecto SLab tiene cerca de 6000 líneas de código Python. Realmente no es tanto debido a los comentarios y las líneas en blanco. Aunque los comentarios también son importantes porque generan el subsistema de ayuda SLab. No exactamente doxygen pero es la misma idea.

Para trabajar con un circuito, se abre un intérprete de Python, se importa el módulo SLab, y luego se llama a las funciones de SLab que se comunican con la placa, realizan excitaciones y/o mediciones y devuelven los resultados. Gracias a Matplotlib, los resultados se pueden mostrar en la pantalla y, gracias a NumPy, los resultados se pueden manipular tanto como quieras.
Todo el código SLab Python está incluido en el mismo proyecto Github que el código de firmware.

La primera capa del código Python es el código de calibración. ¿Cómo se obtienen buenas mediciones de los instrumentos? Usando una calibración adecuada, evidentemente. Antes de usar la placa, debe ser calibrada. A partir del procedimiento de calibración, se obtiene un conjunto de curvas, una para cada DAC y ADC que describen cómo se relacionan los valores reales con las entradas o salidas de esos dispositivos. A modo de ejemplo, la siguiente figura muestra las curvas de calibración ratiométricas del DAC que incluyen los drivers indicados en el esquema anterior. Observese cómo el DAC2 tiene una pendiente de dos debido al amplificador no inversor con dos resistencias iguales. Pero no hay problema ya que la calibración se encarga de todo. Una vez que se completa la calibración, puedes olvidarte de ella, SLab se ocupa de los detalles internamente en cada medición.

Curvas de calibración de los DACs

La última capa del código SLab son las funciones que el usuario puede llamar. Esas funciones indican que la placa debe hacer algo y devolver un resultado, si está disponible. Puede ser tan simple como establecer un DAC a valor de voltaje dado o tan complejo como medir la distorsión que un circuito induce en una onda sinusoidal o obtener un diagrama de bode obteniendo la respuesta a varias ondas sinusoidales. Los comandos simples se envían directamente a la placa después de la calibración. Los comandos más complejos requieren más trabajo del código Python.

Algunos ejemplos

Ahora, demos paso a algunos ejemplos de lo que se puede hacer SLab. Puede consultarse la documentación de referencia para obtener más ejemplos. Comencemos jugando con un simple filtro paso bajo:
Filtro paso bajo
Se conecta la salida del DAC1, después del búfer, a la entrada del filtro y la entrada del ADC1, antes del búfer, a la salida del filtro. Luego, se ejecuta el siguiente código de Python. No es necesario usar el modo interactivo, pero siempre es posible usarlo si se desea.



Las primeras seis líneas calculan la respuesta ideal de un filtro paso bajo utilizando NumPy. La sexta línea mide la respuesta frecuencial real del circuito conectado entre DAC1 y ADC1 para el mismo conjunto de frecuencias utilizadas en los cálculos anteriores. Se obtiene el siguiente gráfico que compara las respuestas ideales y las medias justo después del último comando.

Diagramas de Bode

Como el sistema SLab, para mantener bajo el coste, no contiene etapas de amplificación, el rango dinámico no es muy bueno y los diagramas de Bode comienzan a ponerse feos, especialmente en el gráfico de fase, después de niveles de atenuación de unos 30 dB.
Los circuitos pueden ser mucho más complicados. El siguiente circuito usa DAC1 para generar una onda sinusoidal y DAC2 para generar una señal de ruido aleatorio. A partir de esas señales, se generan dos señales diferenciales con ruido común inyectado en V1 y V2. Luego, se usa un amplificador diferencial para rechazar el ruido y recuperar la señal original. En la imagen, los amplificadores de ganancia unitaria son seguidores con operacionales y el amplificador inversor es un amplificador inversor basado en operacional.

Circuito de medida diferencial

El circuito se ha montado en una placa de prueba y se ha probado utilizando el siguiente código que genera las señales, realiza la medición y muestra los resultados. En este caso, aunque SLab incluye la generación de ruido gaussiano y uniforme, usamos llamadas NumPy para generar el ruido.

El siguiente gráfico muestra la señal diferencial, con ruido común, en ADC1 y ADC2. También muestra el ruido en ADC4 y cómo se recupera la señal sin ruido en ADC3. Parece una simulación, pero son medidas reales.

Gráficas del amplificador diferencial
No es necesario proporcionar siempre entradas al circuito. El siguiente ejemplo es un circuito astable, basado en un comparador con histéresis que genera una onda cuadrada.

Circuito Astable
 Las medidas de algunos nodos de circuito se muestran a continuación. El código está aquí.

 
Medidas para el Astable
No siempre es necesario operar con señales variables en el tiempo. También se puede realizar medias de continua. La siguiente figura muestra la corriente del colector para varias corrientes de base en un transistor bipolar BC547. Cada punto de la curva es una lectura de continua independiente con un cierto tiempo entre la configuración de la entrada y la lectura de la salida. El código asociado está aquí.

Curvas características de un transistor bipolar

En el sistema SLab actual estamos limitado al rango de 3.3V de la placa Nucleo. Pero el uso de los dos DAC en configuración de puente puede dar un rango de -3.3V a + 3.3V en algunos circuitos. Este es el caso del rectificador en puente de diodos:

Rectificador en puente de diodos
La resistencia de 100k, R2, proporciona la polarización de las salidas cuando ningún diodo está conduciendo. Puede no tenerse en cuenta para facilitar la comprensión del circuito. La respuesta entrada-salida medida para el circuito se muestra en la siguiente figura:

 
Curva del rectificador en puente de diodos
El código asociado puede encontrarse aquí.


La documentación

Tenemos una placa de hardware. Tenemos el firmware en la placa y el código de Python en el PC. Si sabes lo suficiente sobre electrónica y quieres usar el sistema SLab, solo necesitas agregar la documentación de referencia de SLab y estás listo para jugar con los circuitos.

La documentación actual para configurar el hardware y el software y para la referencia a todas las funciones de SLab (hay unas cuantas) es de 239 páginas en varios archivos PDF. La carpeta de código de Python también incluye una carpeta con 31 ejemplos en archivos de código de Python independientes.

Pero uno de los objetivos del proyecto SLab era aprender electrónica. Es por eso que el proyecto SLab también contiene 222 páginas de tutoriales sobre varios dispositivos y circuitos. Actualmente los temas son:
  
  • Circuitos con amplificadores operacionales en modo lineal (7 archivos) 
  • Circuitos de diodos (4 archivos)
  • Circuitos con BJTs (2 archivos)

Seguiré agregando archivos cuando tenga tiempo. Quizás también agregue algunos experimentos asociados a SLab en el blog.


Ya para acabar

SLab es un proyecto en curso. El abeto de la junta se mejorará en el futuro y se agregarán más tutoriales sobre circuitos. Ahora estamos en la primera versión de lanzamiento 1.2. Todos los archivos se pueden obtener en Github o en un archivo Zip, también en Github.

Quiero terminar esta entrada de blog simplemente mostrando una forma de onda arbitraria, a doble onda, generada con el sistema SLab básicamente como entretenimiento.

Formas de onda arbitrarias

¿Quieres ver el código?  Está aquí.

Este artículo está disponible también, en inglés, en el blog R6500.


Actualizaciones

20/2/2018
Actualizado el código del filtro RC ya que actualmente las funciones AC se hallan contenidas en el módulo slab_ac y no en el módulo principal slab.
Actualizada la descripción del sistema.

 

domingo, 31 de marzo de 2013

La Familia Crece

Ha pasado un poco de tiempo desde mi última entrada en el blog. Digamos que ha sido un año un tanto complicado. Pero el blog no ha muerto, seguimos con él.

Hace ya un tiempo escribí una entrada sobre la familia discovery. En esta entrada quiero hablar sobre los últimos miembros de la familia: STM32F3 Discovery y STM32F0 Discovery

STM32F3 Discovery


La placa STM32F3 Discovery es, dentro de la familia, una de las placas mejor especificadas en cuanto a periféricos incluidos. El corazón de esta placa es un procesador STM32F303VCT6 de tipo ARM Cortex M3 igual que en la placa STM32F4 Discovery. En este caso, sin embargo, aun siendo también M4, el procesador es más modesto, disponiendo de 256 KB de Flash y 48 KB de SRAM y trabajando a 72 MHz.



STM32 F3 Discovery
Lo que destaca de esta placa, como he comentado antes, son los periféricos incluidos:
  • 8 Leds de usuario distribuidos en un círculo
  • MEMS LSM303DLHC que incorpora un acelerómetro y un magnetómetro ambos 3D que se comunica con el MCU usando un puerto I2C
  • MEMS L3GD20 que proporciona un giróscopo de 3 ejes que se comunica con el MCU con un puerto SPI
Por un precio aproximado de 14 € + IVA es una de las alternativas más baratas para crear un sistema de control completo debido a que mide un total de 9 grados de libertad (3 de aceleración, 3 de giro y 3 de dirección absoluta con la brújula 3D).

STM32F0 Discovery


La placa STM32F0 Discovery es el hermano pequeño de la familia STM32 Discovery. Incorpora un procesador STM32F051R8T6 que pertenece a la categoria ARM Cortex M0. El procesador incorpora 64 KB de memoria Flash y 8 KB de memoria SRAM.

STM32F0 Discovery

En cuanto a periféricos, se trata de una placa modesta. Incorpora sólo 2 leds de usuario y un pulsador. También se ha de de decir que es el miembro más barato de la familia discovery de 32 bits costando menos de 9 € (Sin incluir el IVA). Junto a la placa, como se aprecia en la figura, se proporciona una placa de topos para soldar componentes.

Puestos a elegir veo más interante la placa STM32 VL Discovery, que por un par de euros más posee un procesador ARM Cortex M3, la misma cantidad de memoria SRAM y el doble de memoria Flash. Además cuenta con un cristal de cuarzo de 32kHz muy útil para desarrollar sistemas en tiempo real.
Digamos que la placa STM32F0 es interesante pero no impresiona.





martes, 22 de mayo de 2012

La infame versión Z

En diseño de circuitos uno espera que los componentes se comporten siempre de la misma manera, que cuando compras un recambio de un componente por otro que tiene exactamente el mismo nombre, el funcionamiento sea el mismo. Lamentablemente eso no siempre es así, y en ocasiones, el fabricante no se toma muchas molestias en avisarlo.

Explicaré un caso concreto con la placa STM32F4 Discovery. La mejor y más potente placa de la familia Discovery.

Placa STM32F4 Discovery

El problema


Hace ya un tiempo compré una placa de éstas y empecé a trabajar en el software. El entorno de trabajo, algún dia hablaré del él, está basado en Eclipse y usa compiladores GCC. Hasta el momento he probado con Code Sourcery y Yagarto. Para depurar empleo el servidor GDB que veía con la versión gratuita de Atollic True Studio for STM32.

Como todo iba bién con la placa compré una placa nueva, igualita a a la otra que ya tenía. Mi sorpresa fué que el debugger se colgaba al intentar comunicarse con el microcontrolador.
Para descartar que fuera una placa defectuosa intenté programar en la placa usando el software STLink Utility que proporciona gratuitamente ST para programar sus microcontroladores.

Nada más arrancar ya se veía que algo iba mal.

Aplicación STLink Utility

El software era capaz de comunicar con el microcontrolador, pero no era capaz de averiguar de que micro se trata tal como se desprende de la frase "Unknown Device" arriba a la derecha de la pantalla. Fijémonos, luego diré porqué, en la identificación de la CPU que es 0x413

Al intentar programar el dispositivo las cosas se complican.


Es extraño, nunca habia visto este mensaje, le digo que adelante.


El programa es incapaz de programar el micro. Por lo visto está activada la protección que deshabitlita el bus JTAG para que no pueda extraerse el código del micro. Es extraño porque la placa es nueva.
La protección se configura con los llamados option bytes. Voy a la ventana pertinente y sale algo como ésto:


Parece que la protección de lectura está activada y la flash está protegida contra escritura. No se puede programar el micro y no se puede quitar la protección. No se puede usar el micro para nada que no sea usar el software de demostración que ya venía en la placa.

¡¡ Y la placa era nueva !!


La solución

Después de mucho buscar por internet a alguien que le hubiera pasado algo similar encontré esta referencia.

Por lo visto la gente tenía problemas con la versión "Z" de la CPU. Las placas STM32F4 Discovery, por lo visto, llevaban antes CPUs de versión "A". El último batch de placas usa CPUs de versión "Z".

La siguiente figura muestra una CPU de versión A.

STM32F407 Version A


A continuación se muestra una CPU de versión Z.

STM32F407 VersionZ


Parece ser que en el paso de la versión A  a la versión Z, la identificación de la CPU ha pasado de 0x411 a 0x413. A continuación se muestra el programa STLink Utility conectado a una CPU de versión "A" donde se vé como se identifica como 0x411 a diferencia de la identificación 0x413 de la versión "Z".

STLink Utility con STM32F4 versión "A"
 

Misterio solucionado. Pero en esta historia hay algunos puntos muy molestos:

  • Que ST envie placas STM32F4 Discovery incompatibles con versiones anteriores del software sin avisar de los posibles problemas de compatibilidad.
  • Que ST no actualice la aplicación STLink cuando cambia los MCUs que soporta.
  • Que la aplicación STLink no sea capaz de decir que no sabe como trabajar con el micro en lugar de hacernos creer que se ha habilitado la protección contra escritura.

Suerte que en la misma referencia que cité anteriormente se proporcionaba el link a una versión parcheada de STLink Utility para poder programar la placa.

Como información adicional de los cambios de la versión "A" a la versión "Z", parece que no hay más versiones intermedias. Éstos están documentados en el la Errata Sheet del microcontrolador. Lo que no se dice en este documento es la incompatibilidad que produce con las propias aplicaciones de ST.

Finalmente me alegra decir que la versión actual del servidor GDB de ATollic True Studio es capaz también de comunicarse con la CPU "Z" maldita.























domingo, 18 de marzo de 2012

La familia Discovery

Los fabricantes de Microcontroladores acostumbran a vender placas basadas en sus dispositivos que permiten evaluar el comportamiento de éstos. La compañia STMicroelectronics dispone de múltiples placas entrenadoras, pero, entre todas ellas, la familia Discovery se caracteriza por su bajo precio. Todas las placas de la serie Discovery se hallan por debajo del precio del famoso Arduino y, algunas de ellas lo superan funcionalmente en múltiples aspectos. Como todo pro suele tener un contra, la programación de estas placas está lejos de la gran simplicidad que aporta Arduino.

La serie Discovery tiene 5 placas actualmente. Dos de ellas corresponden a la serie de microcontroladores de 8 bits STM8, mientras que los tres restantes pertenecen a la serie de procesadores ARM Cortex de 32 bits STM32.

Empezaremos por las placas de 8 bits.


STM8S Discovery

La placa STM8S Discovery está basada en el Microcontrolador de 8 bits STM8S105 de la familia STM8S. El chip dispone de 32kB de memoria Flash, 2kB de RAM y 1kB de memória EEPROM de datos. Con un precio que no llega a 10€, es la placa mas barata de la serie Discovery.



Los periféricos que incluye la placa son muy sencillos. Apenas un LED controlable por software y un pulsador sensible al tacto. Precisamente por ello la placa dispone de numerosas líneas libres que permiten conectar con los periféricos internos del Microcontrolador (ADC, Timers y comunicaciones SPI, I2C y USART) o sus líneas de I/O Digital (GPIO).

La placa está dividida en dos partes. La parte principal, a la derecha en la figura anterior, contiene el Microcontrolador, sus dos periféricos, un cristal de cuarzo de 16MHz y una pequeña zona de prototipado que incluye una huella para un chip en formato SMD SO16.
La segunda parte, a la izquierda en la figura anterior, contiene un emulador/programador ST-Link que permite programar el microcontrolador usando un interfaz SWIM. El emulador se conecta al PC de desarrollo usando un conector USB de tipo B y opera empleando un microcrocontrolador de 32 bits STM32F103 preprogramado. El programador ST-Link se puede emplear para programar no sólo el microcontrolador de 8 bits sino cualquier otro microcontrolador de ST compatible con el interfaz SWIM. 
La placa se puede partir en dos separando físicamente sus dos partes, separando el emulador/programador ST-Link del resto de la placa. Después de separarlas, se puede seguir usando de manera conjunta usando los conectores de comunicación que disponen.

Las líneas de entrada/salida del microcontrolador están disponibles en 4 conectores que lo rodean. En total hay un máximo de 32 líneas que pueden usarse como I/O digital. Una de ellas está compartida con el LED de usuario y 3 más, hasta un total de 35, están disponibles si se desactiva el pulsador táctil que incluye la placa.




STM8L Discovery

Esta placa STM8L Discovery es el segundo peldaño en la serie. Está basada en el Microcontrolador de 8 bits de bajo consumo STM8L152 de la famila de baja potencia STM8L. Igual que en caso anterior, el microcontrolador dispone de 32kB de memoria Flash, 2kB de RAM y 1kB de memória EEPROM de datos. Con un precio ligeramente por encima de 10€, apenas supera en precio la otra placa de 8 bits de la serie Discovery.



La placa incorpora dos leds programables, un pulsador de usuario y un display LCD Alfanumérico de 6 carácteres. Teniendo en cuenta que la placa incorpora también un cristal de cuarzo de 32768 Hz, resulta ser el entorno ideal para diseñar aplicaciones sencillas de bajo coste que requieren de un reloj de tiempo real.
Adicionalmente la placa incorpora el hardware necesario para que el microcontrolador pueda medir la potencia consumida. Este elemento se ha incorporado en la placa para demostrar el bajo consumo de su procesador.

Igual que la placa anterior, ésta incorpora también un interfaz ST-Link de programación/emulación basado en un STM32F103 preprogramado, sólo que, en este caso, el interfaz ST-Link no se puede separar de la placa del microcontrolador principal.

Debido a que el LCD que incorpora la placa ocupa una buena parte de las líneas de I/O disponibles en el microcontrolador (24 Segmentos con 4 comunes), el número de líneas de I/O adicionales disponibles está bastante limitado, reduciéndose a 6, de las cuales 3 están compartidas con el pulsador y los dos leds de usuario, uno verde y otro azul. Si necesitamos más líneas de I/O, se puede desactivar el circuito de medida de corriente quitando 3 puentes de soldadura teniéndose acceso a 3 líneas de I/O adicionales.


STM32 VL Discovery

La placa STM32 VL Discovery es la primera de 32 bits de la familia Discovery. Esta placa contiene un microcontrolador STM32F100 de la familia STM32F1 que contiene un núcleo ARM Cortex-M3. La memoria disponible es de 128 kB de flash de programa y 8kB de RAM. Con un precio de poco más de 11€, se dispone de un sistema de 32 bits apenas un par de euros por encima de la placa de 8 bits más sencilla de la familia.



La placa incorpora dos leds programables y un pulsador de usuario. La ausencia de periféricos externos integrados en la placa hace que queden 42 líneas de I/O disponibles.
Dentro de la placa se hallan también dos osciladores de cuarzo en torno al procesador principal, uno a 8 MHz que permite, usando el PLL interno del procesador, operar a una frecuencia máxima de 24 MHz, y otro de 32768 Hz que permite disponer de una base de tiempos para el reloj de tiempo real. De hecho, esta placa es un tanto especial porque incorpora, en realidad 3 cristales de cuarzo. Dos para el procesador principal y uno más para el procesador del interfaz de programación/emulación ST-Link.

El microcontrolador de esta placa incorpora ya un conjunto de periféricos internos bastante completo: 7 Timers de 16 bits con capacidad de generación de PWM. Un convertidor A/D de 12 bits y 16 canales. Dos convertidores DAC de 12 bits. Dos interfaces I2C, dos SPI y tres USARTs.


STM32 L Discovery

Igual que en la familia de 8 bits teníamos dos placas, una (STM8S) con pocos periféricos y muchas líneas de I/O y otra (STM8L) con LCD y medida de corriente que dejaba pocas líneas de expansión libre, en la serie de 32 bits hay 2 placas equivalentes. La primera, comentada anteriormente (STM32 VL) sería una versión con esteroides de la STM8S, mientras que la placa STM32 L Discovery sería la hermana grande de la STM8L. Algo por encima de 15 €, es un 50% más cara que su hermana de 8 bits.
Esta placa incorpora un microcontrolador STM32L152 de la família baja potencia STM32L1 basado, igual que la placa anterior, en un núcleo ARM Cortex-M3. La memoria disponibles es de 128 kB de flash de programa, 16 kB de RAM y 4kB de EEPROM de datos.


La placa incorpora diversos periféricos externos: 2 Leds de usuario, un pulsador de usuario, un display LCD alfanumérico de 6 carácteres (el mismo de la placa STM8L), un área táctil que puede operar como una zona lineal o 4 pulsadores independientes y un circuito de medida del consumo de corriente.
El hecho de que hayan tantos periféricos externos deja pocas líneas de I/O libres. En concreto se disponen de 8 líneas, tres compartidas con los leds y el pulsador, que pueden subir a 10 si se desactiva el circuito de medida de corriente.

Como en las otras placas, se incorpora un programador/emulador integrado, pero en este caso es ST-Link/V2 aunque también basado en un STM32F103.
Igual que en la placa STM8L, disponemos también de un reloj de cuarzo de 32768 Hz por lo que, añadido al LCD, hace a esta placa una buena candidata para aplicaciones de temporización que requieren de un RTC de tiempo real.


STM 32F4 Discovery

La placa STM32F4 Discovery es la última incorporación a la familia Discovery y es un importante salto adelante respecto a las otras placas. Incorpora un procesador STM32F407 de la família de altas prestaciones STM32F4 con núcleo ARM Cortex-M4 capaz de trabajar a 168 MHz  y que incorpora una FPU y funcionalidades de DSP. Lo acompaña 1Mb de memoria flash y 192 kB de RAM. Todo ello por prácticamente el mismo precio que la placa STM32L anterior.



La placa está bastante servida también de periféricos y es, con mucho, la más potente de la serie. Incorpora 4 leds y un pulsador de usuario, un acelerómetro MEMS, un micrófono MEMS, un DAC de audio con etapa de salida en clase D y un puerto USB OTG. Pese a los periféricos disponibles, la placa dispone también de múltiples líneas de I/O digital libres. Igual que la placa STM32L, disponemos también un interfaz de programación/emulación ST-Link/V2.

El conjunto de placas de la serie discovery constituye una alternativa de bajo precio, y en el caso de STM32 mucha más potencia, a proyectos basados en Arduino, pero eso sí, con bastante mayor dificultad de uso.

En proximos artículos hablaré sobre la programación de estas placas.