Nouvelles:

Le Forum est maintenant chiffré (préambule https). Bien sûr, des liens externes insérés dans les sujets vont demeurer inchangés. Mais la composition des pages du Forum est désormais sécurisée. Si des problèmes d'affichage surviennent, veillez à vider votre cache pour ce site.

Menu principal

Traceur de courbe de transistors du (tres) pauvre.

Démarré par bubblecat, Avril 09, 2016, 09:57:03 AM

« précédent - suivant »

bubblecat

Salut à  tous,

En regardant une video de jipihorn sur un traceur de courbe "du pauvre" ( https://www.youtube.com/watch?v=Bv5mPc9fVIU ) J'ai eu l'idée de reproduire l'opération avec un arduino et excel. Le but n'étant pas de faire quelque chose d'abouti mais juste de voir si en partant d'une idée, j'arrive à  obtenir quelque chose qui fonctionne. Etant débutant avec l'arduino et les microcontrolleurs actuels en général et ayant pratiquement tout oublié de ce que j'ai appris à  l'école il y a ...euh... longtemps ^^ Je voulais juste "essayer un p'tit truc" ;)

Le principe est simple, on injecte un courant via une tension et une resistance dans la base d'un transistor, on applique une tension variable de 0 à  5v au collecteur du transistor et on recupere la tension emetteur. Ensuite on passe à  un autre palier de tension de base (8 paliers de 5v/8) et on recommence. Les données de la tension emetteur sont envoyées dans une feuille excel et ensuite il suffit faire un graphique. Dans la video, Jipi utilise 2 générateurs de fonctions et une oscillo. Ici je vais générer les différentes tensions avec la pwm et récupérer la tension émetteur à  l'aide de l'arduino.

Premier problème : avoir une tension dc constante et lisse à  partir de la pwm. Solution : video du bidouilleur sur le projet de charge fictive ^^ N'ayant que des condensateurs de 1µ, j'ai cependant doublé le filtre afin d'avoir quelque chose de lisse (l'arduino de base à  un pwm à  500Hz je crois).

Second problème, envoyer le tout dans excel : J'ai trouvé une feuille avec tout de pret pour lire le port série, tout le mérite reviens au créateur Roberto Valgolio qui a fait un outil bien utile je trouve, la feuille est dispo ici : http://www.robertovalgolio.com/sistemi-programmi/arduino-excel

Troisième probleme :  les filtres de la pwm ne sont pas efficaces pour peu qu'on leur demande un courant et augmenter la taille des condensateurs ralentirait tout le systeme. Je passe donc par des ampli-op montés en buffer et là  tout va bien. Je n'avais que des lm324 et donc je me mange 0.5v de rail, ce qui fait qu'en fait je ne balaye que de 0.5 à  4.5v environ. Et augmenter la tension d'alimentation de lm324 n'est pas une bonne idée, l'arduino etant sensible à  tout ce qui dépasse les 5v, il vaut mieux ne pas prendre de risques inutiles en cas de défaillances.

au final ça donne ceci dans excel :



le tracé brun est celui d'un bd139, le vert celui d'un bc547 et le bleu un bc 337. Les valeurs en abscisse et ordonnée ne sont pas significative, c'est excel qui les a mis par défaut. (Je connais pas trop ce systeme de chart dans excel).

le circuit est relativement simple :



le transistor est celui qui est testé. les filtres R20k +C1µ en série arrivent à  lisser correctement la pwm émise par les pin 9 et 10  de l'arduino, le signal résultant est envoyé dans l'ampli op via une R de 100k (histoire de ne vraiment pas déranger le lissage de la pwm). les ampli op sont montés en buffer donc VS = VE (aux tensions de rail pres). Les diverses tensions sont récupérées par A0, A1 et A2. Les ampli op sont alimentés par le +5v de l'arduino.

le code :



//Traceur de courbe du tres pauvre

// initialisation des variables
int i;
int j;
int VCC;
int VRB;
int VEG;
int RB;
int RE;
int   idx = 0;
int VRBpin = 9;
int VCCpin = 10;
int VEGpin = A0;
int VCCinpin = A2;
int VRBinpin = A1;
float VCCf;
String eCol="ABCDEFGHIJKLMNO"; //chaine servant à  déterminer quelle colone on utilise dans excel
char cCol;
String tempCol="X";
String commandCol="";
int countStr = 0;
float VRBf;                             
float VEGf;                             
float VCEf;

void setup() {
 
  //Initialisation des pins
  pinMode(VRBpin,OUTPUT);
  pinMode(VCCpin,OUTPUT);
  pinMode(VEGpin,INPUT);
 
  Serial.begin(9600);
 
  idx = 0 ;
 
  }

void loop() {
 
countStr = 0;
for (i=0;i<256;i=i+(256/8)){ // Ici on incrémente la tension de base de 0 à  5 v par pas de 5v/8
                             
   
   
   analogWrite(VRBpin,i);
   delay(40);
   cCol = eCol.charAt(countStr);//opération servant à  déterminer quelle colone utiliser dans excel
   tempCol.setCharAt(0,cCol);
   
   for (j=0;j<256;j++){   // Ici on incrémente la tesion du collecteur de 0 à  5v pour chaque "pas" de la tension de base
 
    analogWrite(VCCpin,j);
   
   
    delay(20);
 
   VEG = analogRead(VEGpin);  // on récupère la tension émetteur
   VCC = analogRead(VCCinpin);// on récupère la tension appliquée au collecteur
   VRB = analogRead(VRBinpin);// on récupère la tension appliquée à  la base
   VEGf = (float)VEG/1023*5.0;// on convertit la valeur en échelle 5V
   VCCf = (float)VCC/1023*5.0;// on convertit la valeur en échelle 5V
   VRBf = (float)VRB/1023*5.0;// on convertit la valeur en échelle 5V
   
 
   commandCol = ("XLS,write,Sheet2," +tempCol); //on commence l'envoi des données dans excel
   
   Serial.print(commandCol);
   
   
    Serial.print(idx + 1);
    Serial.print(",");
    Serial.print(VEGf);
    Serial.print("\n");
   
   
   
   
   idx++;;
  }

   
    analogWrite(VCCpin,0);
    idx++;;
    delay(300); // delai servant à  decharger les condensateurs de filtrage
    countStr++;
    idx = 0 ;
  }

   
    idx++;;
    analogWrite(VRBpin,0);
    analogWrite(VCCpin,0);
    delay(20000);
}



Dans le montage et le code, je récupère via A1 et A2 les tensions appliquées à  la résistance de base et au collecteur mais je ne les récupère pas dans excel. J'ai du chipotter un peu avec la façon dont les données sont inscrites dans la feuille excel (la string eCol). Au final j'obtient 8 colonnes (les 8 paliers de la tension de RB) de 256 valeurs (les valeurs de la tension émetteur en fonction de la tension collecteur).

La feuille dans laquelle sont envoyée les données se nomme "Sheet2", vous pouvez changer le nom dans cette ligne : commandCol = ("XLS,write,Sheet2," +tempCol);  ;) (cette feuille ne se trouve pas dans le fichier excel original) ;)

Voilà , c'est pas tres génial mais bon, ça fonctionne. Faudrait que j'améliore le coté "chart" de la feuille histoire d'avoir quelque chose d'un peu plus parlant. Pas évident de réaliser tout ça sans oscillo (je me suis débrouillé avec l'entree de la carte son et un oscillo-carte son freeware pour analyser le filtrage de la pwm ^^ ).

merci d'avoir lu :)

Bubblecat

Électro-Bidouilleur

À vaincre sans péril, on triomphe sans gloire... Tout le mérite vous revient d'avoir imaginé une méthode simple et flexible sans l'utilisation outils de mesure plus onéreux. Un peu de fignolage, et vous aurez une solution tout à  fait fonctionnelle. Ça donne des idées! Bravo!  :)

bubblecat

Merci :)

Une prochaine étape sera aussi d'essayer de remplacer l'arduino par un microcontroleur plus modeste et surtout pour pouvoir avoir un montage "indépendant". J'ai pensé à  un ATtiny ou un PIC (ça me permettrait de découvrir le monde des PIC par la même occasion :) et il y a moyen de les programmer facilement via l'arduino uno). Mais j'ai aussi d'autres idées de projets et d'expérimentations ;) Et en passant merci à  vous pour vos videos, elles font partie de celles qui m'ont donné l'envie de ressortir mon fer :)

eledtronik

bonne  réalisation, attention EB c'est contagieux LoL
Arduino est une plateforme vraiment géniale et n'as de limite que l'imagination.




bubblecat

j'avoue être tombé accro à  "... je vous l'donne en mille : le condensateur électrolytique..."  ;D

Et effectivement l'arduino est bien pratique pour toute sorte de réalisations, et un bon outil pour l'apprentissage des microcontrolleurs et de l'électronique :) 

Électro-Bidouilleur

Même mes garçons m'agacent avec ce "... je vous l'donne en mille : le condensateur électrolytique...".   ;)

Ma foi, mais c'est devenu une phrase mythique!  8)

En passant, le petit clip vidéo en question est totalement fictif, et a été enregistré seulement pour les fins de la vidéo thème. Vous ne trouverez pas ce clip ailleurs!

Janpolanton

Bonsoir,

Désolé de remonter un sujet vieux de plus d'un an.

Je ne sais pas ou en est notre ami bubblecat mais comme je m’intéresse aussi à  un traceur de courbes, je voudrais vous faire connaître ce projet que j'ai sous le coude depuis quelques mois.

Il est basé sur un Arduino, de quelques composants et du logiciel Processing comme  environnement graphique.

(Processing n'est pour ma part, pas très intuitif mais il est très puissant)

Bon, je voulais mettre le pdf du projet mais il est trop gros.

Je peux vous mettre à  la place le lien de la page (je ne sas pas si c'est permis) sinon j'enverrai le fichier par mail aux membres intéressés)


eledtronik

Hello.  On peut mettre des liens vers des fichiers, pour ma part je suis preneur
Merci

Janpolanton

Bonjour à  tous,

Alors, voici le lien pour ce traceur de courbes : http://www.instructables.com/id/Arduino-BiCMOS-Curve-Tracer/

Le lien pour charger Processing : https://processing.org/

Et éventuellement le lien pour Octave : http://www.gnu.org/software/octave/download.html

Bonne lecture

Jean-Paul

Électro-Bidouilleur

Bonjour Jean-Paul,

Merci d'avoir soumis votre circuit pour le bénéfice de tous. Il faut être imaginatif pour faire de l'analogique avec un microcontrôleur, et vous avez atteint votre objectif. Bravo!

Je tente de comprendre comment vous mesurez le courant de collecteur. Ç'est peut-être évident, mais je n'arrive pas à  voir...  :-[ Vous mesurez le courant à  l'émetteur, mais pas au collecteur (du moins je ne vois pas). Assumez-vous que les courants de l'émetteur et du collecteur sont les mêmes? Vous avez des entrées analogiques de disponibles sur l'Arduino. Pourquoi ne pas mesurer le courant au collecteur?

Merci!

Électro-Bidouilleur

Petit détail. Votre appelation BiCMOS porte à  confusion. BiCMOS est une technologie de semiconducteur combinant Bipolaire et CMOS. Je présume que ce n'est pas à  cela que vous faites référence...

https://fr.wikipedia.org/wiki/BiCMOS

Janpolanton

Bonjour,

Vous m'attribuez un montage qui n'est pas le mien... ;D

J'avais trouvé cet "Instructable" il y à  quelques mois et j'avais mis ce projet de côté avec  l'idée de l'essayer un jour, ayant tout le matériel à  disposition.

Je m'en suis souvenu en lisant le présent post et j'ai publié le lien.

Et en fait, vous êtes allé bien plus loin que moi dans l'étude...

Je n'ai donc pas les réponses à  vos questions

Électro-Bidouilleur

Très bien  :D C'est quand même de la bonne nourriture pour réflexion...

Janpolanton

Bonjour à  tous,
En ce dimanche pluvieux, je n'ai pas sorti mon fer à  souder mais j'ai fait un peu travailler ma matière grise.
En furetant sur internet, j'ai trouvé un moyen de faire de l'acquisition de données Arduino en temps réel directement dans un graphique OpenOffice Calc.
J'ai un peu galéré mais les résultats sont plutôt prometteurs... 8)

Je vous en dirai plus par la suite.






Électro-Bidouilleur

C'est bien. Je ne savais pas que OpenOffice / LibreOffice pouvait recevoir les données directement d'un port série. Très, très intéressant, lorsque combiné aux macros. Je crois qu'il s'agit de VBScript. Tiens-nous au courant!