Tabla de contenido:
Video: Haga cualquier sensor con una FPGA: 4 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
La mayoría de los fabricantes intentaron construir al menos una vez en su vida un termómetro, tal vez el que tienen en casa no sea lo suficientemente inteligente, o tal vez piensen que pueden construir el próximo NEST. Sin embargo, en algún momento tuvieron un microcontrolador con su software de última generación conectado a un sensor de temperatura (y tal vez a otros sensores: presión, luz). Hasta ahora todo perfecto, el software está funcionando y el sensor está detectando. ¡Probémoslo!
Hmmmm… tal vez debería calentar el sensor con un secador de pelo y enfriarlo con hielo, funciona por un tiempo. Pero no parece profesional, el sensor cambia los valores demasiado rápido si lo calientas, no se calienta más de un par de grados. ¡El proyecto es un fracaso! Pero el algoritmo es nuevo, tiene en cuenta muchos factores, qué lástima que se haya quedado atascado en esta cosa estúpidamente menor.
Mi solución es la siguiente: hacer que una FPGA actúe como un sensor con valores transmitidos desde una PC (o almacenados en la memoria, o creados ad-hoc dentro de la FPGA). Entonces, para su preciosa MCU, la FPGA parece un sensor, pero no cualquier sensor: el sensor que desee. Tal vez decidas que necesitas más resolución o un tiempo de respuesta más rápido de lo esperado, tienes que cambiar el sensor. Pídelo online, llegará en un par de días, de un par de meses, quién sabe. Vuelva a girar su PCB o solicite un módulo con el nuevo sensor. O … un par de clics y la FPGA se configura como su nuevo sensor y puede emular la configuración interna exacta.
En el momento de escribir esto, la FPGA podría actuar como un LM75 con datos de temperatura almacenados en BRAM (en la FPGA).
Paso 1: la MCU
Mi MCU de elección es un LPC4337 en un LPCXpresso. Encima tengo un escudo (LPC General Purpose Shield) con una pantalla y un sensor LM75 real. LPC4337 es un ARM Cortex M4 que se ejecuta a 200MHz y un Cortex M0 más pequeño (no se usa aquí). El sensor real está conectado al periférico I2C1 y nuestro sensor virtual estará conectado a I2C0. La fuente está disponible en mi GitHub.
¿Cómo construirlo? Descargue LPCXpresso IDE junto con la biblioteca LPCOpen. Importe esa biblioteca al IDE y también abra el proyecto desde GitHub. Todo debe estar configurado y puede hacer clic en "Depurar" en la esquina inferior izquierda.
Todo el proyecto se basa en uno de los ejemplos de NXP (como para mostrar que mi proyecto simula un sensor real y no necesita un código especial en el lado de la MCU). En el archivo principal (llamado iox_sensor.cpp) se encuentra este código:
#define SENSORS_ON_SHIELD
#si está definido (SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif definido (SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif
Al cambiar SENSOR_ON_SHIELD y SENSOR_OR_FPGA, el usuario puede cambiar en tiempo de compilación a qué sensor hablar, el real o el virtual, ya que están en diferentes pines I2C.
Paso 2: la FPGA
Mi placa FPGA de elección es una Artix 7 fabricada por Digilent, que tiene una Xilinx Arty 7. Se utilizan dos de los conectores PMod, uno para depuración y otro para la carga útil real, la conexión con la placa MCU.
Nuevamente, el código fuente de la FPGA está disponible en mi GitHub (carpeta fpgaSide).
¿Cómo construirlo? Descarga, compra o abre Xilinx Vivado IDE. Importa los archivos del proyecto desde GitHub. Uno de los archivos (content.coe) son los datos de temperatura en formato sin procesar que se transmitirán al sensor falso. También hay un archivo de Excel con el mismo nombre que ayuda a convertir datos de temperatura legibles por humanos en datos LM75 sin procesar. Estoy pensando en cambiar esto a un proceso automatizado con un software escrito en Java, pero hasta entonces esta solución funciona. La síntesis y la implementación deberían tomar un tiempo, tenga esto en cuenta.
Paso 3: ¿Cómo funciona?
Como dije, para el MCU, el FPGA parece un sensor, más exactamente un sensor I2C. La salida del periférico I2C está conectada a la entrada de la FPGA. Dentro de la FPGA hay 3 componentes principales: - Controlador I2C - Dispositivo I2C - Datos El controlador I2C recibe datos I2C de los pines de la FPGA y los envía al resto de la FPGA y hace lo mismo en orden inverso. Mantiene una máquina de estado interna para el protocolo I2C (por cierto, aquí está la documentación). ¿Qué envía este componente al dispositivo I2C? El byte recibido actualmente, la posición de ese byte en la comunicación actual y si la MCU está escribiendo o leyendo en la FPGA. El dispositivo I2C recibe los bytes enviados y actualiza la estructura interna simulada del sensor. Podría simplemente actualizar el puntero de registro o solicitar nuevos datos de la fuente de datos. El componente de datos transmite nuevos puntos de datos. Actualmente es solo una memoria ROM cuya dirección se incrementa (aproximadamente) dos veces por segundo.
¿Cuál es mi objetivo final? Se muestra en la segunda imagen. Es decir: hacer posible que más dispositivos I2C (sensores y otros) sean simulables al mismo tiempo dentro de la FPGA. Los datos en el backend del sensor se almacenarán en caché en la FPGA y se transmitirán desde la PC a través de USB o Ethernet. Admite sensores más avanzados y otros dispositivos I2C (memoria, controladores LED, etc.).
Paso 4: Poniéndolo todo junto
Ahora es el momento de conectar todo. En teoría, es simple: la placa mcu tiene un conector PMod (I2C0 y SSP0 (puede funcionar como SPI)). La placa Artix tiene 4 conectores PMod que se pueden utilizar como se desee. Elijo el conector D para hablar con la MCU y el conector B para conectarlo a mi analizador lógico.
Advertencia
No puede conectar las dos placas juntas así. ¿Por qué? PMod fue construido para facilitar la conexión de una placa Master / Host (que da energía) a una placa Slave / Sensor (que recibe energía). Pero en este proyecto ambas placas dan energía y si conecta la salida de 3.3V de una placa a la salida de 3.3V de la otra placa, podrían suceder cosas malas. Pero es posible que no lo hagan y es posible que simplemente cambie los parámetros de los rieles de alimentación de la FPGA (están diseñados con mucho cuidado). Así que no corra este riesgo y mueva el conector un pin a la izquierda (y también voltee la placa FPGA) como se ve en las imágenes de arriba. Aquí está la especificación de PMod, puede estudiarla, lo que hice en pocas palabras es no conectar los VCC de las dos placas.
Recomendado:
¡Haga una pista con sensor de bajo costo en minutos!: 10 pasos (con imágenes)
¡Haga una vía con sensor de bajo costo en minutos!: En mi Instructable anterior, le mostré cómo hacer un diseño de tren modelo con revestimiento automático. Usó un segmento de pista, llamado 'pista con sensores'. Es muy útil tenerlo en un modelo de ferrocarril. Puedo ser utilizado para lo siguiente: Bloquear
¡Haga una luz de sensor de movimiento simple! (PIR): 13 pasos (con imágenes)
¡Haga una luz de sensor de movimiento simple! (PIR): haga un pequeño & Luz de detección de movimiento simple con menos complicaciones y menos componentes. Un principiante también podría hacer esto. Una comprensión simple de cómo funciona el transistor y el conocimiento de ánodo y cátodo solo es necesario, ¡así que hágalo libre de tensión
Haga un soporte de montaje DSLR por menos de 6 $ usando tubos de PVC (monopié / trípode para cualquier cámara): 6 pasos
Haga un soporte de montaje DSLR por menos de 6 $ usando tubos de PVC (monopié / trípode para cualquier cámara): Sí … Puede hacer el suyo propio con solo algunos tubos de PVC y T's Es liviano … Está perfectamente equilibrado … Es sólido fuerte … Es fácil de personalizar … Soy Sooraj Bagal y compartiré mi experiencia sobre este soporte de cámara que creé para
Haga una unidad de exposición de PCB adecuada con una lámpara de curado de uñas UV barata: 12 pasos (con imágenes)
Haga una unidad de exposición a PCB adecuada con una lámpara de curado de uñas UV barata: ¿Qué tienen en común la producción de PCB y las uñas postizas? Ambos utilizan fuentes de luz ultravioleta de alta intensidad y, por suerte, esas fuentes de luz tienen exactamente la misma longitud de onda. Solo los destinados a la producción de PCB suelen ser bastante costosos
Utilice cualquier sistema de altavoces 5.1 con CUALQUIER reproductor de MP3 o computadora, ¡por poco dinero!: 4 pasos
Use cualquier sistema de altavoces 5.1 con CUALQUIER reproductor de MP3 o computadora, ¡por poco dinero!: (Este es mi primer idioma de instrucción y el inglés no es mi idioma nativo) En aquellos días, compré un juego de altavoces Creative Inspire 5100 por poco dinero. Lo usé con mi computadora de escritorio que tenía una tarjeta de sonido 5.1 (PCI). Luego lo usé con mi computadora portátil que tenía un