Question:
Pourquoi un transistor bipolaire ne fonctionne pas, mais un MOSFET le fait
GMc
2020-03-11 15:00:09 UTC
view on stackexchange narkive permalink

En référence à ma question Alimentation contrôlée Arduino pour plus de détails et un programme de test.

Pourquoi mon circuit impliquant un transistor ne fonctionne-t-il pas (voir ci-dessous) alors qu'un circuit similaire utilisant un MOSFET fonctionne?

Aussi, pourquoi est-ce que lorsque l'alimentation est coupée dans le circuit à transistors, l'Arduino meurt instantanément, alors que dans le circuit à base de MOSFET, l'Arduino disparaît progressivement sur une période de 3-4 secondes? Quand je dis qu'il "disparaît", les LED vont diminuer pendant ces 3-4 secondes. C'est comme s'il y avait une capacité qui le maintient jusqu'à ce que la charge soit épuisée - mais cela ne se produit pas dans le circuit à transistor.

L'idée derrière ce circuit est de maximiser la durée de vie d'une batterie 9V alimentant l'Arduino. L'idée est de permettre à un événement physique externe (en appuyant sur S1) de mettre l'Arduino sous tension. Ensuite, l'Arduino, via la broche D2, restera sous tension après la libération de S1 jusqu'à ce qu'il ait fait ce qu'il doit faire. Enfin, l'Arduino laissera tomber la broche D2 à un état bas pour couper l'alimentation.

Voici les deux schémas de circuit.

Premièrement le circuit à transistors - qui ne fonctionne pas (l'Arduino meurt dès que S1 est libéré - et il meurt instantanément).

Transistor based Arduino power management

Deuxièmement, le circuit basé sur MOSFET - qui atteint le résultat souhaité, mais l'Arduino "disparaît progressivement" lorsque D2 passe à BAS. C'est correct, mais ce serait plus agréable si l'Arduino s'éteignait beaucoup plus rapidement.

enter image description here

Saviez-vous que le T dans MOSFE ** T ** signifie ** transistor **?Si vous écrivez "transistor bipolaire" ou "transistor NPN", le titre a plus de sens.
AUCUN CIRCUIT NE DOIT FONCTIONNER.Le MOSFET cct qui semble fonctionner est un hasard.La coupure est probablement réalisée par une fuite à travers la diode.||Dans les deux cas, la commande base / grille DEVRAIT être supérieure à Vin mais dans les deux cas, la tension de maintien fournie par la diode est au mieux une chute de diode AU-DESSOUS de Vin.||Travailler.Utilisez un transistor PNP ou un mosfet à canal P.Tirez la base / la porte vers le bas pour allumer.Maintenez bas pour rester allumé.Laisser la résistance tirer un capuchon haut pour s'éteindre.Pour obtenir une polarité correcte, vous aurez peut-être besoin d'un 2e transistor pour commander l'interrupteur principal.
@bimpelrekkie maintenant que vous le mentionnez, je le savais.Je mettrai à jour le titre en conséquence.Merci.
Voir page 11 de https://www.qrp-labs.com/images/news/dayton2019/FDIM2019ConfProceedings.pdf pour une version de ceci qui semble réellement fonctionner - cependant, il nécessite deux transistors :)
@hobbs tu veux dire que j'ai en fait * presque * bien compris?C'est la chose la plus hilarante que j'ai entendue de toute l'année!Parlez de douves !!!!J'essaierai de reproduire ce circuit.Merci pour l'énorme conseil!
@RussellMcMahon est très correct, la topologie correcte que vous devriez rechercher pour votre circuit est ce que l'on appelle communément une "configuration de commutateur côté haut".Qui peut par défaut être tiré vers le haut, arrêtant ainsi votre arduino.Et à la pression de l'interrupteur est attaché, momentanément par l'interrupteur puis par la broche D2.Jusqu'à ce qu'il soit relâché à son état tiré vers le haut pour tout arrêter.
Q1: IMPORTANT: Dans votre circuit existant qui fonctionne, quelle est la tension sur Arduino "Vin" lorsque l'Arduino fonctionne.|Q2: Vcc = 5 V?(probablement oui).
@RussellMcMahon J'ai connecté un voltmètre de la broche 3 (la broche la plus à droite en regardant Q1 de l'avant et je peux voir les numéros de pièce correctement orientés) à la terre.La broche 3 sur Q1 mène au VIN.Lorsque j'appuie sur le bouton, la tension passe brièvement à 9V puis après un court laps de temps (~ .5sec) elle chute à 5V.Je pense que cela se produit lorsque l'Arduino soulève D2.La tension semble commencer à s'estomper à ce stade.Lorsque D2 devient faible, il est probablement à 4,5 V et continue de s'estomper lentement - peut-être 30 s pour atteindre <0,5 V.Si je retire la batterie, elle disparaîtra plus rapidement.J'essaierai quelques-unes des suggestions dans un jour ou deux.
@GMc - Ah Vcc = 9V - vous avez dit cela.:-) -> C'est pourquoi cela fonctionne d'une certaine manière - le MOSFET baisse au moins Vgsth ou dans ce cas environ 4V + Donc à partir de 9V, il reste 5V.||Si vous utilisez mes circuits, vous obtiendrez une chute de moins de 0,5 V avec les transistors bipolaires et moins encore avec un MOSFET approprié.
Huit réponses:
Bimpelrekkie
2020-03-11 15:21:29 UTC
view on stackexchange narkive permalink

Je ne suis pas convaincu que ce soit le circuit / la méthode la plus élégante pour réaliser ce que vous voulez (allumer / éteindre votre Arduino). Plus d'informations ci-dessous.

Mais de toute façon, je suppose que la principale différence entre les circuits est que le transistor NPN a besoin d'un (petit) courant de base pour conduire. Ce courant de base ne peut circuler que lorsque C1 (22 nF) est en cours de charge. Comme C1 a une très petite valeur, la charge ne prend qu'un instant, puis il n'y a plus de courant de base, Q1 s'éteint, l'Arduino s'arrête car il n'a pas de tension d'alimentation.

Le MOSFET n'a pas besoin de courant, il a juste besoin d'un voltage. La porte d'un MOSFET est isolée afin qu'aucun courant ne puisse circuler. La seule façon dont C1 peut charger est via le courant leakage de D1. Wow, c'est effrayant, en s'appuyant sur le courant de fuite d'une diode! Aucun concepteur de circuits expérimenté ne le ferait volontiers.

Dans l'ensemble, ton circuit me fait peur, je ne ferais jamais ça comme ça. Que ferais-je alors? Tout d'abord, laisser un circuit allumer / éteindre sa propre alimentation est toujours un peu effrayant et n'est en fait pas nécessaire. J'ai réalisé un projet dans lequel un Arduino fonctionne avec 2 piles AA en série et est connecté en permanence à la batterie. Ces piles AA durent plus d'un an.

Pour cela, j'ai retiré la puce du régulateur de tension sur la carte Arduino (la laissant en place et l'utilisation de la broche d'alimentation 3,3 V pourrait également fonctionner), puis j'ai programmé l'Arduino de sorte qu'il passe en mode sleep la plupart du temps. En mode veille, il consomme très peu d'énergie.

Je vous suggère de trouver des projets Arduino alimentés par batterie similaires et de voir comment ils le font, puis de faire de même.

Voir mon commentaire sur la réponse d'OP.Son cct original fonctionne uniquement par hasard avec MOSFET et ne peut pas fonctionner avec bipolaire.La coupure du MOSFET est probablement due à une fuite inverse de la diode !!!
@RussellMcMahon * La désactivation du MOSFET est probablement due à une fuite inverse de la diode !!! * Ahem, voir ma réponse: * Le seul moyen pour que C1 puisse se charger est à travers le courant de fuite de D1 *
Nous sommes d'accord :-).Je ne vois pas comment le FET s'allume.Il a un Vgsth de 4+ volts mais aucun moyen évident de ne JAMAIS être polarisé en direct.Je soupçonne que ce qu'il fait et le cct diffèrent.||Je n'ai aucun problème avec les ccts auto-désactivants et je les ai utilisés à plusieurs reprises.Si un ATMega était votre seule cible, le mode veille est suffisamment efficace.D'autres circuits peuvent être moins flexibles.Je sais que tu le sais.Un circuit à deux transistors est généralement le plus pratique, de sorte que le commutateur est sur le côté haut et répond à un signal de maintien haut et haut.Le 2ème transistor est déclenché haut et tire la grille / base du commutateur bas.
@RussellMcMahon Le NMOS ne s'allume jamais complètement, lorsque le commutateur est fermé, alors le drain de grille est court-circuité, de sorte que le NMOS devient une "diode NMOS" ce qui signifie qu'il baissera un peu plus que son \ $ V_ {seuil} \ $.Vous pouvez également le considérer comme un suiveur de source où la grille est à la tension d'alimentation.Après l'ouverture du commutateur, le 22 nF maintient cette situation (Vgd = 0) mais est immédiatement chargé par D1.Je pourrais être satisfait d'un circuit auto-désactivant utilisant un PMOS.Avec un NMOS, vous devrez changer le sol, ce qui pose problème.
Je suis d'accord avec vous que ce n'est pas la solution la plus élégante (cela ne fonctionne pas comme je le souhaite), mais il y a un peu de courbe d'apprentissage pour moi - d'où ma question.Merci pour votre, @russellmcmahon et les autres réponses.J'expérimenterai plus loin et j'espère ne pas tuer ou mutiler des Arduinos innocents en cours de route!
@GMc Ce n'est pas que ce soit "pas le plus élégant" - c'est superbe comme première tentative pour le résoudre vous-même, mais il est assez faux pour le faire échouer de manière inattendue.|| Q!Quel MOSFET utilisez-vous - présumément pas celui que vous montrez car il ne devrait pas fonctionner du tout.||Q @: Lorsqu'il est allumé, quelle est la tension sur la broche Arduino Vin?- es-tu vraiment content de ça?
@RussellMcMahon Merci pour le "moral boost" :-).L'étiquette sur l'emballage indique "IRF540N".Ensuite, la ligne suivante a "I" puis une sorte de symbole génial puis "R" (probablement une sorte de logo d'entreprise) suivi de "P752P".La dernière ligne lit "IKWY".J'inclurais une photo, mais je ne sais pas comment le faire dans un commentaire.
@GMc Je suis (toujours) surpris que cela fonctionne du tout.La question Q @ (devrait être Q2 :-)) ci-dessus est toujours d'un grand intérêt.Le Q1 (mosfet ou bipolaire) agit comme un "émetteur suiveur".Dans le cas du MOSFET, la chute de Vds est d'environ Vgsth - la tension d'activation.Pour l'IRF540, il DEVRAIT être d'environ 3 ou 4 V!- ne laissant qu'environ 1 ou 2 volts pour l'Arduino!||Voir ma réponse pour un circuit qui devrait bien fonctionner.
pjc50
2020-03-11 15:21:40 UTC
view on stackexchange narkive permalink

Le transistor nécessite que la base ait une tension plus élevée que l'émetteur pour s'allumer. Cependant, lorsque l'alimentation du bouton disparaît, vous pouvez voir que la seule tension qui est appliquée à la base .. vient de l'émetteur! (à travers l'Arduino et sa diode, mais quand même: cela garantit simplement que la tension de base est inférieure à la tension de l'émetteur).

