Archivo de la categoría: CPU

¿Qué es BeagleBone Blue?


BeagleBone® Blue es una computadora integrada en un sistema compacto en una placa, basada en Linux y pensada para robótica, que consta de una sola plaqueta pequeña (8,9 cm x 5,5 cm).

El microprocesador es Octavo Systems OSD3358, posee wifi/bluetooth, IMU, barómetro, regulación de potencia y estado de LED de carga para una batería LiPo de 2 celdas. Tiene puentes H y conectores para 4 motores de CC + sus codificadores (encoders), para 8 servos y todos los buses comúnmente necesarios para adicionar periféricos en aplicaciones integradas.

De código abierto y con un activo respaldo de una comunidad, su rendimiento en tiempo real, flexibilidad para funcionan en redes y el amplio conjunto de capacidades orientadas a la robótica hacen que construir robots móviles con Blue sea rápida, ágil, asequible y divertida.

Especificaciones

■ Procesador: Octavo Systems OSD3358
■ AM335x 1GHz ARM® Cortex-A8 processor
■ 512MB DDR3 RAM
■ 4GB 8-bit eMMC flash storage
■ Manejo Integrado de alimentación.
■ 2×32-bit 200-MHz unidades programables de tiempo real (programmable real-time units, PRUs)
■ Acelerador NEON de punto-flotante.
■ ARM Cortex-M3
■ USB 2 cliente con alimentación y comunicaciones, USB 2 host
■ Programado con Debian Linux

Connectividad y sensores

■ Soporte para batería LiPo de 2 celdas con carga balanceada y monitor LED del estado de carga
■ Entrada del cargador: 9-18 V
■ Conexión inalámbrica: wifi IEEE 802.11bgn, Bluetooth 4.1 y BLE
■ Control de Motores: 8 salidas para servo 6V, 4 salidas puente-H para motores CC, 4 entradas para encoder de cuadratura
■ Sensores: IMU MPU9250 de 9 ejes (acelerómetros, giroscopios, magnetómetro), BMP280 barómetro y termómetro
■ Interfaz de usuario: 11 LEDs programables por el usuario, 2 botones programables por el usuario
■ Interfaces con conectores JST para agregar buses y periféricos adicionales: GPS, radio DSM2, UARTs, SPI, I2C, 1,8V analog, GPIOs 3,3V

Compatibilidad de Software

ROS (Robot Operating System)
ArduPilot
MATLAB – Simulink
LabVIEW
Cloud9 IDE en Node.js
Python
OpenCV
Copter
■ Y aún más…

Especial para utilizarlo en drones y en robots navegadores autónomos.

Página de BeagleBone
Literatura de respaldo



Arduino: Entradas y salidas – Manipulación de puertos

NOTA: Para ver el uso de los pines del ATmega328P en Arduino recomiendo leer el artículo Arduino UNO R3 – Conectándolo al mundo exterior.

Programación avanzada de puertos

En principio, es importante recordar que los puertos de un microcontrolador de 8 bits tienen esa misma cantidad de entradas/salidas, o sea ocho líneas. Esto nos haría pensar que el ATmega328P, que posee tres puertos (B, C y D), dispone de 3 x 8 = 24 líneas de entrada/salida disponibles. Sin embargo, utilizado en un Arduino no es así, como veremos.

La mayoría de los bits de los puertos de los microcontroladores son de uso múltiple, es decir que se comportan de una forma u otra de acuerdo con su configuración. Varias líneas de puertos cumplen funciones vitales en la operación de un Arduino, funciones que no son líneas de entrada/salida de uso general.

El PORTB (puerto B) tiene ocupadas dos líneas de entrada/salida que se utilizan para conectar el cristal oscilador. Estos pines, el PORTB bit-6 y PORTB bit-7, pueden quedar libres si se configura al chip para utilizar el oscilador interno, pero esta opción no podemos utilizarla en el Arduino debido a que ya tiene su sistema basado en la velocidad de cristal de 16 MHz, además de que el cristal está soldado a esos pines en el circuito de la placa.

El PORTC tiene dos bits que no están disponibles, uno de ellos, el PORTC bit-6 se utiliza como entrada de reinicio (RESET), y el otro bit (7) no está cableado hacia el exterior del ATmega328P con cápsula PDIP que viene enchufado en el zócalo del Arduino Uno R3, porque no posee suficientes líneas disponibles en su encapsulado de 28 patas. Y cuando se trata de un chip con encapsulado de montaje superficial TQFP de 32 pines (como en el Arduino Nano y en algunos clones de Arduino Uno), las dos líneas faltantes están dedicadas al convertidor analógico digital (ADC6 y ADC7) y no son pines de entrada/salida digital.

Dos bits del PORTD, el PORTD bit-0 y el PORTD bit-1, se utilizan durante la programación del Arduino, ya que están conectados a la interfaz USB, además de ser los pines TX y RX utilizados para la comunicación serie. Estos pines se pueden utilizar para comunicación serie asincrónica hacia el exterior, y también como entradas o salidas cuando no se está grabando un programa. Pero no deben tener conexiones instaladas mientras se programa el Arduino.

En consecuencia, no se llega a disponer de la cantidad de 24 entradas/salidas que ofrecerían tres puertos de 8 bits.

El ATmega328P, como cualquier otro microcontrolador, tiene registros para cada puerto con los cuales se define si cada bit del puerto será usado como entrada o como salida, y en varios casos otra función. El ATmega328P tiene tres puertos: PORTB, PORTC y PORTD, por lo cual hay tres bancos de registros de configuración, uno para cada puerto.

Bancos y puertos de ATmega 328p
Banco 27 26 25 24 23 22 21 20
PORTB     Digital 13 Digital 12 Digital 11 Digital 10 Digital 9 Digital 8
PORTC     A5 A4 A3 A2 A1 A0
PORTD Digital 7 Digital 6 Digital 5 Digital 4 Digital 3 Digital 2 Digital 1 Digital 0
Valor 128 64 32 16 8 4 2 1

Registros

El ATmega328P tiene tres registros de 8 bits con los que administra estos tres puertos:

  • DDRx (donde x es B, C o D en este caso) determina si un bit es entrada (fijándolo en 0) o salida (fijándolo en 1)
  • PORTx controla si el pin está en nivel ALTO (HIGH) o BAJO (LOW). También define la existencia o no de un resistor de polarización a Vcc (pull-up, en inglés) si es una entrada.
  • PINx permite leer el estado de los pines de un puerto (solo es para lectura)

Antes de entrar de lleno a explicar el uso de los registros, veamos primero para qué podría servir este esfuerzo.

Ventajas de usar registros:

  • Cada instrucción de máquina necesita un ciclo de reloj a 16 MHz. Las funciones digitalRead() y digitalWrite() se componen cada una de ellas de varias instrucciones de máquina, lo que puede influir negativamente en aplicaciones muy dependientes del tiempo. El uso de los registros PORTx puede hacer el mismo trabajo en muchos menos ciclos de reloj.
  • Si es necesario cambiar de estado varios pines simultáneamente en lugar de ir haciéndolo de a uno con un ciclo for, que tomaría mucho tiempo, es posibles escribir directamente al registro y establecer los valores de varios pines de una sola vez.
  • Si el código está llegando al límite de memoria de programa disponible (memoria Flash), es posible usar este método para hacer que el código use menos bytes de programa.




Desventajas de usar registros:

  • El código no es fácil de entender para novatos.
  • Es mucho mas fácil cometer errores de difícil depuración. Por ejemplo con DDRD = B11111111 se pone a todos los pines, D0 a D7 como salida, inclyendo el pin D0 (RX), lo que causará que el puerto serie deje de funcionar.

En las librerías es muy recomendable usar la manipulación directa de registros, de modo de hacerlas mucho más eficientes.

Registro DDRx – Definición de pines como entrada o salida

Al utilizar los registros DDR tenemos la ventaja de que con solo una instrucción podemos declarar el pin como entrada o salida, en cambio, utilizando pinMode() necesitaríamos 8 instrucciones.

Veamos un ejemplo con el registro DDRB del PORTB:

El ejemplo de la imagen define los 4 bits bajos o menos significativos (0 a 3) como entradas, y los 4 bits altos o más significativos (4 a 7) como salidas. Veamos cómo se verían este y otros ejemplos en el programa del IDE de Arduino.

Mediante estos registros también podemos controlar las resistencias internas de pull-up que se usan, básicamente, para no dejar los pines de entrada al aire, ya que esto genera ruido eléctrico. Se puede resolver el problema de dos maneras: poner una resistencia externa de 10K a Vcc (+5V) o usar los pull-up internos del microcomputador, que polarizan de la misma forma las entradas y hacen más simple el circuito.

Para habilitar las resistencias pull-up, primero tenemos que configurar como entrada el puerto (con el bit 0), mediante registro DDRx, y luego escribir un 1 en el registro PORTx.

Es el equivalente de usar varias veces las funciones digitalRead() y digitalWrite() de Arduino. Sin embargo, con acceso directo al puerto se puede ahorrar espacio en la memoria flash, porque cada operación con funciones de leer estados de un puerto ocupa varios bytes de instrucciones, y también se puede ganar mucha velocidad, porque las funciones Arduino puede tomar más de 40 ciclos de reloj para leer o escribir un solo bit en un puerto.

Nada mejor que un ejemplo concreto para entender las instrucciones de programa. Veamos un ejemplo con Leds.

Diagrama:

En este ejemplo, durante dos segundos todos los leds encienden, durante otros dos segundos se encienden los impares, luego los pares, y durante dos más se apagan todos.

Abrimos Arduino IDE y escribimos el siguiente código:

Un segundo ejemplo que puede resultar más divertido. Enciende un led en secuencia hacia a un lado y hacia el otro. No hice más sofisticado el programa para claridad y comprensión. Se puede hacer dentro de una estructura for, por ejemplo, tomando el dato a poner el puerto de una matriz. O usando otros recursos más complicados, como desplazar el dato sobre un registro antes de ponerlo al puerto. Pero prefiero que sea didáctico y comprensible para todos.

La secuencia suelen llamarla «El auto fantástico». Hasta se vende un dispositivo con ese efecto de luces para adornar los autos.

El programa es:

@nbsp;

Un chip de la liga mayor:

Sólo por completar la información, y dar una idea de la importancia de este tipo de ahorro de código en otros microcontroladores, voy a mostrar algunos datos de los puertos del ATMega2560, el núcleo del Arduino Mega 2560 R3 (esquemático). Un tremendo chip con nada menos que 100 pines y ONCE puertos, que van desde el PORTA al PORTL. ¡Imagínense el banco de registros que hay para manejar!

Microcontrolador ATmega2560-16AU

Placa Arduino Mega 2560 R3

Encapsulado del ATmega2560-16AU utilizado en el Mega 2560




Comparación entre placas Arduino

Comparación entre modelos de Arduino

Especificaciones de placas Arduino retiradas del mercado


¿Un FPGA en un Arduino?

Arduino anunció recientemente una nueva línea de productos, y uno de ellos, el MKR Vidor 4000, incluye un FPGA. ¿Qué harán los diseñadores con el poder de un FPGA en sus manos?

Un FPGA en un Arduino

Arduino es una popular herramienta de creación de prototipos por varias razones. En primer lugar, no requiere un programador voluminoso y caro (como los chips PIC) y se puede programar a través de USB. En segundo lugar, las placas Arduino son de código abierto y, debido a esto, hay muchos fabricantes de placas Arduino que ofrecen precios competitivos. En tercer lugar, los Arduinos son famosos por su robusto entorno de shields y soporte de bibliotecas, lo que hace que el uso de dispositivos complejos como los chips de Ethernet sea cosa fácil.

A medida que progresó la tecnología, también lo hizo el Arduino. En el lanzamiento de las nuevas placas Arduino se reflejan muchas tendencias de la industria. Por ejemplo, la introducción del Arduino Yun agregó capacidades de Wi-Fi, y el Arduino Duo marcó el comienzo con procesadores más potentes. La miniaturización se concretó con el Arduino Nano, y con el LilyPad se introdujo la electrónica portátil. Pero todas estas mejoras involucran hardware especializado que realiza tareas únicas, como comunicaciones por RF o bajo consumo de energía.

Ahora que los FPGA se están volviendo más baratos y más accesibles, Arduino está a punto de lanzar un Arduino con un FPGA incorporado, el MKR Vidor 4000. La parte «MKR» de su nombre se pronuncia como “Maker” («Creador»), y Massimo Banzi, cofundador de Arduino, se refiere a él como una placa de «factor de forma de creador». Esto no es sorprendente, ya que generalmente se acepta que Arduino está diseñado para creadores, y no es de especial interés para los profesionales de ingeniería electrónica.

El FPGA

El FPGA incluido es un Intel Cyclone 10CL016, y el sitio web de Arduino afirma que el FPGA contiene 16.000 elementos lógicos, 504 Kb de RAM, 56 multiplicadores 18×18 de hardware para aplicaciones DSP de alta velocidad, etc. El sitio web también establece que los pines FPGA pueden dar salidas de hasta 150MHz, y que también pueden configurarse como puertos de comunicaciones comunes como UART, I2C y SPI. Si es cierto, este complemento FPGA podría ser extremadamente útil para los diseñadores que desean crear sistemas digitales de alta velocidad que necesitan capturar datos y procesarlos rápidamente (como los procesadores de señales digitales).

Sin embargo, ¿cuántos aficionados realmente necesitan usar un FPGA?

¿Cómo ayudará esto a los diseñadores?

El acceso a un FPGA permite que los diseñadores creen circuitos personalizados para conectarse al Arduino, lo que puede eliminar la necesidad de circuitos externos. También permite cargarle las funciones de E/S del Arduino al FPGA, pero conlleva el costo de requerir una línea de comunicación entre el FPGA y el Arduino (a menos que el FPGA y la CPU estén integrados en el mismo paquete, en cuyo caso los dos pueden tener líneas de E/S especiales para su comunicación).

Los FPGA, sin embargo, son dispositivos complejos y, a menudo, se programan en lenguajes como HDL y Verilog, que no son aptos para personas no muy arriesgadas. Si bien Arduino anunció que están diseñando un sistema de compilación basado en la nube que facilitará el uso del FPGA, esto aún está por verse. La mayoría de las veces que un sistema se hace más fácil de usar, sacrifica su poder, capacidad y control. Dicho esto, el Vidor 4000 podría ser una herramienta educativa invaluable para aquellos que desean comenzar con FPGA.

¿Más al estilo pi?

El Vidor 4000 no solo cuenta con la inclusión de un FPGA; también tiene varios dispositivos de E/S que lo hacen parecer más a un Pi que a un Arduino.

El Vidor 4000 incluye también un módulo Wi-Fi Nina W102, un chip criptográfico ECC508, un conector micro HDMI, un conector MIPI para cámara y un conector rápido MiniPCI con hasta 25 pines programables por el usuario. Estas características, especialmente el Wi-Fi incorporado, crean una plataforma de IoT potencialmente popular que puede realizar tareas increíblemente complejas. Con el chip criptográfico incorporado, la verificación SSL y HTTPS se convertirán en una tarea trivial y ayudarán a descargar las tareas de seguridad del microcontrolador principal.

Si bien este dispositivo no será tan poderoso como un Raspberry Pi, definitivamente es más pequeño y está más enfocado en el hardware, algo en lo que la Pi se queda atrás.

Placas competidoras para creadores con FPGA

El Vidor 4000, obviamente, no es la primera placa en salir con capacidades FPGA, pero tampoco es la primera construida teniendo en cuenta la compatibilidad con Arduino. Otro producto ya en el mercado, XLR8, es una tarjeta de desarrollo compatible con Arduino que está basada en FPGA, incluye un microcontrolador integrado de instrucción AVR de 8 bits y es programable a través del IDE de Arduino.

El XLR8 está preconfigurado con «bloques xcelerator», que son bloques que están especialmente diseñados para manejar tareas específicas. Los bloques con los que viene preinstalada la unidad incluyen un bloque matemático de punto flotante, un servocontrol, un controlador NeoPixel y un ADC mejorado.

La integración de los FPGA en un proyecto Arduino sin duda creará una nueva ola de proyectos e ideas que podrán construir los aficionados, pero los FPGA son dispositivos complejos. Sin embargo, los usuarios de Arduino pueden comenzar a diseñar su propio hardware desde cero y los FPGA incluidos en los microcontroladores pueden cambiar la forma en que se construyen los circuitos.

La nueva placa MKR Vidor 4000 lleva la complejidad de los FPGA a los que no son ingenieros electrónicos.




Chips de potencia ultra baja ayudan a hacer robots pequeños más capaces

Se muestra un automóvil robótico controlado por un chip híbrido de potencia ultra baja en una pista creada para demostrar su capacidad para aprender y colaborar con otro robot. Crédito: Allison Carter, Georgia Tech

Un chip híbrido de potencia ultra baja inspirado en el cerebro podría ayudar a que robots de tamaño pequeño puedan colaborar y aprender de sus experiencias. Combinado con las nuevas generaciones de motores y sensores de baja potencia, el nuevo Circuito Integrado de Aplicación Específica (ASIC = Application-Specific Integrated Circuit), que funciona con milivatios de potencia, podría ser de ayuda para que los enjambres de robots inteligentes operen durante horas en lugar de minutos.

Para ahorrar energía, los chips utilizan un procesador híbrido digital/analógico basado en dominio de tiempo (time domain), en el que la información se codifica en el ancho de pulso de las señales. El circuito integrado de red neuronal se adapta tanto a la programación basada en modelos como al aprendizaje reforzado por colaboración, lo que podría proporcionar a estos pequeños robots mayores capacidades de reconocimiento, búsqueda y rescate, y otras misiones.

Investigadores del Instituto de Tecnología de Georgia demostraron autos robóticos conducidos por ASIC únicos en la Conferencia Internacional de Circuitos de Estado Sólido (ISSCC) IEEE 2019. La investigación fue patrocinada por la Agencia de Proyectos de Investigación Avanzada de Defensa (DARPA) y la Corporación de Investigación de Semiconductores (SRC) a través del Centro para la Habilitación de Inteligencia Autónoma Inspirada en el Cerebro (CBRIC).

«Estamos tratando de poner inteligencia en estos robots tan pequeños para que puedan aprender sobre su entorno y moverse de forma autónoma, sin infraestructura», dijo Arijit Raychowdhury, profesor asociado de la Escuela de Ingeniería Eléctrica e Informática de Georgia Tech. «Para lograrlo, queremos incorporar diseños de circuitos de baja potencia a estos dispositivos tan pequeños para que puedan tomar decisiones por su cuenta. Existe una gran demanda de robots muy pequeños pero capaces, que no requieren infraestructura».

Los autos demostrados por Raychowdhury junto a los estudiantes de posgrado Ningyuan Cao, Muya Chang y Anupam Golder navegan a través de una pista rodeada de almohadillas de goma y paredes de bloques de cartón. Mientras buscan un objetivo, los robots deben esquivar conos de tráfico y evitarse entre ellos, aprendiendo del entorno a medida que avanzan y se comunican continuamente.

Los autos utilizan sensores de inercia y ultrasonido para determinar su ubicación y detectar objetos a su alrededor. La información de los sensores va al ASIC híbrido, que sirve como el «cerebro» de los vehículos. Luego, las instrucciones van a un controlador Raspberry Pi, que es el que envía instrucciones a los motores eléctricos.


En los pequeños robot, tres sistemas principales consumen energía: los motores y controladores utilizados para conducir y dirigir las ruedas, el procesador y el sistema de detección. En los autos construidos por el equipo de Raychowdhury, que el ASIC sea de baja potencia significa que los motores consumen la mayor parte de ésta. «Hemos podido reducir la potencia de cómputo a un nivel en el que el cálculo está dominado por las necesidades de los motores», dijo.

El equipo está trabajando con colaboradores en motores que utilizan tecnología microelectromecánica (MEMS) capaz de operar con mucha menos potencia que los motores convencionales.

«Quisiéramos construir un sistema en el que la potencia de detección, las comunicaciones y la potencia de la computadora y la actuación estén aproximadamente al mismo nivel, del orden de cientos de milivatios», dijo Raychowdhury, quien es profesor adjunto de Semiconductores ON en la Escuela de Ingeniería Eléctrica y Computación. «Si podemos construir estos robots del tamaño de la palma de la mano con motores y controladores eficientes, deberíamos poder obtener tiempos de operación de varias horas con un par de baterías AA. Ahora tenemos una buena idea de qué tipo de plataformas informáticas necesitamos para ofrecer esto, pero todavía necesitamos los otros componentes para ponernos al día».

ASIC


En la computación basada en time-domain, la información se transporta en dos voltajes diferentes, codificados en el ancho de los pulsos. Eso le da a los circuitos las ventajas de eficiencia energética de los circuitos analógicos con la robustez de los dispositivos digitales.

«El tamaño del chip se reduce a la mitad, y el consumo de energía es un tercio de lo que necesitaría un chip digital tradicional», dijo Raychowdhury. «Usamos varias técnicas en los diseños de lógica y memoria para reducir el consumo de energía al rango de milivatios (un milivatio es una milésima de vatio), y al mismo tiempo cumplir con el objetivo de rendimiento».

Con cada ancho de pulso representando un valor diferente, el sistema es más lento que los dispositivos digitales o analógicos, pero Raychowdhury dice que la velocidad es suficiente para estos robots pequeños.

«Para estos sistemas de control, no necesitamos circuitos que operen a múltiples gigahercios porque los dispositivos no se mueven tan rápido», dijo. «Estamos sacrificando un poco de rendimiento para obtener eficiencias energéticas extremas. Incluso si la computadora funciona a 10 o 100 megahercios, eso será suficiente para las aplicaciones que se buscan».





Los chips CMOS de 65 nanómetros se adaptan a los dos tipos de aprendizaje apropiados para un robot. El sistema puede programarse para seguir algoritmos basados en modelos, y puede aprender de su entorno utilizando un sistema de fortalecimiento que fomenta un mejor y mejor desempeño a lo largo del tiempo, como un niño que aprende a caminar tropezando con cosas.

«Se inicia el sistema con un conjunto predeterminado de “pesos” en la red neuronal para que el robot pueda comenzar desde un buen lugar y no se bloquee de inmediato ni proporcione información errónea», dijo Raychowdhury. «Cuando usted lo ubica en un nuevo sitio, el entorno tendrá algunas estructuras que reconocerá y otras que el sistema tendrá que aprender. Luego, el sistema tomará las decisiones por su cuenta y evaluará la efectividad de cada decisión para optimizar sus movimientos».

La comunicación entre los robots les permite colaborar para buscar un objetivo.

«En un entorno de colaboración, el robot no solo necesita entender lo que está haciendo, sino también lo que están haciendo los demás en el mismo grupo», dijo. «Trabajarán para maximizar logros totales del grupo en lugar de una recompensa individual».

Con su demostración en la Conferencia Internacional de Circuitos de Estado Sólido, que les aportó una prueba del diseño, el equipo continúa optimizando el desarrollo y está trabajando en un sistema en chip para integrar los circuitos de computación y control.

«Queremos habilitar más y más funcionalidad en estos pequeños robots», agregó Raychowdhury. «Hemos demostrado lo que es posible, y lo que hemos hecho ahora tendrá que ser aumentado por otras innovaciones».

Fuente: Instituto de Tecnología de Georgia

Artículos Relacionados:
Walbi, el bípedo que aprende a caminar
Usando electricidad y agua, un nuevo tipo de motor puede poner microrobots en movimiento
Un robot que procura moverse tan bien como una hormiga
LSM6DSOX: acelerómetro y giroscopio con aprendizaje automático incorporado
Logran que los robots rastreen objetos en movimiento con una precisión sin precedentes
Nuevos micro robots de tamaño celular podrían hacer viajes increíbles