TLP291 Optocoupler: Hold LED Current and Change the Collector Load
Set a Toshiba TLP291’s input current to about 1 mA. On its output side, use a 5 V supply and first fit 27 kΩ, then 1 kΩ. Measure the collector voltage in both runs. The resistor changes how much output current is required to pull the collector near ground. Reading current and voltage together shows where the actual specimen settles.
An optocoupler transfers a signal by light inside its package. Its input is an infrared light-emitting diode (LED), and its output is a phototransistor, a transistor that conducts in response to light. In this circuit the transistor’s collector receives current through a resistor, and its emitter returns that current to ground. The collector-emitter voltage, written VCE, is the voltage across those two terminals. This fixture joins the supply returns for a common low-voltage reference.
This is a proposed direct-current (DC) bench experiment. The voltages in the worked example are constructed. The blank worksheet is for your own observations.
Identify the exact device and its terminals
Use Toshiba TLP291(GB-TP,SE, the GB selection in the four-lead small-outline package, SO4. The manufacturer’s Rev. 3.0 data sheet, dated September 30, 2026, gives this exact order string on page 13. The product order table also lists it. Toshiba sorts parts by current transfer ratio (CTR), which expresses collector current divided by LED current as a percentage under a stated test condition. GB is the rank used in this lab.
Match the pin-1 mark to the orientation drawing on pages 1 and 14. Toshiba’s functional symbol labels pin 1 anode, pin 2 cathode, pin 3 emitter, and pin 4 collector. The anode and cathode are the positive and return terminals of the forward-driven LED. Use a plain SO4 adapter whose land pattern fits Toshiba package 11-3C1. Follow each solder pad to its header with the part unpowered. The case uses P291 as the device-family abbreviation and shows a separate rank mark. Keep the purchase or reel label that confirms the exact GB orderable.
Build two branches with one common return
- One exact Toshiba optocoupler and a plain four-pin adapter.
- Two adjustable low-voltage supply channels whose manuals permit their negative terminals to be joined. S1 drives the input through a resistor. Set its current limit to 3 mA and start at 0 V. S2 supplies the output at 5.00 V with a 10 mA limit.
- One 3.9 kΩ input resistor, one 27 kΩ collector resistor and one 1 kΩ collector resistor. Use 1%, ¼ W parts. Measure each resistance while disconnected and keep the values in the worksheet.
- A battery-powered Fluke 87V MAX digital multimeter with the black lead in COM (common) and the red lead in the voltage/resistance jack. Use the 6.000 V DC range for powered readings.
| SO4 pin | Connection |
|---|---|
| 1, anode | S1 positive through the measured 3.9 kΩ input resistor R1. |
| 2, cathode | Common 0 V and S1 negative. |
| 3, emitter | Common 0 V and S2 negative. This is the black probe point for VCE. |
| 4, collector | S2 positive through the chosen load RL. This is the red probe point for VCE. |
The collector resistor is a pull-up. It brings the collector toward the output supply when the transistor conducts very little. As the transistor conducts, the same resistor sets how much current flows for a given collector voltage. At the 5.05 V top of the worksheet supply range, a 980 Ω load permits at most about 5.15 mA and dissipates up to about 26 mW. These are arithmetic bounds for the fixture. The chosen ¼ W resistor has ample margin. At the input, 5.50 V through 3.8 kΩ allows at most about 1.45 mA even with zero voltage across the diode. Leave both current limits active and change load resistors with both outputs off.
Measure the input current and both output voltages
- With both outputs off, connect the 27 kΩ collector resistor. Check the adapter orientation, LED polarity and common return. Set S1 to 0 V and S2 to 5.00 V before applying power.
- With S1 still set to 0 V, measure the voltage across R1 with red on its supply side and black on its LED side. Then put the black lead at emitter pin 3. Measure S2 positive to pin 3 and pin 4 to pin 3. Enter the three readings in
off_27k. Keep the LED current near zero and record the actual supply and collector voltages. - Move the meter back across R1. Slowly increase S1 until the resistor voltage equals 0.001 A multiplied by its measured resistance in ohms. A 3,900 Ω resistor needs 3.900 V across it. This sets about 1.00 mA. Keep S1 at or below 5.50 V. If the target cannot be reached in that range, power down and check the wiring. At the target, record the R1 drop, then measure S2 and VCE again. Enter
on_27k. Recheck the input drop after moving the probes if the supply drifted. - Turn both outputs off and return S1 to 0 V. Replace 27 kΩ with the measured 1 kΩ resistor. Keep all other wiring in place. Repeat the off and on measurements as
off_1kandon_1k. Retune and record the actual LED current so both on runs are close to 1.00 mA. Check both supply limits and let the readings settle. - Restore the first load with power off and repeat its on measurement at the same input current. A repeat that moves substantially can point to an unstable source, a loose adapter or a change in ambient temperature. Keep repeated sets separately. Switch off both outputs when finished.
The input resistor drop gives the LED current with no current meter inserted in series. For the output, keep the reference at the emitter. Compute load current from the voltage drop between the measured S2 positive terminal and the collector. The result includes the small current drawn by the meter when it is across the collector and emitter. Fluke gives a nominal 10 MΩ voltage input. A 5 V collector can therefore draw about 0.5 µA through the meter. With 27 kΩ and an off transistor that alone can produce about 13.5 mV across the load in a simple model. Treat the off rows as circuit controls. They cannot separate the instrument current from the device’s dark current.
Read the load line at the measured operating point
Apply Ohm’s law to the measured input resistor drop, VR1, to get IF = VR1 ÷ R1. Calculate the collector-load current as IL = (VS2 − VCE) ÷ RL. Express the measured load-to-LED ratio as 100 × IL ÷ IF percent for the on cases. The load line is that straight-line relation between collector voltage and load current for a fixed supply and resistor. The actual collector voltage also depends on how much current the illuminated transistor conducts.
For a 5.00 V supply and an illustrative collector voltage of 0.30 V, the 27 kΩ load asks for about 0.174 mA. The 1 kΩ load asks for 4.70 mA at the same collector voltage. Increasing the requested current can leave the collector higher, even though the LED bias stays close to 1 mA. Read the actual voltage for each load. A high-gain specimen can behave differently from the constructed example.
Keep the Toshiba test conditions attached to each number
| Toshiba Rev. 3.0 at 25 °C | Test conditions | GB limit |
|---|---|---|
| Current transfer ratio | LED current 5 mA, VCE 5 V | 100–600% |
| Saturated current transfer ratio | LED current 1 mA, VCE 0.4 V | 30% minimum for the listed ranks including GB |
| Collector-emitter saturation voltage | Collector current 0.2 mA, LED current 1 mA | 0.3 V maximum for the listed ranks including GB |
Saturation here describes operation at a low collector-emitter voltage when the output circuit asks the transistor to carry a given current. Toshiba’s 0.3 V limit uses a controlled 0.2 mA collector current. At 5.00 V and 0.30 V, the 27 kΩ load asks for slightly less than that reference current. The 1 kΩ load asks for much more. Our resistor circuit lets VCE settle freely, the input is only approximately 1 mA, and the bench temperature may differ from 25 °C. Use the three data-sheet rows as comparisons and retain the conditions on each result. In particular, the 5 mA and 5 V CTR range cannot predict a load-limited ratio at this bench point.
| Load | VCE | Load current | Load-to-LED ratio |
|---|---|---|---|
| 27.0 kΩ | 0.200 V | 0.1778 mA | 17.78% |
| 1.000 kΩ | 3.400 V | 1.600 mA | 160.0% |
In those constructed readings the 27 kΩ run has a lower ratio and a lower collector voltage. It needs less current to reach the low-voltage region. The 1 kΩ run passes more current and still leaves most of the 5 V across the transistor. For a real sheet, report both values for each load and the actual measured LED bias. On the 6.000 V range the meter’s 1 mV resolution and DC accuracy both affect a small difference between two readings. At 5 V, Fluke’s ±(0.05% of reading + one count) specification is about ±3.5 mV under its manual conditions. A tiny inferred off current can be comparable to the combined uncertainty of the two voltages.
Calculate the comparison from your worksheet
Fill a copy of the blank worksheet. The columns are case, measured led_resistor_ohm, measured led_resistor_v across R1, measured load_ohm, measured output_supply_v, and measured vce_v. Enter numeric values without unit symbols. Include all four cases exactly once per sheet. Keep the meter and approximate ambient temperature with your notes.
Save the complete program as tlp291_load.py. Use Python 3.9 or later and run python3 tlp291_load.py observations.csv. Try constructed-examples.csv to reproduce the arithmetic. Output is comma-separated values (CSV). The program reports load current at the measured point, the load-line current at the 0.30 V reference, and the observed voltage band. It leaves the ratio blank for off rows. The voltage band is a worksheet description of the measured voltage.
The input screen expects a 4.95–5.05 V output supply, the intended resistor ranges, on current from 0.98 to 1.02 mA, and off current from zero to 0.010 mA. A reading outside the measured rail, invalid number, missing case or wrong load stops the calculation. Correct the worksheet or check the fixture before rerunning.
"""Calculate TLP291 LED and collector-load currents from steady voltages."""
import argparse
import csv
import math
from pathlib import Path
import sys
INPUT = (
"case", "led_resistor_ohm", "led_resistor_v", "load_ohm",
"output_supply_v", "vce_v",
)
CASES = ("off_27k", "on_27k", "off_1k", "on_1k")
OUTPUT = (
"case", "led_current_ma", "load_current_ma", "vce_v",
"effective_load_to_led_pct", "load_current_at_0p3v_ma", "vce_band",
)
def number(row, key):
raw = row[key]
if raw is None or not raw.strip():
raise ValueError(f"{key} is required")
try:
value = float(raw)
except ValueError:
raise ValueError(f"{key} must be a number") from None
if not math.isfinite(value):
raise ValueError(f"{key} must be finite")
return value
def analyze(row):
case = row["case"]
if case not in CASES:
raise ValueError("unknown case")
r_led, v_led_resistor, load, supply, vce = (
number(row, key) for key in INPUT[1:]
)
if not 3800 <= r_led <= 4000:
raise ValueError("led_resistor_ohm is outside the 3.9 kΩ fixture band")
low, high = (26500, 27500) if case.endswith("27k") else (980, 1020)
if not low <= load <= high:
raise ValueError(f"load_ohm does not match {case}")
if not 4.95 <= supply <= 5.05:
raise ValueError("output_supply_v is outside 4.95–5.05 V")
if not 0 <= vce <= supply:
raise ValueError("vce_v must be within the measured output rail")
led_ma = 1000 * v_led_resistor / r_led
load_ma = 1000 * (supply - vce) / load
at_reference_ma = 1000 * (supply - 0.300) / load
ratio = ""
band = "off_reference"
if case.startswith("on_"):
if not 0.98 <= led_ma <= 1.02:
raise ValueError("ON rows require 0.98–1.02 mA LED current")
ratio = f"{100 * load_ma / led_ma:.3f}"
band = "at_or_below_0p3_v" if vce <= 0.300 else "above_0p3_v"
elif not 0 <= led_ma <= 0.010:
raise ValueError("OFF rows require 0–0.010 mA LED current")
return (case, f"{led_ma:.6f}", f"{load_ma:.6f}", f"{vce:.3f}",
ratio, f"{at_reference_ma:.6f}", band)
def read_results(stream):
reader = csv.DictReader(stream, strict=True)
if reader.fieldnames != list(INPUT):
raise ValueError("CSV header must be " + ",".join(INPUT))
results = {}
for row in reader:
try:
if None in row:
raise ValueError("too many columns")
result = analyze(row)
case = result[0]
if case in results:
raise ValueError(f"duplicate case {case}")
results[case] = result
except ValueError as exc:
raise ValueError(f"row {reader.line_num}: {exc}") from exc
missing = [case for case in CASES if case not in results]
if missing:
raise ValueError("missing case: " + ", ".join(missing))
return [results[case] for case in CASES]
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("sheet", help="worksheet CSV path or - for standard input")
args = parser.parse_args()
try:
if args.sheet == "-":
results = read_results(sys.stdin)
else:
with Path(args.sheet).open(encoding="utf-8-sig", newline="") as stream:
results = read_results(stream)
except (OSError, UnicodeError, csv.Error, ValueError) as exc:
parser.exit(2, f"{exc}\n")
writer = csv.writer(sys.stdout, lineterminator="\n")
writer.writerow(OUTPUT)
writer.writerows(results)
if __name__ == "__main__":
main()
Trace unexpected readings
- The R1 voltage never reaches the target. Check S1 regulation, R1’s measured value and LED polarity. Confirm the adapter pin-1 orientation with both outputs off.
- The off collector is far below 5 V. Verify the LED drive is actually off, then look for a wrong resistor, a collector short or an accidental current-range connection at the meter. Measure voltage with the leads in the correct jacks.
- The collector sits near the supply for both on loads. Recheck the measured input current and trace pin 4 to the load and pin 3 to the common return. Confirm that the device is the exact rank on the package label.
- Changing the load gives a smaller voltage change than expected. Compare the actual input currents and load values, and repeat after restoring the first load. Record the observation if the setup checks out. The constructed example does not set a pass threshold.
A separate experiment uses a VO617A with changing input pulses. Its reader studies pulse edges and timing. UNO Optocoupled Pulses
Challenge
At 5.00 V, what load resistance would demand 0.20 mA at a collector voltage of 0.30 V? If you choose 27 kΩ, what is the difference in requested current at that reference voltage?
Check your answer
(5.00 − 0.30) V ÷ 0.00020 A gives 23.5 kΩ. With 27 kΩ the load requests about 0.174 mA, or about 0.026 mA less. This calculation locates two points on two resistor load lines. The real collector voltage still needs a measurement.
Primary references and downloads
- Toshiba TLP291(SE data sheet, Rev. 3.0. Page 1 gives the pin assignment, page 3 lists coupled electrical tests, and pages 13–14 identify the order string and package.
- Toshiba TLP291(SE product and order table. Look for the GB orderable and SO4 package entry.
- Fluke 87V MAX users manual, Rev. 1. Printed pages 10–11, 41 and 45 cover voltage measurement, the 6.000 V range and input impedance.
Download the experiment files (ZIP). Includes the complete Python program, host tests, blank and constructed worksheets, original schematic and full-size image.