Les transistors bipolaires nécessitent un flux continu de courant. Dès qu'ils sont privés de courant à travers la base, ils s'éteignent.

Dans le cas du MOSFET, le transistor est maintenu par sa propre capacité. En fait, il n'y a aucun moyen de le tirer plus bas que par une fuite à travers la diode. Le courant ne circule pas de la porte vers le drain ou la source.

L'approche transistor pourrait probablement fonctionner en la changeant en un PMOS qui nécessite d'être maintenu bas pour s'allumer.

Edit: Simulation Falstad avec l'Arduino remplacé par un fil, qui montre qu'il s'allume initialement (impulsion via C1) puis s'éteint très lentement en tant que fuite à travers la diode. Falstad ne simule pas de fuite de condensateur, ce qui peut également être pertinent.

Voir mon commentaire sur la réponse d'OP.Son cct original fonctionne uniquement par hasard avec MOSFET et ne peut pas fonctionner avec bipolaire.La coupure du MOSFET est probablement due à une fuite inverse de la diode !!!
Russell McMahon
2020-03-12 06:56:04 UTC
view on stackexchange narkive permalink

Le circuit ci-dessous fera ce que vous voulez.
Le remplacement direct par des MOSFET appropriés fonctionnerait également.
Les valeurs des composants sont correctes, comme indiqué, mais peuvent être modifiées pour optimiser les résultats.

De nombreux autres petits transistors bipolaires feront ce que vous voulez, mais ceux que j'ai montrés (en particulier le BC327-40) sont mieux adaptés à la tâche que beaucoup. Le suffixe «-40» signifie qu'il a un gain de courant élevé et que les BC327 / BC337 ont une capacité de traitement de courant plus élevée et un Vsat inférieur (activation minimale Vce) que la plupart des autres petits transistors bipolaires. Malgré le suffixe BC moins habituel, ils sont largement disponibles dans le monde entier.

Le BC327-40 gère 100 mA et a une chute de tension d'environ 0,3 V.
Un MOSFET Rdson convenablement bas produira une chute de tension minimale dans le même rôle.

Une entrée positive à D2 ou D1 démarrera ou maintiendra le circuit activé.
Q1 allumer allume Q2.

Si nécessaire, un délai d'extinction peut être ajouté en ajoutant un condensateur de la base Q1 à la masse. Un MOSFET à cet emplacement autorisera une valeur beaucoup plus élevée de R1, ce qui allongera le délai de désactivation pour un C1 donné.

schematic

simuler ce circuit - Schéma créé à l'aide de CircuitLab

Voici une version MOSFET.
R1 & R2 dans le circuit bipolaire n'est pas nécessaire.
R4 et C1 définissent une constante de temps d'arrêt - environ 0,1 seconde comme indiqué - donc les temps d'arrêt sont de 0,1 à quelques dixièmes de seconde en fonction du FET (Vgsth inférieur = temps d'arrêt plus long).
De nombreux MOSFET peuvent être utilisés - j'ai laissé les paramètres par défaut du circuit imprimé standard en place, mais ils ont des capacités de courant et de tension beaucoup plus importantes que nécessaire, un Rdson plus grand que nécessaire et Vgsth est OK pour 5V et pas assez bas pour un fonctionnement 3V3.

schematic

simuler ce circuit

J'ai voté pour cette réponse afin qu'elle reste également, espérons-le, au sommet.Ce circuit a également très bien fonctionné.Cependant, je n'ai testé que la version transistor BiPolar jusqu'à présent.
@GMc Le "bouton" auquel vous vous référez ailleurs est votre S1 et mon entrée "Démarrer".
Dmitry Grigoryev
2020-03-13 00:47:24 UTC
view on stackexchange narkive permalink

Votre premier schéma ne fonctionne pas car il essaie de se sortir d'un bourbier par ses propres cheveux.

Un NPN nécessite que sa tension de base soit supérieure à la tension de l'émetteur pour être conducteur.Pourtant, Arduino est alimenté via le même émetteur NPN, il ne peut donc évidemment pas produire une tension de broche supérieure à VCC, donc le NPN se ferme et l'Arduino s'arrête.

Fredled
2020-03-12 00:30:15 UTC
view on stackexchange narkive permalink

Je ne comprends pas le but de C1.OMI c'est ce qui pourrait causer la disparition.Les MOSFETS peuvent rester allumés avec un courant très minime. Connectez la porte à GND avec une résistance entre 22 et 100khoms. Aussi théoriquement, C1 devrait allumer l'arduino lorsque Vcc est sous tension.

L'idée du condensateur était de fournir un peu de rebond du commutateur.Aussi, je pense que vous suggérez de fournir une petite fenêtre pour permettre à l'Arduino de démarrer et d'augmenter D2.J'essaierai la résistance demain.
GMc Pour anti-rebond, vous devez connecter C1 à GND, pas à Vcc.
Michael Fratus
2020-03-12 11:39:45 UTC
view on stackexchange narkive permalink

Dans les circuits mosfet et bipolaire, la sortie (source dans le mosfet et émetteur dans le bipolaire) sera toujours inférieure à la tension de commande.Étant donné que la broche de sortie de l'arduino ne peut jamais atteindre la tension d'alimentation, dès que vous relâchez le commutateur, la tension d'alimentation commutée chute et continue de baisser.L'utilisation d'un PNP évite ce problème.

AndyC
2020-03-12 15:53:11 UTC
view on stackexchange narkive permalink

Dans le circuit BJT, le transistor de commutation doit être PNP avec un deuxième transistor NPN pour lui fournir le courant d'attaque.

Mon circuit ci-dessous est remarquablement similaire à celui publié par Russel et il a été testé avec un Arduino UNO. Il commute le pré-régulateur d'alimentation de douze volts.

Le bouton poussoir injecte du courant dans le transistor NPN qui à son tour injecte du courant dans le transistor PNP qui alimente l'Arduino. Avec l'UNO, le condensateur est nécessaire car il faut beaucoup de temps à l'UNO pour démarrer et pour mettre ON_PIN à un niveau élevé. Le condensateur qui se décharge à travers la résistance 5k6 maintient la base du NPN alimentée en courant jusqu'à ce que l'ON_PIN prenne le relais.

Le circuit à gauche avec les diodes permet de détecter d'autres pressions sur les boutons-poussoirs afin que vous puissiez signaler d'autres fonctions au code ou, comme je le fais, l'utiliser comme un abandon.

J'ai utilisé des variantes de ce circuit avec des batteries pour alimenter des télécommandes IR et WiFi en utilisant d'autres MCU, par exemple Adafruit ItsyBitsy. Lorsque le circuit est éteint, le courant de fuite est inférieur à 1 micro ampère, ce qui fait que les batteries durent des mois entre les charges. Les valeurs du circuit doivent être ajustées pour les autres tensions d'alimentation.

Arduino AutoPower circuit

enter image description here

Ce qui précède est une solution à votre problème initial mais, pour répondre à certaines de vos questions:

Pour le circuit BJT, il s'allume lorsque le bouton est enfoncé car le courant peut circuler dans la base du transistor à partir de l'alimentation qui est à une tension plus élevée que l'émetteur du transistor. Cependant, cela ne fonctionne pas lorsque la sortie CPU D2 doit prendre le relais car, pour faire tourner le transistor sur la base, il doit être d'environ 0,6 volts plus haut que l'émetteur. La broche de sortie ne peut jamais fournir plus que le Vin du CPU mais Vin est fourni par l'émetteur du transistor. Il s'agit d'un cercle vicieux et le courant ne peut jamais circuler dans la base du transistor car la tension de base n'est jamais assez élevée. Ajoutez la baisse de 0,6 volts de la tension directe de la diode et la situation est aggravée. C'est pourquoi j'utilise un PNP pour la commutation. Si l'émetteur est connecté à l'alimentation, il vous suffit de connecter la base à la terre via une résistance pour l'allumer.

Pour le FET, la réponse est similaire mais, comme d'autres l'ont dit, le courant nécessaire à la porte du FET est minime et la charge sur la porte du FET le maintiendra jusqu'à ce qu'il fuit. Il n'y a pas de mécanisme dans le circuit pour décharger activement la porte lorsque la sortie D2 est tirée vers le bas et c'est pourquoi elle ne s'éteint pas sous le contrôle D2.

Vous dites: "Cela est probablement dû au condensateur de 100 uF", exactement. Le condensateur se charge presque instantanément à partir du bouton-poussoir et se décharge à une vitesse contrôlée par la résistance 5k6. Avec d'autres cartes (ItsyBitsy et Feather), je n'avais pas besoin du condensateur mais, avec l'UNO, je l'ai fait. Le temps de démarrage que j'ai vu était d'environ 1,5 seconde.

Une autre caractéristique de mon circuit que j'aime est que, bien qu'il soit démarré par un bouton ici, il peut être déclenché par n'importe quel capteur capable de fournir suffisamment de courant pour allumer la base du BC547, par exemple. un interrupteur de porte, un capteur de température ou de lumière dépassant un seuil, etc.

Merci pour cela, je l'ai testé et cela fonctionne très bien.J'aime l'idée de la saisie par bouton.Bien que vous n'ayez pas répondu à ma question spécifique, j'ai sélectionné votre réponse comme étant la bonne en raison de la fonctionnalité supplémentaire, cela fonctionne et pour qu'elle apparaisse en haut afin que d'autres puissent en bénéficier.Merci encore.
Oh, et une autre caractéristique intéressante est que ce circuit fonctionne mieux avec un bouton-poussoir.L'Arduino semble avoir besoin d'environ 3/4 de seconde pour "démarrer".Autrement dit, il y a environ un délai de 3/4 seconde entre le moment où le bouton est enfoncé et l'Arduino peut amener la ligne de commande d'alimentation (broche 12 ci-dessus et broche 2 dans mon projet) HAUTE pour maintenir l'alimentation sous tension.Le circuit ci-dessus permet une pression momentanée du bouton (bien moins de 3/4 secondes) et maintient l'alimentation suffisamment longtemps pour que l'Arduino démarre et allume D12 (ou D2 dans mon cas).Cela est probablement dû au condensateur de 100 uF.
Salut, merci pour vos aimables commentaires.Vous avez raison, je n'ai pas répondu exactement aux questions, je viens de fournir une solution standardisée à votre problème initial.Donc, pour mettre les choses au clair, veuillez consulter mes modifications ci-dessus.
Eduardo1992
2020-03-13 02:23:54 UTC
view on stackexchange narkive permalink

Utilisez un transistor PNP et inversez votre logique.

enter image description here

enter image description here

Quand j'ai construit ce circuit (deux fois), j'ai constaté que je n'obtenais qu'environ 1-2 volts entre Vin et Gnd lorsque j'ai fermé SW1.Q1 est devenu très chaud très rapidement et a finalement commencé à fumer (après environ 3-4 secondes).J'ai vérifié trois fois les circuits avant de mettre sous tension et je pense avoir bien suivi le schéma.
@GMc C'est très similaire à mon circuit et à d'autres.Changez R1 pour dire 10k, supprimez R2 et ajoutez un 1k en série avec le commutateur.La fumée magique est produite en Q1 en appliquant une tension Vcc complète à la terre à sa jonction lorsque l'interrupteur est fermé.
@GMc.Je viens de noter qu'il existe un chemin direct (sans résistance) entre Q1 et Q2.Placez une résistance entre eux de cette façon Q2 ne conduira pas Q1 très fort.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...