Tabla de contenido:

Generador de funciones portátil en WiFi y Android: 10 pasos
Generador de funciones portátil en WiFi y Android: 10 pasos

Video: Generador de funciones portátil en WiFi y Android: 10 pasos

Video: Generador de funciones portátil en WiFi y Android: 10 pasos
Video: El AJUSTE SECRETO del Wi-Fi en Android 2024, Mes de julio
Anonim
Generador de funciones portátil en WiFi y Android
Generador de funciones portátil en WiFi y Android
Generador de funciones portátil en WiFi y Android
Generador de funciones portátil en WiFi y Android
Generador de funciones portátil en WiFi y Android
Generador de funciones portátil en WiFi y Android
Generador de funciones portátil en WiFi y Android
Generador de funciones portátil en WiFi y Android

Hacia finales del siglo XX, surgieron diversas innovaciones tecnológicas, especialmente en el campo de las comunicaciones; pero no solo. Para nosotros, usuarios, consumidores e ingenieros salieron a la luz el rápido desarrollo de dispositivos electrónicos, que pueden hacernos la vida mucho más fácil: relojes inteligentes, hogares inteligentes, teléfonos inteligentes, etc.

Dado que todo puede ser "inteligente" hoy en día, he decidido diseñar un dispositivo súper útil para que forme parte del equipo de laboratorio electrónico esencial: generador de funciones portátil, controlable por un teléfono inteligente con sistema operativo Android a través de WiFi directo o red de área local WiFi (WLAN).

¿Por qué deberíamos construir este dispositivo?

La gran mayoría de los equipos de prueba son bastante caros hoy en día. Y, a veces, estos dispositivos no son portátiles. Como solución para los altos precios, la falta de portabilidad y la falta de acceso a la red del dispositivo, el dispositivo proporciona un generador de forma de onda de doble canal, que es de hecho portátil y tiene un acceso sin restricciones a la red, ya sea de Internet o local.

Y, por supuesto, el dispositivo debe construirse con entusiasmo, obedeciendo los principios del bricolaje: a veces solo tenemos que hacer las cosas nosotros mismos para sentirnos bien:)

Características clave

Fuente de alimentación

  • Conector USB tipo A, tanto para sistemas de alimentación como para programación
  • Sistema completo de gestión de baterías de iones de litio: modos de carga y estables
  • Implementación de Smart Switch: no es necesario un interruptor de conmutación de energía
  • Fuente de alimentación dual: + 3.3V y -3.3V para generación de forma de onda de voltaje simétrico

Generación de forma de onda

  • Implementación del nivel de CC en la cascada de salida: forma de onda polarizada entre los límites de voltaje
  • Generación de formas de onda de 4 tipos basadas en DDS: sinusoidal, triangular, cuadrada y CC
  • Soporte de frecuencia de hasta 10 MHz
  • Corriente de salida de hasta 80 mA con disponibilidad de potencia máxima de 500 mW
  • Canales separados para la generación de formas de onda: circuitos divididos basados en AD9834

Comunicación

  • Implementación de ESP32 - Capacidades WiFi aplicables
  • Soporte completo de TCP / IP por dispositivo generador y teléfono inteligente Android
  • Capacidad para almacenar parámetros de usuario para cada ciclo del dispositivo
  • Monitoreo de estado: ambos sistemas conocen el estado del otro: FuncGen (llamémoslo así de ahora en adelante) y teléfono inteligente.

Interfaz de usuario

  • LCD de 20 x 4 caracteres con interfaz de datos simple de 4 bits
  • Aplicación de Android: control completo del usuario sobre el dispositivo FuncGen
  • Circuito de zumbador: respuesta sonora al usuario

Paso 1: Diagrama de bloques - Hardware

Diagrama de bloques: hardware
Diagrama de bloques: hardware
Diagrama de bloques: hardware
Diagrama de bloques: hardware

Unidad de microcontrolador - ATMEGA32L

El microcontrolador es un chip programable que consta de toda la funcionalidad de la computadora que reside en un solo chip electrónico. En nuestro caso, es el "cerebro" y un componente central del sistema. El propósito de la MCU es administrar todos los sistemas periféricos, manejar la comunicación entre estos sistemas, controlar el funcionamiento del hardware y brindar soporte completo para la interfaz de usuario y su interacción con un usuario real. Este proyecto está basado en ATMEGA32L MCU, que puede operar en 3.3V y una frecuencia de 8MHz.

SoC de comunicación - ESP32

