¡Esta es una revisión vieja del documento!
[LAB] Visualizador de las curvas del TRT
Proyectos sugeridos
- A partir de la siguiente información y otra más que se considere, realizar un circuito que muestre las curvas de los transistores en la pantalla de ordenador:
- Se realizará usando un microcontrolador.
- El entorno gráfico permitirá escoger diferentes parámetros para la realización de las curvas, como por ejemplo:
- Número de trazos en la gráfica.
- Tipo de transistor: NPN, PNP, N-MOSFET, P-MOSFET, N-JFET, P-JFET.
- Máxima corriente de colector.
- El entorno gráfico mostrará al menos la gráfica y la ganancia del transistor.
- Información obtenida de:
- Otros enlaces interesantes:
- Gráficas de datos metereológicos - Python - Generar página web. En él puede verse como hacer gráficas con Python, en un programa de temperaturas usando la librería
matplotlib. - Sensores - 18B20 LDR BMP180 DHT22 - Arduino - Gambas - Python. En este proyecto se indica como comunicarse el Arduino y el PC con Python.
Circuito de la revista Elektor
- Permite visualizar en un osciloscopio las curvas de un transistor. Publicado en la edición española de enero de 1990, número 116, páginas 1-54 y siguientes.


- Otro mucho más complejo es el aparecido en la edición inglesa de Elektor, año 2009, número 386 (febrero), páginas 24 y siguientes.
Circuito de Juan Galaz
Funcionamiento
- Se ha adaptado el circuito para poder capturar los datos con un Arduino Nano.
- El transistor Q2 produce una corriente constante que hace cargar linealmente el condensador C1, una señal de diente de sierra lineal.
- Esta señal que toma valores desde 0 a 5 V, se aplica al colector del transistor a probar mediante el transistor Q1.
- Para descargar la carga del condensador se utiliza el transistor Q3.
- La carga y descarga del condensador se realiza con el Pin D13 del arduino.
- Para generar las diferentes intensidades que se le aplica a la base del transistor de prueba, utilizamos los Pin D2-D3-D4 del arduino.
- Con las diferentes combinaciones de los Pin D2-D3-D4 podemos mediante resistencias y diodos aplicar una intensidad al transistor de prueba. Al ser 3 bits las combinaciones el número de curvas son 8.
- La intensidad se mide mediante la resistencia R6, y es capturado con el Pin A0.
Programa del Arduino
- transistor3.ino
//Curvas de transistores //xsetaseta@gmail.com // 26/08/2020 void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(13, OUTPUT); Serial.begin(57600); Serial.println("CURVAS"); } void loop() { int z,z1; int v0; int mA; long matrix[8][10]; for(z=0;z<8;z++) { if(z&1) digitalWrite(2, 1); else digitalWrite(2, 0); if(z&2) digitalWrite(3, 1); else digitalWrite(3, 0); if(z&4) digitalWrite(4, 1); else digitalWrite(4, 0); digitalWrite(13, 1); delay(100); digitalWrite(13, 0); for(z1=0;z1<10;z1++) { delay(15); matrix[z][z1]=analogRead(A0); } } mA=0; for(z=0;z<8;z++) { Serial.print(mA);Serial.print(","); for(z1=0;z1<10;z1++) { Serial.print( (186*matrix[z][z1])/102); Serial.print(","); } mA+=10; Serial.println(""); } }
En la parte de programación en el Arduino el funcionamiento es el siguiente:
- El Pin 13 se pone a 1, con lo que conseguimos dos cosas, descargar el condensador C1 y anular el generador de intensidad constante.
- El pin 13 se pone a 0, anulamos la puesta a cero del condensador, y activamos la cargar linealmente el condensador C1.
- Mediante el Pin A0 medimos la corriente en el transistor 10 veces durante la carga del condensador.
- El paso anterior se repite 8 veces, con las diferentes intensidades en la base del transistor de prueba.
- Terminadas la medidas se mandan mediante el puerto serie.
Captura de datos
- Para representar las curvas se ha utilizado una hoja de cálculo con representación gráfica. Solo tenemos que copiar datos procedentes del Arduino y pegarlos en la hoja de cálculo.
- Ejemplo: Transistor BC547
- Copiado de los datos desde el terminal:

- Pegado de datos a la hoja de cálculo:

Conclusiones del autor del artículo
- Después de muchas medidas con diferentes transistores y con iguales modelos pero de diferentes fabricantes he observado que:
- Aunque sea el mismo tipo (BC547), las curvas son muy diferentes entre los diferentes fabricantes.
- Hay transistores bastante especiales, 2SD2375 con una ganancia enorme.
- Los Darlington tienen otro tipo de curvas, y su tensión B-E es de 1.4V.
- Mi conclusión es que se fabrican lotes de transistores comunes, y dependiendo de los resultados en los test, los numeran con un número que se adapte a las tablas standard. Eso creo que pasaba en el pasado, ahora creo que son más precisos a la hora de su fabricación.
- Los transistores no funcionan igual con tensiones más altas de 5V, pero no he querido complicar el circuito para poder alimentarlo a partir del Arduino.
- También se podría hacer que la entrada A0 digitalizase más rápido además de con más ganancia, pero he querido usar técnicas normales del Arduino.
- Otra forma de medir la señal sería medir en la resistencia R7 e invertir la señal, pero he creído no necesario complicar las cosas. Es un sencillo montaje que permite observar el funcionamiento de los diferentes transistores, no se pretende mucho más, no se quiere hacer un instrumento de medida exacto.
Circuito de Juan Galaz usando interfaz gráfica con Gambas (VB Linux)
Funcionamiento
- El circuito es similar al anterior realizado pero en este caso la alimentación es de 9V, que se ha obtenido de un módulo convertidor.
- En esta ocasión los datos se importan automáticamente mediante un programa realizado en Gambas (VB para Linux). Si se quiere la gráfica de curvas se puede exportar a un fichero de formato png.
- Programa realizado en Gambas (VB para Linux):

- Imagen exportada en formato
png, blanco y negro:
Programas
- Todo comprimido: tragra.7z
- Programa del Arduino:
- transistor4.ino
//Curvas de transistores //xsetaseta@gmail.com //17/10/2020 //http: / / seta43.duckdns.org //http: / / seta43.blogspot.com / char clave[] = "TRANSIS"; #define MAXENTRADA 50 char buffer[MAXENTRADA]; int contador=0; char stringComplete = false; void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(13, OUTPUT); Serial.begin(9600); for (char zx = 0; zx < 3; zx++) { Serial.println(clave); delay(200); } } void loop() { while (Serial.available()) { char inChar = (char)Serial.read(); buffer[contador]=inChar; if (inChar == '\n') { stringComplete = true; buffer[contador]=0; } if(contador<MAXENTRADA)contador++; } if (stringComplete) { Orden(buffer); contador=0; stringComplete = false; } } void runFuniones(void) { if(strstr(buffer,clave) ) { Serial.println("OK"); goto salir0; } if(strstr(buffer,"CURVAS")) { curvas(); goto salir0; } Serial.println("aERROR "); salir0: ; } void Orden(char *bufferS) { runFuniones(); } void curvas(void) { int z,z1; int v0; int mA; long matrix[8][10]; for(z=0;z<8;z++) { if(z&1) digitalWrite(2, 1); else digitalWrite(2, 0); if(z&2) digitalWrite(3, 1); else digitalWrite(3, 0); if(z&4) digitalWrite(4, 1); else digitalWrite(4, 0); digitalWrite(13, 1); delay(100); digitalWrite(13, 0); for(z1=0;z1<10;z1++) { delay(7); matrix[z][z1]=analogRead(A0); } } mA=0; for(z=0;z<8;z++) { Serial.print(mA);Serial.print(","); for(z1=0;z1<10;z1++) { Serial.print( (186*matrix[z][z1])/102); Serial.print(","); } mA+=10; Serial.println(""); } }
Vídeos
- Trazador de curvas:
- Realización circuito impreso con acetona: