Tabla de contenido:
- Paso 1: diseño de la PCB
- Paso 2: diseñar el protocolo
- Paso 3: diseño del firmware
- Paso 4: Interfaz a través de Flowcode
- Paso 5: otros métodos de interfaz
- Paso 6: Producto terminado
Video: Placa de interfaz universal integrada - Control USB / Bluetooth / WIFI: 6 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
A menudo encuentro que creo bibliotecas para nuevos módulos integrados desde cero en función de la hoja de datos del dispositivo. Al generar la biblioteca, encuentro que me quedo atascado en un ciclo de código, compilación, programa y prueba cuando me aseguro de que las cosas funcionan y están libres de errores. A menudo, los tiempos de compilación y programación pueden ser mucho más largos que el tiempo que se tarda en editar el código, por lo que sería muy útil una forma de eliminar estos pasos durante el desarrollo.
También encuentro a menudo que quiero conectar un módulo integrado con una PC. Si el módulo no tiene una conexión USB específicamente, lo que suele ser el caso, generalmente debe comprar un convertidor USB caro que hará un solo trabajo, como solo SPI o solo I2C.
Es por estas razones que decidí crear la placa de interfaz universal. Está diseñado para permitir comunicaciones sencillas basadas en PC con módulos integrados.
Las características de la interfaz integrada de la placa que elegí incluyen.
- E / S digital
- I2C
- SPI
- UART
- PWM
- Servo motor
- Entrada ADC
- Salida DAC
Todo lo cual se puede utilizar de forma completamente independiente.
La placa de interfaz se puede controlar mediante una conexión USB a la PC, pero también tiene conexiones de módulo WIFI o Bluetooth opcionales para permitir que la placa se utilice de forma remota o en un escenario de tipo IoT.
Mediante el uso de cabezales SIL estándar de paso de 2,54 mm, es posible conectar directamente cables dupont hembra entre la placa y el módulo integrado, lo que permite conexiones rápidas, fiables y sin soldaduras.
También pensé en agregar cosas como CAN, LIN, H-bridge, etc., pero estos tal vez puedan venir más tarde con una revisión v2.
Paso 1: diseño de la PCB
Al diseñar la PCB, me gusta intentar que las cosas sean lo más simples posible. Cuando va a construir tableros a mano, es importante agregar componentes solo cuando tienen un propósito específico y usan tantas funciones internas del microcontrolador como sea posible.
Mirando a mi proveedor de electrónica preferido, encontré un chip con el que me sentía cómodo que tenía las características que estaba buscando y tenía un costo razonable. El chip en el que aterricé fue el PIC18F24K50.
Con los 23 pines de E / S disponibles, esto me permitió estas características
- E / S digital
- I2C
- SPI
- UART
- PWM x 2
- Servomotor x 6
- Entrada ADC x 3
- Salida DAC x 1
- E / S impulsada desde 5V o 3V3
- LED de estado
Un inconveniente del IC que elegí es que solo tiene un periférico UART, por lo que usar el método de control Bluetooth o Wifi evitará que pueda usar la conexión UART.
En las imágenes de arriba se muestran el esquema y la PCB terminados.
Paso 2: diseñar el protocolo
El primer paso en el diseño del protocolo es decidir qué específicamente necesitará que la placa pueda hacer. La división de elementos agrega un mejor nivel de control, mientras que la combinación de elementos simplifica la interfaz y reduce el tráfico de comunicaciones entre la placa y la PC. Es un juego de equilibrio y difícil de perfeccionar.
Para cada función de la placa debe indicar los parámetros y retornos. Por ejemplo, una función para leer una entrada ADC podría tener un parámetro para especificar qué entrada muestrear y un valor de retorno que contenga el resultado.
En mi diseño, aquí está la lista de funciones que quería incluir:
-
E / S digital
- SetPin (PinNumber, State)
- Estado = GetPin (PinNumber)
-
SPI
- Inicializar (modo SPI)
- DataIn = Transferir (DataOut)
- ControlChipSelect (canal, estado)
- SetPrescaler (tasa)
-
I2C
- Inicializar ()
- Comienzo ()
- Reiniciar ()
- Parada ()
- SlaveAck = Enviar (Salida de datos)
- DataIn = Recibir (último)
-
UART
- Inicializar ()
- Byte de TX (salida de datos)
- BytesAvailable = RX Count ()
- Entrada de datos = Byte RX ()
- SetBaud (baudios)
-
PWM
- Habilitar (canal)
- Desactivar (canal)
- SetFrequency (canal, frecuencia)
- GetMaxDuty (deber)
- SetDuty (deber)
-
Servo
- Habilitar (canal)
- Desactivar (canal)
- SetPosition (canal, posición)
-
ADC
ADCsample = Muestra (canal)
-
DAC
- Habilitar
- Desactivar
- SetOutput (voltaje)
-
WIFI
- SetSSID (SSID)
- Establecer contraseña (contraseña)
- Estado = CheckConnectionStatus ()
- IP = GetIPAddress ()
Los parámetros se muestran entre paréntesis y los retornos se muestran antes del símbolo igual.
Antes de comenzar a codificar, asigno a cada función un código de comando que comienza desde 128 (binario 0b10000000) y trabaja hacia arriba. Documento el protocolo completamente para asegurarme de que una vez que mi cabeza esté en el código, tenga un buen documento al que referirme. Se adjunta el documento de protocolo completo para este proyecto e incluye códigos de comando entrantes y anchos de bits.
Paso 3: diseño del firmware
Una vez que se establece el protocolo, se trata de implementar la funcionalidad en el hardware.
Adopto un enfoque de tipo de máquina de estado simple cuando desarrollo sistemas esclavos para intentar maximizar el rendimiento potencial de comandos y datos mientras mantengo el firmware simple de entender y depurar. En su lugar, se podría usar un sistema más avanzado como Modbus si necesita una mejor interacción con otros dispositivos conectados, pero esto agrega una sobrecarga que ralentizará las cosas.
La máquina de estados consta de tres estados:
1) Esperando órdenes
2) Recibir parámetros
3) Responder
Los tres estados interactúan de la siguiente manera:
1) Pasamos por los bytes entrantes en el búfer hasta que tenemos un byte que tiene el conjunto de bits más significativo. Una vez que recibimos dicho byte, lo comparamos con una lista de comandos conocidos. Si encontramos una coincidencia, asignamos el número de bytes de parámetro y devolvemos bytes para que coincidan con el protocolo. Si no hay bytes de parámetros, podemos ejecutar el comando aquí y saltar al estado 3 o reiniciar el estado 1. Si hay bytes de parámetros, pasamos al estado 2.
2) Pasamos por los bytes entrantes guardándolos hasta que hayamos almacenado todos los parámetros. Una vez que tenemos todos los parámetros realizamos el comando. Si hay bytes de retorno, pasamos a la etapa 3. Si no hay bytes de retorno para enviar, regresamos a la etapa 1.
3) Pasamos por los bytes entrantes y para cada byte sobrescribimos el byte de eco con un byte de retorno válido. Una vez que hayamos enviado todos los bytes de retorno volvemos a la etapa 1.
Usé Flowcode para diseñar el firmware, ya que demuestra visualmente lo que estoy haciendo. Lo mismo se podría hacer igualmente bien en Arduino u otros lenguajes de programación integrados.
El primer paso es establecer comunicaciones con la PC. Para hacer esto, el micro debe configurarse para funcionar a la velocidad correcta y tenemos que agregar código para controlar los periféricos USB y UART. En Flowcode, esto es tan fácil como arrastrar al proyecto un componente USB Serial y un componente UART desde el menú del componente Comms.
Agregamos una interrupción RX y un búfer para capturar los comandos entrantes en la UART y sondeamos regularmente el USB. A continuación, podemos procesar el búfer en nuestro tiempo libre.
Se adjuntan el proyecto Flowcode y el código C generado.
Paso 4: Interfaz a través de Flowcode
La simulación de Flowcode es muy potente y nos permite crear un componente para hablar con la placa. Al crear el componente, ahora podemos simplemente arrastrar el componente a nuestro proyecto y tener instantáneamente las funciones de la placa disponibles. Como beneficio adicional, cualquier componente existente que tenga un periférico SPI, I2C o UART se puede utilizar en la simulación y los datos de comunicaciones se pueden canalizar a la placa de interfaz a través de un componente del inyector. Las imágenes adjuntas muestran un programa sencillo para imprimir un mensaje en la pantalla. Los datos de comunicaciones que se envían a través de la placa de interfaz al hardware de pantalla real y la configuración de componentes con la pantalla I2C, el inyector I2C y los componentes de la placa de interfaz.
El nuevo modo SCADA para Flowcode 8.1 es una ventaja adicional absoluta, ya que luego podemos tomar un programa que hace algo en el simulador de Flowcode y exportarlo para que se ejecute de forma independiente en cualquier PC sin problemas de licencia. Esto podría ser ideal para proyectos como equipos de prueba o grupos de sensores.
Utilizo este modo SCADA para crear la herramienta de configuración WIFI que se puede utilizar para configurar el SSID y la contraseña, así como para recopilar la dirección IP del módulo. Esto me permite configurar todo usando la conexión USB y luego transferirlo a una conexión de red WIFI una vez que todo está funcionando.
Se adjuntan algunos proyectos de ejemplo.
Paso 5: otros métodos de interfaz
Además de Flowcode, puede utilizar prácticamente el lenguaje de programación que elija para comunicarse con la placa de interfaz. Usamos Flowcode ya que tenía una biblioteca de partes ya incluida que podíamos poner en marcha de inmediato, pero esto también se aplica a muchos otros lenguajes.
Aquí hay una lista de idiomas y métodos para comunicarse con la placa de interfaz.
Python: uso de una biblioteca en serie para transmitir datos a un puerto COM o dirección IP
Matlab: uso de comandos de archivo para transmitir datos a un puerto COM o dirección IP
C ++ / C # / VB: utilizando una DLL preescrita, accediendo directamente al puerto COM o la API de Windows TCP / IP
Labview: utilizando una DLL preescrita, el componente VISA Serial o el componente TCP / IP
Si alguien desea ver implementados los idiomas anteriores, hágamelo saber.
Paso 6: Producto terminado
Es probable que el producto terminado sea una característica destacada en mi kit de herramientas integradas durante los próximos años. Ya me ha ayudado a desarrollar componentes para varias pantallas y sensores Grove. Ahora puedo obtener el código completamente clavado antes de recurrir a cualquier compilación o programación.
Incluso he repartido algunos tableros a los compañeros para que ellos también puedan mejorar su flujo de trabajo y han sido muy bien recibidos.
Gracias por leer mi Instructable. Espero que lo haya encontrado útil y espero que lo inspire a crear sus propias herramientas para acelerar su productividad.
Recomendado:
Introducción a la interfaz del sensor I2C - Interfaz de su MMA8451 usando ESP32s: 8 pasos
Introducción a la interfaz del sensor I2C - Interfaz de su MMA8451 usando ESP32s: en este tutorial, aprenderá todo sobre cómo iniciar, conectar y hacer que el dispositivo I2C (acelerómetro) funcione con el controlador (Arduino, ESP32, ESP8266, ESP12 NodeMCU)
Orange Pi Plus 2 - Armbian (¡en tarjeta SD o memoria integrada de 16GB!) - Actualización: 6 pasos
Orange Pi Plus 2 - Armbian (en tarjeta SD o memoria integrada de 16GB) - Actualización: ¡Hola a todos! Este es mi primer Instructable y el inglés no es mi idioma nativo, así que no seas duro conmigo. Pi Plus 2 es un dispositivo pequeño y maravilloso como una Raspberry Pi pero más rápido. Para la Raspberry Pi hay una gran comunidad
Arcade vertical Bartop con pantalla LED PIXEL integrada: 11 pasos (con imágenes)
Arcade vertical bartop con pantalla LED PIXEL integrada: **** Actualizado con nuevo software en julio de 2019, detalles aquí ****** Una construcción arcade bartop con la característica única de que la marquesina de matriz LED cambia para adaptarse al juego seleccionado. El arte de los personajes en los lados del gabinete son incrustaciones cortadas con láser y no pegadas
Sistema automático de cruce de ferrocarril con plataforma integrada basada en Arduino: 9 pasos
Sistema automático de cruce de ferrocarril con plataforma integrada basada en Arduino: ¡La Navidad está a solo una semana! Todo el mundo está ocupado con las celebraciones y recibiendo regalos, lo que, por cierto, se vuelve aún más difícil de conseguir con las infinitas posibilidades que nos rodean. ¿Qué tal optar por un regalo clásico y añadir un toque de bricolaje a
Interfaz de pantalla Nextion con placa ESP 32 de cuatro relés: 7 pasos
Interfaz de pantalla Nextion con tarjeta ESP 32 de cuatro relés: En este instructables vamos a conectar la pantalla nextion de 5”a la tarjeta Esp 32 de cuatro relés. La tarjeta está controlada por el protocolo MQTT. La placa también tiene funciones de control de dos vías. Puede ser controlado tanto por mqtt como por pantalla táctil. Pantalla táctil