Este SoC (System on Chip) proporciona un soporte de comunicación completo para FuncGen: acceso a las capacidades de WiFi, incluida la comunicación directa, local o por Internet. Los propósitos del dispositivo son:

  • Manejo de la transmisión de datos entre la aplicación de Android y el dispositivo FuncGen
  • Gestión de mensajes de control / datos
  • Soporte de configuración cliente-servidor TCP / IP continua

En nuestro proyecto, el SoC es espressif ESP32, que es demasiado popular para expandirlo aún más:)

Sistema de gestión de baterías de iones de litio

Para transformar nuestro dispositivo en uno portátil, el dispositivo contiene un circuito de carga de batería Li-Ion diseñado. El circuito se basa en MC73831 IC, con corriente de carga controlable mediante el ajuste del valor de una sola resistencia de programación (cubriremos este tema en el paso Esquemas). La entrada de la fuente de alimentación del dispositivo es un conector USB tipo A.

Circuito de interruptor inteligente

El circuito de control de energía del dispositivo de interruptor inteligente proporciona un control de software completo sobre la secuencia de apagado del dispositivo y la falta de necesidad de un interruptor de palanca externo para el corte de voltaje de la batería del dispositivo. Todas las operaciones de energía se realizan presionando el botón pulsador y el software de MCU. En algunos casos, sería necesario apagar el sistema: voltaje de batería bajo, voltaje de entrada alto, error de comunicación, etc. El interruptor inteligente se basa en el IC del interruptor inteligente STM6601, que es barato y muy fácil de usar.

Unidad de fuente de alimentación principal

Esta unidad consta de dos circuitos de alimentación alimentados por batería: + 3,3 V para todos los circuitos de alimentación digitales / analógicos y -3,3 V para la salida simétrica FunGen en relación con el potencial de 0 V (es decir, la forma de onda generada se puede configurar en [-3,3 V: 3,3 V] región.

  • El circuito de suministro principal se basa en el regulador de voltaje lineal LP3875-3.3 LDO (baja caída) 1A.
  • El circuito de suministro secundario se basa en LM2262MX IC, que realiza la conversión de voltaje negativo CC-CC a través de condensador-bomba de carga, sistema en el que se basa IC.

Sistema de generadores de forma de onda

El sistema fue diseñado con énfasis en circuitos integrados DDS (síntesis digital directa) separados, que permiten un control completo de la generación de formas de onda mediante SPI (interfaz periférica en serie) de MCU. Los circuitos que se utilizaron en el diseño son dispositivos analógicos AD9834 que pueden proporcionar diferentes tipos de formas de onda. Los desafíos que debemos enfrentar al trabajar con AD9834 son:

  • Amplitud de forma de onda fija: la amplitud de la forma de onda se controla mediante un módulo DAC externo
  • No se tiene en cuenta el nivel de compensación de CC: implementación de circuitos sumadores con los valores de compensación de CC deseados
  • Salidas separadas para onda cuadrada y onda triangular / sinusoidal: implementación de circuito de conmutación de alta frecuencia, por lo que cada salida de canal puede proporcionar toda la forma de onda deseada: sinusoidal, triangular, cuadrada y CC.

Pantalla de cristal líquido

La pantalla LCD es parte de la IU (interfaz de usuario) y su propósito es permitir que el usuario comprenda lo que hace el dispositivo en modo de tiempo real. Interactúa con el usuario en cada estado del dispositivo.

Zumbador

Circuito generador de tonos simple para retroalimentación adicional del dispositivo al usuario.

Programador ISP integrado

Existe un problema persistente para todos los ingenieros cuando se trata del proceso de programación: siempre existe la peor necesidad de desmontar el producto para reprogramarlo con un nuevo firmware. Para superar este inconveniente, el programador AVR ISP se conectó al dispositivo desde el interior, mientras que los datos USB y las líneas eléctricas están vinculados al conector USB Tipo-A del dispositivo. En esta configuración, ¡solo necesitamos conectar nuestro FuncGen a través de un cable USB para programar o cargar!

Paso 2: Diagrama de bloques - Redes

Diagrama de bloques: redes
Diagrama de bloques: redes

Generador de funciones de doble canal

Dispositivo principal. El que revisamos en el paso anterior

ESP-WROOM-32

Sistema integrado en chip con capacidades WiFi y BLE. El SoC está conectado a la placa principal (cubriremos esto en el paso de los esquemas) a través del módulo UART y actúa como un transceptor de mensajes entre el dispositivo principal y el teléfono inteligente Android.

Red local WiFi

El teléfono inteligente y el dispositivo se comunicarán a través de WiFi directo o red de área local, según la configuración del servidor / cliente TCP. Cuando los dispositivos se reconocen entre sí en el WiFi, el dispositivo principal crea un servidor TCP con los parámetros adecuados y puede enviar / recibir mensajes. El dispositivo actúa como secundario del teléfono inteligente. El dispositivo Android, por otro lado, se conecta al servidor TCP como un dispositivo de red del cliente, pero se considera como transmisor de mensajes principal: el teléfono inteligente es el que inicia el ciclo completo de comunicación: envío de mensaje - recepción de respuesta.

Smartphone Android

Dispositivo de teléfono inteligente basado en el sistema operativo Android que se ejecuta en la aplicación FuncGen

Paso 3: Piezas, herramientas, IDE y lista de materiales

Piezas, herramientas, IDE y lista de materiales
Piezas, herramientas, IDE y lista de materiales
Piezas, herramientas, IDE y lista de materiales
Piezas, herramientas, IDE y lista de materiales
Piezas, herramientas, IDE y lista de materiales
Piezas, herramientas, IDE y lista de materiales

Lista de materiales (ver tabla XLS adjunta)

Interfaz de usuario y conexiones del sistema

  • 1 x 2004A Char-LCD 20x4 azul
  • 1 x conector USB tipo B
  • 1 x 10 Juego Mini Micro JST XH 2.54mm 4 Pin
  • 1 x 6 piezas momentáneo SW

Pedido de PCB (según Seeed Studio)

Material base FR-4

No de capas 2 capas

Cantidad de PCB 10

No. de diseños diferentes 1

Espesor de PCB 1.6 mm

PCB Color Azul

Acabado superficial HASL

Presa de máscara de soldadura mínima 0,4 mm ↑

Peso de cobre 1 oz

Tamaño mínimo del orificio de perforación 0,3 mm

Ancho de trazo / espaciado 6/6 mil

Agujeros medios plateados / Agujeros alisados No

Control de impedancia No

Instrumentos

  • Pistola de silicona
  • Pinzas
  • Cortador
  • ~ Cable 22AWG para fines de manejo de fallas
  • Soldador / estación
  • Estaño para soldar
  • Estación de retrabajo SMD (opcional)
  • Impresora 3D (opcional)
  • Archivo de extrusión
  • Programador AVR ISP
  • Convertidor de USB a serie (opcional, con fines de depuración)

Entorno de desarrollo integrado (IDE) y software

  • Autodesk EAGLE o editor de esquemas de cadencia / editor de PCB Allegro
  • OpenSCAD (opcional)
  • Ultimaker Cura (opcional)
  • Saleae Logic (para solucionar problemas)
  • Atmel Studio 6.3 o superior
  • Android Studio o Eclipse IDE
  • Monitor serial Docklight / otro software de monitoreo de puertos COM
  • ProgISP para programación flash AVR ATMEGA32L

Paso 4: Diseño de hardware: placa principal

Diseño de hardware: placa principal
Diseño de hardware: placa principal
Diseño de hardware: placa principal
Diseño de hardware: placa principal
Diseño de hardware: placa principal
Diseño de hardware: placa principal

Circuito de gestión de la batería

El circuito de carga de la batería se basa en MCP7383 IC, que nos permite seleccionar la corriente de carga deseada para la batería de Li-Ion - 3.7V con capacidad de 850mAh. La corriente de carga se establece programando el valor de la resistencia (R1) en nuestro caso

R1 = 3KOhm, I (carga) = 400mA

El voltaje USB VBUS se filtra mediante un filtro π (C1, L3, C3) y actúa como una fuente de alimentación para el circuito de carga.

El circuito divisor de voltaje (R2, R3) permite que MCU indique si la fuente de alimentación USB externa está conectada o no, proporcionando el siguiente voltaje al canal MCU A / D:

V (indicación) ~ (2/3) V (BUS)

Dado que nuestro A / D de ATMEGA32L es de 12 bits, podemos calcular el rango digital:

A / D (rango) = 4095V (indicación) / V (REF).

A / D ∈ [14AH: FFFH]

Unidad de potencia de interruptor inteligente

El circuito permite que el sistema controle la fuente de alimentación de cada bloque diseñado, tanto desde el botón pulsador como desde el software en la MCU, y se basa en el interruptor inteligente STM6601 con opción de ENCENDIDO en lugar de RESET. Los terminales que queremos considerar son estos:

  • PSHOLD - Línea de entrada, que define el estado del dispositivo: si se tira a BAJO, el dispositivo deshabilita todas las unidades de fuente de alimentación secundaria (+ 3.3V y -3.3V). Si se mantiene en ALTO, el dispositivo mantiene el estado ENCENDIDO.
  • nSR y nPB: líneas de entrada. Terminales de pulsador. Cuando se detecta un borde descendente en estos pines, el dispositivo intenta ingresar al modo de encendido / apagado
  • nINT - Línea de salida. Se tira a BAJO cada vez que se presiona el botón pulsador
  • EN - Línea de salida, se utiliza como habilitación de energía para las unidades de alimentación secundaria. Mientras se mantiene en BAJO, ambas fuentes de alimentación secundarias se desactivan

Hay algunas notas importantes antes de proceder con el diseño final:

  • PSHOLD debe elevarse a 3.3V, porque hay casos en los que las MCU están obligando a todas las E / S a estar en estado HIGH-Z. En este caso, se desconoce el estado de PSHOLD de la MCU y puede afectar drásticamente el proceso de programación del dispositivo.
  • STM6601 debe pedirse con una opción de ajuste EN en pulsación larga, en lugar de la opción RESET (me he caído en esa).

Unidad de fuente de alimentación: + 3,3 V

Fuente de alimentación principal para todos los sistemas de nuestro proyecto. Cuando la línea de + 3,3 V se mantiene en el nivel GND (es decir, no hay voltaje presente), todos los circuitos integrados, excepto el interruptor inteligente, se desactivan. El circuito se basa en LDO LP-3875-3.3 IC, con la capacidad de ser controlado a través del terminal EN y proporcionar corriente hasta 1A.

La fuente de energía para este circuito es el voltaje de la batería, con un indicador A / D adjunto para detectar VBAT en la configuración, similar al circuito de detección VBUS. En este caso, los cálculos difieren ligeramente;

V (batería a A / D) = 0,59 V (batería); A / D (rango) ∈ [000H: C03H]

Unidad de fuente de alimentación: -3,3 V

El circuito de suministro de voltaje negativo nos permite generar formas de onda simétricas con un factor de CC de 0 V (es decir, el valor promedio de la forma de onda puede ser 0 V). Este circuito se basa en el convertidor LM2662MX IC - CC / CC que funciona con un método de "bomba de carga". La corriente de salida máxima del circuito es de 200 mA, que es suficiente para nuestros requisitos de diseño; estamos limitados con una corriente de salida de 80 mA desde el canal de cada dispositivo.

IC realiza todo el trabajo necesario, por lo que solo las partes que necesitamos conectar son dos condensadores electrolíticos: C33 para conmutación y C34 para derivación de línea de -3,3 V (consideraciones de reducción de ruido). La frecuencia de la conmutación es insignificante en el diseño si colocamos el circuito lo suficientemente lejos de las partes de generación de formas de onda (lo discutiremos en el paso Diseño de PCB).

Unidad de microcontrolador - MCU

Este es el administrador y el CEO de nuestro sistema: control, manejo de red, transmisión de mensajes y soporte de interfaz de usuario, todo es por MCU.

La MCU que se eligió es Atmel ATMEGA32L, donde L significa operación de voltaje admitido ∈ [2.7V: 5.5V]. En nuestro caso, la tensión de funcionamiento es de + 3,3 V.

Consideremos los principales bloques de operación, que es necesario comprender, trabajando con MCU en nuestro diseño:

  • Oscilador externo: es un componente opcional, ya que estamos interesados en la frecuencia de funcionamiento de 8 MHz.
  • Control periférico, red SPI: todos los dispositivos periféricos (excepto ESP32) se comunican con MCU a través de SPI. Hay tres líneas compartidas para todos los dispositivos (SCK, MOSI, MISO) y cada circuito periférico tiene su línea CS (Chip Select) dedicada. Los dispositivos SPI que forman parte del dispositivo:

    1. D / A para control de amplitud - Canal A
    2. D / A para control de amplitud - Canal B
    3. Dispositivo AD9834 - Canal A
    4. Dispositivo AD9834 - Canal B
    5. D / A para control de voltaje de polarización - Canal A
    6. D / A para control de voltaje de polarización - Canal B
    7. Potenciómetro digital para ajustes de brillo / contraste de LCD
  • Compatibilidad con LCD: dado que LCD es una pantalla genérica de 20 x 4 caracteres, utilizamos una interfaz de 4 bits (líneas D7: D4), pines de control (líneas RS, E) y control de brillo / contraste (líneas V0 y ánodo)
  • Compatibilidad con LED RGB: este módulo es opcional, pero hay un conector LED RGB de cátodo común con resistencias adecuadas, conectado a la MCU.
  • Control de energía: MCU realiza el monitoreo del sistema de energía en el modo de tiempo real y maneja todos los eventos de energía necesarios:

    1. VBAT_ADC - Monitoreo del voltaje de la batería y determinación de su estado (Canal ADC0)
    2. PWR_IND - Indicación de conexión de fuente de alimentación externa (canal ADC1)
    3. PS_HOLD: línea de habilitación de energía primaria para todos los sistemas definidos. Cuando la MCU lo baja, el dispositivo se apaga
    4. Terminal de interrupción del interruptor inteligente - Monitoreo del estado del botón pulsador
  • Gestión de red WiFi - ESP32: MCU se comunica con ESP32 a través de la interfaz UART. Dado que 8MHz nos permite implementar una velocidad en baudios de 115200 con un error relativamente pequeño, podemos usar ESP32 en el circuito sin predefiniciones de cambios en la velocidad en baudios.

Programador AVR ISP

Nuestra MCU está programada a través de SPI con la línea de reinicio (/ RST) que debe colocarse en ALTO para una operación adecuada (de lo contrario, la MCU se encontrará en un estado de reinicio para siempre).

Para permitir que el dispositivo se programe y cargue a través de USB, adjunté el programador AVR ISP (producto de tamaño pequeño, comprado en eBay). Para mantener el soporte USB completo del dispositivo, es necesario unir terminales USB Tipo-A (D +, D-, VBUS y GND) con el dispositivo AVR ISP.

Circuito de generación de forma de onda

El núcleo del dispositivo son estos circuitos. AD9834 es un dispositivo DDS de bajo consumo que nos proporciona todas las formas de onda que nos gustaría recuperar del sistema. Los circuitos contienen dos circuitos integrados AD9834 independientes con osciladores externos de 50 MHz separados (como se puede ver en los esquemas). El motivo del oscilador separado es una consideración de reducción de ruido de los circuitos digitales, por lo que la decisión fue manejar líneas adecuadas de 50MHz con osciladores colocados junto al AD9834.

Ahora veamos algunas matemáticas:

Dado que el dispositivo DDS funciona con tecnología Phase Wheel con un valor de salida en un registro de 28 bits, podemos describir la generación de formas de onda matemáticamente:

dP (fase) = ωdt; ω = P '= 2πf; f (AD9834) = ΔP * f (clk) / 2 ^ 28; ΔP ∈ [0: 2 ^ 28 - 1]

Y de acuerdo con la hoja de datos AD9834, teniendo en cuenta la frecuencia máxima, se puede obtener la resolución de la frecuencia de salida:

Δf = k * f (oscilador) / f (máximo) = 0.28 * 50M / 28M = 0.187 [Hz]

Los CI AD9834 proporcionan una salida de corriente analógica para onda triangular / sinusoidal (terminal IOUT) y una salida digital para onda cuadrada (terminal SIGN_OUT). El uso del bit de signo es un poco complicado, pero podemos manejarlo: cada vez que DDS pasa el umbral del valor de comparación, SIGN_OUT se comporta en consecuencia. Se adjunta una resistencia de 200 ohmios a la salida de cada canal, por lo que el voltaje de salida tendría valores significativos:

I (canal único) = V (salida) / R (selección de voltaje); V (salida) = R (VS) * I (SS) = 200I (SS) [A]

Circuitos de control de amplitud (D / A)

De acuerdo con la hoja de datos de AD9834, su amplitud puede ajustarse proporcionando corriente al sistema de escala completa DDS, por lo que con la ayuda de IC D / A dual, podemos controlar la amplitud de la señal de salida ajustando esa corriente. Una vez más, algunas matemáticas:

I (escala completa) = 18 * (V_REF - V_DAC) / R_SET [A]

Según esquemas y poniendo algunos números a la ecuación:

I (escala completa) = 3,86 - 1,17 * V_DAC [A]

El módulo D / A utilizado en el diseño es MCP4922 de 12 bits, cuando la corriente está en el rango de [0mA: 3.86mA] y la función de amplitud lineal es:

V (selección de amplitud) = 1 - [V (D / A) / (2 ^ 12 - 1)]

Circuito de multiplexación de forma de onda

Las salidas de generación de ondas cuadradas y sinusoidales / triangulares están separadas en AD9834, por lo tanto, tenemos que usar un circuito de multiplexación de alta velocidad para ambas salidas para permitir la recuperación de todas las formas de onda deseadas de un solo canal separado. El IC multiplexor es un conmutador analógico ADG836L con una resistencia de encendido muy baja (~ 0.5Ohm).

La tabla de selección que MCU está usando para las salidas tal como está:

Selección de modo [D2: D1] | Canal de salida A | Canal de salida B

00 | Seno / Triángulo | Seno / Triángulo 01 | Seno / Triángulo | Cuadrado 10 | Cuadrado | Seno / Triángulo 11 | Cuadrado | Cuadrado

Circuitos de control de voltaje de polarización (D / A)

Una de las principales características del generador de formas de onda es controlar su valor de CC. En este diseño, se hace configurando el voltaje D / A deseado para cada canal, y estos voltajes de polarización se suman con las salidas multiplexadas que hemos discutido un poco antes.

El voltaje recuperado de D / A se encuentra en el rango [0V: + 3.3V], por lo que hay un circuito basado en amplificador operacional que asigna el rango D / A a [-3.3V: + 3.3V], lo que permite que el dispositivo proporcione un rango completo del componente de CC deseado. Saltaremos las molestas matemáticas analíticas y nos centraremos en los resultados finales:

V_OUT (canal B) = V_BIAS_B (+) - V_BIAS_B (-); V_OUT (canal A) = V_BIAS_A (+) - V_BIAS_A (-)

Ahora, el rango de componentes de CC se encuentra en el rango [-3.3V: + 3.3V].

Circuitos sumadores: componentes de CC y salidas de forma de onda

En este punto, tenemos todo lo que necesitamos para la salida adecuada del dispositivo: voltaje de polarización (componente de CC) en el rango de voltaje completo y salidas AD9834 multiplexadas. Haremos que eso suceda utilizando el amplificador sumador: configuración de amplificador operacional

Saltemos las matemáticas una vez más (ya hemos cubierto muchos enfoques matemáticos) y anotemos el resultado final de la salida del amplificador sumador:

V (salida del dispositivo) = V (polarización positiva) - V (polarización negativa) - V (salida multiplexada) [V]

Por eso:

V_OUT = ΔV_BIAS - V_AD9834 [V]

Los conectores de salida de tipo BNC están conectados con resistencias de selección (R54, R55; R56, R57). La razón de esto es que en el caso de que el diseño sea disfuncional, aún podemos seleccionar si queremos usar un amplificador sumador.

Nota importante: Las redes de resistencias de los amplificadores sumadores finales pueden ser ajustadas por un diseñador para cambiar la amplitud máxima que se puede recuperar del dispositivo. En mi caso, todos los amplificadores comparten la misma ganancia = 1, por lo que la amplitud máxima amortiguada es 0.7Vpp para onda triangular / sinusoidal y 3.3Vpp para onda cuadrada. El enfoque matemático específico se puede encontrar entre las imágenes adjuntas al paso.

ESP32 como módulo externo

MCU se comunica con ESP32 a través de la interfaz UART. Como quería mi propia PCB para el ESP32, hay 4 terminales disponibles para conectar: VCC, RX, TX, GND. J7 es un conector de interfaz entre PCB y ESP32 se asignará como módulo externo dentro del dispositivo.

Interfaz de usuario: LCD y altavoz

La pantalla LCD que se utilizó es una pantalla genérica de 20 x 4 caracteres con una interfaz de 4 bits. Como se puede ver en el diseño, hay un potenciómetro digital SPI conectado a los terminales LCD "A" y "V0"; su propósito es ajustar brillo y contraste del módulo LCD mediante programación.

El altavoz proporciona una salida de sonido para el usuario mediante una simple generación de ondas cuadradas desde la MCU. El BJT T1 controla la corriente a través del altavoz que puede estar en dos estados: ENCENDIDO / APAGADO.

Paso 5: Diseño de hardware - Módulo ESP32

Diseño de hardware - Módulo ESP32
Diseño de hardware - Módulo ESP32

ESP32 se utiliza como módulo externo para PCB principal. La comunicación del dispositivo se basa en comandos AT, que están disponibles en el firmware de un dispositivo genérico.

No hay mucho que ampliar en este diseño, pero hay algunas notas para el diseño:

  • Para el manejo de fallas al usar el módulo UART adecuado de ESP32, adjunté tres resistencias de selección para las líneas TX y RX. (0 ohmios para cada uno). Para la configuración estándar, el módulo UART2 se utiliza para los comandos AT (R4, R7 deben estar soldados)
  • El dispositivo tiene una salida de 4 líneas: VCC, GND, TX, RX.
  • Los pines IO0 y EN evalúan el funcionamiento del dispositivo y deben diseñarse como se indica en los esquemas

Todas las características de PCB que cubriremos en el siguiente paso.

Paso 6: Diseño de PCB

Diseño de PCB
Diseño de PCB
Diseño de PCB
Diseño de PCB
Diseño de PCB
Diseño de PCB

Los objetivos de diseñar una placa de circuito impreso

  1. Cree un sistema integrado para todos los circuitos integrados en la misma placa
  2. Mejore el rendimiento del dispositivo mediante el diseño de una única PCB principal
  3. Reducción de costos: si desea consultar los precios, los diseños de bajo costo son REALMENTE bajos
  4. Minimizar el tamaño de la placa electrónica
  5. Fácil de solucionar: podemos utilizar TP (puntos de prueba) para cada posible línea defectuosa.

Parámetros técnicos

Ambos PCB: la placa principal y la placa ESP32 comparten las mismas características para el proceso de fabricación: bajo costo y operable para nuestros propósitos. Veámoslos:

A - Tablero principal

  • Tamaño: 10 cm x 5,8 cm
  • Número de capas: 2
  • Espesor de PCB: 1,6 mm
  • Espacio / ancho mínimo de traza: 6 / 6mil
  • Mínimo a través del diámetro del orificio: 0,3 mm
  • Cobre al borde de la distancia mínima de PCB: 20 mil
  • Acabado de la superficie: HASL (tipo económico de color plateado bastante atractivo)

B - Tablero principal

  • Tamaño: 3 cm x 4 cm
  • Número de capas: 2
  • Espesor de PCB: 1,6 mm
  • Espacio / ancho mínimo de traza: 6 / 6mil
  • Mínimo a través del diámetro del orificio: 0,3 mm
  • Cobre al borde de la distancia mínima de PCB: 20 mil
  • Acabado de superficies: HASL

Paso 7: recinto 3D

Recinto 3D
Recinto 3D

No lo diseñé yo mismo, porque en ese momento estaba persuadiendo a este dispositivo para que funcionara, por lo que no estaba al tanto de todos los conceptos básicos de la impresión 3D. Por lo tanto, utilicé un proyecto SCAD de Thingiverse y adjunté diferentes aperturas a los límites, de acuerdo con las especificaciones de mi dispositivo.

  1. Dispositivo de impresión: Creality Ender-3
  2. Tipo de cama: vidrio, 5 mm de espesor
  3. Diámetro del filamento: 1,75 mm
  4. Tipo de filamento: PLA +
  5. Diámetro de la boquilla: 0,4 mm
  6. Velocidad inicial: 20 mm / seg.
  7. Velocidad media: 65 mm / seg.
  8. Soporte: N / A
  9. Relleno: 25%
  10. Temperatura:

    • Cama: 60 (oC)
    • Boquilla: 215 (oC)
  11. Color del filamento: negro
  12. Número total de aperturas: 5
  13. Número de paneles de caja: 4

    • Carcasa superior
    • Concha inferior
    • Panel frontal
    • Panel posterior

Paso 8: Implementación de software - MCU

Implementación de software: MCU
Implementación de software: MCU
Implementación de software: MCU
Implementación de software: MCU
Implementación de software: MCU
Implementación de software: MCU

Enlace de GitHub a Android y código Atmega32

Algoritmo de software

Todas las operaciones que realiza la MCU se describen en los diagramas de flujo adjuntos. Además de eso, hay un código adjunto para el proyecto. Cubramos las especificaciones del software:

Encender

En esta etapa, MCU realiza todas las secuencias de inicialización junto con la determinación del tipo de comunicación almacenada con el dispositivo Android: Comunicación de red WiFi directa o WLAN: estos datos se almacenan en EEPROM. El usuario puede redefinir el tipo de emparejamiento del dispositivo Android en esta etapa.

Emparejamiento directo de dispositivos Android

Este tipo de emparejamiento se basa en la creación de una red WiFi por parte del dispositivo FuncGen. Creará un AP (punto de acceso) y un servidor TCP en una IP de dispositivo local con un SSID (nombre de red WiFi) específico y un número de puerto específico. El dispositivo debe mantener el estado: abierto para conexiones.

Cuando el dispositivo Android está conectado a FuncGen, MCU ingresa al modo ACTIVO y responde de acuerdo con las instrucciones del usuario del dispositivo Android.

Emparejamiento WLAN

Para comunicarse en una red WiFi local, MCU debe proporcionar comandos para que el ESP32 cree AP, se comunique con el dispositivo Android e intercambie los datos cruciales de la red:

  • El dispositivo Android recibe de FuncGen su dirección MAC, la almacena en la memoria.
  • El dispositivo FuncGen recibe los parámetros WLAN seleccionados del dispositivo Android: SSID, tipo de seguridad y contraseña y los almacena en EEPROM.

Cuando los dispositivos están realmente conectados a la misma WLAN, el dispositivo Android buscará el FuncGen escaneando todas las direcciones MAC de los dispositivos conectados a la WLAN. Cuando el dispositivo Android determina la coincidencia de MAC, intenta comunicarse.

Conexión y manejo del estado - MCU

Cuando los dispositivos se comunican entre sí, el protocolo (ver paso previo al final) permanece igual y el diagrama de flujo es el mismo.

Monitoreo del estado del dispositivo

La interrupción temporizada proporciona a la MCU los detalles necesarios para el manejo del estado. Cada ciclo de interrupción del temporizador, se actualiza la siguiente lista de parámetros:

  • Fuente de alimentación externa: encendido / apagado
  • Estado de voltaje de la batería
  • Actualización de la interfaz de usuario para cada personalización
  • Botón pulsador: presionado / no presionado

Paso 9: Implementación del software - Aplicación de Android

Implementación de software: aplicación para Android
Implementación de software: aplicación para Android
Implementación de software: aplicación para Android
Implementación de software: aplicación para Android
Implementación de software: aplicación para Android
Implementación de software: aplicación para Android
Implementación de software: aplicación para Android
Implementación de software: aplicación para Android

La aplicación de Android está escrita en estilo Java-Android. Intentaré explicarlo de la misma manera que en los pasos anteriores, dividiendo el algoritmo en bloques de código separados.

Secuencia de encendido

Primera secuencia del dispositivo. Aquí se presenta el logotipo de la aplicación junto con la habilitación de los módulos GPS y WiFi del dispositivo Android (no se preocupe, el GPS es necesario solo para escanear redes WiFi adecuadas).

Menú principal

Una vez iniciada la aplicación, aparecerán cuatro botones en la pantalla. Acción de los botones:

  1. CONEXIÓN DIRECTA: Inicializando la conexión al AP de FuncGen mediante el SSID de IOT_FUNCGEN. Si la conexión se realiza correctamente, el dispositivo entra en el modo de interfaz de usuario principal.
  2. CONEXIÓN WIFI: El dispositivo comprueba si hay parámetros de datos almacenados en la memoria: wifi.txt, mac.txt. Si no hay datos almacenados, el dispositivo rechazará la solicitud del usuario y proporcionará un mensaje emergente de que el emparejamiento WLAN debe realizarse primero.
  3. EMPAREJAMIENTO: Comunicarse con FuncGen de la misma manera que CONEXIÓN DIRECTA, pero en lugar de un intercambio continuo de mensajes, hay un único apretón de manos. El dispositivo Android verifica si ya está conectado a la red WiFi y solicita al usuario que ingrese la contraseña. Si la reconexión se realiza correctamente, el dispositivo Android almacena el SSID y la clave de acceso en el archivo wifi.txt. Después de una comunicación exitosa con FuncGen, almacena la dirección MAC recibida en el archivo mac.txt.
  4. Salida: suficiente dicho:)

Administrador de escaneo WiFi

Quería que la aplicación estuviera completamente operativa y sin que se hicieran ajustes fuera de la aplicación. Entonces, diseñé WiFi Scanner, que realiza todas las operaciones necesarias para conectarse a la red WiFi con una clave de acceso y SSID conocidos.

Transmisión de datos y comunicación TCP

Este es el bloque de código principal de la aplicación. Para todas las unidades de UI hay un mensaje definido en un formato específico (paso Pre-final), que obliga a FuncGen a proporcionar la salida deseada para los canales. Hay tres tipos de campos de IU en actividad:

  1. Barras de búsqueda: aquí definimos el rango real de parámetros de salida de FuncGen

    1. Amplitud
    2. Compensación de CC
    3. Brillo LCD
    4. Contraste LCD
  2. Edición de texto: para mantener los valores enteros bien definidos y precisos, la entrada de frecuencia se realiza a través de cuadros de texto de solo números
  3. Botones: Selección de parámetros de las listas disponibles:

    1. Tipo de forma de onda
      1. Seno
      2. Triángulo
      3. corriente continua
      4. Cuadrado
      5. APAGADO
    2. Obtener información

      1. Estado de la batería (porcentaje)
      2. Estado de CA (fuente de alimentación externa)
    3. Opción de arranque (para FuncGen MCU)

      1. Ajuste de fábrica
      2. Reiniciar
      3. Apagar
      4. Directo: reiniciar con el modo de emparejamiento directo
      5. WLAN: reiniciar con el modo de emparejamiento WLAN
    4. Salir al menú principal: Suficiente dicho:)

Paso 10: Prueba

Recomendado: