Manual primer proyecto STM32. Parte 2: Software

IDE STM32

En esta segunda parte, veremos el software que usaremos para un primer proyecto con microcontroladores STM32. En este punto, suponemos que ya tenemos una placa comprada o la hemos diseñado según hemos visto en diseño de un circuito electrónico con STM32.

Como comenté en la entrada Software para programar STM32, en diciembre del 2017 ST compró el IDE de programación Atollic TrueStudio que estaba basado en Eclipse y lo hizo gratuito para todos los usuarios. Ya desde ese primer momento, toda la comunidad sospechaba que ST volvería a hacer otro movimiento en su ecosistema de programación. Y así ha sido, el 2 de mayo de 2019 no habiendo pasado ni año y medio desde la compra de Atollic, ST anuncia la descontinuación del IDE de Atollic y la creación de un nuevo programa, el STM32CubeIDE. Dicho softare es la unificación de su ecosistema de programación donde se integra CubeMX, que es un generador de código base, con Atollic. A día de hoy, usar CubeIDE es como usar CubeMX y Atollic por separado pero bajo una misma interfaz. Aún así CubeIDE aún está bastante verde, pero como va a ser el camino a seguir y todo lo que se muestre es copia exacta de lo que se haría en CubeMX y Atollic, voy a hacer la documentación basándome en CubeIDE.

¿Qué es un IDE de programación?

Un IDE de programación no es más que un entorno de programación donde se ha unificado un editor de código, un compilador y un depurador (debug) todo ello bajo una misma interfaz gráfica.

Manual primer proyecto STM32. Parte 1: Diseño Electrónico

Hace años me costó bastantes dolores de cabeza tener todas las piezas claras y como sé que el artículo más visitado de LibreServo es Software para programar STM32, voy a intentar realizar un artículo que conglomere todos los pasos necesarios para poner a funcionar desde cero un microcontrolador STM32, tanto a nivel de diseño electrónico, como de programación. Como LibreServo está basado en el microcontrolador STM32f302K8, todo irá referenciado a éste microcontrolador por facilidad, pero los pasos son exportables a todos los microcontrolador más comunes de la familia STM32 ARM Cortex de ST, de hecho, si es tu primer proyecto no sería la mejor opción con la que empezar, más que nada por el encapsulado que trae. El STM32F302C8 sería el gemelo pero en un encapsulado mucho más sencillo de soldar. Pero hay literalmente decenas de microcontroladores según lo que cada uno requiera.

Esquema electrónico mínimo para STM32 Esquema electrónico mínimo para STM32

Comparativa Smart Servos (Serial Servos)

Comparativa de Smart Servos
Comparativa de Smart Servos

Hace poco hablé de la nueva línea de Smart Servos de Lynxmotion y se me ocurrió que sería un buen tema poner en papel las caracteríasticas del resto de Smart Servos del mercado realizando una pequeña comparativa entre todos ellos. También ayudará a dejar plasmado qué es lo que voy a superar, ya que LibreServo nace con entre otras pretensiones, como ya expuse en objetivos de Libreservo, superar lo ya existente en el mercado a nivel software y electrónico, que son las partes que dependen de mi.

¿Por qué usar un Smart Servo en vez de un Servo estándar?

Casi con total seguridad si estás leyendo esta entrada ya tengas bien claro por qué quieres utilizar un Smart Servo, pero para algún despistado, vamos a ver qué motivos hay para usar un Smart Servo en vez de uno estándar.

  • Comunicación: La comunicación en un servo estándar es unidireccional. Al servo se le comunica la posición en la que quieres que esté pero no hay forma de tener una respuesta por parte del servo; si ha llegado a la posición, si el servo se está sobrecalentando, si tiene algún problema o alguna otra cuestión.
  • Software: Un servo estándar requiere de un señal PWM con un pulso bastante preciso, el cual se repite 50 veces por segundo. Cuando el número de servomotores aumenta, manejar dicha señal sobre todos los servomotores para que se vaya actualizando de manera adecuada para conseguir un movimiento suave y continuo 50 veces por segundo no es tan sencillo. Por norma, si se quiere una señal precisa, se necesita de timers dedicados para ello y cuando se manejan muchos servomotores, no se suelen tener tantos timers. Si has usado la librería servo.h de arduino la cual usa un sólo timer para intentar generar las señales de servo y has querido generar un movimiento suave, que cambie la posición 50 veces por segundo, habrás podido experimentar que la señal generada dista mucho de ser precisa y adecuada.
  • Hardware: Cada servomotor estándar requiere de su propia señal precisa y su correspondiente cable. Eso hace que necesites un montón de cables y de salidas digitales en tu microcontrolador, además de los más que necesarios timers ya mencionados.


[...]

Nuevos "Smart Servos" de Lynxmotion, LSS

Nuevos Smart Servo de Lynxmotion
Ejemplo Bípedo usando Servo Erector Set de Lynxmotion

Para los que llevamos unos cuantos años en el mundo de la robótica, Lynxmotion es una marca americana muy conocida por todos.

Hace 10 años si querías formar una estructura con servomotores para dar vida a un brazo robótico, un hexápodo, un robot humanoide o cualquier estructura que implicase el uso de servomotores estándar, Lynxmotion era la vía a seguir por sus piezas de aluminio que permitía unir servomotores de tamaño estándar formando una estructura servo erector set, en la foto central de objetivos de LibreServo, DY-BOT v2, se puede ver un ejemplo claro de dichas piezas usadas por mi mismo hace casi una década. En esa época aún no había mercado chino al respecto con lo que Lynxmotion era casi la única vía... y bien cara que se pagaba la exclusividad. Además, Lynxmotion también era y es bien conocida por su placa SCC-32 actualizada recientemente, una placa simple pero eficaz para manejar hasta 32 servomotores mediante comandos por puerto serie.

Los años han pasado y Lynxmotion ha decidido adentrarse en el mercado de los smart-servo y sacar este mismo mayo (2019) una familia de servomotores, Lynxmotion Smart Servomotors (LSS).

Python y LibreServo

Python y LibreServo

Hace un tiempo en mi nuevo trabajo ofrecieron cursos de Python. Personalmente me interesaba por varios motivos:

  1. Siempre queda bien ir a cursos en el trabajo, sobre todo cuando acabas de entrar
  2. Me gusta programar, así que era un curso que no debería de resultarme muy pesado
  3. Tercero y fundamental... ¡Porque tenía en mente utilizar lo aprendido para hacer una interfaz gráfica para LibreServo! Por ahora lo llamaré LSGI LibreServo Graphic Interface


[...]

Nuevos diseños para el futuro

Encóder magnético vs potenciómetro

Llevo un tiempo dándole vueltas y desde el primer momento que me plantee LibreServo había un componente que me generaba dudas... el potenciómetro. En Selección de componentes para LibreServo ya lo comenté y hasta ahora siempre había más ventajas en utilizar el potenciómetro de Murata que un caro encóder magnético, al menos para una primera versión de LibreServo. Pero puede que eso haya cambiado.

LibreServo ya es segura [y disculpas]

Desde hace pocos días la web de LibreServo cuenta con un certificado SSL y automáticamente se redirige a todos los visitantes a https.

Fue algo que me quedó pendiente por hacer y por falta de tiempo para investigarlo bien, no llegué a hacerlo. Ahora, en mi nuevo trabajo me he tenido que informar sobre ello, así que aprovecho lo aprendido en el trabajo para aplicarlo a mi proyecto favorito, LibreServo.

Web LibreServo con certificado SSL
Web LibreServo con certificado SSL

"Magic Smoke" en LibreServo ¡Otra vez!

Estaba muy contento con el blanco del led Asmb-mtb0-0A3a2 y empecé a configurar el puerto serie.

El puerto serie debido a la altísima velocidad que puede alcanzar (9Mbps) hay que configurarlo mediante DMA, en otras palabras, que el envío y recepción de datos se haga en background sin usar ciclos de reloj de nuestro microcontrolador. El envío es fácil, pero la recepción requiere que se sepa de antemano el número de bytes a recibir... lo cual no sabemos. Habrá que darle alguna vuelta a la programación, pero tengo alguna idea.

Sea como fuere, primero empecé a configurar el puerto serie de transmisión, TX. Y tras unas pruebas... fumata blanca.

TX de LibreServo v1.c funcionando
TX de LibreServo v1.c funcionando

Resistencias para el LED RGB [Asmb-mtb0-0A3a2]

Tras muchísimos cálculos matemáticos... Todo se ha ido al garete y la realidad es bastante distinta a la calculada. ¡Menos mal que decidí comprar un montón de valores de resistencias para poder hacer las pruebas! El mayor problema que he tenido, es que el datasheet de Asmb-mtb0-0A3a2 no muestra dato alguno para cuando el led funciona a menos de 5mA, que es precisamente en el rango en el que funciona en LibreServo el LED.

Primera LibreServo v1.c soldada

Ya tengo la primer LibreServo v1.c soldada y estas son las impresiones tras soldar los componentes.

Hice varios cambios en el diseño para facilitar soldar los componentes con encapsulado QFN, como el microcontrolador y el driver de mosfets, alargando los pines de los footprint y la mejora ha sido notoria. Mucho más fácil soldar y comprobar que todo está bien soldado.

También hice cambios con la elección de componentes, el más evidente fue con el regulador lineal. El nuevo regulador lineal y su nueva disposicion, han conseguido reducir la "altura" mínima de LibreServo ¡en 1.9mm! Ahora es mucho más compacto.

Primer LibreServo v1.c soldado
LibreServo v1.c saldado

Subscription

Receive an email for each new article.

This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

3 + 7 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.