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

jueves, 2 de enero de 2020

XiuaElectronics: Inteligencia artificial aplicada a microcontroladores Parte #03


Buenos días estimados lectores, hoy vamos a ver la tercera y última parte de un tema sumamente interesante, que no había podido continuar por falta de tiempo. Hablamos sobre la inteligencia artificial aplicada a los microcontroladores. En una anterior entrada, parte #02 de este tema, pudimos observar una serie de impedimentos para poder crear un algoritmo con I.A en un microcontrolador. También vimos  algunas medidas para poder acercarnos a un algoritmo de inteligencia artificial en estos, pero con algunas desventajas. Hoy vamos a ver como al final de cuentas es posible o no utilizar esta en microcontroladores. Para los que no estén actualizados con las entradas anteriores a través de este link podrán ver la Parte #01. Comencemos.


DNN ( Deep Neural Network) y ANN (Artificial Neural Network ).


En la entrada pasada nombramos un termino que se ve mucho en inteligencia artificial y es el DNN, traducido del ingles (red neural profunda), donde explicábamos que esta sería una posible solución a implementar en la programación de la I.A en los microcontroladores. El DNN es mayormente utilizado por los científicos de datos. Este tiene como característica que posee varias capas entre las entradas y salidas de un sistema o diseño al cual se le esta implementando dicho algoritmo. El DNN hace parte de una categoría más amplia, el ANN o traducido del ingles (Redes neurales artificiales). En esta categoría entran los algoritmos de capas profundas o aquellos que solo tienen una sola capa.

Hago mención de estos dos términos ya que estos son los causantes de que haya un posible solución a la programación de inteligencia artificial en los microcontroladores. Para ser optimo este tipo de programación tenían que haber cambios en los compiladores y en los microcontroladores. 

Antes de utilizar un algoritmos de inteligencia artificial, lo programadores lo que hacen es entrenar sus programas con una serie de requisitos. Para entender mejor esto del entrenamiento, les sugiero que lean acerca del funcionamiento del machine learning o aprendizaje maquina. En general, la solución que se estableció para esto fue entrenar previamente diferentes tipos de algoritmos de DNN y optimizarlos en el microcontrolador. Haciendo alusión que los datos serían leídos a través de sus periféricos, utilizaron el POO para poder enlazar diferentes periféricos para dichos fines.

La capacitación de ANN (NN) implica pasar los conjuntos de datos a través de la red neuronal de manera iterativa para que las salidas de la red puedan minimizar los criterios de error deseables.
La definición, la capacitación y las pruebas de ANN generalmente se realizan utilizando marcos de aprendizaje profundo listos para usar.
Esto generalmente se realiza en una potente plataforma informática, con memoria y potencia computacional prácticamente ilimitadas, para permitir muchas iteraciones en un corto período de tiempo.

El resultado de este entrenamiento es la red neuronal artificial pre-entrenada.

Una vez que se pre-entrena la red neuronal artificial lo que sigue es optimizar este nuevo algoritmo en uno optimo para los microcontroladores. Aquí es donde entra la innovación, y la solución de nuestros problemas. La empresa STMicroelectronics, fabricante de semiconductores, fabrica los microcontroladores de 8 bits STM8 y los de 32 bits STM32, cada arquitectura con una amplia familia llena de variaciones. --Hago alusión a esta empresa por que es la única que ha innovado en el campo de la I.A y los microcontroladores, no me están patrocinando 😢 (lastimosamente)-- Ha diseñado en los últimos años software que nos hace eso, optimizar el código para poder grabarlo en un microcontrolador. Este software se llama STM32Cube.AI, y como su nombre lo indica solo es para microcontroladores de 32 bits. Vamos ver de que trata esto.

STM32Cube.AI

La herramienta STM32Cube.AI ofrece una interoperabilidad simple y eficiente con las populares herramientas de capacitación de Deep Learning ampliamente utilizadas por la comunidad de desarrolladores de Inteligencia Artificial. La salida de estas herramientas se puede importar directamente al STM32Cube.AI.

El siguiente paso es incrustar el ANN pre-entrenado en una MCU (código optimizado que minimiza la complejidad y los requisitos de memoria).
Esta parte es muy fácil e intuitiva gracias a la herramienta de software STM32Cube.AI. El STM32Cube.AI está completamente integrado en el ecosistema de desarrollo de software STM32 como una extensión de la herramienta STM32CubeMX ampliamente utilizada.
Permite la conversión rápida y automática de ANN pre-entrenadas en código optimizado que puede ejecutarse en una MCU. La herramienta guía a los usuarios a través de la selección de la MCU correcta y proporciona información rápida sobre el rendimiento de la red neuronal en la MCU elegida, y la validación se ejecuta tanto en su PC como en la MCU STM32 de destino.

Vamos a ver el siguiente vídeo de la empresa donde podremos apreciar esto:


Y en general esta seria un enlace directo y sin muchas complicaciones al desarrollo de aplicaciones con inteligencia artificial y microcontroladores. Los dejo con un vídeo donde podrán apreciar una aplicación básica de la IA en el mundo exterior, donde se aplica IA con microcontroladores. No siendo más los dejo con el vídeo. No olvides seguirme y compartir mi contenido. 




Escrito por: Breismam Alfonso Rueda Díaz



Fuentes
:

  • http://www.konradlorenz.edu.co/images/stories/suma_digital_matematicas/Programacion%20Dinamica.PDF
  • https://www.st.com/content/st_com/en/about/innovation---technology/artificial-intelligence.html
  • Xumari, G.L. Introduction to dynamic programming. Wilwy & Sons Inc., New York. 1967.






Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.



lunes, 3 de junio de 2019

XiuaElectronics: Curso STM32F303K8 Nucleo y Plataforma Mbed OS

Curso STM32F303K8 Nucleo y Plataforma Mbed OS: Manejo del interrupciones externas #07.

Buenos noches estimados lectores, en el día de hoy vamos a ver la clase numero 7 del curso de progreamacónde mcirocontroladores STM32 con el compilador Mbed Compiler. Para esta ocasión trabajaremos con las interrupciones externas del micrcontrolador stm32f303k8, no siendo más comencemos.

¿Qué es una interrupción externa?


Una de las características más importante de los microcontroladores son las interrupciones, que se les encuentran de dos tipos, las cuales son: interrupciones externas y las interrupciones internas.

Las interrupciones son acontecimientos que hace que el microcontrolador deje de lado lo que se encuentra realizando, atienda los sucesos y luego regrese y continúe con lo suyo.

Pues eso son las interrupciones, pero veamos, hay dos tipos de interrupciones posibles, una es mediante una acción externa (es decir por la activación de uno de sus pines), la otra es interna (por ejemplo cuando ocurre el desbordamiento de uno de sus registros). En esta entrada trabajaremos con las externas.

Interrupciones por flanco de subida y flanco de bajada


Como hemos dicho anteriormente, las interrupciones se manejan a través de sucesos; estos sucesos son representados por flancos de subida y flancos de bajada. Teniendo en cuenta que microcontrolador vamos a usar, tendremos que manejar distitntos niveles lógicos. Por ejemplo, para un microcontrolador pic18 vemos que los niveles lógicos son de 0 voltios a 5 voltios. Para los microcontroladores de bajo consumo como la familia stm32l es de 0 a 3.3v --si no recuerdo mal-- Entonces cambiará la amplitud de estos, pero en general los flancos de subidas es el cambio de un cero lógico a un 1 lógico y el flanco de bajada es viceversa al de subida como se puede apreciar en la siguiente imagen:



Funciones de interrupcion externa en Mbed Compiler

Mbed Compiler nos proporciona un lenguaje muy intuitivo que para las personas que programan C++ será un manjar ya que nos proporciona una sintaxis familiar y con esto una seríe de métodos usados en C/C++.

Primero vemos que hay que declarar una entrada -- como era obvio--, pero de tipo interrpción. Esto en Mbed Compiler lo hariamos:

InterruptIn Nombre de la entrada(Pin del micro);

ó

InterruptIn nombre de la entrada(Pin de la entrada, tipo de suceso);

En cualquiera de los dos casos la función InterruptIn nos permite declarar una interrupción externa, la variante es que en la primera por defecto toma el "suceso de acionamiento" con un flanco de subida.
En la segunda deberemos nombrar que tipo de suceso activará la interrupción (flanco de subida o flancod e baja). Para este último Mbed Compiler nos permite poner 4 funciones que son PullUp, PullDown, PullNone, PullDefault.

Una vez declarado esto ya podremos vrear el códigho principal y el secundario, donde este último será el que se ejecutará cuando haya un suceso (interrupción) en el pin del micro previamente declarado como entrada con interrupción.

Ya sabiendo lo anterior, procederemos a ver el vídeo correspondiente a esta entrada para implementar una pequeña aplicación de las interrupciones.

Y esto sería todo en la clase de hoy. Espero que les haya gustado esta entrada donde pudimos aprender lo referente a interrupciones externas en microcontroladores STM32 con el compilador Mbed Compiler. En la siguiente entrada veremos el uso del periferico serial del micro trabajado en este curso.


Si no han visto los vídeos anteriores de este curso, a través del siguiente link podrán verlos: Curso STM32F303K8 Nucleo y Plataforma Mbed OS



Escrito por: Breismam Alfonso Rueda Díaz












Bien muchachos, esto es todo por hoy. Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.



Facebook: https://www.facebook.com/electronicalibrexc/
Youtube:  http://www.youtube.com/c/breismanrueda
Twitter: https://twitter.com/BreismamR
Correo: ElectronicaLibreXC@outlook.com

miércoles, 20 de marzo de 2019

XiuaElectronics: Curso STM32F303K8 Nucleo y Plataforma Mbed OS

Curso STM32F303K8 Nucleo y Plataforma Mbed OS: Manejo del timer y ticker #06.

Buenas noches estimados lectores. En el día de hoy vamos a ver la clase #06 del curso de programación de microcontroladores de 32 bit basador en cortex, con el compilador Mbed compiler. Para esta clase veremos un periferico de suma importancia y que es usado mucho en la programación de embebidos, se trata del timer que posee nuestro micrcoontrolador. Además de esto lo manejaremos la interfaz Ticker la cual nos sirve para generar una interrupción de forma recurrente como lo veremos en esta entrada.

¿Qué es el modulo o periferico Timer?

La mayor parte de las aplicaciones para microcontrolador necesitan contar eventos o generar retardos de gran precisión. Por software es posible realizar retardos de cierta precisión y contar eventos, pero la mayor parte del potencial de la CPU se invertiría en éste cometido, y no dejaría tiempo para realizar otras acciones o complicando el diseño de la aplicación. Los contadores/temporizadores o, en la jerga, “timers”, son periféricos hardware que suplen este defecto, descargando de un trabajo poco grato al micro. Es tal la importancia de este tipo de dispositivos que los microcontroladores más avanzados incluyen decenas de ellos o, incluso, un coprocesador dedicado a gestionarlos. Estos dispositivos permiten, entre otras cosas, medir anchos de pulso de señales, generar señales digitales, contar impulsos, provocar acciones periódicas, implementar relojes de tiempo real, generar el ritmo para comunicaciones, comparación/captura, generación PWM (modulación por ancho de pulso) para control digital directo, etc

Use la interfaz del temporizador para crear, iniciar, detener y leer un temporizador para medir tiempos precisos (mejor que la precisión de milisegundos).

Puede crear, iniciar y detener de forma independiente cualquier número de objetos del temporizador.

Advertencias y notas:

  • Los temporizadores se basan en contadores de microsegundos sin signo de 64 bits, pero para la compatibilidad con versiones anteriores, los read_ms() y read_us() solo devuelven enteros con signo de 32 bits. Esto limita su rango antes de ajustarse a 49 días y 35 minutos respectivamente. Utilice read_high_resolution_us() para acceder al rango completo de más de 500,000 años.
  • Mientras se ejecuta un temporizador, se bloquea el sueño profundo para mantener una sincronización precisa. Si no necesita una precisión de microsegundos, considere usar la clase LowPowerTimer, ya que esto no bloquea el modo de suspensión profunda.

¿Qué es la interfaz Ticker?

La interfaz Ticker se usa para configurar una interrupción recurrente para llamar repetidamente a una función a una velocidad específica.
Se puede crear cualquier número de objetos de Ticker, permitiendo múltiples interrupciones pendientes al mismo tiempo. La función puede ser una función estática o una función miembro de un objeto en particular.
Use la interfaz Ticker para configurar una interrupción recurrente; llama a una función repetidamente ya una velocidad especificada.
Puede crear cualquier número de objetos de Ticker, permitiendo múltiples interrupciones pendientes al mismo tiempo. La función puede ser una función estática, una función miembro de un objeto particular o un objeto de devolución de llamada.

Advertencias y notas:

  • Sin código de bloqueo en ISR: evite cualquier llamada en espera, bucle de tiempo infinito o bloqueo de llamadas en general.
  • Sin printf, malloc o nuevo en ISR: evite cualquier llamada a funciones de biblioteca voluminosas. En particular, ciertas funciones de la biblioteca (como printf, malloc y new) no son reingresivas, y su comportamiento podría corromperse cuando se llaman desde un ISR.
  • Mientras se adjunta un evento a un Ticker, el sueño profundo se bloquea para mantener la sincronización precisa. Si no necesita una precisión de microsegundos, considere usar la clase LowPowerTicker en su lugar porque eso no bloquea el modo de suspensión profunda.
Funciones públicas y estáticas:

Una vez que comprendimos las funciones timer y ticker, procederemos a estudiar el siguiente vídeo donde mostraremos la implementación de la interfaz y de la función:



Y esto sería todo en la clase de hoy. Espero que les haya gustado esta entrada donde nos muestra el manejo del timer y la interfaz ticker en microcontroladores STM32 con el compilador Mbed Compiler. En la siguiente entrada veremos el uso de interrupciones a través de pines digitales que posee el microcontrolador usado en este curso.


Si no han visto los vídeos anteriores de este curso, a través del siguiente link podrán verlos: Curso STM32F303K8 Nucleo y Plataforma Mbed OS


Escrito por: Breismam Alfonso Rueda Díaz








Bien muchachos, esto es todo por hoy. Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.



jueves, 14 de marzo de 2019

XiuaElectronics: Curso STM32F303K8 Nucleo y Plataforma Mbed OS

Curso STM32F303K8 Nucleo y Plataforma Mbed OS: Manejo de PWM (modulación de ancho de pulso) #05.

Buenas noches estimados lectores. En el día de hoy vamos a ver la 5ta clase del curso de programación de microcontroladores STM32 con el compilador Mbed compiler. Para esta clase veremos el manejo y configuración del periferico PWM que posee nuestras tarjetas de desarrolo nucleo. Antes de empezar explicaremos un poco que es el PWM y sus características.

¿Qué es el PWM?.


