This short program will use voltage measurements on the base and collector of a transistor and resistor values entered to calculate the current gain. Of course different value resistors will result in different beta values. I tried to use the smallest collector resistor possible without causing the collector voltage to rise too much. I used the USB (5V) output for the collector resistor, so make sure the collector voltage doesn't rise over 3.3V or I think bad things will happen.
main.cpp@0:1dd4e19ed08e, 2012-04-16 (annotated)
- Committer:
- RobOnk
- Date:
- Mon Apr 16 03:47:28 2012 +0000
- Revision:
- 0:1dd4e19ed08e
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RobOnk | 0:1dd4e19ed08e | 1 | #include "mbed.h" |
RobOnk | 0:1dd4e19ed08e | 2 | |
RobOnk | 0:1dd4e19ed08e | 3 | AnalogIn base_voltage(p15); |
RobOnk | 0:1dd4e19ed08e | 4 | AnalogIn coll_voltage(p16); |
RobOnk | 0:1dd4e19ed08e | 5 | |
RobOnk | 0:1dd4e19ed08e | 6 | int base_resistor, coll_resistor; |
RobOnk | 0:1dd4e19ed08e | 7 | float base_current, adj_base_voltage; |
RobOnk | 0:1dd4e19ed08e | 8 | float coll_current, adj_coll_voltage, beta; |
RobOnk | 0:1dd4e19ed08e | 9 | |
RobOnk | 0:1dd4e19ed08e | 10 | int main() { |
RobOnk | 0:1dd4e19ed08e | 11 | |
RobOnk | 0:1dd4e19ed08e | 12 | printf ("Please enter a base resistor value\n"); |
RobOnk | 0:1dd4e19ed08e | 13 | scanf ("%i", &base_resistor); |
RobOnk | 0:1dd4e19ed08e | 14 | |
RobOnk | 0:1dd4e19ed08e | 15 | printf("Please enter a collector resistor value\n"); |
RobOnk | 0:1dd4e19ed08e | 16 | scanf ("%i", &coll_resistor); |
RobOnk | 0:1dd4e19ed08e | 17 | |
RobOnk | 0:1dd4e19ed08e | 18 | //calculate base current |
RobOnk | 0:1dd4e19ed08e | 19 | adj_base_voltage = (1 - base_voltage) * 3.3; //voltage across base resistor |
RobOnk | 0:1dd4e19ed08e | 20 | base_current = adj_base_voltage/base_resistor; |
RobOnk | 0:1dd4e19ed08e | 21 | |
RobOnk | 0:1dd4e19ed08e | 22 | //calculate collector current |
RobOnk | 0:1dd4e19ed08e | 23 | adj_coll_voltage = (1.515 - coll_voltage) * 3.3; //1.515 is 5V as 1 is 3.3V |
RobOnk | 0:1dd4e19ed08e | 24 | coll_current = adj_coll_voltage/coll_resistor; |
RobOnk | 0:1dd4e19ed08e | 25 | |
RobOnk | 0:1dd4e19ed08e | 26 | //calculate current gain |
RobOnk | 0:1dd4e19ed08e | 27 | beta = coll_current / base_current; |
RobOnk | 0:1dd4e19ed08e | 28 | printf ("Transistor beta is %f\n", beta); |
RobOnk | 0:1dd4e19ed08e | 29 | printf ("The voltage across Rb is %f\n", adj_base_voltage); |
RobOnk | 0:1dd4e19ed08e | 30 | printf ("The voltage across Rc is %f\n", adj_coll_voltage); |
RobOnk | 0:1dd4e19ed08e | 31 | |
RobOnk | 0:1dd4e19ed08e | 32 | } |
RobOnk | 0:1dd4e19ed08e | 33 | |
RobOnk | 0:1dd4e19ed08e | 34 | |
RobOnk | 0:1dd4e19ed08e | 35 | |
RobOnk | 0:1dd4e19ed08e | 36 | |
RobOnk | 0:1dd4e19ed08e | 37 | |
RobOnk | 0:1dd4e19ed08e | 38 | |
RobOnk | 0:1dd4e19ed08e | 39 | |
RobOnk | 0:1dd4e19ed08e | 40 | |
RobOnk | 0:1dd4e19ed08e | 41 |