Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Alimentation de poche programmable avec écran OLED

Composants et fournitures

Arduino UNO
× 1
Arduino Nano R3
× 1
XL 6009 DC DC Boost
× 1
Interrupteur à bouton-poussoir SparkFun 12mm
× 1
Cristal 16 MHz
× 1
Connecteur de bornier
× 1
Régulateur linéaire avec sortie réglable
× 1
Régulateur linéaire (7805)
× 1
1N4007 – Diode haute tension et courant nominal élevé
× 1
Câble USB-A vers B
× 1
Potentiomètre de précision multitours - 10k ohms (25 tours)
× 1
OP07 Instrumentation OpAmp
× 1
Boîte de prise générique
× 1
FR4 Proto Board
× 1
Câbles de raccordement (générique)
× 1
En-tête masculin 40 position 1 rangée (0,1")
× 1
Résistance 10k ohm
× 1
Résistance 22,1k ohm
× 1
Résistance 1k ohm
× 1
Relais de verrouillage Arduino 5v 2A
× 1
Potentiomètre numérique SparkFun MCP 4131 10k
× 1
Ruban de cuivre Arduino
× 1
Arduino LM358 Opamp
× 1
Arduino 1306 OLED
× 1

Outils et machines nécessaires

Fer à souder (générique)
Pistolet à colle chaude (générique)
Mini moteur de perceuse

Applications et services en ligne

Arduino IDE

À propos de ce projet

L'idée

En tant qu'amateurs, nous devons fréquemment alimenter nos prototypes, vérifier la tension, le courant, les limites de puissance de nos projets, tester un composant nouvellement acheté. Le besoin d'une alimentation variable est toujours là dans cette ligne de travail. Mais malheureusement, nous n'avons pas tous des alimentations électriques de laboratoire. C'est aussi cher s'il est acheté, encombrant si nécessaire à transporter. Je cherchais une alimentation programmable à moindre coût, avec portabilité et productivité pour alimenter mes prototypes et tester des composants. Alors, j'ai décidé d'en faire un.

Il a les caractéristiques suivantes :

  • Programmable
  • Rechargeable
  • Portable
  • Variable d'étape
  • Tension/Courant/Power Meter
  • Relais protégé
  • Personnalisable, compact et mignon
  • Interface utilisateur OLED sympa
  • Commande utilisateur par bouton-poussoir et navigation par menus
  • Mise à niveau du micrologiciel pour plus de fonctionnalités !

Et l'alimentation la plus polyvalente pour les projets d'électronique de faible puissance.

Action en direct !

Regardez cette vidéo démontrant le fonctionnement de l'appareil :

Spécifications de l'appareil

L'appareil a les spécifications suivantes :

  • Courant de charge CC de sortie maximum :400 mA
  • Plage de tension :2,0 volts - 12,0 volts
  • Pas de tension :0,1 V environ
  • Meilleure efficacité :75 %
  • Précision de mesure du courant :+/- 1 mA
  • Précision de mesure de tension :+/- 0,02 volt

Veuillez noter que cet appareil est un prototype rapide. Il est possible de créer 0-30, même une alimentation négative et plus de courant de sortie en utilisant des batteries haute capacité, une électronique supplémentaire et une conception améliorée.

Principe de fonctionnement

La conception elle-même est gourmande en matériel. Beaucoup de choses se passent ici. Un schéma fonctionnel brut du système ressemble à ceci :

La source d'alimentation est la batterie Li-Po 3,7 V rechargeable par USB. En utilisant un module de suralimentation XL6009 DC-DC, nous produisons d'abord 15,6 volts à partir du Li-Po. Pour faire fonctionner le MCU, nous fabriquons également un 5 volts à l'aide du régulateur 7805.

Le clone Arduino UNO Atmega328P est connecté à 2 commutateurs d'entrée utilisateur basés sur des interruptions, un élégant affichage de sortie OLED. Port de téléchargement du firmware Rx/Tx/DTR (sketch) via USB/Série depuis le PC. (module 1)

Le cœur du projet est le Potentiomètre numérique MCP4131 (Digipot) + LM 358 OpAmp Générateur de tension de pas basé. Cette tension est la tension de contrôle du régulateur réglable LM317. (module 2)

Digipot est contrôlé à partir de l'Arduino via une commande de type pseudo-SPI. Le LM317 est conçu de telle manière que la Tension de la broche de sortie est toujours supérieur de 1,25 volt à la Ajuster la tension de la broche à condition que la tension de la broche INPUT soit suffisamment élevée (ici 15,6 volts). (module 3)

La tension de pas est transmise à la broche de réglage pour créer une sortie variable de l'Arduino selon les besoins de l'utilisateur.

L'ADC mesure toutes les tensions associées à la supervision et à la protection; La tension de la batterie, la tension survoltée, la tension de détection de charge et la tension de sortie sont conditionnées par le biais d'un réseau diviseur de tension pour alimenter la gamme ADC, qui est ici de 0 à 1,1 volt. J'ai utilisé la RÉFÉRENCE INTERNE d'Arduino qui crée une tension de référence de 1,1 volts.

Pour la détection de courant, le retour (Load Gnd) de la charge de sortie est connecté en série avec une résistance de détection de courant de 1 Ohms au système Gnd. Lorsque le courant traverse les charges externes, il y a également une chute de tension dans cette résistance de détection. Cette tension est amplifiée par l'amplificateur de fonctionnement de précision OP07 et transmise à l'une des broches ADC.

Enfin, pour la charge de la batterie, 5 volts de l'USB sont connectés en série avec une diode 4007 et une résistance de limitation de courant de 5 ohms à la batterie Li-Po. Il s'agit d'une méthode de charge brute, pas la meilleure pour la charge Li-Po.

Opération Summery : Le potentiomètre numérique MCP4131 crée des tensions de pas avec une plage de 0-5 Volts par pas d'environ 40mV (Digipot 7 bits 10K a 129 pas 5V/128 =0,40 mV), qui est ensuite 2,5 fois amplifié par le LM358 qui donne 0-12,5 plage de tension de commande de volts avec des pas de 0,1 volt. Ce signal de tension de pas amplifié est envoyé à la broche de réglage du LM317. LM317 génère une tension de sortie de V_Step+1,25 Volts qui est fournie aux charges externes. Le retour/la masse de la charge externe est connecté à la masse interne via une résistance de détection de courant de 1 Ohms. Supposons :x Le courant mA circule vers la charge externe, cela créera x Chute de mV (Ohms Law V=I*R) sur la résistance de détection de courant de 1 Ohms. Ce petit signal de tension est envoyé à l'amplificateur opérationnel OP07 à faible décalage (10 uV) configuré avec un gain de 2,5 x, ce qui générera 2,5 x Sortie mV. L'Arduino ADC est configuré avec une référence interne de 1,1 volts afin que les tensions de 0 à 1100 mV puissent être détectées par pas d'environ 1 mV (1100/1023). La sortie de OP07 est connectée à Arduino ADC pour la détection de courant. C'est pourquoi la limite de courant est de 400 mA. Il peut être augmenté/réduit en modifiant le gain de OP07. De même, la plage de tension de sortie peut être modifiée en modifiant la tension de suralimentation et le gain du LM358. D'autres tensions sont mesurées avec des tensions d'atténuation du réseau diviseur de tension résistif pour s'adapter à la gamme ADC. Le relais de verrouillage a 2 bobines. En appliquant une alimentation momentanée à l'une des bobines, les contacts de relais peuvent être commutés. Une fois commuté, il reste là, donc la bobine est immédiatement mise hors tension.

Construire le projet

Tout d'abord, nous commençons avec une seule boîte de prise de commutateur et effectuons les coupes et les alignements nécessaires pour placer la batterie, le port de charge USB, l'interrupteur d'alimentation, etc.

Ensuite, le dissipateur thermique est fabriqué avec du ruban de cuivre et une pièce de monnaie pour le module d'amplification DC-DC.

Le module boost est placé à l'intérieur du boîtier de prises :

En utilisant les pièces ci-dessus, les 3 modules suivants sont réalisés :

  • Arduino + E/S + Module de contrôle
  • Module de tension de pas et de régulateur réglable
  • Module de détection de courant

Enfin, les connexions en toile d'araignée entre toutes les cartes sont connectées et soudées.

Après avoir utilisé la colle chaude comme enduit, nous l'avons enfin :

Développement du micrologiciel et de la procédure d'exploitation

Le firmware (Arduino Sketch) est actuellement la version 1.0.2 Beta. Toutes les fonctionnalités ne sont pas disponibles pour le moment. Mais les fonctionnalités les plus importantes telles que le contrôle de la tension, le relais de connexion/déconnexion, la visualisation des informations sont activées. Dans le void setup() il existe peu de fonctions d'initialisation pour réchauffer les broches Arduino associées à différents matériels externes.

ENTRÉE :Il y a 2 boutons d'entrée basés sur des interruptions pour augmenter/diminuer la tension de sortie, accéder au menu (non disponible sur cette version). INT0 et INT1 sur les broches 2 et 3 de l'Arduino sont codés pour l'interruption de front descendant. Vous verrez 2 condensateurs en parallèle avec des interrupteurs mécaniques pour anti-rebond. Le code est écrit pour déclencher des interruptions lorsque l'utilisateur appuie sur ces commutateurs pour activer/désactiver la sortie via le relais ou augmenter/diminuer la tension (bêta).

SORTIE :L'OLED 1306 affiche les informations de sortie en acquérant les données de l'ADC, la minuterie interne (pour le temps de fonctionnement de l'appareil) et les variables d'indicateur pour informer l'utilisateur de l'état d'activation/désactivation de la sortie. Basé sur la bibliothèque U8G, l'OLED imprime les informations sous forme de texte et de chiffres. J'ai l'intention d'utiliser une représentation graphique (de type analogique).

5 broches numériques de SSD1306 (OLED de Waveshare) clk, din, cs, d/c, res sont connectées à Arduino 10, 9, 11, 13, 12 broches et programmées en conséquence. Dans la boucle principale update_display() fonction est appelée à chaque fois pour mettre à jour les informations sur l'OLED.

La minuterie interne 1 de l'Atmega328P est configurée pour se déclencher périodiquement toutes les 1 seconde afin de garder une trace du temps.

CONTROLE : Le potentiomètre numérique MCP 4131 est un contrôleur avec increment_digipot() & decrement_digipot() fonctions où les données sont déplacées avec une horloge et un retard appropriés en utilisant les broches 6, 7, 8 comme CS, Clk, broches de données. C'est comme un SPI doux et lent. Comme j'ai déjà utilisé des broches matérielles SPI ailleurs, c'était la seule solution à l'époque.

Deux broches numériques 4 et 5 sont utilisées pour contrôler le relais de verrouillage. Une courte impulsion haute est transmise aux transistors de commande du relais pour exciter les 2 bobines afin de faire basculer le relais. Cela se produit à la fois automatiquement (en cas de surcharge/court-circuit) ou manuellement par l'utilisateur.

ADC : Le calc_VI() la fonction dans la boucle principale exécute analogRead pour obtenir 20 fois la moyenne des informations de tension et de courant et mettre à jour la variable pour de nouvelles informations qui sont ensuite imprimées sur l'écran

L'esquisse est écrite dans plusieurs onglets pour organiser le code des différentes fonctions associées à différentes opérations. Il y a ADC, Digipot, Display_Fn , onglets Interruption, Relais et Minuterie organisant toutes les fonctions définies par l'utilisateur. J'essaierai aussi d'ajouter plus de commentaires expliquant toutes les fonctions, mais vous ne devriez pas avoir du mal à comprendre car ces fonctions sont basées sur plusieurs fonctions Arduino effectuant certaines tâches.

Limitation

Il y a quelques limitations sérieuses de cet appareil :

  • La tension ne peut pas descendre en dessous de 2,0 V
  • La tension de sortie n'est pas échelonnée en continu
  • La mesure du courant crée un décalage de masse pour les courants élevés
  • La mesure ADC a de faibles résolutions
  • L'efficacité est la pire de sa catégorie avec une charge de courant élevée basse tension
  • Charge Li-Po non standard et légèrement dangereuse

Références

Vous pouvez en savoir plus sur chaque composant dans ces tutoriels :

  • Potentiomètre rotatif
  • Tutoriel sur les boutons

Conclusion &

Cette alimentation électrique programmable m'aidera à réaliser des projets/prototypes plus efficacement. Mesure de la puissance du courant de tension sans utiliser de multimètre.


Code

  • Alimentation portable programmable Arduino
  • Code version 1.0.1 bêta
  • Code Ver 1.0.2 Bêta
  • Code version 1.0.3
Alimentation portable programmable ArduinoArduino
Ver 1.0.1 avec informations sur les broches dans les commentaires
// Pin Reset, D0 &D1 pour télécharger Sketch// Pin D9,D10,D11,D12,D13 pour contrôler l'affichage OLED// ADC A0 Pin pour la détection V_boost// Broche ADC A2 pour la détection V_batt (LiPo)// Broche ADC A3 pour la détection I_Output (Charge)// Broche ADC A4 pour la détection V_USB (Charge)// Broche ADC A5 pour la détection V_Output (Charge)// Broche d'entraînement des 2 bobines du relais de verrouillage D4 &D5#define RC1 4#define RC2 5// Commutateurs d'entrée utilisateur connectés aux broches D2 et D3#define SW1 2#define SW2 3// Pin D6,D7,D8 pour les broches de contrôle de potentiomètre numérique#define CS_PIN 6#define CLK_PIN 7 #define DATA_PIN 8volatile uint8_t Switch1 =1;volatile uint8_t Switch2 =1;float V_Out =0.0;float I_Out =0.0;float V_Bat =0.0;float V_Bst =0.0;float V_Chg =0.0;uint32_t time =0;#include "U8glib. h"// Broches de contrôle d'affichage OLED//SSD1306 oled waveshare(clk,din,cs,d/c,res); // CECI POUR WAVESHAREU8GLIB_SSD1306_128X64 u8g(10, 9,11, 13,12); void setup(void) { // retournez l'écran, si nécessaire analogReference(INTERNAL); u8g.setRot180(); button_init(); relay_init(); init_timer1(); digipot_init(); }boucle vide (void) { update_display(); calc_VI(); if (Switch1==0) { rc1_latch(); Commutateur1=1 ; increment_digipot(); } if (Switch2==0) { rc2_latch(); Commutateur2=1 ; décrément_digipot(); } retard (100); }
Code Ver 1.0.1 BetaC/C++
Aucun aperçu (téléchargement uniquement).
Code Ver 1.0.2 BetaC/C++
Correction d'un bug pour les alignements de texte/boîte
Correction d'un bug pour le voyage de surcharge

Quelques bugs supplémentaires seront corrigés dans la prochaine version
Aucun aperçu (téléchargement uniquement).
Code version 1.0.3C/C++
Correction d'un bug désactivation du relais de sortie lors de la mise sous tension
Correction d'un bug tension de sortie définie automatiquement 5,00 v après la mise sous tension
Aucun aperçu (téléchargement uniquement).

Schémas

Dessiné sur tableau blanc ! https://circuits.io/circuits/4762970-arduino-based-programmable-power-supply

Processus de fabrication

  1. Jeu Arduino Pong - Écran OLED
  2. Contrôler l'accepteur de pièces avec Arduino
  3. Centre de contrôle Arduino
  4. Arduino Temp. Moniteur et horloge en temps réel avec affichage 3.2
  5. Arduino avec Bluetooth pour contrôler une LED !
  6. Puissance Arduino
  7. Jouer avec Nextion Display
  8. Voltmètre DIY avec Arduino et un écran Nokia 5110
  9. Plateforme de formation Arduino