La modulación por ancho de pulsos (también conocida como PWM, siglas en inglés de pulse-width modulation) de una señal o fuente de energía es una técnica en la que se modifica el ciclo de trabajo de una señal periódica (una senoidal o una cuadrada, por ejemplo), ya sea para transmitir información a través de un canal de comunicaciones o para controlar la cantidad de energía que se envía a una carga.

El ciclo de trabajo de una señal periódica es el ancho relativo de su parte positiva en relación con el período. Expresado matemáticamente:

D= τ/T donde,

D es el ciclo de trabajo
τ es el tiempo en que la función es positiva (ancho del pulso)
T es el período de la función



La principal desventaja que presentan los circuitos PWM es la posibilidad de que haya interferencias generadas por radiofrecuencia. Estas pueden minimizarse ubicando el controlador cerca de la carga y realizando un filtrado de la fuente de alimentación.

Funciones necesarias para controlar el ancho de pulso en Mbed compiler.

Para poder configurar un PWM con Mbed compiler deberemos usar la interfaz PwmOut seguido de la etiqueta del pin al cual vamos a implementar como salida del PWM y entre parentesis el pin a utilizar.

Además de esto tenemos varias funciones para controlar el ciclo de trabajo o el ancho relativo de su parte positiva y el periodo. Algunas de estas funciones son:

pulsewidth();
period();

Con lo anterior ya podemos empezar a ver el vídeo que complemetará esta clase y así tener un mejor entendimiento del tema, así que continuemos:

Y esto sería todo en la clase de hoy. Espero que les haya gustado esta entrada donde nos muestra el manejo del pwm en microcontroladores STM32 con el compilador Mbed Compiler. En la siguiente entrada veremos el uso del timer que posee el microcontrolador usado en este curso.


Si no han visto los vídeos anteriores de este curso, a través del siguiente link podrán verlos: Curso STM32F303K8 Nucleo y Plataforma Mbed OS


Escrito por: Breismam Alfonso Rueda Díaz








Bien muchachos, esto es todo por hoy. Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.

Facebook: https://www.facebook.com/electronicalibrexc/
Youtube: https://www.youtube.com/c/breismanrueda
Twitter: https://twitter.com/BreismamR






jueves, 7 de marzo de 2019

XiuaElectronics: Curso STM32F303K8 Nucleo y Plataforma Mbed OS

Curso STM32F303K8 Nucleo y Plataforma Mbed OS: Manejo de ADC (Conversor analogo digital) #04.

Buenos días estimados lectores. Hoy les traigo la clase #04 del curso de programación de microcontroladores STM32 con el compilador Mbed Compiler. Para la entrada de hoy hablaremos acerca de un periferico muy importante hoy en día, en este caso se trata sobre el conversor analogo-digital mque poseen los microcontroladores. Veremos las carácteristicas de este periferico y su variante con respecto a la familia de STM32F303K8. 

Conversor Analogo-Digital (ADC) del STM32F303K8


Dos convertidores de analógico a digital rápidos de 5 MSPS, con resolución seleccionable entre 12 y 6 bits, están integrados en los dispositivos de la familia STM32F303x6 / 8. Los ADC tienen hasta 21 canales externos. Algunos de los canales externos se comparten entre ADC1 y ADC2, realizando conversiones en modo de disparo único o de escaneo. Los canales se pueden configurar para que sean entradas de entrada única o entradas diferenciales. En el modo de escaneo, la conversión automática se realiza en un grupo seleccionado de entradas analógicas. Los ADC también tienen canales internos: sensor de temperatura conectado al canal 16 de ADC1, VBAT / 2 conectado al canal 17 de ADC1, referencia de voltaje VREFINT conectado al canal 18 de ADC1 y ADC2 y VOPAMP2 conectado al canal 17 de ADC2. Funciones lógicas adicionales incorporadas en el ADC la interfaz permite: 

• Muestra y retención simultáneas 
• Muestra y retención intercaladas 
• Técnicas de lectura de corriente de fase de derivación única. 

Hay tres watchdogs analógicos disponibles por ADC. El controlador DMA puede atender el ADC. La función de vigilancia analógica permite un monitoreo muy preciso del voltaje convertido de uno, algunos o todos los canales seleccionados. Se genera una interrupción cuando el voltaje convertido está fuera de los umbrales programados. Los eventos generados por los temporizadores de propósito general (TIM2, TIM3, TIM6, TIM15) y el temporizador de control avanzado (TIM1) se pueden conectar internamente al disparador de inicio y inyección de ADC, respectivamente, para permitir que la aplicación sincronice A / D conversión y temporizadores.

Para efectos de este curso, lo que haremos es trabajar el ADC de nuestra tarjeta sin utilizar interupciones u otros perifericos del micro, ya que como dije, este curso puede ser aplicado para diferentes tarjetas, y el hacerlo más complejo enredará a los que no esten utilizando este microcontrolador.

Funciones dispnibles para la lectura analoga-digital en Mbed Compiler



  • read () - Esto da un valor de punto flotante de rango de 0.0 a 0.1 con una precisión de 6 decimales. Pero para calcular el valor real necesitamos multiplicar con 3.3V, que es la referencia de voltaje para el chip. Esto aumentaría la sobrecarga en el procesador que requiere que se procese más y cada operación de punto flotante se vuelve costosa. Por lo tanto, no sería óptimo para ser utilizado.
  • read_u16 () - Esto da un valor corto sin firmar en el rango de 0xF000 a 0xFFFF. Aquí hay una trampa en esto, la parte superiornecesita cortarse. Así que el valor real estaría dado por(read_u16 () & amp; 0x0FFF) utilizando un bit a bit y para obtener el valor de 12 bits. Según la hoja de datos, sabemos que el ADC de LPC1768 es de 12 bits, por lo que el valor decimal máximo que puede esperar es 4095 y el Voltaje de referencia 3.3, por lo que para obtener el voltaje real necesitamos el siguiente cálculo: (read_u16 () & amp; 0x0FFF) * 3.3 / 4096 Por lo tanto, incluso si no queremos tener el valor exacto de la tensión, podemos utilizar el valor digital que no necesitaría la operación de punto flotante pesado. Esto hace que el uso de read_u16 () sea más económico en términos de tamaño de código y rendimiento.
Ya sabiendo a groso modo las características de nuestro mcircontrolador en cuanto a su periferico ADC, veremos el siguiente vídeo donde aprenderemos a manejar el conversor analogico-digital:

Y esto sería todo en la clase de hoy. Espero que les haya gustado esta entrada donde nos muestra el manejo del conversor analogo-digital en microcontroladores STM32 con el compilador Mbed Compiler. En la siguiente entrada veremos el uso del pwm que posee el microcontrolador usado en este curso.

Si no han visto los vídeos anteriores de este curso, a través del siguiente link podrán verlos: Curso STM32F303K8 Nucleo y Plataforma Mbed OS


Escrito por: Breismam Alfonso Rueda Díaz







Bien muchachos, esto es todo por hoy. Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.







Cualquier duda, trabajo, tutoria personalizada por correo electrónico o pagina en facebook:



domingo, 3 de marzo de 2019

XiuaElectronics: Curso STM32F303K8 Nucleo y Plataforma Mbed OS

Curso STM32F303K8 Nucleo y Plataforma Mbed OS: Manejo puertos I/O + retardos Clase #03.


Buenos días estimados lectores, en el día de hoy vamos a ver la clase #03 del curso de programación de microcontroladores STM32 con el compilaador Mbed Compiler de la plataforma Mbed OS. Para esta cuarta clase lo que haremos es aprender a manejar y configurar correctamente los puertos como entradas  y salidas. Además de esto aprenderemos a como generar retardos y poder aplicarlo en secuencias. Para comenzar veremos algo sobre las funciones utilizadas en esta clase:


  • DigitalIn: La interfaz DigitalIn se usa para leer el valor de un pin de entrada digital.
  • DigitalOut: La Interfaz DigitalOut se puede usar para establecer el estado del pin de salida y también para leer el estado de salida actual. Ajuste la salida digital a cero para apagarla, o 1 para encenderla.


Cabe resaltar que cualquiera de las anteriores funciones puede ser utilizada en los pines con etiquetas azules que nos muestra el PinOut de nuestro microcontrolador o nuestra tarjeta de desarrollo.




  • Wait: Cuando llame, wait la CPU de su mbed estará ocupada girando en un bucle esperando el tiempo requerido para pasar. Usando el mbed RTOS puede hacer una llamada a Thread::wait lugar. De esta manera, el programador del sistema operativo pondrá el subproceso actual en waiting state y permitirá que otro subproceso se ejecute, o incluso mejor, si no hay otros subprocesos en ready state , puede poner a todo el microcontrolador en modo de ahorro de energía. A continuación veremos sus variantees en cuanto al tiempo deseado a obtener en función de segundos, milisegundos y microsegundos.


/** Waits for a number of seconds, with microsecond resolution (within
  * the accuracy of single precision floating point).
  *
  * @param s number of seconds to wait
  */
 void wait(float s);

 /** Waits a number of milliseconds.
  *
  * @param ms the whole number of milliseconds to wait
  */
 void wait_ms(int ms);

 /** Waits a number of microseconds.
  *
  * @param us the whole number of microseconds to wait
  */
 void wait_us(int us);

Una vez que tenemos claro el funcionamiento de las funciones anteriormente mostradas, procederemos a observar en el siguiente vídeo la implementación de estas para el manejo básico de puertos del microcontrolador STM32F303K8:

Y esto sería todo en la clase de hoy. Espero que les haya gustado esta entrada, nuestro primero "Hola mundo" en microcontroladores STM32 con el compilador Mbed Compiler. En la siguiente entrada veremos el uso del conversor analogo-digital que posee nuestro microcontrolador usado en este curso.

Si no han visto los vídeos anteriores de este curso, a través del siguiente link podrán verlos: Curso STM32F303K8 Nucleo y Plataforma Mbed OS


Escrito por: Breismam Alfonso Rueda Díaz







Bien muchachos, esto es todo por hoy. Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.


Facebook: https://www.facebook.com/electronicalibrexc/
Youtube: https://www.youtube.com/c/breismanrueda
Twitter: https://twitter.com/BreismamR





Cualquier duda, trabajo, tutoria personalizada por correo electrónico o pagina en facebook:
Correo: ElectronicaLibreXC@outlook.com
Facebook: https://www.facebook.com/electronicalibrexc/




jueves, 21 de febrero de 2019

XiuaElectronics: Curso STM32F303K8 Nucleo y Plataforma Mbed OS

Curso STM32F303K8 Nucleo y Plataforma Mbed OS:  Platarforma Mbed OS Clase #02.


Buenos días estimados lectores. En el día de hoy vamos a ver la segunda clase del curso STM32F303K8 Nucleo y Plataforma Mbed OS. Programación de microcontroladores de 32btis con Mbed OS. Para esta segunda clase vamos aver como configurar corectamente Mbed OS para poder trabajarlo con cualquier tarjeta, que para este caso trabajaremos con la STM32F303K8 Nucleo de Stmicroelectronics.

Mbed OS y compatibilidad con tarjetas de 32bit existentes.

Como sabemos por anteriores entradas, Mbed es una plataforma desarrollada por ARM para microcontroladores de 32bits. Pero bueno, en el mercado hay infinidad de tarjetas, entonces ¿soporta todas las tarjetas que estas basadas en micros de 32 bits? la respuesta es simple, y eso NO. ARM contruye sus  propios microcontroladores de 32bits pero su negocio en general es vender licencias de los núcleos IP que sirven para desrrollar los famosos cortex M, y actualmente muchas empresas lo que hacen es diseñar sus microcontroladores con base en estos. Es decir, casi que son identicos; simplemte le agregan más perifericos y nuevas tecnologías. La arquitectura (RISC) que diseño ARM para los cortex son casi que universales y esto es lo que precisamente permite que casi todos los micros en el mercado sean compatibles para la plataforma Mbed OS. Miremos algunas de las empressas que son soportadas en Mbed:


En general estas son las empresas las cuales diseñan microcontroladores de 32 bits con base a  la arquitectura de ARM son bastantes, aunque hay algunas que no como Microchip --pero ya se estan declinando--. Ahora en esta entrada aprenderemos a configurar algún microcontrolador soportado con el compilador Mbed OS a través del siguiente vídeo:
Y esto sería todo lo necesario para poder epezar a programar en Mbed OS. Espero que les haya gustado esta entrada. en la siguiente estaremos programando el "hola mundo" del mundo de nuestros microcontroladores.

Si no han visto los vídeos anteriores de este curso, a través del siguiente link podrán verlos: Curso STM32F303K8 Nucleo y Plataforma Mbed OS



Escrito por: Breismam Alfonso Rueda Díaz








Bien muchachos, esto es todo por hoy. Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.







Cualquier duda, trabajo, tutoria personalizada por correo electrónico o pagina en facebook:
Correo: ElectronicaLibreXC@outlook.com
Facebook: https://www.facebook.com/electronicalibrexc/





miércoles, 20 de febrero de 2019

XiuaElectronics: Curso STM32F303K8 Nucleo y Plataforma Mbed OS

 Curso STM32F303K8 Nucleo y Plataforma Mbed OS: Actualización de firmware de St-link V2. Clase #01.


Buenos días estimados lectores. En el día de hoy vamos a ver la primera clase del curso de programación de microcontroladores STM32 con la plataforma Mbed OS. Para esta primera clase lo que vamos a hacer es actualizar nuestro progrmador interno que poseen las tarjetas Nucleo. Antes que nada vamos a ver como funciona el Stlink V2.


¿Qué es el programador St-link V2 y cuales son sus características?


El ST-LINK / V2 es un depurador y programador en circuito para las familias de microcontroladores STM8 y STM32. Las interfaces del módulo de interfaz de un solo cable (SWIM) y JTAG / depuración de cable en serie (SWD) se utilizan para comunicarse con cualquier microcontrolador STM8 o STM32 ubicado en una placa de aplicación. Además de proporcionar las mismas funciones que el ST-LINK / V2, el ST-LINK / V2-ISOL cuenta con aislamiento digital entre la PC y la placa de aplicación de destino. También soporta voltajes de hasta 1000 Vrms. Las aplicaciones STM8 utilizan la interfaz USB de velocidad completa para comunicarse con el software ST Visual Develop (STVD) o ST Visual Program (STVP). Las aplicaciones STM32 utilizan la interfaz USB de velocidad completa para comunicarse con Atollic®, IAR ™, Keil® o para TASKING en entornos de desarrollo integrado.






Las características de este programador son:

  • Alimentación de 5 V suministrada por un conector USB
  • Interfaz compatible con USB 2.0 a toda velocidad
  • Cable USB estándar de A a Mini- B
  • Características específicas de SWIM
  • 1.65 V a 5.5 V voltaje de aplicación soportado en la interfaz SWIM
  • Modos SWIM de baja velocidad y alta velocidad soportados
  • Velocidad de programación SWIM: 9.7 Kbytes / s en baja velocidad y 12.8 Kbytes / s en alta velocidad
  • Cable SWIM para la conexión a la aplicación a través de un conector vertical estándar ERNI (ref: 284697 o 214017) o conector horizontal (ref: 214012)
  • Cable SWIM para la conexión a la aplicación a través de un conector o un conector de paso de 2,54 mm
  • Características específicas de JTAG / serial wire debugging (SWD):
  • Voltaje de aplicación de 1,65 V a 3,6 V admitido en la interfaz JTAG / SWD y entradas tolerantes de 5V
  • Cable JTAG para la conexión a un conector estándar de 2.54 mm JTAG de paso de 20 pines
  • Compatible con JTAG
  • Soporta comunicación SWD y visor de cable serie (SWV)
  • Función de actualización directa de firmware compatible (DFU)
  • LED de estado que parpadea durante la comunicación con la PC
  • Temperatura de funcionamiento 0 a 50 ° C.
  • 1000 Vrmshigh voltaje de aislamiento (solo ST-LINK / V2-ISOL)
Bien muchachos. Básicamente esto es lo que concierne al programador St-link V2, a diferencia del de la imagen anterior, el de nuestra tarjeta Nucleo se encuentra miniaturizado. Ahora y que conocemos a ciencia cierta las características de nuestro programador/depurador, vamos a ver en el siguiente vídeo como poder actualizar el firmware que posee este para corrección derrores y mejoras de nuestro dispositivo:

Como vimos en el vídeo anterior, necesitaremos un software para poder actualizar nuestro programador. En el siguiente link podrán descargarlo: ST-LINK, ST-LINK/V2, ST-LINK/V2-1, STLINK-V3 boards firmware upgrade

Si no han visto los vídeos anteriores de este curso, a través del siguiente link podrán verlos: Curso STM32F303K8 Nucleo y Plataforma Mbed OS

Escrito por: Breismam Alfonso Rueda Díaz








Bien muchachos, esto es todo por hoy. Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.


Facebook: https://www.facebook.com/electronicalibrexc/
Youtube: https://www.youtube.com/c/breismanrueda
Twitter: https://twitter.com/BreismamR



Cualquier duda, trabajo, tutoria personalizada por correo electrónico o pagina en facebook:

Correo: ElectronicaLibreXC@outlook.com
Facebook: https://www.facebook.com/electronicalibrexc/



martes, 19 de febrero de 2019

XiuaElectronics: Curso STM32F303K8 Nucleo y Plataforma Mbed OS

Curso STM32F303K8 Nucleo y Plataforma Mbed OS: Introducción


Buenas noches estimados lectores. En el día de hoy daremos comienzo al curso de programación de mcirocontroladores STM32 con la plataforma Mbed OS de la empresa ARM. Para este curso estaremos trabajando con la tarjeta de desarrollo STM32F303K8 Nucleo, una tarjeta muy práctica de conseguir y de utilizar para muchos estudiantes e ingenieros, y el público en general interesado en el tema.
En este curso vamos a programar como les mencione anteriormente la tarjeta de desarrollo nucleo basada en el STM32F303K8. Aprenderemos a configurar y usar sus diferentes perifericos, desde salidas y entradas digitales hasta llegar a USART. Tal vez I2C y SPI. Este curso será básico, así que no profundizaremos tanto en el uso de los perifericos, pero con lo visto en este podrán profundizar por su cuenta en el mundo de la programación de 32 bit. Comenzemos conociendo el software y el hardware a utilizar.

¿Qué es Mbed OS?


Mbed es una plataforma y sistema operativo para dispositivos conectados a Internet basados ​​en microcontroladores ARM Cortex-M de 32 bits. Tales dispositivos también se conocen como dispositivos de Internet de las cosas . El proyecto es desarrollado en colaboración por Arm y sus socios tecnológicos.

Las aplicaciones para la plataforma Mbed se pueden desarrollar utilizando el IDE en línea de Mbed, un editor y compilador de código en línea gratuito. Solo es necesario instalar un navegador web en la PC local, ya que un proyecto se compila en la nube, es decir, en un servidor remoto, utilizando el compilador ARMCC C / C ++. El IDE de Mbed proporciona espacios de trabajo privados con la capacidad de importar, exportar y compartir código con el control de versión de Mercurial distribuido, y se puede usar también para la generación de documentación de código.

Las aplicaciones para la plataforma Mbed se pueden desarrollar utilizando el IDE en línea de Mbed, un editor y compilador de código en línea gratuito. Solo es necesario instalar un navegador web en la PC local, ya que un proyecto se compila en la nube, es decir, en un servidor remoto, utilizando el compilador ARMCC C / C ++. El IDE de Mbed proporciona espacios de trabajo privados con la capacidad de importar, exportar y compartir código con el control de versión de Mercurial distribuido, y se puede usar también para la generación de documentación de código.


¿Qué es STM32 Nucleo?

Las placas STM32 Nucleo altamente asequibles permiten a cualquiera probar nuevas ideas y crear prototipos rápidamente con cualquier MCU STM32.

Al compartir los mismos conectores, las placas Nucleo STM32 se pueden ampliar fácilmente con una gran cantidad de complementos de hardware de aplicaciones especializadas (Nucleo-64 incluye conectores morfo de Arduino Uno rev3 y ST, Nucleo-32 incluye conectores Arduino Nano).

Las placas STM32 Nucleo integran un depurador/programador ST-Link, por lo que no hay necesidad de una sonda separada.

Con las placas Núcleo STM32 se proporciona una biblioteca HAL de software STM32 junto con varios ejemplos de software, que funcionan a la perfección con una amplia gama de entornos de desarrollo que incluyen IAR EWARM, Keil MDK-ARM, mbed y IDE basados ​​en GCC / LLVM.

Todos los usuarios de STM32 Nucleo tienen acceso gratuito a los recursos en línea de mbed (compilador, C / C ++ SDK y comunidad de desarrolladores) en www.mbed.org, lo que permite crear una aplicación completa en solo unos minutos.


Bueno muchachos ya que miramos a groso modo sobre los que es la plataforma de desarrollo Mbed OS y las tarjetas de desarrollo Stm32 Nucleo, ahora vamos a ver la introducción al curso de programación STM32 Nucle con Mbed OS:

Bien muchachos, técnicamente esta es la bienvenida y la introducción del curso que nos espera. En una nueva entrada miraremos el como actualizar firmware que posee el programador interno de la tarjeta de desarrollo STM32F303K8 Nucleo.


Escrito por: Breismam Alfonso Rueda Díaz








Bien muchachos, esto es todo por hoy. Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.


Facebook: https://www.facebook.com/electronicalibrexc/
Youtube: https://www.youtube.com/c/breismanrueda
Twitter: https://twitter.com/BreismamR



Cualquier duda, trabajo, tutoria personalizada por correo electrónico o pagina en facebook:

Correo: ElectronicaLibreXC@outlook.com
Facebook: https://www.facebook.com/electronicalibrexc/




viernes, 25 de enero de 2019

XiuaElectronics: Inteligencia artificial aplicada a microcontroladores Parte #02

Inteligencia artificial aplicada a microcontroladores Parte #02


Buenos días estimados lectores. En el día de hoy continuaremos con la segunda parte se inteligencia artificial aplicada a microcontroladores. 

Para aquellos que aún no están en contexto, a través del siguiente link podrán ver la primera parte. Analizando la entrada anterior a este tema pudimos ver que de alguna forma un microcontrolador nos daba la posibilidad de poder integrar  una red neural artificial, o en general algún método de la inteligencia artificial para optimizar algún tipo de proceso. Quedamos a la espectativa de saber si es posible o no el implementar esto; para fortuna de todos si. Resulta que tras un tiempo de consultas y estudios, pude observar que hay algo llamado programación dinamica; y aquí se encuentra un aliciente pero no el unico de la solución de este contexto.


Mapa de problema sobre diligencias

¿Qué es la programación dinámica?



La programación dinámica es un método para reducir el tiempo de ejecución de un algoritmo mediante la utilización de subproblemas superpuestos y subestructuras óptimas. El matemático Richard Bellman inventó la programación dinámica en 1953 que se utiliza para optimizar problemas complejos que pueden ser discretizados y secuencializados.

Una subestructura óptima significa que se pueden usar soluciones óptimas de subproblemas para encontrar la solución óptima del problema en su conjunto. Por ejemplo, el camino más corto entre dos vértices de un grafo se puede encontrar calculando primero el camino más corto al objetivo desde todos los vértices adyacentes al de partida, y después usando estas soluciones para elegir el mejor camino de todos ellos. En general, se pueden resolver problemas con subestructuras óptimas siguiendo estos tres pasos:

  • Dividir el problema en subproblemas más pequeños.
  • Resolver estos problemas de manera óptima usando este proceso de tres pasos recursivamente.
  • Usar estas soluciones óptimas para construir una solución óptima al problema original.
  • Los subproblemas se resuelven a su vez dividiéndolos en subproblemas más pequeños hasta que se alcance el caso fácil, donde la solución al problema es trivial.


Decir que un problema tiene subproblemas superpuestos es decir que se usa un mismo subproblema para resolver diferentes problemas mayores. Por ejemplo, en la sucesión de Fibonacci (F3 = F1 + F2 y F4 = F2 + F3) calcular cada término supone calcular F2. Como para calcular F5 hacen falta tanto F3 como F4, una mala implementación para calcular F5 acabará calculando F2 dos o más veces. Esto sucede siempre que haya subproblemas superpuestos: una mala implementación puede acabar desperdiciando tiempo recalculando las soluciones óptimas a problemas que ya han sido resueltos anteriormente.

Esto se puede evitar guardando las soluciones que ya hemos calculado. Entonces, si necesitamos resolver el mismo problema más tarde, podemos obtener la solución de la lista de soluciones calculadas y reutilizarla. Este acercamiento al problema se llama memoización (no confundir con memorización; en inglés es llamado memoization). Si estamos seguros de que no volveremos a necesitar una solución en concreto, la podemos descartar para ahorrar espacio. En algunos casos, podemos calcular las soluciones a problemas que de antemano sabemos que vamos a necesitar.

Cuando hablamos de optimizar nos referimos a buscar alguna de las mejores soluciones de entre muchas alternativas posibles. Dicho proceso de optimización puede ser visto como una secuencia de decisiones que nos proporcionan la solución correcta. Si, dada una subsecuencia de decisiones, siempre se conoce cuál es la decisión que debe tomarse a continuación para obtener la secuencia óptima, el problema es elemental y se resuelve trivialmente tomando una decisión detrás de otra, lo que se conoce como estrategia voraz. En otros casos, aunque no sea posible aplicar la estrategia voraz, se cumple el principio de optimalidad de Bellman que dicta que «dada una secuencia óptima de decisiones, toda subsecuencia de ella es, a su vez, óptima». En este caso sigue siendo posible el ir tomando decisiones elementales, en la confianza de que la combinación de ellas seguirá siendo óptima, pero será entonces necesario explorar muchas secuencias de decisiones para dar con la correcta, siendo aquí donde interviene la programación dinámica.

Contemplar un problema como una secuencia de decisiones equivale a dividirlo en problemas más pequeños y por lo tanto más fáciles de resolver como hacemos en Divide y Vencerás, técnica similar a la de programación dinámica. La programación dinámica se aplica cuando la subdivisión de un problema conduce a:

Ejemplo sobre problema de diligencia-programación dinámica
  • Una enorme cantidad de problemas.
  • Problemas cuyas soluciones parciales se solapan.
  • Grupos de problemas de muy distinta complejidad.

Pero como vimos anteriormente en la definición de programación dinámica, podemos deducir que unos de los problemas fundamentales al momento de intentar programar un algoritmo de forma dinámica es la cantidad de memoria que se necesitaría para poder programar los distintos subproblemas que conllevaría la implementación. Pero bueno, para esto hay una solución y es la implementación de una memoria flash externa controlada por algún periférico SPI que posea el microcontrolador. Entonces, en la actualidad. ¿porqué no se implementan este tipo de programación?, por una sencilla razón, y es que los compiladores no estan optimizados para este tipo de programación. Entonces, ¿si no están optimizados para este tipo de programación, porqué no los optimizan?. Resulta que este tipo de programación no es muy eficiente para distintas situaciones, por tal razón, no es viable optimizar los microcontroladores para estos tipos de algoritmos; pero bueno, no todo son malas noticias, hay situaciones que poco a poco se van presentando en la industria de una manera exponencial y que sugiere la nesecidad de implementar algún tipo de algoritmo autónomo que dependiendo de las variables, pueda decidir la mejor solución sin necesidad de intervención humana. Es en este punto donde entra a jugar las DNN (Deep Neural Networks), que son algoritmos entrenados para para realizar tareas específicas. Anteriormente mencioné que si se puede implementar inteligencia artificial en los microcontroladores; básicamente se puede hacer algunos arreglos, crear compiladores que se ajusten a la necesidad de un algoritmo tan especializado como lo son como los de programación dinámica, pero como dije anteriormente el tiempo es un recurso que no podemos olvidar, y si es para un proyecto de baja escala, posiblemente no valga la pena ponerse a realizar este trabajoso proceso.

Una solución actual y que es muy viable es implementar una DNN, que en cuestión ya es posible. Veremos este apartado de implementación de redes neurales en microcontroladores en una tercera parte para poder tratar mejor el tema.

Aquí podrás ver la Parte #03.


Escrito por: Breismam Alfonso Rueda Díaz


Fuentes:

  • http://www.konradlorenz.edu.co/images/stories/suma_digital_matematicas/Programacion%20Dinamica.PDF
  • https://www.st.com/content/st_com/en/about/innovation---technology/artificial-intelligence.html
  • Xumari, G.L. Introduction to dynamic programming. Wilwy & Sons Inc., New York. 1967.




Bien muchachos, esto es todo por hoy. Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.




Cualquier duda, trabajo, tutoria personalizada por correo electrónico o pagina en facebook:




sábado, 10 de noviembre de 2018

XiuaElectronics: Inteligencia artificial aplicada a microcontroladores Parte #01

Inteligencia artificial aplicada a microcontroladores Parte #01

Buenos días estimados lectores. 

En el día de hoy veremos un tema de mucha importancia actualmente ya que nos proveerá el conocimiento necesario sobra las tecnologías emergentes como lo son la IA o inteligencia artificial y su implementación actual. Comencemos.

