Παρασκευή, 31 Οκτωβρίου 2014

Calculating Filters with Your TI

I've developed a small set of programs to calculate and graph simple first order low pass or high pass RC filters. These run on TI 89 or 92/92Plus / Voyage 200. I may convert them for the TI 84 Plus C too, though I think this calc is mostly used by high school students rather than engineers. (Although some of us have a not so modest collection of scientific/graphing calcs!)

I will not repeat the theory of RC filters here, you can find some excellent articles on the web, such as:

Download the set of programs here:


Quick Walk-through of the Program

Unzip the downloaded file and use TI Connect to send it to your calc. The program creates a folder called electron for its own use, so it won't mess with any of your variables in main. It will also attempt to backup any settings it changes during startup and restore them on exit.
To execute the program:





The program will then automatically setfold to electron where the other subprograms are stored. Next, the main menu is shown:




Design allows you to enter a frequency and either a resistor or capacitor. It will then solve for the other component. Analyze will perform a calculation of a filter based on the values of both components. Components and resistors may be selected from the standard E12 values or be of any other manually entered value.

Let's follow a path through the "Design Filter" option:




Using the first option, you enter a cut-off frequency and a resistor. Second option for entering Frequency and capacitor. Going ahead with the first option:




Entering a frequency in Hz (1000Hz for our sample calculation)




Select a resistor. Use option 2 for non-standard values. Going ahead with option 1, you will be presented with a dialog to select a value. A matching dialog is used for capacitors as well.




We have selected 1000Ohms for the resistor. The program will give us the first results:




The calculated capacitor is 159 nF. The program then asks for two values which are used to create tables and graphs. The frequency step here is used for the phase shift and gain tables that follow.




The last frequency corresponds to the last value shown on the phase shift / gain graphs. Up to this point, the calculations for both Low Pass and High Pass filters are the same.




Before entering the tables/graphs section we must actually select the type of filter we are designing. Let's assume a low pass filter.




In this table, x represents frequency (using the step we entered previously). The column labeled "1" is the phase shift (notice -45 degrees in the -3db point for the LPF) and "2" is the gain (-3db=0.707). You can move around the table using the arrows and explore the values. When ready, just press enter.




You now have the option to see the table results as a series of graphs or just exit to the same menu. Assuming the first option, we get the phase shift graph:




After graphing is complete, the trace cursor appears and you may move through the graph and note the phase shift value for each frequency. You may also directly type the desired frequency. When ready, press enter for the next graph.




Again, use the same techniques to explore the Gain graph. When ready, press Enter to return to the main menu.

If the program crashes for some reason (or if you break out of it without using the Exit option) some modes on your calculator may be changed. To return your calculator to the state it was before running the program, type the following commands in the home screen:

setfold(electron)
rclGDB gdb
initg(0)
setmode("14",modevar)
setfold(main)

If you happen to have misplaced your TI, you can always run these programs in an emulator. Tiemu is an excellent one and works in all major operating systems.

I hope you find this useful!

Τρίτη, 16 Σεπτεμβρίου 2014

MSP430/ARM Development on Linux: Installing CCS 6.0

Code Composer Studio (or CCS as it is widely known), is Texas Instruments' own development tool for their series of MCUs like the well known MSP430 and the Stellaris/Tiva (ARM based) series. Texas Instruments also provides a number of inexpensive development / demo boards known as launchpads. I am the happy owner of two of them: the MSP430 one (F5529) and the ARM based Stellaris launchpad (LM4F120).

Texas Instruments provides some instructions on installing CCS 6.0 on Linux. We will provide additional instructions for installing Tivaware (or stellarisware).

Basic Install

Install your favorite *buntu variant. I've chosen Xubuntu 14.04 since it is lightweight enough and the speed is tolerable on my tiny 2009 Acer Netbook. (While I have beefier machines for development, the netbook is very convenient as it fits perfectly on my rather small electronics workbench).
Make sure to install the updates, either during installation or immediately afterwards by running:

sudo apt-get update; sudo apt-get upgrade

Downloading CCS6.0

Download CCS6.0 for Linux from this page:


It is preferable to download the full version rather than the web based installer.

Installing Dependencies

Before running the installation program, some dependencies need to be installed. In general the instructions in TI's wiki apply:

sudo apt-get install libc6:i386 libx11-6:i386 libasound2:i386 libatk1.0-0:i386 libcairo2:i386 libcups2:i386 libdbus-glib-1-2:i386 libgconf-2-4:i386 libgdk-pixbuf2.0-0:i386 libgtk-3-0:i386 libice6:i386 libncurses5:i386 libsm6:i386 liborbit2:i386 libudev1:i386 libusb-0.1-4:i386 libstdc++6:i386 libxt6:i386 libxtst6:i386 libgnomeui-0:i386 libusb-1.0-0-dev:i386 libcanberra-gtk-module:i386

Some of these are already installed, apt-get will inform you about this.

Note the wiki refers to the 64bit version, but CCS runs without any problem in Ubuntu 32bit too (as you may have noticed, all the above dependencies are 32bits anyway). Create the required symbolic link:

sudo ln -s /lib/i386-linux-gnu/libudev.so.1 /lib/libudev.so.0

Running the Installation

Change to your Download folder (or wherever you placed the downloaded CCS6.0 archive):

cd ~/Downloads

Extract the files:

tar xvzf CCS6.0.1.00040_linux.tar.gz

(replace with actual filename of downloaded file, may differ if a new CCS version is released)

Change to the folder of the extracted files and run the installer:

cd CCS6.0.1.00040_linux

./ccs_setup_6.0.1.00040.bin


There is no need to run the installer as root (with sudo), unless you wish to install it for multiple users. Otherwise, just run it as a standard user and install CCS in a subdirectory of your home directory. After accepting the license, you will be prompted to select an installation directory. Assuming your username is 'user', install CCS to /home/user/ti (the location is automatically suggested by the installer).

You will then be greeted by the processor support dialog:



It is wise to select all the MCUs that you intend developing for. For this example we selected MSP and Tiva/Stellaris development:



You won't have to change the default emulators selected in the next dialog. In the App Center dialog, select at least the MSP430Ware:



Installing the Drivers

After the CCS installation is complete and before plugging in your USB launchpad, install the necessary drivers:

cd ~/ti/ccsv6/install_scripts

sudo ./install_drivers.sh

Running CCS for the First Time

The first time you run CCS, you will be asked to select a workspace (and maybe set it as default). We have chosen /home/user/tidev here but you are welcome to choose your own or accept the default. Make a note of this as you will need it later.



On the first run the App Center will automatically download any options you selected during install (like the MSP430ware) and will also update other components. If you only intend to develop for MSP430, your setup is now complete. For Stellaris/Tiva, read on.

Installing Tivaware (Stellarisware)

Developing for tiva or stellaris requires the Tivaware library and some additional settings in CCS. Note that you can use Tivaware to develop for stellaris (LM4F devices) and there is no need to install stellarisware:

Download Tivaware from TI:

Tivaware download page

If for some reason you prefer stellarisware (for example, developing for LM3S devices):


Tivaware is provided as an EXE file, but is actually a self extracting ZIP. Unzip to a subdirectory of your CCS6.0 install path:

cd ~/ti
mkdir tivaware
cd tivaware
unzip ~/Downloads/SW-TM4C-2.1.0.12573.exe


(the actual filename may vary)

There are several ways to include tivaware in your projects. In order to minimize required settings on each project, create a vars.ini file in your workspace. Remember this is /home/user/tidev in our example:

cd ~/tidev
vi vars.ini


(obviously, use your favorite editor instead of vi to create this file)

A single line is needed:

TIVAWARE_INSTALL=/home/user/ti/tivaware

 

Configuring Your Project for Tivaware

The vars.ini file creates an environment variable for the /home/user/tidev workspace (where the file is saved). To configure your project to use tivaware successfully:

  • Import the vars.ini file as source for CCS Build variables
  • Add an "include files" path to the compiler using the TIVAWARE_INSTALL variable
  • Add the driverlib.lib file to the project.

Go ahead and create a new project (File => New => CCS Project). Use the following screenshot as a guide:




When finished, select File => Import => Code Composer Studio => Build Variables:


Select the vars.ini file previously created:




Next, right click on your project name in the project explorer. Select properties, ARM Compiler, Include Options and add the following directory path:



Finally, add (actually, link) driverlib.lib to your project. Right click on your project name in the project explorer and select add files:




The full path for driverlib.lib as shown: /usr/ti/tivaware/driverlib/ccs/Debug. On the next dialog, select link to file:


We are done! Here is our BlinkTheLed project (from the Tiva Workshop workbook), successfully built:

 
Since the drivers for the in-circuit debug interface are installed as well, you can actually connect your launchpad and run a debug session on the device.
And now you can continue running your development environment on your lean and mean Linux machine. Happy coding!

Τετάρτη, 10 Σεπτεμβρίου 2014

Καθρέπτες Ρεύματος - Πηγή Ρεύματος Widlar

Καθρέπτες Ρεύματος

Σχεδόν όπου και να ψάξετε στη βιβλιογραφία, θα βρείτε το παρακάτω χαρακτηριστικό κύκλωμα για τον καθρέπτη ρεύματος:



όπου στις επαφές P1 / P2  θα συνδέσετε το φορτίο σας. Το ρεύμα στο φορτίο θα είναι ακριβώς το ίδιο με το ρεύμα που διατρέχει το συλλέκτη του Q1. Γι'αυτό το λόγο άλλωστε το κύκλωμα ονομάζεται καθρέπτης ρεύματος.



Το transistor Q1 είναι συνδεδεμένο ως δίοδος (diode transistor) και έτσι ισχύει:




Υπολογίζοντας το ρεύμα που διέρχεται μέσα από την R1 (και θεωρώντας αμελητέο το ρεύμα βάσης):




Αν τα transistor είναι ακριβώς ίδια, το ρεύμα βάσης που θα κυκλοφορεί και στα δύο θα είναι ακριβώς το ίδιο. Αυτό φυσικά θα έχει  σαν αποτέλεσμα το ρεύμα συλλέκτη στο Q2 να είναι ακριβώς το ίδιο με το ρεύμα Ic του Q1 που υπολογίσαμε πριν.

Η μαγική φράση εδώ είναι "ακριβώς τα ίδια transistor". Όσο και αν ψάξετε δεν θα βρείτε δύο ακριβώς ίδια transistor. Μια μικρή διαφορά στο β και το παραπάνω κύκλωμα θα σας δίνει πολύ διαφορετικό ρεύμα. Ακριβώς ίδια transistor μπορείτε να βρείτε μέσα σε ένα ολοκληρωμένο κύκλωμα όπου και το παραπάνω μπορεί πράγματι να έχει πρακτική εφαρμογή. Μια και παίζουμε με διακριτά εξαρτήματα, χρειαζόμαστε κάτι πιο πρακτικό.

Ένας πιο Πρακτικός Καθρέπτης

Μπορούμε φυσικά να χρησιμοποιήσουμε το παλιό καλό κόλπο με την αντίσταση στον εκπομπό: θα δημιουργήσουμε έτσι μια αρνητική ανάδραση που θα σταθεροποιήσει το ρεύμα συλλέκτη, σχεδόν ανεξάρτητα από το β των transistors. Για παράδειγμα, ας δούμε το παρακάτω κύκλωμα:




Οι αντιστάσεις Re είναι ίδιες για τα Q1 και Q2. Όπως και πριν μπορούμε να υπολογίσουμε το ρεύμα συλλέκτη του Q1. Για να έχουμε ένα πιο πρακτικό παράδειγμα, ας θεωρήσουμε ότι έχουμε τάση τροφοδοσίας 9V και θέλουμε να έχουμε ρεύμα στο φορτίο 10 mA. Μπορούμε εύκολα να γράψουμε για το Q1 το παρακάτω (αγνοώντας ξανά επιδεικτικά το ρεύμα βάσης):




Επιλύοντας για Vcc =9V, Ic=10 mA και Vce=0.7V, θα πάρουμε:




Μπορούμε να επιλέξουμε Rc = 680 Ω, Re = 150 Ω. Βολικές τιμές, καθώς ανήκουν και οι δύο στην Ε12. Προσέξτε ότι ενώ υπάρχουν πολλοί πιθανοί συνδυασμοί, δεν θέλουμε να μεγαλώσουμε υπερβολικά την τιμή της Re γιατί μεγαλώνουμε την αντίσταση εξόδου του κυκλώματος. Σκοπός μας είναι απλά να σταθεροποιήσουμε το ρεύμα.

Μπορείτε να χρησιμοποιήσετε το παραπάνω κύκλωμα ως ένα πολύ ωραίο LED tester: 10 mA είναι συνήθως κατάλληλη τιμή για τα περισσότερα LED. Ότι χρώμα LED και να βάλετε για φορτίο, ο καθρέπτης μας θα του δώσει ακριβώς αυτό το ρεύμα. Για την τροφοδοσία μπορείτε να χρησιμοποιήσετε μια μπαταρία 9V. Μη ξεχνάτε όμως να την αποσυνδέετε όταν τελειώσετε: ακόμα και χωρίς φορτίο, το κύκλωμα μας διαρέεται από 10mA.

Καθρέπτης για Μικρά Ρεύματα

Από την άλλη, ίσως δεν θέλετε να φτιάξετε ένα LED tester αλλά ένα transistor tester. Ξέρετε, σαν εκείνα τα άχρηστα που έχουν τα πολύμετρα πάνω και μετράνε το β (hfe). Ξέρετε φυσικά ότι το β δεν είναι σταθερό: μεταβάλλεται π.χ. με την τάση συλλέκτη εκπομπού, το ρεύμα, τη θερμοκρασία κλπ. Άρα η μέτρηση του με ένα απλό κύκλωμα, σε ένα μοναδικό σημείο λειτουργίας έχει μόνο ακαδημαικό θα λέγαμε ενδιαφέρον. Ωστόσο μπορεί να αποτελέσει ένα ευχάριστο απόγευμα αν έχετε πολλά transistors στα συρταράκια σας :)

Για ένα τέτοιο κύκλωμα θα θέλετε να φτιάξετε το παραπάνω ώστε να παρέχει ρεύμα περίπου 10 μΑ. Αν κάνετε τους υπολογισμούς όπως προηγουμένως, θα καταλήξετε σε κάπως... μεγάλες αντιστάσεις:


Όπως είπαμε πριν, οι πηγές ρεύματος βρίσκουν αρκετές εφαρμογές στα ολοκληρωμένα κυκλώματα. Όμως μεγάλες τιμές αντιστάσεων δεν είναι δυνατόν να κατασκευαστούν (είναι είτε ασύμφορες ή απλά πολύ μεγάλες σε μέγεθος για να χωρέσουν) στα σύγχρονα ολοκληρωμένα. Αν πρόκειται λοιπόν για μικρά ρεύματα, μπορούμε να πάμε στην πηγή ρεύματος Widlar.

Πηγή Ρεύματος Widlar

Η πηγή ρεύματος Widlar μας επιτρέπει να παρέχουμε μικρό ρεύμα εξόδου με λογικές τιμές αντιστάσεων. Δεν πρόκειται ακριβώς για "καθρέπτη" αλλά μάλλον για φακό: το ρεύμα στο transistor Q1 είναι μεγαλύτερο από το Q2, ή αν προτιμάτε, το ρεύμα του Q2 είναι ένα μέρος (κλάσμα) του Q1. Το κύκλωμα είναι το παρακάτω:



Μοιάζει με το προηγούμενο μας κύκλωμα, μόνο που η Re υπάρχει μόνο στο κύκλωμα εξόδου. Αυτό προκαλεί και την ασυμμετρία του κυκλώματος και την διαφορά των ρευμάτων Q1 και Q2.

Ας υποθέσουμε ότι θέλουμε ρεύμα εξόδου 10 μΑ. Για ρεύμα εισόδου θα επιλέξουμε ένα αρκετά μεγαλύτερο, π.χ. 3 mA.  Για το Q1 μπορούμε και πάλι να γράψουμε:




Ίσως σας παραξενέψει λίγο ο τύπος για την Re:




Προφανώς Iq1 και Iq2 είναι τα ρεύματα συλλέκτη για τα transistors Q1 και Q2 αντίστοιχα. Αν αναρρωτιέστε πως προκύπτει ο τύπος, θα σας παραπέμψω στο ισοδύναμο Ebers-Moll που απαιτείται για τη συγκεκριμένη ανάλυση.

Κάνοντας ένα γρήγορο υπολογισμό:


Vt είναι η θερμική τάση (thermal voltage) και μπορείτε να θεωρήσετε ότι για τα περισσότερα transistors μικρού σήματος είναι 26mV σε συνήθη θερμοκρασία δωματίου. Μπορούμε να επιλέξουμε αντιστάσεις R1=2.7kΩ και Re=15kΩ. Στην Re καλό είναι να προσθέσουμε ένα trimmer για να ρυθμίσουμε το ρεύμα Iq2 ακριβώς στα 10 μΑ. Για να μετράμε NPN transistors, μπορούμε να φτιάξουμε το παρακάτω κύκλωμα:


(Για μέτρηση PNP transistors φτιάξτε το αντίστοιχο κύκλωμα με Q1, Q2 να είναι NPN) Στη θέση των Q1, Q2 μπορείτε να βάλετε όποιο γενικής χρήσης PNP θέλετε (π.χ. BC560C). Q3 είναι το NPN transistor που θα μετρήσετε. "Α" είναι το πολύμετρο σας ως μιλι-αμπερόμετρο στη κλίμακα των mA. Η τιμή που θα μετρήσετε, χωρίς την υποδιαστολή, είναι το β του transistor. (π.χ. αν μετρήσετε ρεύμα 2.35 mA, το transistor έχει β 235).

Για σωστή μέτρηση, βαθμονομήστε το κύκλωμα ως εξής: αφαιρέστε το Q3 και βάλτε το μικρο-αμπερόμετρο απευθείας στο συλλέκτη του Q2 προς γη. Χρησιμοποιήστε το trimmer ώστε το ρεύμα που μετράτε να είναι ακριβώς 10μA. 

Η αντίσταση 1 kΩ στο συλλέκτη του Q3 μπαίνει για προστασία από τυχόν βραχυκύκλωμα.  Καθώς το transistor λειτουργεί στην ενεργή περιοχή το ρεύμα συλλέκτη θα είναι πάντα β φορές το ρεύμα βάσης. Η αντίσταση φυσικά επηρεάζει τη μέτρηση καθώς κρατά κάποια τάση στα άκρα της και ξέρουμε ότι το β μεταβάλλεται με την τάση Vce.

Αλλάζοντας τιμές στην αντίσταση αυτή θα διαπιστώσετε και γιατί η μέτρηση β δεν έχει και τόσο νόημα.

Εξακολουθεί πάντως να επαρκεί για ένα ευχάριστο απόγευμα :)

Σάββατο, 30 Αυγούστου 2014

Microcontrollers and LEDs

The (somewhat lengthy) Introduction

Arduino is breeding a new generation of hackers! Those of you old enough to remember the 80s will probably have fond memories of programming a home computer of that era: the ZX Spectrum, the Commodore 64, the TI-99 and all the other wonderful machines that wouldn't do much unless you could use their BASIC language (or learn machine code!) Sure, you could get ready made programs and games on cassette(!) but there were many who would buy them just for the fun of programming. The hardware had a lot of limitations, sure, but the mere joy of squeezing every single bit of power from the machine was unsurpassed.

Computers have evolved a lot since then, but also lost a lot: the interactiveness of the first computer languages, the simplicity of programming, the single point of entry: you would start learning BASIC. What about now? Where does a beginner start programming? Sure, there are many choices, in both programming languages and operating systems. Most of them are free. But here is the problem: the choice is too big. If that is not enough, the changes are rapid and most people won't be able to follow the latest trend or hype: first it's C++, then it's Java, tomorrow is Python and so on. All very nice,  but where does a beginner start? Confusion...

There are other problems too: your first (simple) programs will not be very impressive by today's standards. They will probably be command line and text driven (mind you, I've written a book on learning programming by writting games in Python and Pygame but it's in Greek only for the moment I'm afraid. You can get a PDF copy of it here). People get bored quickly writing the same old computational programs in modern PCs full of colors, sounds and multimedia. Trust me, I teach these subjects. Programming is now mostly viewed like a chore (we are teaching it the wrong way).

Microcontrollers to the rescue! Actually, they share a lot more than you think with the home computers of the 80s.

  • They are "underpowered" (by todays CPU standards)
  • Their programming is simple and has immediate (and spectacular) results
  • They are actually made to be "actively hacked" rather than "passively used"
They also combine tinkering with both hardware and software,  making them suitable for both computing and electronic engineering hackers!

Most people that are comfortable with programming don't necessarily have adequate knowledge of electronics: some basic stuff is required even at the beginner level: how do you connect a LED to a microcontroller output? Let's see.

Connecting a LED to a Microcontroller Output

You have to keep the following things in mind:
  • Some microcontrollers have 5V outputs (arduino), others have 3.3V or less (MSP430)
  • Some microcontrollers can provide enough current (in other words, they have adequately low output resistance) to drive a LED directly (with a suitable resistor). Arduino can drive LEDs with no problems.
  • Other microcontrollers like MSP430 have limited output current capability. You might be able to drive a LED from them directly but at risk of damaging the MCU.
  • No LED can operate directly from an MCU output: you will need a to connect a resistor in series. Typical LEDs operate at low voltages, depending on their color. For example, red leds need about 1.5V. Fancier colors like blue and white need higher voltages.
Assuming you are using a microcontroller like Arduino, all you need to connect your LED to an output is a suitable current limiting resistor.

Connecting a LED to an Arduino

Connecting a LED to an arduino  is very simple, since the outputs of the MCU can source enough current by themselves. With the following facts in mind it is easy to calculate the resistor:
  • An "active" arduino output provides 5V
  • A typical red LED needs 1.5V
  • About 10mA through the LED are usually sufficient for a good brightness.
Our circuit looks like this:


 Calculating R1 is simple:



We know Vout is 5V, Vled is 1.5V and we need 10mA for the LED. Solving for R1:


 Feel free to adjust this a bit up or down to use a value actually available in the E12 series of resistors (either 330Ω or 390Ω will do). Use this same calculation for other LEDs, adjusting for current and LED color (voltage drop) accordingly.

Connecting a LED to an MSP430 (or other low power MCU)

Low power MCU cannot (and should not) drive LEDs directly. Instead, use the output from the MCU to switch on a transistor that carries the load:


Although we show a separate 5V supply for the LED, if you are using a TI launchpad board, you can source this directly from its 5V output pin.

We now have two resistors to calculate, R1 and R2.

Starting with R2, the equation for the output part of our circuit is:





We will be operating our transistor as a switch. In this configuration the transistor is used in two states: cut off (where no current flows) or fully on (saturation) where the transistor shows almost no resistance (the collector-emitter voltage is zero).

In an ideal transistor (which exists only in... an ideal world) the Vcesat would be zero, but in practice it will be around 0.2V.  We still need about 10 mA for the LED. Solving the above equation for R2 yields:


Conveniently, this is an E12 value as well :)
You may adjust a bit up or down if you have happen to not have the exact value.

Since we know the collector current wil be 10mA, we can easily calculate the base current and resistor R1. Assuming the transistor has b (hfe) 300:



The equation for the input:


Solving for R1:

 

69K is not a value of the E12 series but feel free to replace it with either 68K (little more current) or even 56K (if your transistor has a lower hfe).

In any case, you will only be drawing a minute and absolutely safe amount of current from the MCU output: around 30 μΑ!

Πόλωση Transistor

Εισαγωγή

Σε αυτό το blog ευελπιστώ να ασχοληθώ κυρίως με αναλογικά ηλεκτρονικά: θα δείτε transistors και τελεστικούς ενισχυτές (opamps), φίλτρα, ταλαντωτές, ενισχυτές και άλλα κλασικά κυκλώματα. Αναπόφευκτα θα δείτε και κάποια ψηφιακά: το παιχνίδι με το Arduino και το MSP430 είναι ευχάριστο!
Θα προσπαθήσω τα κυκλώματα που δείχνω να είναι πρακτικά: υπάρχουν πάρα πολλά site με κυκλώματα "αρχής" τα οποία ενώ καλύπτουν το θεωρητικό μέρος στην πράξη απέχουν πολύ από το να λειτουργούν ικανοποιητικά (ενίοτε και καθόλου). Όλα τα κυκλώματα που θα δείχνουμε εδώ δοκιμάζονται σε breadboard και θα βλέπουμε και τη διαφορά μεταξύ θεωρίας και πράξης.
Θα βλέπουμε βέβαια όπου χρειάζεται και τις απαραίτητες πράξεις και μαθηματικές σχέσεις για τους υπολογισμούς. Κάποιες φορές θα δίνουμε και μικρά προγραμματάκια σε Python για να γίνονται οι υπολογισμοί μας ευκολότεροι.

Φυσιολογικά αυτό το blog θα έπρεπε να ξεκινήσει με ένα post για το 555. Το 555 ήταν το κύκλωμα που έβαλε τους περισσότερους από εμάς στα ηλεκτρονικά (flashing leds, anyone?) και διαπιστώνω ότι και σήμερα έχει πολλούς... οπαδούς. Για να σας καθησυχάσω, σίγουρα θα υπάρξουν και posts για το 555. Επιτρέψτε μου όμως για πρώτο post να τιμήσω το λογότυπο του site και να ασχοληθώ με
τον ακρογωνιαίο λίθο της σύγχρονης ηλεκτρονικής: το transistor.

Τι είναι η Πόλωση;

Η πόλωση (biasing) είναι ένα πολύ σημαντικό κομμάτι των αναλογικών ηλεκτρονικών και ειδικά όταν έχουμε να κάνουμε με διακριτά εξαρτήματα (όπως το αγαπημένο μας transistor). Μια αποτυχημένη πόλωση μπορεί να μας οδηγήσει σε ενισχυτές που παραμορφώνουν, ταλαντωτές που... ξεφεύγουν μόλις ζεσταθούν και  πολλά απογεύματα με δυσάρεστα προβλήματα (αντίθετα, η σχεδίαση αναλογικών κυκλωμάτων πρέπει να μας χαρίζει ευχάριστα απογεύματα!)

Η πόλωση είναι μια μέθοδος που χρησιμοποιούμε για να φέρουμε ένα κύκλωμα (και ειδικότερα κάποια ενεργά εξαρτήματα του όπως το transistor) σε μια προκαθορισμένη αρχική κατάσταση λειτουργίας. Για παράδειγμα στο κύκλωμα μας, ένα συγκεκριμένο ρεύμα συλλέκτη και τάση συλλέκτη-εκπομπού.
Ας πάρουμε για παράδειγμα ένα ενισχυτή κοινού εκπομπού. Θεωρώντας ότι μόλις έχουμε ενεργοποιήσει το κύκλωμα και δεν υπάρχει τίποτα συνδεδεμένο στην είσοδο, ποιο είναι το ιδανικό σημείο λειτουργίας του transistor; Καταρχήν, τι εννοούμε με το σημείο λειτουργίας;



Το μοναδικό ενεργό στοιχείο στο κύκλωμα μας, το transistor Q1, με την ενεργοποίηση του κυκλώματος διαρρέεται από ένα ρεύμα συλλέκτη στην έξοδο του και ένα ρεύμα βάσης στην είσοδο. (Φυσικά το ρεύμα εκπομπού είναι το άθροισμα των δυο παραπάνω, αλλά μπορούμε να το θεωρήσουμε ίσο με το ρεύμα συλλέκτη καθώς το ρεύμα βάσης είναι πολύ μικρό. Τα ρεύματα αυτά φαίνονται παρακάτω:



Το ρεύμα βάσης είναι αυτό που καθορίζει το ρεύμα συλλέκτη με τη γνωστή σχέση:


Χωρίς σήμα στην είσοδο του, θέλουμε το transistor να έχει στα άκρα του την μισή τάση τροφοδοσίας, στην περίπτωση μας 4.5V. Αυτό θα επιτρέψει στον ενισχυτή μας να δίνει τη μέγιστη δυνατή έξοδο: βρίσκεται στη μέση της ευθείας φόρτου και με την είσοδο του σήματος έχει τον ίδιο χώρο να κινηθεί τόσο προς τα 0V όσο και προς τα 9V:



Η ευθεία φόρτου μπορεί να χαραχθεί εύκολα αν σκεφτούμε τα δύο άκρα της: Όταν το τρανζίστορ είναι εντελώς κλειστό (αποκοπή), η τάση Vce είναι ίση με την τάση τροφοδοσίας. Όταν είναι εντελώς ανοιχτό (κόρος) η τάση Vce είναι μηδέν (θεωρητικά, πρακτικά θα είναι γύρω στα 0.2V) και το ρεύμα περιορίζεται μόνο από τις δύο αντιστάσεις (συλλέκτη και εκπομπού).


Βλέποντας το κομμάτι της εξόδου, μπορούμε εύκολα να γράψουμε τη σχέση:


Και μια που το ρεύμα βάσης είναι εξαιρετικά μικρό, μπορούμε να την απλουστεύσουμε ακόμα περισσότερο θεωρώντας ότι το ρεύμα συλλέκτη είναι ίδιο με το ρεύμα εκπομπού:


Λύνοντας αυτή τη σχέση ως προς το ρεύμα συλλέκτη:


Αντικαθιστώντας τις τιμές του κυκλώματος και για Vce = 4.5V, θα βρούμε:


Αυτό είναι και το επιθυμητό σημείο ηρεμίας για το transistor του ενισχυτή μας: αντιστοιχεί στο λεγόμενο midpoint biasing, στην πόλωση δηλαδή που μας φέρνει ακριβώς στη μέση της ευθείας φόρτου.

Για την πόλωση μπορούμε να χρησιμοποιήσουμε διάφορες μεθόδους: Μια αντίσταση από Vcc προς τη βάση, διαιρέτη τάσης κ.α. Συνήθως η προτιμότερη μέθοδος είναι ο διαιρέτης τάσης. Τι τάση όμως χρειαζόμαστε;

Μπορούμε αρχικά να υπολογίσουμε το ρεύμα βάσης σύμφωνα με το ρεύμα συλλέκτη που υπολογίσαμε. Με μια ματιά στο datasheet του BC547B βλέπουμε ότι ο συντελεστής β (hfe) έχει τιμές από 200-450.  Μπορούμε βέβαια να μετρήσουμε το transistor, αλλά κάτι τέτοιο συνήθως δεν είναι πρακτικό. Θα κάνουμε τους υπολογισμούς μας με ένα μέσο όρο γύρω στο 300.


Στο διαιρέτη τάσης, θέλουμε το ρεύμα που θα διαρρέει την αντίσταση R2 να είναι τουλάχιστον 10πλάσιο του ρεύματος βάσης που υπολογίσαμε. Για να βρούμε την τάση που χρειαζόμαστε στη βάση (και άρα στην R2) μπορούμε απλά να παρατηρήσουμε το κύκλωμα εισόδου: η τάση θα πρέπει να είναι τόση ώστε να υπερνικήσει τη Vbe (τυπικά γύρω στα 0.7V) και την αντίσταση Re που διαρρέεται από το ρεύμα εκπομπού. Άρα:


Η αντίσταση R2 θα διαρρέεται από το 10πλάσιο του ρεύματος βάσης που υπολογίσαμε, άρα:


Φυσικά, για το διαιρέτη τάσης ισχύει η γνωστή μας σχέση:


οπότε γνωρίζοντας την R2, μπορούμε εύκολα να υπολογίσουμε την R1:


Και αντικαθιστώντας τις τιμές:

Μπορούμε να επιλέξουμε τις κοντινότερες τιμές από τη σειρά Ε12 αντιστάσεων: 22kΩ και 68kΩ.
Όσο αφορά την πόλωση το κύκλωμα μας έχει ολοκληρωθεί. Μη βιάζεστε όμως να πανηγυρίσετε!

Παρατηρήσεις και Παγίδες

Αν σας δημιουργήθηκε η εντύπωση ότι το ρεύμα βάσης που υπολογίσαμε δεν είχε μεγάλη σημασία στους υπολογισμούς μας, δεν έχετε άδικο. Σκεφτείτε ότι πρακτικά το χρησιμοποιήσαμε (το 10πλάσιο) για να υπολογίσουμε την τιμή της R2. Έτσι απλά εξασφαλίζουμε ότι ο διαιρέτης τάσης που χρησιμοποιούμε είναι σχεδόν αφόρτιστος (Η τάση που υπολογίζουμε θεωρητικά σε ένα διαιρέτη τάσης ισχύει όσο δεν τραβάμε ρεύμα από αυτόν. Όταν ο διαιρέτης τάσης φορτίζεται, η τάση μειώνεται. Υπολογίζοντας τον για το 10πλάσιο ρεύμα εξασφαλίζουμε ότι θα λειτουργεί πρακτικά αφόρτιστος).  Ωστόσο το κύκλωμα μας θα λειτουργούσε και με 8πλάσιο ή 12πλάσιο ρεύμα. Γιατί όμως συμβαίνει αυτό;

Παρατηρήσατε πιθανόν ότι η αντίσταση Re συμμετέχει τόσο στο κύκλωμα εισόδου όσο και στο κύκλωμα εξόδου. Προσέξτε τώρα τι θα γίνει αν αντικαταστήσουμε το transistor με ένα άλλο, έστω μεγαλύτερου β από αυτό που χρησιμοποιήσαμε στους υπολογισμούς μας.

Ο διαιρέτης τάσης θα εξακολουθεί να δίνει την ίδια τάση στη βάση. Όμως τώρα το ρεύμα βάσης θα προκαλέσει ένα μεγαλύτερο ρεύμα συλλέκτη λόγω του μεγαλύτερου β. Το μεγαλύτερο ρεύμα συλλέκτη (και άρα εκπομπού) θα προκαλέσει μεγαλύτερη πτώση τάσης στην αντίσταση Re. Όμως η τάση αυτή αντιτίθεται στην τάση πόλωσης που εφαρμόζουμε στην είσοδο και άρα το ρεύμα βάσης θα μειωθεί, μειώνοντας αντίστοιχα ξανά και το ρεύμα συλλέκτη.

Με μια φράση: η πόλωση στο κύκλωμα μας αυτορυθμίζεται! Αυτό είναι αποτέλεσμα της αντίστασης Re. Φυσικά αν η Re δεν υπάρχει ή η τιμή της είναι ιδιαίτερα χαμηλή δεν θα έχουμε αυτή την αυτορύθμιση. Η Re ουσιαστικά προκαλεί αρνητική ανάδραση στο κύκλωμα μας.

Δεδομένου ότι το κύκλωμα μας είναι ένας ενισχυτής κοινού εκπομπού, η αρνητική ανάδραση από την Re έχει επίδραση και στο κέρδος του. Αν αυτό δεν είναι επιθυμητό, θα πρέπει να χρησιμοποιήσουμε ένα πυκνωτή bypass ώστε η Re να μην επιδρά στο AC σήμα του ενισχυτή:



Η αρνητική ανάδραση μειώνει το κέρδος του ενισχυτή και πρακτικά το κάνει ανεξάρτητο από το β του transistor:


Ο ενισχυτής μας έχει κέρδος τάσης 1000/470= 2.12, πάρα πολύ μικρότερο από ένα αντίστοιχο χωρίς Re. Σε κάποιες περιπτώσεις το χαμηλό κέρδος μπορεί να είναι πρόβλημα. Πως μπορούμε να το αυξήσουμε (χωρίς να καταφύγουμε στη λύση του πυκνωτή bypass);

Από τον προηγούμενο τύπο είναι εμφανές ότι μπορούμε είτε να αυξήσουμε την Rc είτε να μειώσουμε την Re (είτε και τα δύο!). Προσέξτε όμως: Αν μειώσετε ιδιαίτερα την Re μειώνεται αντίστοιχα και η αυτορύθμιση της πόλωσης. Αν αυξήσετε την Rc θα μειώσετε το ρεύμα Ic στο σημείο ηρεμίας. Για παράδειγμα με Rc=4.7kΩ, το ρεύμα συλλέκτη στο σημείο ηρεμίας θα είναι λιγότερο από 1 mA. Με τόσο λίγο ρεύμα κινδυνεύετε να λειτουργήσετε το transistor σε μη γραμμική περιοχή με παραμορφώσεις κλπ. (Εννοείται φυσικά ότι οι αντιστάσεις αυτές επιδρούν και σε άλλα χαρακτηριστικά του ενισχυτή π.χ. αντίσταση εξόδου)

Αν θέλετε λοιπόν περισσότερο κέρδος, κρατήστε την ανάδραση σας και δημιουργήστε ένα ενισχυτή με περισσότερα στάδια:



Το συνδυασμένο κέρδος τάσης των δύο σταδίων στο παραπάνω σχέδιο είναι περίπου 6.

Στην Πράξη

Υλοποιώντας το κύκλωμα μας σε μια breadboard με βάση τις τιμές που υπολογίσαμε, μετρήσαμε τα παρακάτω:


Μια πρόχειρη μέτρηση του β του BC547B έδειξε περίπου 300. Έπειτα το αντικαταστήσαμε με ένα BC550C με β γύρω στο 450, και οι νέες μας μετρήσεις ήταν:


Είναι εμφανές ότι η σταθεροποίηση της πόλωσης μας λειτουργεί αρκετά καλά.
Και μια που φτιάξαμε ένα ενισχυτή, μπήκαμε στον πειρασμό να τον τροφοδοτήσουμε και με σήμα για να δούμε πως τα πάει:




Θα επανέλθουμε όμως στους ενισχυτές σε μελλοντικά μας posts. Προς το παρόν σας ευχόμαστε πολλά ευχάριστα και δημιουργικά ηλεκτρονικά απογεύματα!