Table des matières:

Générateur de fonctions portable sur WiFi et Android : 10 étapes
Générateur de fonctions portable sur WiFi et Android : 10 étapes

Vidéo: Générateur de fonctions portable sur WiFi et Android : 10 étapes

Vidéo: Générateur de fonctions portable sur WiFi et Android : 10 étapes
Vidéo: comment régler le problème de wifi qui ne se connecte pas - problème de connexion wifi téléphone 2024, Juillet
Anonim
Générateur de fonctions portable sur WiFi et Android
Générateur de fonctions portable sur WiFi et Android
Générateur de fonctions portable sur WiFi et Android
Générateur de fonctions portable sur WiFi et Android
Générateur de fonctions portable sur WiFi et Android
Générateur de fonctions portable sur WiFi et Android
Générateur de fonctions portable sur WiFi et Android
Générateur de fonctions portable sur WiFi et Android

Vers la fin du 20e siècle, diverses innovations technologiques ont surgi, notamment dans le domaine des communications; mais pas seulement. Pour nous, les utilisateurs, les consommateurs et les ingénieurs ont mis au jour le développement rapide d'appareils électroniques, qui peuvent nous rendre la vie beaucoup plus facile: montres intelligentes, maisons intelligentes, smartphones, etc.

Étant donné que tout peut être "intelligent" de nos jours, j'ai décidé de concevoir un appareil super utile pour faire partie de l'équipement de laboratoire électronique essentiel - Générateur de fonctions portable, contrôlable par un smartphone basé sur Android OS via WiFi direct ou WiFi Local Area Network (WLAN).

Pourquoi devrions-nous construire cet appareil?

De nos jours, la grande majorité des équipements de test sont assez chers. Et parfois, ces appareils ne sont pas portables. En tant que solution pour les prix élevés, le manque de portabilité et le manque d'accès au réseau de l'appareil, l'appareil fournit un générateur de forme d'onde à double canal, qui est en effet portable et a un accès illimité au réseau - Internet ou local.

Et bien sûr, l'appareil doit être construit par enthousiasme, en obéissant aux principes du bricolage - Parfois, nous devons simplement faire les choses nous-mêmes pour nous sentir bien:)

Principales caractéristiques

Source de courant

  • Connecteur USB Type-A, pour les systèmes d'alimentation et la programmation
  • Système complet de gestion de batterie Li-Ion - Modes de charge et stables
  • Implémentation de Smart Switch - pas besoin d'interrupteur à bascule
  • Alimentation double: +3,3 V et -3,3 V pour la génération de forme d'onde de tension symétrique

Génération de forme d'onde

  • Implémentation du niveau DC à la cascade de sortie - forme d'onde polarisée entre les limites de tension
  • Génération de formes d'onde de type 4 basée sur DDS - Sinus, triangle, carré et CC
  • Prise en charge de la fréquence jusqu'à 10 MHz
  • Courant de sortie jusqu'à 80mA avec une disponibilité de puissance maximale de 500mW
  • Canaux séparés pour la génération de formes d'onde - circuits divisés basés sur AD9834

la communication

  • Implémentation d'ESP32 - Capacités WiFi applicables
  • Prise en charge complète de TCP/IP par appareil générateur et smartphone Android
  • Possibilité de stocker les paramètres utilisateur pour chaque cycle de l'appareil
  • Surveillance de l'état - les deux systèmes connaissent l'autre état: FuncGen (appelons-le ainsi à partir de maintenant) et smartphone.

Interface utilisateur

  • LCD 20 x 4 caractères avec interface de données simple à 4 bits
  • Application Android - contrôle utilisateur complet sur l'appareil FuncGen
  • Circuit buzzer - retour sonore à l'utilisateur

Étape 1: Schéma fonctionnel - Matériel

Schéma fonctionnel - Matériel
Schéma fonctionnel - Matériel
Schéma fonctionnel - Matériel
Schéma fonctionnel - Matériel

Unité de microcontrôleur - ATMEGA32L

Le microcontrôleur est une puce programmable qui comprend toutes les fonctionnalités informatiques qui résident dans une seule puce électronique. Dans notre cas, il s'agit du « cerveau » et d'un élément central du système. Le but du MCU est de gérer tous les systèmes périphériques, de gérer la communication entre ces systèmes, de contrôler le fonctionnement du matériel et de fournir une prise en charge complète de l'interface utilisateur et de son interaction avec un utilisateur réel. Ce projet est basé sur le MCU ATMEGA32L, qui peut fonctionner sur 3,3V et une fréquence de 8MHz.

SoC de communication - ESP32

Ce SoC (System on Chip) fournit un support de communication complet pour FuncGen - Accès aux capacités WiFi, y compris la communication directe, locale ou Internet. Les objectifs de l'appareil sont:

  • Gestion de la transmission de données entre l'application Android et l'appareil FuncGen
  • Gestion des messages de contrôle/données
  • Prise en charge de la configuration client-serveur TCP/IP continue

Dans notre projet, le SoC est l'espressif ESP32, qui est trop populaire pour l'étendre encore plus:)

Système de gestion de batterie Li-Ion

Afin de transformer notre appareil en un appareil portable, l'appareil contient un circuit de charge de batterie Li-Ion conçu. Le circuit est basé sur MC73831 IC, avec un courant de charge contrôlable en ajustant la valeur d'une seule résistance de programmation (nous couvrirons ce sujet à l'étape Schémas). L'entrée d'alimentation de l'appareil est un connecteur USB Type-A.

Circuit de commutation intelligent

Le circuit de commande d'alimentation du dispositif de commutation intelligent fournit un contrôle logiciel complet sur la séquence d'arrêt de l'appareil et l'absence de besoin d'un interrupteur à bascule externe pour la coupure de la tension de la batterie de l'appareil. Toutes les opérations d'alimentation sont effectuées en appuyant sur le bouton poussoir et le logiciel du MCU. Dans certains cas, il serait nécessaire d'arrêter le système: tension de batterie faible, tension d'entrée élevée, erreur de communication, etc. Le commutateur intelligent est basé sur le circuit intégré de commutateur intelligent STM6601, qui est bon marché et très convivial.

Unité d'alimentation principale

Cette unité se compose de deux circuits d'alimentation alimentés par batterie - +3,3V pour tous les circuits d'alimentation numériques / analogiques et -3,3V pour la sortie symétrique FunGen par rapport au potentiel 0V (c'est-à-dire que la forme d'onde générée peut être définie dans [-3,3V:3,3V] Région.

  • Le circuit d'alimentation principal est basé sur un régulateur de tension linéaire LP3875-3.3 LDO (faible chute) 1A.
  • Le circuit d'alimentation secondaire est basé sur LM2262MX IC, qui effectue une conversion de tension négative DC-DC via condensateur-pompe de charge - système sur lequel IC est basé.

Système de générateurs de formes d'onde

Le système a été conçu en mettant l'accent sur des circuits intégrés DDS (synthèse numérique directe) séparés, qui permettent un contrôle complet de la génération de formes d'onde par le SPI (interface périphérique série) du MCU. Les circuits qui ont été utilisés dans la conception sont des dispositifs analogiques AD9834 qui peuvent fournir différents types de formes d'onde. Les défis auxquels nous devons faire face en travaillant avec AD9834 sont:

  • Amplitude de forme d'onde fixe: l'amplitude de la forme d'onde est contrôlée par un module DAC externe
  • Aucune prise en compte du niveau de décalage DC: mise en œuvre de circuits de sommation avec les valeurs de décalage DC souhaitées
  • Sorties séparées pour l'onde carrée et l'onde triangulaire/sinusoïdale: mise en œuvre d'un circuit de commutation haute fréquence, de sorte que chaque sortie unique de canal peut fournir toute la forme d'onde souhaitée: sinus, triangle, carré et CC.

Affichage à cristaux liquides

L'écran LCD fait partie de l'interface utilisateur (interface utilisateur) et son objectif est de permettre à l'utilisateur de comprendre ce que fait l'appareil en mode temps réel. Il interagit avec l'utilisateur à chaque état de l'appareil.

Avertisseur sonore

Circuit générateur de tonalité simple pour un retour supplémentaire de l'appareil à l'utilisateur.

Programmeur ISP intégré

Il existe un problème persistant pour chaque ingénieur en ce qui concerne le processus de programmation: il y a toujours le pire besoin de démonter le produit afin de le reprogrammer avec un nouveau firmware. Pour surmonter cet inconvénient, le programmeur AVR ISP a été connecté à l'appareil de l'intérieur, tandis que les lignes de données et d'alimentation USB sont liées au connecteur USB Type-A de l'appareil. Dans cette configuration, il suffit de brancher notre FuncGen via un câble USB soit pour la programmation, soit pour la recharge !

Étape 2: Schéma fonctionnel - Mise en réseau

Schéma fonctionnel - Réseautage
Schéma fonctionnel - Réseautage

Générateur de fonctions à double canal

Appareil principal. Celui que nous avons examiné à l'étape précédente

ESP-WROOM-32

Système sur puce intégré avec capacités WiFi et BLE. Le SoC est attaché à la carte principale (nous aborderons cela dans l'étape des schémas) via le module UART et agit comme un émetteur de messages entre l'appareil principal et le smartphone Android.

Réseau local Wi-Fi

Le smartphone et l'appareil communiqueront via WiFi direct ou réseau local, en fonction de la configuration serveur/client TCP. Lorsque les appareils se reconnaissent sur le WiFi, l'appareil principal crée un serveur TCP avec les paramètres appropriés et est capable d'envoyer/recevoir des messages. L'appareil agit comme un secondaire du smartphone. L'appareil Android, d'autre part, se connecte au serveur TCP en tant que périphérique réseau client, mais est considéré comme le principal émetteur de messages - le smartphone est celui qui initie le cycle de communication complet: Envoi de message - réception de réponse.

Smartphone Android

Smartphone basé sur Android OS qui s'exécute sur l'application FuncGen

Étape 3: Pièces, outils, IDE et nomenclature

Pièces, outils, IDE et nomenclature
Pièces, outils, IDE et nomenclature
Pièces, outils, IDE et nomenclature
Pièces, outils, IDE et nomenclature
Pièces, outils, IDE et nomenclature
Pièces, outils, IDE et nomenclature

Nomenclature (voir tableau XLS ci-joint)

Interface utilisateur et connexions système

  • 1 x 2004A Char-LCD 20x4 Bleu
  • 1 x connecteur USB de type B
  • 1x10 Set Mini Micro JST XH 2.54mm 4 Broches
  • 1x6 pièces SW momentané

Commande de PCB (selon Seeed Studio)

Matériau de base FR-4

Nombre de couches 2 couches

PCB Quantité 10

Nombre de conceptions différentes 1

Épaisseur du circuit imprimé 1,6 mm

Couleur du PCB Bleu

Finition de surface HASL

Barrage de masque de soudure minimum 0.4mm↑

Poids de cuivre 1oz

Taille minimale du trou de perçage 0.3mm

Largeur de trace / Espacement 6/6 mil

Demi-trous plaqués / Trous crénelés Non

Contrôle d'impédance Non

Outils

  • Pistolet à colle chaude
  • Pince à épiler
  • Coupeur
  • ~ fil 22AWG pour le traitement des dysfonctionnements
  • Fer à souder/station
  • Étain à souder
  • Station de reprise SMD (en option)
  • Imprimante 3D (en option)
  • Fichier d'extrusion
  • Programmeur FAI AVR
  • Convertisseur USB vers série (facultatif, à des fins de débogage)

Environnement de développement intégré (IDE) et logiciel

  • Éditeur de schémas Autodesk EAGLE ou Cadence / Éditeur de circuits imprimés Allegro
  • OpenSCAD (facultatif)
  • Ultimaker Cura (En option)
  • Saleae Logic (pour le dépannage)
  • Atmel Studio 6.3 ou supérieur
  • Android Studio ou Eclipse IDE
  • Docklight Serial Monitor / Autre logiciel de surveillance de port COM
  • ProgISP pour la programmation flash AVR ATMEGA32L

Étape 4: Conception du matériel - Carte principale

Conception matérielle - Carte principale
Conception matérielle - Carte principale
Conception matérielle - Carte principale
Conception matérielle - Carte principale
Conception matérielle - Carte principale
Conception matérielle - Carte principale

Circuit de gestion de batterie

Le circuit de charge de la batterie est basé sur le MCP7383 IC, qui nous permet de sélectionner le courant de charge souhaité pour la batterie Li-Ion - 3,7 V avec une capacité de 850 mAh. Le courant de charge est défini en programmant la valeur de la résistance (R1) dans notre cas

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

La tension USB VBUS est filtrée par un filtre π (C1, L3, C3) et agit comme une source d'alimentation pour le circuit de charge.

Le circuit diviseur de tension (R2, R3) permet au MCU d'indiquer si l'alimentation USB externe est connectée ou non, en fournissant la tension suivante au canal A/D du MCU:

V(indication) ~ (2/3)V(BUS)

Étant donné que notre A/N d'ATMEGA32L est de 12 bits, nous pouvons calculer la plage numérique:

A/D(plage) = 4095V(indication)/V(REF).

A/D [14AH: FFFH]

Unité d'alimentation de commutateur intelligent

Le circuit permet au système de contrôler l'alimentation de chaque bloc conçu à partir du bouton-poussoir et du logiciel sur le MCU et est basé sur le Smart-Switch STM6601 avec option POWER au lieu de RESET. Les terminaux que nous voulons considérer sont ceux-ci:

  • PSHOLD - Ligne d'entrée, qui définit l'état de l'appareil: si est tiré vers le BAS, l'appareil désactive toutes les unités d'alimentation secondaires (+3,3 V et -3,3 V). Si maintenu HAUT - l'appareil maintient l'état ON.
  • nSR et nPB - Lignes d'entrée. Bornes à boutons poussoirs. Lorsqu'un front descendant est détecté sur ces broches, l'appareil essaie d'entrer en mode marche/arrêt
  • nINT - Ligne de sortie. Tiré BAS à chaque fois que le bouton-poussoir est enfoncé
  • FR - Ligne de sortie, est utilisée comme alimentation pour les unités d'alimentation secondaires. Tant que est maintenu LOW, les deux alimentations secondaires sont désactivées

Il y a quelques notes importantes avant de passer à la conception finale:

  • PSHOLD doit être tiré à 3,3 V, car il existe des cas où les MCU forcent toutes les E/S à être à l'état HIGH-Z. Dans ce cas, l'état de PSHOLD du MCU est inconnu et peut considérablement affecter le processus de programmation de l'appareil.
  • Le STM6601 doit être commandé avec une option de réglage EN sur appui long, au lieu de l'option RESET (je suis tombé dans celui-là).

Bloc d'alimentation: +3.3V

Alimentation principale pour tous les systèmes de notre projet. Lorsque la ligne +3,3 V est maintenue au niveau GND (c'est-à-dire qu'aucune tension n'est présente), tous les circuits intégrés, à l'exception du commutateur intelligent, sont désactivés. Le circuit est basé sur le circuit intégré LDO LP-3875-3.3, avec la possibilité d'être contrôlé via la borne EN et de fournir un courant jusqu'à 1A.

La source d'alimentation de ce circuit est la tension de la batterie, avec un indicateur A/D attaché pour détecter VBAT en configuration, similaire au circuit de détection VBUS. Dans ce cas, les calculs diffèrent légèrement;

V(Batterie à A/D) = 0,59V(Batterie); A/D (plage) ∈ [000H: C03H]

Unité d'alimentation: -3,3 V

Le circuit d'alimentation en tension négative nous permet de générer des formes d'onde symétriques avec un facteur CC de 0 V (c'est-à-dire que la valeur moyenne de la forme d'onde peut être de 0 V). Ce circuit est basé sur le convertisseur LM2662MX IC - DC/DC qui fonctionne selon une méthode de "pompe de charge". Le courant de sortie maximal du circuit est de 200 mA, ce qui est suffisant pour nos exigences de conception - nous sommes limités à un courant de sortie de 80 mA de chaque canal de l'appareil.

IC effectue tout le travail nécessaire, donc les seules pièces que nous devons attacher sont deux condensateurs électrolytiques: C33 pour la commutation et C34 pour la dérivation de ligne -3,3 V (considérations relatives à la réduction du bruit). La fréquence de la commutation est négligeable dans la conception si nous plaçons le circuit suffisamment loin des pièces de génération de forme d'onde (nous en discuterons à l'étape de disposition du PCB).

Unité de microcontrôleur - MCU

Il s'agit du gestionnaire et du PDG de notre système - contrôle, gestion du réseau, transmission des messages et prise en charge de l'interface utilisateur - tout est assuré par MCU.

Le MCU qui a été choisi est Atmel ATMEGA32L, où L représente le fonctionnement en tension supporté ∈ [2,7V: 5,5V]. Dans notre cas, la tension de fonctionnement est de +3,3V.

Considérons les principaux blocs d'opération, qu'il est nécessaire de comprendre, en travaillant avec MCU dans notre conception:

  • Oscillateur externe - Est un composant facultatif, car nous sommes intéressés par la fréquence de fonctionnement de 8 MHz
  • Contrôle des périphériques, réseau SPI - Tous les périphériques (à l'exception de l'ESP32) communiquent avec le MCU via SPI. Il y a trois lignes partagées pour tous les appareils (SCK, MOSI, MISO) et chaque circuit périphérique a sa ligne dédiée CS (Chip Select). Les appareils SPI qui font partie de l'appareil:

    1. D/A pour le contrôle d'amplitude - Canal A
    2. D/A pour le contrôle d'amplitude - Canal B
    3. Appareil AD9834 - Canal A
    4. Appareil AD9834 - Canal B
    5. D/A pour le contrôle de la tension de polarisation - Canal A
    6. D/A pour le contrôle de la tension de polarisation - Canal B
    7. Potentiomètre numérique pour les paramètres de luminosité/contraste de l'écran LCD
  • Prise en charge LCD - Étant donné que l'écran LCD est un écran générique de 20 x 4 caractères, nous utilisons une interface 4 bits (lignes D7:D4), des broches de contrôle (lignes RS, E) et un contrôle de luminosité/contraste (lignes V0 et anode)
  • Prise en charge des LED RVB - Ce module est facultatif, mais il existe un connecteur LED RVB à cathode commune avec des résistances appropriées, connecté au MCU.
  • Contrôle de l'alimentation - MCU effectue la surveillance du système d'alimentation en mode temps réel et gère tous les événements d'alimentation nécessaires:

    1. VBAT_ADC - Surveillance de la tension de la batterie et détermination de son état (Canal ADC0)
    2. PWR_IND - Indication de connexion d'alimentation externe (canal ADC1)
    3. PS_HOLD - Ligne d'activation de l'alimentation principale pour tous les systèmes définis. Lorsque est tiré vers le bas par le MCU, l'appareil est éteint
    4. Borne d'interruption du commutateur intelligent - Surveillance de l'état du bouton poussoir
  • Gestion du réseau WiFi - ESP32: MCU communique avec ESP32 via l'interface UART. Étant donné que 8 MHz nous permet d'implémenter un débit en bauds de 115 200 avec une erreur relativement faible, nous pouvons utiliser ESP32 dans le circuit sans prédéfinir les changements de débit en bauds.

Programmeur FAI AVR

Notre MCU est programmé via SPI avec la ligne de réinitialisation (/RST) qui doit être tirée HAUT pour un fonctionnement correct (sinon - le MCU se retrouvera dans un état de réinitialisation pour toujours).

Afin de permettre à l'appareil d'être à la fois programmé et chargé via USB, j'ai connecté le programmeur AVR ISP (produit de petite taille, acheté sur eBay). Afin de maintenir une prise en charge USB complète de l'appareil, il est nécessaire de lier les terminaux USB Type-A (D+, D-, VBUS et GND) à l'appareil AVR ISP.

Circuit de génération de forme d'onde

Le noyau de l'appareil est ces circuits. L'AD9834 est un appareil DDS à faible consommation qui nous fournit toutes les formes d'onde que nous aimerions récupérer du système. Les circuits contiennent deux circuits intégrés AD9834 indépendants avec des oscillateurs externes séparés de 50 MHz (comme on peut le voir sur les schémas). La raison de l'oscillateur séparé est une considération de réduction du bruit des circuits numériques, la décision a donc été de gérer les lignes 50 MHz appropriées avec des oscillateurs placés à côté de l'AD9834.

Voyons maintenant quelques calculs:

Étant donné que le dispositif DDS fonctionne sur la technologie Phase Wheel avec une valeur de sortie contenue dans un registre de 28 bits, nous pouvons décrire mathématiquement la génération de forme d'onde:

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

Et selon la fiche technique AD9834, en tenant compte de la fréquence maximale, la résolution de la fréquence de sortie peut être obtenue:

f = k * f(oscillateur) / f(maximum) = 0,28 * 50M / 28M = 0,187[Hz]

Les circuits intégrés AD9834 fournissent une sortie de courant analogique pour l'onde triangulaire/sinusoïdale (borne IOUT) et une sortie numérique pour l'onde carrée (borne SIGN_OUT). L'utilisation du bit de signe est un peu délicate mais nous sommes capables de le gérer - Chaque fois que DDS dépasse le seuil de la valeur de comparaison, SIGN_OUT se comporte en conséquence. Une résistance de 200 Ohm est attachée à la sortie de chaque canal, donc la tension de sortie aurait des valeurs significatives:

I(canal unique) = V(sortie) / R(sélection de tension); V(sortie) = R(VS)*I(SS) = 200I(SS) [A]

Circuits de contrôle d'amplitude (D/A)

Selon la fiche technique de l'AD9834, son amplitude peut être ajustée en fournissant du courant au système DDS à pleine échelle, donc avec l'aide du double D/A IC, nous pouvons contrôler l'amplitude du signal de sortie en ajustant ce courant. Encore une fois, quelques maths:

I(pleine échelle) = 18 * (V_REF - V_DAC) / R_SET [A]

D'après les schémas et en mettant quelques nombres à l'équation:

I (pleine échelle) = 3,86 - 1,17 * V_DAC [A]

Le module D/A utilisé dans la conception est le MCP4922 12 bits, lorsque le courant est dans la plage de [0mA: 3,86mA] et la fonction d'amplitude linéaire est:

V (sélection d'amplitude) = 1 - [V(D/A) / (2^12 - 1)]

Circuit de multiplexage de forme d'onde

Les sorties de génération d'onde carrée et sinusoïdale/triangulaire sont séparées à l'AD9834. Par conséquent, nous devons utiliser un circuit de multiplexage à grande vitesse pour les deux sorties afin de permettre de récupérer toutes les formes d'onde souhaitées à partir d'un seul canal séparé. Le multiplexeur IC est un commutateur analogique ADG836L avec une très faible résistance à l'état passant (~0,5 Ohm).

La table de sélection que MCU utilise pour les sorties telle qu'elle est:

Sélection du mode [D2:D1] | Canal de sortie A | Canal de sortie B

00 | Sinus/Triangle | Sinus/Triangle 01 | Sinus/Triangle | Carré 10 | Carré | Sinus/Triangle 11 | Carré | Carré

Circuits de contrôle de tension de polarisation (N/A)

L'une des principales caractéristiques du générateur de forme d'onde est de contrôler sa valeur CC. Dans cette conception, cela se fait en réglant la tension N/A souhaitée pour chaque canal, et ces tensions de polarisation sont additionnées avec les sorties multiplexées dont nous avons parlé un peu plus tôt.

La tension récupérée de D/A se situe dans la plage [0V: +3,3V], il existe donc un circuit basé sur un amplificateur opérationnel qui mappe la plage D/A à [-3,3V: +3,3V], permettant à l'appareil de fournir une gamme complète de la composante CC souhaitée. Nous allons ignorer les calculs analytiques ennuyeux et nous concentrer uniquement sur les résultats finaux:

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

Maintenant, la gamme de composants DC située dans la gamme [-3,3V: +3,3V].

Circuits de sommation - Composants CC et sorties de forme d'onde

À ce stade, nous avons tout ce dont nous avons besoin pour la sortie appropriée de l'appareil - tension de polarisation (composante CC) dans toute la plage de tension et sorties AD9834 multiplexées. Nous allons y arriver en utilisant l'amplificateur de sommation - configuration ampli-op

Sautons à nouveau les mathématiques (nous avons déjà couvert beaucoup d'approches mathématiques) et notons le résultat final de la sortie de l'amplificateur de sommation:

V(sortie de l'appareil) = V(biais positif) - V(biais négatif) - V(sortie multiplexée) [V]

D'où:

V_OUT = V_BIAS - V_AD9834 [V]

Les connecteurs de sortie de type BNC sont connectés avec des résistances de sélection (R54, R55; R56, R57). La raison en est que dans le cas où la conception pourrait être dysfonctionnelle, nous pouvons toujours choisir si nous souhaitons utiliser un amplificateur de sommation.

Remarque importante: les réseaux de résistances des amplificateurs sommateurs finaux peuvent être ajustés par un concepteur, afin de modifier l'amplitude maximale pouvant être récupérée à partir de l'appareil. Dans mon cas, tous les amplis partagent le même gain = 1, donc l'amplitude maximale de la mémoire tampon est de 0,7 Vpp pour l'onde triangulaire/sinusoïdale et de 3,3 Vpp pour l'onde carrée. L'approche mathématique spécifique peut être trouvée parmi les images jointes de l'étape.

ESP32 comme module externe

MCU communique avec ESP32 via l'interface UART. Comme je voulais mon propre PCB pour l'ESP32, il y a 4 bornes disponibles à connecter: VCC, RX, TX, GND. J7 est un connecteur d'interface entre les PCB, et ESP32 sera alloué comme module externe à l'intérieur de l'appareil.

Interface utilisateur - LCD et haut-parleur

L'écran LCD qui a été utilisé est un écran générique de 20 x 4 caractères avec une interface à 4 bits. luminosité et contraste du module LCD par programmation.

Le haut-parleur fournit une sortie sonore à l'utilisateur par une simple génération d'ondes carrées à partir du MCU. Le BJT T1 contrôle le courant à travers le haut-parleur qui peut être juste dans deux états - ON / OFF.

Étape 5: Conception matérielle - Module ESP32

Conception matérielle - Module ESP32
Conception matérielle - Module ESP32

ESP32 est utilisé comme module externe pour le PCB principal. La communication de l'appareil est basée sur des commandes AT, qui sont disponibles sur le micrologiciel d'un appareil générique.

Il n'y a pas grand-chose à développer sur cette conception, mais il y a quelques notes pour la conception:

  • Pour la gestion des échecs lors de l'utilisation du module UART approprié de l'ESP32, j'ai attaché trois résistances de sélection pour les lignes TX et RX. (0Ohm pour chacun). Pour la configuration standard, le module UART2 est utilisé pour les commandes AT (R4, R7 doivent être soudés)
  • L'appareil a une sortie à 4 lignes - VCC, GND, TX, RX.
  • Les broches IO0 et EN évaluent le fonctionnement de l'appareil et doivent être conçues comme indiqué dans les schémas

Toutes les fonctionnalités PCB que nous allons couvrir dans l'étape suivante.

Étape 6: disposition du circuit imprimé

Disposition PCB
Disposition PCB
Disposition PCB
Disposition PCB
Disposition PCB
Disposition PCB

Les objectifs de la conception d'un PCB

  1. Créer un système embarqué pour tous les circuits intégrés sur la même carte
  2. Améliorez les performances de l'appareil en concevant un seul PCB principal
  3. Réduction des coûts - si vous souhaitez consulter les prix, les conceptions à faible coût sont VRAIMENT à faible coût
  4. Minimiser la taille de la carte électronique
  5. Facile à dépanner - Nous pouvons utiliser des TP (points de test) pour chaque ligne défaillante possible.

Paramètres techniques

Les deux PCB: carte principale et ESP32 partagent les mêmes caractéristiques pour le processus de fabrication - faible coût et utilisable pour nos besoins. Voyons-les:

A - Carte principale

  • Taille: 10 cm x 5,8 cm
  • Nombre de couches: 2
  • Épaisseur du circuit imprimé: 1,6 mm
  • Espace/largeur de trace minimum: 6/6mil
  • Diamètre minimum du trou traversant: 0,3 mm
  • Cuivre au bord de la distance minimale du PCB: 20mil
  • Finition de surface: HASL (Assez beau type bon marché de couleur argentée)

B - Carte principale

  • Taille: 3cm x 4cm
  • Nombre de couches: 2
  • Épaisseur du circuit imprimé: 1,6 mm
  • Espace/largeur de trace minimum: 6/6mil
  • Diamètre minimum du trou traversant: 0,3 mm
  • Cuivre au bord de la distance minimale du PCB: 20mil
  • Finition de surface: HASL

Étape 7: Boîtier 3D

Boîtier 3D
Boîtier 3D

Je ne l'ai pas conçu moi-même, car à l'époque je persuadais cet appareil de fonctionner, donc je ne connaissais pas du tout toutes les bases de l'impression 3D. J'ai donc utilisé un projet SCAD de Thingiverse et attaché différentes ouvertures aux limites, selon les spécifications de mon appareil.

  1. Dispositif d'impression: Creality Ender-3
  2. Type de lit: Verre, 5 mm d'épaisseur
  3. Diamètre du filament: 1,75 mm
  4. Type de filament: PLA+
  5. Diamètre de la buse: 0,4 mm
  6. Vitesse initiale: 20 mm/s
  7. Vitesse moyenne: 65 mm/s
  8. Assistance: N/A
  9. Remplissage: 25 %
  10. Température:

    • Lit: 60 (oC)
    • Buse: 215 (oC)
  11. Couleur du filament: noir
  12. Nombre total d'ouvertures: 5
  13. Nombre de panneaux d'enceinte: 4

    • Haut de la coque
    • Coque inférieure
    • Panneau avant
    • Panneau arrière

Étape 8: Implémentation du logiciel - MCU

Implémentation logicielle - MCU
Implémentation logicielle - MCU
Implémentation logicielle - MCU
Implémentation logicielle - MCU
Implémentation logicielle - MCU
Implémentation logicielle - MCU

Lien GitHub vers Android et code Atmega32

Algorithme logiciel

Toutes les opérations effectuées par le MCU sont décrites dans les organigrammes joints. En plus de cela, il y a un code joint pour le projet. Voyons les spécifications du logiciel:

Mise sous tension

À ce stade, le MCU exécute toutes les séquences d'initialisation ainsi que la détermination du type de communication stocké avec l'appareil Android: Communication réseau Wi-Fi ou WLAN directe - ces données sont stockées dans l'EEPROM. L'utilisateur peut redéfinir le type de couplage d'appareils Android à ce stade.

Couplage direct des appareils Android

Ce type d'appairage est basé sur la création d'un réseau WiFi par l'appareil FuncGen. Il créera un AP (point d'accès) et un serveur TCP sur une IP de périphérique local avec un SSID (nom de réseau WiFi) spécifique et un numéro de port spécifique. L'appareil doit conserver l'état - ouvert pour les connexions.

Lorsque l'appareil Android est connecté à FuncGen, le MCU passe en mode ACTIF et répond selon les instructions de l'utilisateur de l'appareil Android.

Couplage WLAN

Afin de communiquer sur un réseau WiFi local, le MCU doit fournir des commandes à l'ESP32 pour créer un point d'accès, communiquer avec un appareil Android et échanger les données réseau cruciales:

  • L'appareil Android reçoit de FuncGen son adresse MAC, la stocke en mémoire.
  • L'appareil FuncGen reçoit les paramètres WLAN sélectionnés par l'appareil Android: SSID, type de sécurité et mot de passe et les stocke dans l'EEPROM.

Lorsque les appareils sont effectivement connectés au même WLAN, l'appareil Android recherchera le FuncGen en scannant toutes les adresses MAC des appareils connectés au WLAN. Lorsque l'appareil Android détermine la correspondance MAC, il essaie de communiquer.

Connexion et gestion de l'état - MCU

Lorsque les appareils communiquent entre eux, le protocole (voir étape pré-finale) reste le même et l'organigramme est le même.

Surveillance de l'état de l'appareil

L'interruption temporisée fournit au MCU les détails nécessaires pour la gestion de l'état. A chaque cycle d'interruption du temporisateur, la liste de paramètres suivante est mise à jour:

  • Alimentation externe - On/Off
  • État de la tension de la batterie
  • Mise à jour de l'interface utilisateur pour chaque personnalisation
  • Bouton-poussoir: appuyé/non enfoncé

Étape 9: Implémentation du logiciel - Application Android

Implémentation logicielle - Application Android
Implémentation logicielle - Application Android
Implémentation logicielle - Application Android
Implémentation logicielle - Application Android
Implémentation logicielle - Application Android
Implémentation logicielle - Application Android
Implémentation logicielle - Application Android
Implémentation logicielle - Application Android

L'application Android est écrite dans le style Java-Android. Je vais essayer de l'expliquer de la même manière que les étapes précédentes - en divisant l'algorithme en blocs de code séparés.

Séquence de mise sous tension

Première séquence de l'appareil. Ici, le logo de l'application est présenté avec l'activation des modules GPS et WiFi de l'appareil Android (ne vous inquiétez pas, le GPS est nécessaire pour l'analyse des réseaux WiFi uniquement).

Menu principal

Une fois l'application démarrée, quatre boutons apparaîtront à l'écran. Action des boutons:

  1. CONNEXION DIRECTE: Initialisation de la connexion à l'AP de FuncGen par le SSID de IOT_FUNCGEN. Si la connexion est réussie, l'appareil passe en mode UI principal.
  2. CONNEXION WIFI: L'appareil vérifie s'il y a des paramètres de données stockés en mémoire: wifi.txt, mac.txt. Si aucune donnée n'est stockée, l'appareil rejettera la demande de l'utilisateur et affichera un message contextuel indiquant que le couplage WLAN doit être effectué en premier.
  3. PAIRING: Communiquer avec FuncGen de la même manière que DIRECT CONNECTION, mais au lieu d'un échange de messages continu, il y a une seule poignée de main. L'appareil Android vérifie s'il est déjà connecté au réseau WiFi et demande à l'utilisateur de saisir le mot de passe. Si la reconnexion réussit, l'appareil Android stocke le SSID et le mot de passe dans le fichier wifi.txt. Après une communication réussie avec FuncGen, il stocke l'adresse MAC reçue dans le fichier mac.txt.
  4. Sortie: Assez dit:)

Gestionnaire d'analyse Wi-Fi

Je voulais que l'application soit entièrement opérationnelle et sans ajustements hors application à faire. J'ai donc conçu WiFi Scanner, qui effectue toutes les opérations nécessaires pour se connecter au réseau WiFi avec un mot de passe et un SSID connus.

Transmission de données et communication TCP

C'est le bloc de code principal de l'application. Pour toutes les unités d'interface utilisateur, il existe un message défini dans un format spécifique (étape pré-finale), qui force FuncGen à fournir la sortie souhaitée pour les canaux. Il existe trois types de champs d'interface utilisateur en activité:

  1. Barres de recherche: ici, nous définissons la plage réelle des paramètres de sortie FuncGen

    1. Amplitude
    2. Décalage CC
    3. Luminosité ACL
    4. Contraste lcd
  2. Édition de texte: afin de garder les valeurs entières bien définies et précises, la saisie de la fréquence se fait via des zones de texte uniquement avec des nombres
  3. Boutons: Sélection de paramètres parmi les listes disponibles:

    1. Type de forme d'onde

      1. Sinus
      2. Triangle
      3. CC
      4. Carré
      5. DÉSACTIVÉ
    2. Obtenir des informations

      1. État de la batterie (pourcentage)
      2. État CA (alimentation externe)
    3. Option de démarrage (pour FuncGen MCU)

      1. Réglage d'usine
      2. Redémarrage
      3. Fermer
      4. Direct - Redémarrez avec le mode d'appairage direct
      5. WLAN - Redémarrez avec le mode de couplage WLAN
    4. Sortie au menu principal: Assez dit:)

Étape 10: Tester

Conseillé: