Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Construcción del XMP‑1: Plataforma móvil de bajo coste XMOS‑Raspberry Pi

Introducción

El XMOS startKIT, disponible a través de Farnell (o Newark) por solo 12 £ (IVA incluido), ofrece una plataforma compacta, tamaño tarjeta de crédito, que se empareja perfectamente con una Raspberry Pi. Con soldadura mínima —solo un destornillador, cortaalambres y alicates— los desarrolladores pueden ensamblar un prototipo de robótica funcional que aprovecha el procesamiento paralelo multi‑núcleo de baja fluctuación (low‑jitter) de XMOS.

En este artículo recorremos la construcción del XMP‑1 (XMOS Mobile Platform), una plataforma móvil simple que demuestra comunicación bidireccional de alta velocidad entre la Raspberry Pi y un XMOS startKIT mediante una Interfaz Serie Periférica (SPI). El XMP‑1 también muestra cómo controlar servos de hobby mediante PWM generado directamente desde la placa XMOS, y cómo exponer una interfaz de usuario basada en web que maneja el robot en tiempo real.

Las demostraciones en vídeo están incluidas en la publicación original; la primera muestra el XMP‑1 aprendiendo una ruta, mientras que la segunda captura los intentos del robot de repetir la ruta usando servos de rotación continua. Estos vídeos ilustran tanto el potencial como las limitaciones del hardware y firmware actuales.

Un poco más de detalle

Esta publicación es la segunda de una serie de experimentos con XMOS startKIT. La Parte 1 proporcionó una introducción a la terminología XMOS, arquitectura y una guía de inicio rápido con programas de ejemplo. Si es nuevo en XMOS, revisar la Parte 1 le ayudará a comprender los conceptos discutidos aquí. La Parte 3 (titulada «XMOS startKIT: XMOS y Raspberry Pi Osciloscopio XAE 1000») revisita el marco SPI e introduce uso de ADC y gráficos en tiempo real en navegador.

Para quienes se centran únicamente en construir y operar el XMP‑1, puede saltar la discusión extendida e ir directo a las secciones de código al final del artículo. El firmware puede compilarse y flashearse en el startKIT como se describe en la Parte 1, y el código de la Raspberry Pi corre en Node.js.

Visión general de la solución – Hardware y Software

La Figura 1 (no mostrada) representa el XMP‑1 completado, alimentado mediante un regulador de 5 V y impulsado por dos servos de hobby de rotación continua. La Raspberry Pi gestiona toda la red, ejecutando un servidor web ligero que sirve index.html e interpreta comandos de usuario en mensajes de velocidad/dirección de motor.

El flujo de comunicación se ilustra en la Figura 2 (no mostrada). La Pi genera una señal PWM para los servos enviando un paquete SPI al XMOS startKIT. El startKIT, actuando como esclavo SPI, decodifica el paquete y acciona los servos con los pulsos PWM apropiados.

Interfaz Serie Periférica (SPI)

SPI se basa en cuatro hilos: SS, SCLK, MOSI y MISO. En esta configuración, la Raspberry Pi es el maestro, proporcionando el reloj y transmitiendo datos por MOSI. La placa XMOS recibe los datos en MOSI y devuelve estado o confirmación en MISO. La línea SS es activa en bajo; el pin CE1 de la Pi se usa para seleccionar el startKIT.

Una traza de osciloscopio (capturada con Tektronix MSO2024B) confirma la integridad de la transferencia SPI. Tres bytes de datos —0x02, 0x00 y 0x10— fueron transmitidos de la Pi al startKIT, con respuesta opcional de longitud cero.

Control de motores servo de hobby

Los servos de hobby convierten un pulso PWM de 1‑2 mseg en una rotación mecánica de 0–180°, con un pulso de 1.5 mseg centrando el eje. Los servos de rotación continua, una variante que elimina el potenciómetro y topes, interpretan anchos de pulso como comandos de velocidad: 1.5 ms para neutro, 1 ms para reversa total y 2 ms para adelante total.

Cada rueda del XMP‑1 es impulsada por un servo de rotación continua. Aunque esta configuración simplifica el cableado —no se requiere puente H externo— limita el control preciso de velocidad comparado con motores DC.

Inicio del desarrollo – Conexión de las placas

Para desarrollo de firmware, la Raspberry Pi y el startKIT se enlazan mediante un cable plano de 26 pines con conectores IDC. Un conector IDC de repuesto puede servir como interfaz de depuración para sondear señales con multímetro u osciloscopio.

Implementación de SPI (spi_process) en el XMOS startKIT

Usando el IDE xTIMEcomposer, se importa la librería esclava SPI integrada y los archivos fuente se colocan en el directorio spi‑test/src. La siguiente rutina de inicialización configura la fuente de reloj, puertos MOSI/MISO y la interfaz esclava SPI:

void spi_slave_init(spi_slave_interface &spi_if) {
  int clk_start;
  set_clock_on(spi_if.blk);
  configure_clock_src(spi_if.blk, spi_if.sclk);
  configure_in_port(spi_if.mosi, spi_if.blk);
  configure_out_port(spi_if.miso, spi_if.blk, 0);
  start_clock(spi_if.blk);
  return;
}

La estructura spi_slave_interface mapea los pines SPI a los puertos XMOS:

typedef struct spi_slave_interface {
  clock blk;
  in port ss;
  in buffered port:8 mosi;
  out buffered port:8 miso;
  in port sclk;
} spi_slave_interface;

Los datos SPI entrantes se leen en un búfer usando la siguiente rutina, que implementa un protocolo simple etiqueta-longitud-valor (TLV) para permitir mensajes de longitud variable:

void spi_slave_in_buffer(spi_slave_interface &spi_if, unsigned char buffer[], int num_bytes) {
  unsigned int data;
  unsigned int vlen=0;
  clearbuf(spi_if.miso);
  clearbuf(spi_if.mosi);
  for (int i = 0; i < num_bytes; i++) {
    spi_if.mosi :> data;
    data=data<<24;
    buffer[i]=bitrev(data);
    if (i==2) {
      vlen=((unsigned int)buffer[1])<<8 | (unsigned int)buffer[2];
      if (vlen==0) break;
    }
    if (i >= vlen+2) { break; }
  }
}

El primer byte de un paquete es una etiqueta (0–255). Los siguientes dos bytes codifican la longitud de la carga útil (hasta 4096 bytes). Una etiqueta impar indica que la Raspberry Pi espera respuesta; una etiqueta par indica que no se requiere respuesta.

Comunicación entre procesos

Los núcleos XMOS se comunican mediante interfaces basadas en transacciones en lugar de simples canales. Este enfoque permite múltiples tipos de datos y valores de retorno dentro de una sola llamada a interfaz, ideal para coordinar el núcleo de manejo SPI, el núcleo de procesamiento de datos y el núcleo de generación PWM.

Ejemplos de definiciones de interfaz:

interface program_display {
  void backlight(int state, int color);
  void plot(int x, int y, int color);
}

Diseño de la arquitectura IPC para manejar contenido SPI

El núcleo spi_process captura datos SPI entrantes en un búfer de 4099 bytes y reenvía un puntero al núcleo data_handler mediante una transacción de array móvil. Tras procesar, data_handler puede poblar el búfer con una respuesta y señalar a spi_process que los datos están listos para transmitirse en el próximo intercambio SPI.

interface to_rpi { void code(unsigned char c); };
interface from_rpi { unsigned char* movable array_data(unsigned char* movable bufp); };

Fragmentos de lógica de núcleos:

void spi_process(interface to_rpi server s, interface from_rpi client c) {
  unsigned char storage[4099];
  unsigned char* movable buf=storage;
  buf=c.array_data(move(buf));
  select {
    case s.code(unsigned char c):
      if (c==SEND) { spi_slave_out_buffer(spi_sif, buf, 4099); }
      break;
  }
}
void data_handler(interface to_rpi client c, interface from_rpi server s) {
  select {
    case s.array_data(unsigned char* movable vp) -> unsigned char* movable vq:
      vq[0]=0x22; // etiqueta
      vq[1]=0x00; // longitud
      vq[2]=0x00;
      vq=move(vp);
      tosend=1;
      break;
  }
  if (tosend) { c.code(SEND); }
}

Esta arquitectura proporciona un canal de comunicación bidireccional de propósito general entre la Raspberry Pi y el XMOS startKIT, adaptable a una amplia gama de proyectos de robótica o IoT.

Implementación de PWM (servo_handler) en el startKIT

La rutina de control de servo se ejecuta en un núcleo XMOS dedicado y gestiona hasta ocho servos. La señal PWM de cada servo se genera alternando un pin de salida en el ciclo de trabajo apropiado cada 20 ms, con resolución de microsegundo para ajuste fino de velocidad. Los valores iniciales están centrados (o estacionarios para servos de rotación continua), y el núcleo actualiza la señal en cada ciclo basándose en el último comando recibido a través del marco IPC.

Aunque el XMP‑1 actual usa solo dos servos de rotación continua, el firmware soporta expansión a motores adicionales o control de motores DC mediante interfaz H‑bridge si se necesita.

Para código fuente completo e instrucciones de compilación, vea el final de este artículo.

Proceso de manufactura

  1. Integración MQTT fluida: sensores NodeMCU DHT22 con Raspberry Pi 3 B+ como broker
  2. Construya un sensor de temperatura remoto con Raspberry Pi y Python – Guía paso a paso
  3. Monitorización fluida de temperatura y humedad en Raspberry Pi con EzTemp
  4. Construya un Sistema de Monitorización de Temperatura y Luz Multi‑Sensor con Raspberry Pi y DS18B20
  5. Control de sensores y actuadores con Raspberry Pi: acelerómetro, servo y streaming de datos
  6. Construye un sistema aeropónico automatizado con Raspberry Pi y sensor de humedad
  7. Raspberry Pi 3 B+ – Características Actualizadas, Especificaciones y Guía de Compra
  8. Construye un robot inteligente con Bridge Shield – Integración Raspberry Pi y Arduino
  9. ValentFX presenta complementos FPGA de código abierto para BeagleBone y Raspberry Pi
  10. Construya su propio robot Raspberry Pi con el kit MonkMakes RRB2 – Guía detallada
  11. Robot DIY inspirado en Wall‑E con Raspberry Pi y caja de CD