Mosfet canal p, transitor NPN, variation de tension disfonctionne

Bonjour à tous,

Mon objectif est , grâce à un Arduino Nano, un transistor NPN et un MOSFET canal P, de faire varier la tension en sortie du MOSFET pour éventuellement faire varier la vitesse d'un moteur.
Datasheet MOSFET canal P IRF9530NPBF : https://docs.rs-online.com/519d/0900766b8079118a.pdf.

Pour faire varier cette vitesse, j'utilise un potentiomètre classique et je renvoie cette donné en PWM broche D9 sur mon NPN.

Voici le schéma :

Lorsque je mets mon voltmètre a la sortie de mon NPN ça marche parfaitement : la tension varie entre 0 et 12V sans soucis, mais lorsque que je dispose mon voltmètre au drain de mon MOSFET P, la tension reste fixe a 12V lorsque PWM > 0 et à 0V lorsque mon PWM = 0 .

Avez vous une idée du problème ?

Je vous remercie par avance pour votre aide :slightly_smiling_face:
Merci et bonne journée !

Ps : J'ai juste un MOSFET canal P

Bonjour,
les 12V du bipolaire ne seraient pas les mêmes que les 12V directs
il y aurait Volt et Volt, c'est compliqué ...

Meme avec le PWM a 255?

Bonjour ZX80,

J'allais justement éditer ce point :slight_smile:
En effet je viens de remarquer que lorsque mon potar est a 0% (donc 0 = PWM), le tension de sortie est nul (0V) et lorsque qu'il est au-dessus de 0% (PWM > 0), la tension de sortie est fixe a 12V :frowning:.

Bonjour trimarco232,

Merci de ta réponse, mais je ne suis pas bien sur de comprendre, étant donné que j'envoie un PWM, le signal devrait être passant non-passant passant etc. et donc mon voltmètre fait une moyenne pour obtenir une tension "continue" ?

Fais-tu la manip en statique ou en dynamique ?

Plus précisément, si tu mets la résistance R15 au + 5 V ou à la masse (fixe, statique) est-ce que cela fonctionne normalement ?

Ton voltmetre est meilleure que le mien :slightly_smiling_face:
ça va mieux avec un oscilloscope.

Je pense que tu peux essayer ton moteur.

Bonjour 68tjs,

Merci de m'avoir répondu, a la base c'est mon arduino qui envoie un PWM.
Je viens de test en "statique", lorsque je branche R15 au +5V j'ai bien une tension de 12V en drain de MOSFET et de 0V lorsque je branche a la masse R15

Il est trop fort mon voltmètre :slight_smile:

Plus sérieusement, je sais pas trop comment ça fonctionne mais c'est ce que j'ai cru comprendre car lorsque que je regarde la sortie du NPN (désolé pour les mauvais termes) cad l'entré du gate de mon MOSFET, j’obtiens une valeur qui varie entre 0 et 12V en fonction de ma rotation avec le potentiomètre (5.5V par exemple) je suppose qu'il fait une sorte de moyenne sur un temps donnée ?

J'ai pas d'oscilloscope ;((((

Même resultat :frowning:, le moteur va instantanément a la vitesse max

Donc le câblage est bon n'a pas de grosse erreur, c'est un point réglé.
On incrimine maintenant la commande du NPN.

Mais quelle est-elle ?
Où est le schéma des connexions, même tracé manuellement sur une feuille de papier (trais tirés à la règle, merci) et scanné ?
Où est le code du programme ?
Désolé, mais nous ne pratiquons pas la transmission de pensée, il nous faut des choses à lire.

N'aurais-tu pas oublié de lire le message d'accueil ?

Désolé, je l'ai lu rapidement mais je ne pensais pas que le code était nécessaire étant donné que le circuit fonctionne jusqu’à l'entrée du gate. Mais le voici :

#include <arduino.h>

#define TRANSISTOR_PIN 9
#define POTENTIOMETER_PIN A0

/*----------Variable-------------*/
int valeurPotentiometre = 0;
unsigned char valeurPWM = 0;
/*-------------------------------*/

void setup() {
  Serial.begin(9600);

  /*------Init Transitor------*/
  pinMode(TRANSISTOR_PIN, OUTPUT);                                                    // Définir la broche transitorPin comme une sortie
  /*--------------------------*/

  /*------Init Potar------*/
  pinMode(POTENTIOMETER_PIN, INPUT);
  /*-----------------------*/

}

void loop() {

  valeurPotentiometre = analogRead(POTENTIOMETER_PIN);

  // Conversion de la valeur analogique en valeur PWM (de 0 à 255)
  valeurPWM = map(valeurPotentiometre, 0, 1023, 0, 255);

  // Affichage de la valeur PWM sur le moniteur série
  Serial.print("Valeur Potentiometre : ");
  Serial.print(valeurPotentiometre);
  Serial.print(" | Valeur PWM : ");
  Serial.println(valeurPWM);

  // Écriture de la valeur PWM sur la broche de sortie PWM (broche 9)
  analogWrite(TRANSISTOR_PIN, valeurPWM);

  delay(200);
}

Câblage :

Encore désolé pour la gène occasionné.

Mysterieux...
Si tu remplaces
"analogWrite(TRANSISTOR_PIN, valeurPWM);"
par
"digitalWrite(TRANSISTOR_PIN, HIGH);"
puis par
"digitalWrite(TRANSISTOR_PIN, LOW);"

Est-ce-que ça fonctionne comme prévu ? inversé ?

C'est une bonne manip.

Une autre manip à faire est de ne plus alimenter par du 12V sur Vin, mais par l'USB.
Cela permettrait d'impliquer ou d'innocenter le régulateur.

Bien évidement la masse de l'alimentation 12 V doit rester connectée à la masse de la carte nano.

L'expérience montre que parfois le diable se cache dans des détails qui paraissent insignifiants.
Autant avoir tous les renseignements dès le départ.

Dans ton cas quelqu'un va probablement découvrir un truc insignifiant, auquel à priori personne ne pense et qui fiche tout en l'air.

à fortiori si on a une photo du montage

hello
ta sortie MLI est un signal carré dont la fréquence est reglée par ton potar
le NPN est donc commandé par la MLI et finalement la reproduit à sa sortie mais en 12V
ton mosfet reçoit la dite MLI et commute à la fréquence de la MLI.
ce que tu voies avec ton voltmètre n'est pas ce que tu pourrais voir avec un oscillo.
en fonction de la vitesse d'échantillonnage (disons 20 hertz )du voltmetre, tu vas lire la moitié de tes 12V, soit 6V. ce que tu voies avant, ce sont des valeurs qui tombent aléatoirement, de 0 à 6V mais qui ne correspondent pas à grand chose.

Question bête et méchante : Bien que le schéma soit exact, est-ce bien la source du MOSFET qui est connectée au +12 V et donc le drain au moteur ?

Cordialement.

Pierre.

en tous cas c'est pas l'inverse ...

Bonjour et merci a tous !
Je vous remercie grandement pour l’intérêt porter a mon problème :slight_smile:
Je vais essayer de faire un joli post pour que ce soit le plus clair possible !

On va commencer par la question la plus importante :

J'ai bien vérifié, et j'ai même testé d'inverser les deux, résultat: la tension varie entre 11 et 12V :confused:
J’espère qu'en faisant cette manip je n'ai pas abimé mon MOSFET mais j'en ai un de rechange si jamais.

Avec digitalWrite(TRANSISTOR_PIN, HIGH); la tension au drain du MOSFET est à 12V.
Avec digitalWrite(TRANSISTOR_PIN, LOW); la tension au drain du MOSFET est à 0V.
(mesure effectué avec mon voltmètre car je n'ai pas d'oscillo).

Même soucis :(, c'est soit 0V soit environ 4.5~5V

Je comprends ! Je ne doute pas de tes conseils vu le nombre de fois que je t'ai vu sauver quelqu'un sur ce forum ! Ce commentaire marche aussi pour les autres, merci beaucoup :slight_smile:

Ok, je comprends mieux pour échantillonnage merci, mais pour l'entrée du gate du MOSFET, le voltmètre me donne des valeurs assez "logique" entre 0V et 12V.

Et le meilleur pour la fin, voici le montage :

Infos composants :
Transistor NPN 2N3904 : https://docs.rs-online.com/e39d/0900766b800204a1.pdf
MOSFET canal P IRF9530NPBF : https://docs.rs-online.com/519d/0900766b8079118a.pdf
1 résistance 1k Ohm marron noir rouge et 1 résistance 10k Ohm marron noir orange.

Merci pour votre aide !

Précision : Cette manip est réalisée en statique je pense ?

Je ne pense pas qu'il y ait des problèmes de bande passante, mais puisqu'on ne comprend pas autant évacuer de manière certaine.

Sans encore parler de charge et de décharge de la capacité Cgs du mosfet au travers de la résistance R16 = 10 k, la valeur Qgs de la datasheet n'est pas inquiétante, je m'intéresse plutôt à la résistance de base du NPN.

Ce n'est réellement connu que des électroniciens analogiciens, mais il ne faut jamais saturer un NPN en excès sinon on dégrade sa bande passante.
Quand un NPN est utilisé en amplification, il est totalement interdit de le saturer.
Quand le NPN est utilisé en interrupteur comme ici, il est recommandé de saturer le strict minimum dès que l'on ne l'utilise plus en mode statique.

  • la datasheet donne le gain min à 1 mA HFE min = 70
  • le courant de collecteur est de 1,2 mA, celui de base strictement nécessaire est 17 µA.
  • le courant dans la base est égal à (5V - Vbe)/1k → 4,2/1000 = 4,2 mA

Le courant de base injecté est 250 fois supérieur au courant strictement nécessaire.
Je ne dis pas encore que la cause est là, mais 250 fois cela fait beaucoup.
Un transistor bipolaire ne peut pas se bloquer tant qu'il n'a pas évacué les charges de conduction en excès.

Je ne dis pas que j'ai trouvé la cause, je reste prudent.
Je dis que cela vaut le coup de remplacer R15 par une 10 k, ou de remplacer R16 par une 1 k.

Note :
En électronique analogique, on déclare que le transistor entre en saturation dès que la tension de collecteur est égale ou inférieure à la tension de base.

Pas facile a voir sur la photo #18, mais on dirait que le collector du 3904 est connecté au ground ?
3904