En la actualidad han aparecido diferentes tecnologías que han optimizado los procesos y la tareas de la cotidianidad, como lo son las tareas que requieren cierto grado de supervisión y toma de decisiones con base en señales proveniente de ellas. Un ejemplo claro de esto seria el buzón de voz de nuestros celulares. La tarea sería llamar; las posibles señales serían por ejemplo en caso en el que el usuario contestara, otra señal sería el caso de que no conteste y la otra señal sería el caso en el que el celular este apagado. cada una de estas señales requieren cierto tipo de respuesta, y para eso las tecnología nos ha provisto de procesadores los cuales cumplen la función de efectuar una decisión previamente programada. Por ejemplo cuando el usuario no contesta, el procesador esta programado para que nos redireccione al buzón de voz de nuestro servicio de telefonía. Ojo con esto último, no estamos hablando del procesador de nuestros celulares, sino de los servidores que nuestro proveedor de servicios utiliza para sistematizar las comunicaciones.

Acá es donde empezamos a ver lo complejo del asunto, ya que anteriormente dijimos que las decisiones son previamente programadas, pero ¿qué pasaría si hubieran nuevos parámetros desconocidos por el prestador de servicios y el programador de acciones del procesador?. En el caso hipotético donde necesitáramos de una nueva acción no programada, el procesador no sabría como actuar y por tal motivo nos arrojaría respuestas aleatorias o tal vez se quedaría dormido. Para solucionar este inconveniente se aplican técnicas como lo son el machine learning  o aprendizaje automático para la toma de decisiones con base en distintas señales y sin necesidad de efectuar una programación de respuestas sistemáticas. En este punto lo que hace el programa es utilizar distintas variables para poder ejecutar una respuesta con base en un ejemplo previamente programado. para entender mejor como funciona el learning machine vamos a utilizar un ejemplo de  un equipo biomédico para la predicción de tumores.


Figura 1: Predicción de tumores malignos con respecto al tamaño
Resulta que la implementación del aprendizaje automático para la predicción de tumores tiene como punto de referencia ejemplos de la vida real, y de esta forma se vuelve un método probabilístico muy confiable. vamos a desglosar mejor este asunto. 

En la figura 1 podemos observar una gráfica que nos muestra un eje horizontal que representa el tamaño de un tumor y el eje vertical nos representa si efectivamente el tumor el benigno o maligno. Los cuadros azules nos representan los casos en los que el tumor fue benigno, y los hexágonos nos van a representar los casos en los que el tumor fue maligno. Según la gráfico podemos ver que entre el tumor fue más grande hubo más casos en los que fue maligno, pero en cambio para los casos que el tumor fue benigno, era de menor tamaño. Los casos anteriormente mostrados los podemos tomar como ejemplo para crear un programa que obtenga el tamaño de un tumor y con base en este podamos saber que probabilidades tiene de que sea un tumor benigno o maligno. Imaginemosnos el escenario donde a través de una resonancia magnética un equipo biomédico nos mida le tamaño de un tumor y con base en ejemplos de la vida real se pueda predecir si es o no maligno. Pues bien, funcionaría de la forma en la que lo describimos anteriormente en la gráfica, y es aquí donde empieza a jugar el aprendizaje automático, ya que un tumor es probablemente maligno no lo por su tamaño sino que también por la edad del paciente, y otras características que posea el portador del tumor; en estos casos lo que se utiliza es una gran base de datos en una nube para tomar miles de ejemplos de diagnósticos positivos y negativos y así decidir si es o no maligno.

Pero cuando no tenemos grande cantidades de datos solo podemos tener en cuenta cierta cantidad de ejemplos. Recordemos que una nube es simplemente un servidor conectado a la red de Internet, así que en los casos que no haya Internet necesitaremos otras maneras, o simplemente estaremos limitados. Pero bueno dijimos que esto solo es aplicado a los servidores, que funcionan con microprocesadores, pero, ¿no podemos implementarlo en microcontroladores?. La respuesta de la anterior pregunta reside en cual es la diferencia de un procesador y un microcontrolador.


¿Qué son los microprocesadores?


Son los encargados de ejecutar los programas, desde el sistema operativo hasta las aplicaciones de usuario; sólo ejecuta instrucciones programadas en lenguaje de bajo nivel, realizando operaciones aritméticas y lógicas simples, tales como sumar, restar, multiplicar, dividir, las lógicas binarias y accesos a memoria.
Puede contener una o más unidades centrales de procesamiento (CPU) constituidas, esencialmente, por registros, una unidad de control, una unidad aritmético lógica (ALU) y una unidad de cálculo en coma flotante (conocida antiguamente como «coprocesador matemático»).



¿Qué son los microcontroladores?


Un microcontrolador (abreviado μC, UC o MCU) es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales cumplen una tarea específica. Un microcontrolador incluye en su interior las tres principales unidades funcionales de una computadora: unidad central de procesamiento, memoria y periféricos de entrada/salida.

Según lo anterior dentro de un microcontrolador hay un microprocesador, y es aquí donde entramos a la pregunta clave de este tema, ¿podemos utilizar el aprendizaje automático con los microcontroladores ya que poseen un microprocesador en su interior?; esto lo veremos en la siguiente entrada amigos.






Esperemos en la próxima entrada la continuación de este tema tan interesante y de suma importancia.

Aquí podrás ver la Parte #02.

Escrito por: Breismam Alfonso Rueda Díaz


Fuente:
  • https://www.cancer.net/cancer-types/31366/view-all
  • https://jaimetorresy.blogspot.com/p/unidad-central-de-proceso-ucp-cpu.html
  • https://tallerelectronica.com/2014/11/30/microcontroladores/






Bien muchachos, esto es todo por hoy. Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.




Cualquier duda, trabajo, tutoria personalizada por correo electrónico o pagina en facebook:
Facebook: https://www.facebook.com/electronicalibrexc/






domingo, 21 de octubre de 2018

XiuaElectronics: ¿Cuál es la diferencia entre STM32FX Discovery y STM32FX Núcleo ?

¿Cuál es la diferencia entre STM32FX Discovery y STM32FX Núcleo?

Buenos días estimados lectores. 

En el día de hoy vamos a hablar acerca de dos placas de desarrollo muy interesantes del mundo de 32 bits, se trata de las STM32 Núcleo y Discovery, pertenecientes a la empresa Stmicroelectronics; empresa de semiconductores especializada en el desarrollo de componentes electrónicos desde diodos hasta microcontroladores. Esta empresa lleva mucho tiempo incursionando en el mundo de los microcontroladores, teniendo como fuerte los microcontroladores de 32 bits, los famosos STM32F.  En América latina no eran muy conocidos por el atraso tecnológico que se ve en esta región, afortunadamente hay personas que como yo y muchos más, tratan de buscar estas tecnologías y hacer masiva la difusión de estas para que los hablantes hispanos y en general todo latinoamerica pueda aprovechar el uso de estas herramientas.

Stmicroelectronics nos trae a disposición como mencione anteriormente, dos tarjetas de desarrollo, las STM32F Discovery y las STM32 Núcleo, esta última es de desarrollo más reciente. Pero bueno, si hay dos tarjetas de desarrollo de microcontroladores de 32 bits de la misma empresa, ¿cuál elegir?, ¿cuál es la diferencia entre ellas?. Resulta que las STM32 Discovery son tarjetas de desarrollo que salieron al mercado en el 2010, a comparación de las STM32 Núcleo que salieron 4 años más tarde.

STM32F3 Discovery

Tarjetas de desarrollo STM32 Discovery


Las Discovery son tarjetas las cuales van enfocadas para un ambiente más de laboratorio, es decir, el uso de estas tarjetas de desarrollo van enfocadas más a los profesionales que desean evaluar distintos desarrollos con base en los microcontroladores STM32Fxxx. Estas tarjetas de desarrollo en general están enfocadas a probar distintas tecnologías como lo son los acelerometros, giroscopios y sensores MEMS, etcétera, aprovechando que su hardware esta diseñado y pensado para dar soporte exclusivo a estas tecnologías.Los kits de desarrollo STM32 Discovery son una solución económica y completa para la evaluación de las capacidades sobresalientes de los MCU STM32. Llevan la infraestructura necesaria para la demostración de las características específicas del dispositivo, una biblioteca HAL y ejemplos completos de software que permiten aprovechar al máximo las características y los valores agregados del dispositivo, que funcionan a la perfección con una amplia gama de entornos de desarrollo que incluyen IAR EWARM, Keil MDK-ARM, mbed y IDE basados en GCC / LLVM.
Los conectores de extensión dan acceso a la mayoría de las Entradas/Salidas del dispositivo y hacen posible la conexión de hardware adicional.
Con el depurador / programador integrado, los kits Discovery STM32 son ideales para la creación de prototipos.





STM32F3 Núcleo

Tarjetas de desarrollo STM32 Núcleo

Las STM32 Núcleo son tarjetas de desarrollo las cuales fueron pensadas para rápidos desarrollos el cual no involucre tecnologías complejas, es decir, se puede hacer casi que lo mismo que con las Discovery, pero la diferencia es que las Núcleo no posee un hardware dedicado a distintas tecnologías, entonces como resultado nos da el tener que desarrollar todo el hardware por nosotros mismos en dado caso que se requiera.
Las Núcleo fueron pensadas más que todo para los estudiantes, makers y personas que no son allegadas a la electrónica y en general para los que no tienen un conocimiento básico de los microcontroladores que nos provee Stmicroelectronics.
Las placas STM32 Núcleo altamente asequibles permiten a cualquiera probar nuevas ideas y crear prototipos rápidamente con cualquier MCU STM32.
Al compartir los mismos conectores, las placas Núcleo STM32 se pueden ampliar fácilmente con una gran cantidad de complementos de hardware de aplicaciones especializadas (Núcleo-64 incluye conectores morfo de Arduino Uno rev3 y ST, Núcleo-32 incluye conectores Arduino Nano).
Las placas STM32 Núcleo integran un depurador / programador ST-Link, por lo que no hay necesidad de una sonda separada.
Con las placas STM32 Núcleo se proporciona una biblioteca HAL de software STM32 junto con varios ejemplos de software, que funcionan a la perfección con una amplia gama de entornos de desarrollo que incluyen IAR EWARM, Keil MDK-ARM, mbed y IDE basados en GCC / LLVM.


Bien, ya como vimos algunas de las características generales de estas dos placas  de desarrollo, vamos a utilizar la serie F303 de STM32 y buscar sus equivalentes en las Núcleo y en las Discovery para poder así hacer una comparación más profunda en cuando hardware.


Como podemos observar en el cuadro de características generales de cada tarjeta de desarrollo, las tarjetas tienen unas diferencias considerables. La primera es la memoria RAM; como les había comentado anteriormente las Núcleo son más recientes que las Discovery, por tal razón el microcontrolador de las Núcleo incluye nuevas características y en este caso una de esas es el aumento de memoria flash y RAM casi que al doble. También la Núcleo posee una nueva variante de la RAM entre otras características. Para el número de pines que incluye cada tarjeta en este caso por el diseño y el propósito la Discovery tiene mayor número de pines los cuales son configurables dependiendo del proyecto, aunque unos son dedicados exclusivamente a los sensores, pero estos se pueden manipular con un conocimiento ya intermedio con respecto al tema. Como son de la misma serie, ambas placas poseen las mismas características en cuanto a oscilador. Ambas poseen un programador ST-LINK V2 interno, pero varia en que algunas versiones de las placas son más recientes y por ende cambiará el tipo de conector en las Discovery. También  debemos tener en cuenta que como las núcleo son recientes por decirlo de alguna manera, el programado soportará la depuración, almacenamiento interno y puerto COM virtual en todas sus versiones. Para el caso de las Discovery solo para los modelos más recientes.
En la parte de sensores, vemos que las Núcleo no tienen ninguno, pero en cambio la Discovery STM32F303VC posee Giroscopio de 3 ejes de salida digital que se puede visualizar mediante los leds que posee esta; sensor de movimiento, sensor de aceleración lineal 3D y un sensor magnético digital 3D. Como les había comentado antes, esta es la gran diferencia de estas placas de desarrollo. La Discovery es simplemente un recurso especializado en ciertas tecnologías que solo es amigable para el que sabe, --Sorry arduineros, ja, ja, ja!-- . En cuanto a los leds, la Núcleo posee un solo led para aplicaciones con Shields de Arduino; en cambio la Discovery posee 10 leds. Un led de comunicación USB, uno para alimentación, y ocho leds los cuales podemos utilizar a nuestro antojo. Estos ocho leds vienen diseñados de tal forma que quedan ubicados en una circunferencia blanca, donde se nos indica el norte, sur, este y oeste. Lo anterior es con el fin de aprovecharlos y poder visualizar la salida del giroscopio, aunque también se pueden utilizar para lo que queramos. Las Núcleo y Discovery poseen 2 pulsadores, uno para resetear la placa y el otro para gusto del usuario. En cuanto a shields, la Núcleo se pensó para el publico en gneral, para el que quiera aprender y para el maker y demás, por tal razón es compatible con algunos escudos de Arduino y los propios del Stmicroelectronics. En la Discovery hay shields de empresas especializadas como MikroBus o de terceros que se ven prometedores, --aún no las e podido probar--. En cuanto a IDEs soportadas, casi que las mismas, con excepción de las Núcleo que soportan la plataforma en nube Mbed, diseñada especialmente para flexibilidad y facilidad a la hora de programar, --un lenguaje como el de Arduino pero más bonito y en la nube--. por último pero no menos importante, Las Discovery poseen un puerto USB dedicado para aplicaciones del usuario, en comparación con las Núcleo que no poseen.

En cuanto al precio, la Núcleo presentada en esta entrada esta según pagina oficial a $10.32 USD y la Discovery a $15.75 USD.

Conclusiones

Las Núcleos son tarjetas de desarrollo interesantes aunque con muy poco hardware dedicado, por tal razón se vuelven genéricas en un proyecto y más para uno de producción-venta. Lo anterior no es un impedimento para poder agregarle el hardware necesario para aplicaciones especificas, pero si se alarga el tiempo de desarrollo en estos escenarios, aunque las shields ayuden y amortigüen el golpe en cuestión.  Para el caso de las Discovery, simplemente son geniales, poseen todo lo necesario para embarcarse en infinidad de proyectos, pero el asunto acá es que son para personas con conocimientos intermedios y avanzados del tema. Las Discovery posee menos memoria en este caso, cosa que se puede suplir programandolas en bajo nivel, no tipo ASM sino más bien una variante de C ligera que trabaja con los registros, algo como las "low layer library- LL" que nos proporciona Stmicroelectronics. Mbed consume más memoria por tal razón las Núcleo poseen más.

Esta entrada no se trata de ver cual es mejor que cual, sino ver sus diferencias y cual es mejor opción para los distintos tipos de personas que las usarán. SI tiene cosas que agregar u opiniones y demás, en la parte de abajo puedes dejarlo en un comentario.


Escrito por: Breismam Alfonso Rueda Díaz





Bien muchachos, esto es todo por hoy. Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.




Cualquier duda, trabajo, tutoria personalizada por correo electrónico o pagina en facebook: