Tabla de contenido:

Placa de interfaz universal integrada - Control USB / Bluetooth / WIFI: 6 pasos
Placa de interfaz universal integrada - Control USB / Bluetooth / WIFI: 6 pasos

Video: Placa de interfaz universal integrada - Control USB / Bluetooth / WIFI: 6 pasos

Video: Placa de interfaz universal integrada - Control USB / Bluetooth / WIFI: 6 pasos
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Noviembre
Anonim
Tarjeta de interfaz universal integrada - Control USB / Bluetooth / WIFI
Tarjeta de interfaz universal integrada - Control USB / Bluetooth / WIFI
Tarjeta de interfaz universal integrada - Control USB / Bluetooth / WIFI
Tarjeta de interfaz universal integrada - Control USB / Bluetooth / WIFI

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

Diseñando la PCB
Diseñando la PCB
Diseñando la PCB
Diseñando la PCB
Diseñando la PCB
Diseñando la PCB
Diseñando la PCB
Diseñando 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

Diseñando el Protocolo
Diseñando 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

Diseñando el Firmware
Diseñando el Firmware
Diseñando el Firmware
Diseñando el Firmware
Diseñar el firmware
Diseñar el 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

Interfaz a través de código de flujo
Interfaz a través de código de flujo
Interfaz a través de código de flujo
Interfaz a través de código de flujo
Interfaz a través de código de flujo
Interfaz a través de código de flujo

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

Producto terminado
Producto terminado
Producto terminado
Producto terminado
Producto terminado
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: