- Composants requis:
- La description:
- Schéma de circuit et explication de fonctionnement:
- Conception de circuits et de circuits imprimés avec EasyEDA:
- Calcul et commande d'échantillons de PCB en ligne:
- Explication de la programmation:
Dans ce projet, nous allons créer un système de surveillance de batterie de voiture basé sur PIC sur PCB. Ici, nous avons conçu un PCB en utilisant le simulateur et le concepteur de PCB en ligne EASYEDA. Ce circuit de surveillance de batterie de voiture est utilisé pour surveiller la puissance de la batterie de voiture en la branchant simplement dans la prise de courant sur le tableau de bord d'une voiture. Le PCB a également la possibilité de l'utiliser comme outil de mesure de tension ou voltmètre sans utiliser de chargeur de voiture USB. Nous avons attaché un bornier ici pour mesurer la tension d'autres sources d'alimentation, simplement en y connectant deux fils à partir de la source d'alimentation.
Composants requis:
- Microcontrôleur PIC PIC18F2520 -1
- Carte PCB fabriquée -1
- Connecteur USB -1
- Connecteur de borne à 2 broches (en option) -1
- Affichage à sept segments d'anode commune (4 en 1) -1
- BC557 Transistor -4
- 1k résistance -6
- Résistance 2k -1
- Résistance 100R -8
- Condensateur 1000uF -1
- Condensateur 10uF -1
- Base IC à 28 broches -1
- burgsticks femelles -1
- 7805 Régulateur de tension -1
- Chargeur USB de voiture -1
- LED -1
- Diode Zener5.1v -2
- Câble USB (compatible de type B ou Arduino UNO) -1
- Cristal 20 MHz -1
- Condensateur 33pF -2
La description:
En général, il n'est pas important de mesurer la puissance de la batterie de la voiture à chaque fois, mais nous avons souvent besoin de connaître la tension de la batterie pendant la charge, pour vérifier si elle est en charge ou non. Par cela, nous pouvons protéger la défaillance de la batterie due au système de charge défectueux. La tension d'une batterie de voiture 12v pendant la charge est d'environ 13,7v. Nous pouvons donc identifier si notre batterie se charge bien ou non et enquêter sur les causes de la panne de la batterie. Dans ce projet, nous allons implémenter un voltmètre pour batterie de voiture en utilisant un microcontrôleur PIC. L'allume-cigare de voiture ou le chargeur USB de voiture est utilisé pour obtenir la tension de la batterie sur la broche ADC du microcontrôleur à l'aide du circuit diviseur de tension. Puis un affichage à 7 segments à 4 chiffresest utilisé pour afficher la valeur de tension de la batterie. Ce circuit peut mesurer la tension jusqu'à 15v.
Lorsqu'une batterie de voiture est en charge, la tension aux bornes de la batterie provient en fait de l'alternateur / redresseur, c'est pourquoi le système lit 13,7 volts. Mais lorsque la batterie ne se charge pas ou que le moteur de la voiture n'est pas allumé, la tension aux bornes de la borne de la batterie est la tension réelle de la batterie d'environ 12 V.
On peut également utiliser le même circuit pour mesurer la tension d'autres sources d'alimentation jusqu'à 15v. À cette fin, nous avons soudé le bornier (bloc en plastique de couleur verte) dans un PCB où vous pouvez connecter deux fils de la source d'alimentation et surveiller la tension. Vérifiez la vidéo à la fin, où nous l'avons démontré en mesurant la tension d'une alimentation variable, d'une banque d'alimentation USB et d'un adaptateur 12v AC-DC. Vérifiez également le circuit du moniteur de batterie simple et le circuit du chargeur de batterie 12v.
Schéma de circuit et explication de fonctionnement:
Dans ce circuit de surveillance de tension de batterie, nous avons lu la tension de batterie de voiture en utilisant une broche analogique intégrée du microcontrôleur PIC et ici nous avons sélectionné la broche AN0 (28) du microcontrôleur via un circuit diviseur de tension. Une diode Zener de 5,1 V est également utilisée pour la protection.
L'affichage à sept segments 4 en 1 est utilisé pour afficher la valeur instantanée de la tension de la batterie de voiture qui est connectée à PORTB et PORTC du microcontrôleur. Un régulateur de tension 5v, à savoir LM7805, est utilisé pour alimenter tout le circuit, y compris les écrans à sept segments. Un oscillateur à cristal de 20 MHz est utilisé pour synchroniser le microcontrôleur. Le circuit est alimenté par le chargeur de voiture USB lui-même en utilisant un LM7805. Nous avons ajouté un port USB dans le PCB, afin que nous puissions connecter directement le chargeur USB de voiture au circuit.
Le chargeur USB de voiture ou l'allume-cigare fournit une alimentation régulée 5v à partir de la prise de courant 12v de la voiture, mais nous devons mesurer la tension réelle de la batterie de voiture, nous avons donc peaufiné le chargeur de voiture. Vous devez ouvrir le chargeur USB de voiture, puis trouver les bornes 5v (sortie) et 12v (entrée), puis retirer la connexion 5v en la frottant avec du papier de verre ou avec quelque chose de dur et court-circuiter la borne de sortie USB directement sur 12v. Commencez par ouvrir la connexion 5v depuis le port USB du chargeur USB de voiture, puis connectez 12v au port USB où le 5v était connecté. Comme le montre la figure ci-dessous, nous avons coupé la connexion encerclée rouge, cela peut différer dans votre chargeur de voiture.
Pour configurer ADC ici, nous avons sélectionné la broche analogique AN0 avec une tension de référence interne de 5v et une horloge f / 32 pour la conversion ADC.
Pour calculer la tension de la batterie de la voiture à partir de la valeur ADC, nous avons utilisé la formule donnée:
Tension = (valeur ADC / facteur de résistance) * tension de référence Où: valeur ADC = sortie du diviseur de tension (converti en numérique par microcontrôleur) Facteur de résistance = 1023,0 / (R2 / R1 + R2) // 1023 est la valeur ADC max. (10- bit) Tension de référence = 5 volts // référence 5 V interne sélectionnée
Calcul du facteur de résistance:
Dans ce projet, nous lisons la tension de la batterie de voiture qui est (généralement) autour de 12v-14v. Nous avons donc réalisé ce projet en supposant que max 15v signifie que ce système peut être lu jusqu'à 15v max.
Donc, dans le circuit, nous avons utilisé la résistance R1 et R2 dans la partie diviseur de tension et les valeurs sont:
R1 = 2K
R2 = 1 K
Facteur de résistance = 1023,0 * (1000/2000 + 1000)
Facteur de résistance = 1023,0 * (1/3)
Facteur de résistance = 341,0 jusqu'à 15 volts
La formule finale pour le calcul de la tension sera donc la suivante, que nous avons utilisé le code, donné à la fin de cet article:
Tension = (valeur ADC / 341,0) * 5,0
Conception de circuits et de circuits imprimés avec EasyEDA:
Pour concevoir un circuit pour le moniteur de tension de batterie de voiture, nous avons utilisé EasyEDA, un outil EDA en ligne gratuit pour créer des circuits et des PCB de manière transparente. Nous avons précédemment commandé quelques PCB à EasyEDA et utilisons toujours leurs services car nous avons trouvé l'ensemble du processus, du dessin des circuits à la commande des PCB, plus pratique et plus efficace que d'autres fabricants de PCB. EasyEDA propose gratuitement le dessin de circuits, la simulation, la conception de circuits imprimés et propose également un service de circuits imprimés personnalisés de haute qualité mais à bas prix. Consultez ici le tutoriel complet sur Comment utiliser Easy EDA pour créer des schémas, des schémas de circuits imprimés, simuler les circuits, etc.
EasyEDA s'améliore de jour en jour; ils ont ajouté de nombreuses nouvelles fonctionnalités et amélioré l'expérience utilisateur globale, ce qui rend EasyEDA plus facile et utilisable pour la conception de circuits. Ils vont bientôt lancer sa version Desktop, qui peut être téléchargée et installée sur votre ordinateur pour une utilisation hors ligne.
Dans EasyEDA, vous pouvez rendre publics vos conceptions de circuits et de circuits imprimés afin que d'autres utilisateurs puissent les copier ou les modifier et en tirer parti, nous avons également rendu public l'ensemble de nos dispositions de circuits et de circuits imprimés pour ce moniteur de tension de batterie de voiture, consultez le lien ci-dessous:
easyeda.com/circuitdigest/PIC_based_Car_Battery_Monitoring_System-63c2d5948eaa48c5bcbbd8db49a6c776
Vous trouverez ci-dessous un instantané de la couche supérieure de la disposition du PCB d'EasyEDA, vous pouvez afficher n'importe quelle couche (supérieure, inférieure, Topsilk, Bottomsilk, etc.) du PCB en sélectionnant la couche dans la fenêtre `` Couches ''.
Calcul et commande d'échantillons de PCB en ligne:
Après avoir terminé la conception du PCB, vous pouvez cliquer sur l'icône de la sortie de fabrication , qui vous mènera sur la page de commande de PCB. Ici, vous pouvez visualiser votre PCB dans Gerber Viewer ou télécharger les fichiers Gerber de votre PCB et les envoyer à n'importe quel fabricant, c'est aussi beaucoup plus facile (et moins cher) de le commander directement dans EasyEDA. Ici, vous pouvez sélectionner le nombre de PCB que vous souhaitez commander, le nombre de couches de cuivre dont vous avez besoin, l'épaisseur du PCB, le poids du cuivre et même la couleur du PCB. Après avoir sélectionné toutes les options, cliquez sur «Enregistrer dans le panier» et terminez votre commande, puis vous recevrez vos PCB quelques jours plus tard.
Vous pouvez directement commander ce PCB ou télécharger le fichier Gerber en utilisant ce lien.
Après quelques jours de commande de PCB, j'ai reçu les échantillons de PCB
Après avoir obtenu les PCB, j'ai monté tous les composants requis sur le PCB, et enfin nous avons notre système de surveillance de batterie de voiture prêt, vérifiez ce circuit en travaillant dans la vidéo donnée à la fin.
Explication de la programmation:
Le programme de ce projet est peu difficile pour les débutants. Pour écrire ce code, nous avons besoin de quelques fichiers d'en-tête. Ici, nous utilisons MPLAB X IDE pour le codage et le compilateur XC pour construire et compiler le code. Le code est écrit en langage C.
Dans ce code, nous avons lu la tension de la batterie à l'aide d'une broche analogique et pour contrôler ou envoyer des données à un affichage à sept segments à 4 chiffres, nous avons utilisé la routine de serveur d'interruption de minuterie dans le microcontrôleur PIC. Tous les calculs pour la mesure de tension sont effectués dans le sous-programme principal du programme.
Tout d'abord, dans le code, nous avons inclus un en-tête, puis configuré le microcontrôleur PIC à l'aide de bits de configuration.
#comprendre
Et puis les variables déclarées et les broches définies pour l'affichage de sept segments
unsigned int counter2; position de caractère non signé = 0; caractère non signé k = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int digit1 = 0, digit2 = 0, digit3 = 0, digit4 = 0; #define TRIS_seg1 TRISCbits.TRISC0 #define TRIS_seg2 TRISCbits.TRISC1 #define TRIS_seg3 TRISCbits.TRISC2 #define TRIS_seg4 TRISCbits.TRISC3 #define TRIS_led1 TRISAbits.TRISA2 #define TRIS_led2 TRISAbits.TRISA5 #define TRIS_led3 TRISAbits.TRISA0 #define TRIS_led4 TRISAbits.TRISA1 #define TRIS_led5 TRISAbits.TRISA………………
Nous avons maintenant créé une routine d'interruption de minuterie pour piloter l'affichage à sept segments:
void interruption low_priority LowIsr (void) {if (TMR0IF == 1) {counter2 ++; if (compteur2> = 1) {if (position == 0) {seg1 = 0; seg2 = 1; seg3 = 1; seg4 = 1;………………
Maintenant, dans la fonction void main () , nous avons initialisé le timer et l'interruption.
GIE = 1; // GLOBLE INTRRUPT ENABLE PEIE = 1; // indicateur d'intrusion périphérique T0CON = 0b000000000; // valeur de prédécaleur put TMR0IE = 1; // activation d'interruption TMR0IP = 0; // priorité d'interruption TMR0 = 55536; // démarrer le compteur après cette valeur TMR0ON = 1;
Et puis dans tout boucle, on peut lire l' entrée analogique à la broche analogique et appeler une fonction pour les calculs.
while (1) {adc_init (); pour (i = 0; i <40; i ++) {Value = adc_value (); adcValue + = Valeur; } adcValue = (float) adcValue / 40.0; convert (adcValue); retard (100); }
Compte tenu de adc_init () fonction est utilisée pour initialiser ADC
void adc_init () {ADCON0 = 0b00000011; // sélectionnez le canal adc ADCON1 = 0b00001110; // sélectionne i / p analogique et numérique ADCON2 = 0b10001010; // temps d'égalisation tenant temps de plafond ADON = 1; }
La fonction adc_value donnée est utilisée pour lire l'entrée de la broche analogique et calculer la tension.
float adc_value (void) {float adc_data = 0; tandis que (GO / DONE == 1); // valeur adc de début de conversion de données de bit supérieur adc_data = (ADRESL) + (ADRESH << 8); // Stocke la sortie 10 bits adc_data = ((adc_data / 342.0) * 5.0); return adc_data; }
Et la fonction de conversion donnée est utilisée pour convertir la valeur de tension en valeurs de segment prises en charge.
void convert (float f) {int d = (f * 100); chiffre 1 = d% 10; d = d / 10; chiffre2 = d% 10; d = d / 10; chiffre3 = d% 10; chiffre 4 = d / 10; }
Vérifiez le code complet de ce projet ci-dessous avec une vidéo de démonstration.