PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Optokoppler



||kugelfisch
11.03.2009, 16:39
Ich habe folgendes Problem in Verbindung mit einem Optokoppler. Ich brauche eine Schaltung, die mir in Abhängigkeit vom ankommenden +12V Impuls einen analogen Masseimpuls schaltet (siehe Schaltplan).
Am Pin des Microcontrollers ist der interne Pullup-Widerstand aktiviert. Messe ich direkt am Ausgang des Optokopplers, ohne das Kabel am Microcontroller anzuschließen, habe ich gemessen gegen Masse genau 0 Volt.
Schließe ich nun das vom Ausgang des Optokopplers ausgehende Kabel an den Controller an und messe den Controllerpin gegen Masse, liegen ~3V an, aber nicht wie erwartet 0V (was der Fall ist, wenn ich den Controllerpin direkt auf Masse lege).

Ich arbeite zum ersten Mal mit einem Optokoppler, ist mir ein Anfängerfehler unterlaufen oder worin besteht das Problem?


http://img407.imageshack.us/img407/7286/optokoppler.jpg

Hubert.G
11.03.2009, 17:10
Grundsätzlich ist deine Schaltung richtig, wenn auch nicht sinnvoll. Wenn die Masse gemeinsam ist, dann kannst du ja auch gleich einen Spannungsteiler machen, oder wenn du das Signal unbedingt invertiert haben willst (kann der µC einfacher) dann einen normalen Transistor verwenden.
Zu deinem Problem, was für ein OK, wieviel Strom fliesst durch die Diode.

||kugelfisch
11.03.2009, 17:44
An einen Spannungsteiler habe ich auch schon gedacht, nur möchte ich nicht unbedingt in den Signalkreis eingreifen. Das Signal ist das Tachosignal. Wenn, dann sollte der Spannungsteiler ja möglichst hochohmig sein?

Optokoppler ist ein PC817. Der Strom für die Infrarotdiode sollte bei den geforderten 20mA liegen, aber ich kann das auch nochmal nachmessen. Könnte ein zu geringer Strom an der Diode für den Fehler verantwortlich sein?

Hubert.G
11.03.2009, 17:54
Du bist lustig, 20mA für den OK ziehen , aber keinen Strom für den Spannungsteiler verbrauchen wollen.
Bist du sicher das dein Tachosignal 20mA bringt?

||kugelfisch
11.03.2009, 18:18
Nein, ich muss es morgen nochmal nachmessen. Ich habe aber auch schon probiert den Impuls direkt mit +12V von der Batterie zu simulieren, da sollte der Strom ja in jedem Fall ausreichen - brachte aber auch keinen Erfolg.

Hubert.G
11.03.2009, 19:13
Wie groß hast du den Vorwiderstand gewählt, mit den 12V direkt sollte es schon funktionieren. Die Pinbelegung beim OK ist richtig, 3 GND, 4 µC.

||kugelfisch
12.03.2009, 16:12
Als Vorwiderstand habe ich einen (gemessen) 548Ohm Widerstand. Angeschlossen ist der Optokoppler folgendermaßen: 1 +12V Input; 2 Masse; 3 Masse; 4 Controllerpin.

PICture
12.03.2009, 16:18
Hallo!

Damit es funktioniert muss auf dem µC Pin ein pull-up sein. Es ist für einige Pins möglich einen internen pull-up zu verwenden.

MfG

||kugelfisch
12.03.2009, 16:23
Am Pin des Microcontrollers ist der interne Pullup-Widerstand aktiviert.

Hubert.G
12.03.2009, 16:26
Probier es mal mit einem Widerstand, so 10k an Pin 4 des OK, nach +5V. Dann mess noch mal, nicht das du den µC-Pin als Ausgang hast.

||kugelfisch
12.03.2009, 16:41
Als Ausgang sollte der PIN nicht konfiguriert sein. An einen Softwarefehler habe ich noch gar nicht gedacht, kann da mal bitte jemand kurz rübergucken:


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 8000000

'LCD Pinbelegung:
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portb.7 , Db6 = Portd.5 , Db7 = Portd.1 , E = Portd.0 , Rs = Portd.4
Config Lcdbus = 4

Dim Wegz As Long
Dim Verbrauchz As Long

Config Int0 = Change
Enable Int0
Enable Interrupts
On Int0 Interrupt_verbrauch
Portd.2 = 1

Config Int1 = Rising
Enable Int1
Enable Interrupts
On Int1 Interrupt_weg
Portd.3 = 1

Wegz = 0
Verbrauchz = 0
Cls

Do
Locate 1 , 1
Lcd "weg: " ; Wegz
Locate 2 , 1
Lcd "verbrauch: " ; Verbrauchz
Loop




Interrupt_weg:
Incr Wegz
Return


Interrupt_verbrauch:
Incr Verbrauchz
Return

||kugelfisch
12.03.2009, 19:43
Probier es mal mit einem Widerstand, so 10k an Pin 4 des OK, nach +5V. Dann mess noch mal, nicht das du den µC-Pin als Ausgang hast.

Am Widerstand gemssen gegen Masse habe ich +5V. Lege ich an den Optokoppler Spannung an, sinkt die Spannung auf 4,56V.


Ich habe auch gerade nochmal einen externen Pullup-Widerstand (10k) ausprobiert - nach wie vor ohne Erfolg. Ich bin langsam ratlos, kann mir jemand sagen, ob der Optokoppler vom Typ her für die gedachte Schaltung verwendet werden kann? Ist der OK evtl. defekt?!

Hubert.G
12.03.2009, 23:01
Also ich würde sagen der OK ist defekt, wenn alles so ist wie die geschrieben hast.

||kugelfisch
13.03.2009, 18:47
War doch ein Anschlussfehler, PIN4 des OK muss an Masse und PIN3 an den Controller.

Nur stehe ich jetzt vor dem Problem, dass der OK (wovor ja schon gewarnt wurde 8-[) zu viel Strom zieht - der originale Tacho funktioniert nicht mehr.

Kann ich das über einen NPN-Transistor als Verstärker lösen? Wie müsste ich diesen anschließen?

PICture
13.03.2009, 19:09
Hallo!

@ ||kugelfisch

Du kannst den OK wie im Code anschliessen. Es müsste eventuell noch der Rb auf den Tacho angepasst werden.

MfG

VCC
+
|
.-. .
Rv| |
| |
'-'
|
| +---------> µC
.-|------|-.
| | | |
| | |/ |
| V -> | |Optokoppler
| - |> |
| | | |
'-|------|-'
| |
___ |/ ===
Tacho >-|___|-| T GND vom µC
Rb 10k|>
|
===
GND

||kugelfisch
13.03.2009, 19:23
Vielen Dank für die schnelle Hilfe. Nur inwiefern muss ich Rb an den Tacho anpassen? Das ist mir noch nicht ganz klar.

PICture
13.03.2009, 20:08
Wenn die Spannung aus dem Tacho im Ruhezustand (ohne Impulse) 0V beträgt, ist es nicht nötig. Wenn die Spannung aber grösser als ca. 0,6 V ist, kann der Transistor dauernd leiten und man muss die Basisspannung mit einem Widerstandteiler verkleinern. Es geht um "saubere" Zustände des Transistors. Er soll nur voll leiten oder gesspert sein, also auf dem µC Pin sollen "saubere" Pegel L bzw. H sein.

MfG

Hubert.G
14.03.2009, 09:09
Ich kann mir nicht vorstellen das der OK mit Pin4 an GND und Pin3 an den µC funktioniert. Verwendest du die Zöhlweise nach dem Datenblatt?

PICture
14.03.2009, 14:00
Hallo!

Wenn von dem Phototransistor im OK keine sehr hoche Stromverstärkung verlangt wird, wird der Spannungsabfall bei inverser Beschaltung kleiner und manchmal ist es extra benutzt. Da er keinen Basiswiderstand besitzt, ist die Polung (fast) egal. Siehe dazu auch:

https://www.roboternetz.de/phpBB2/viewtopic.php?t=46411

MfG

Hubert.G
14.03.2009, 17:27
Diese inverse Beschaltung hat "||kugelfisch" in seinem ersten Posting beschrieben.
Mir hat das keine Ruhe gelassen und habe die Schaltung auf meinem Steckbrett mit einem 47k Lastwiderstand nachgebildet.
Bei inverser Beschaltung etwa 3V, in richtiger Beschaltung 0V.
Die richtige Beschaltung ist also doch besser.

PICture
14.03.2009, 17:47
Sie ist meistens sogar am besten, aber... :)

MfG

||kugelfisch
16.03.2009, 16:08
Ich gehe mit dem Signal vom Optokoppler auf den Int0 und zähle in der Interruptroutine eine Variable hoch. Die Pinbezeichnung habe ich analog zum Datenblatt gepostet. Es funktioniert halt nur so, wenn ich vermeintlich richtig anschließe bekomme ich kein Signal vom Optokoppler ausgegeben.

Eine Frage hab ich noch, wie muss VCC im Vergleich zur Spannung des Signals (+12V) in der von PICture geposteten Schaltung dimensioniert werden - oder spielt das keine Rolle? Den Vorwiderstand (Rv) passe ich entsprechend an, das ist klar.

MfG

PICture
16.03.2009, 16:23
Hallo ||kugelfisch!

Die Spannung VCC für die LED ist egal. Durch die LED im OK muss nur bei bestimmter VCC ausreichender und nicht zu großer Strom fliessen. Der wird dann mit dem Vorwiderstand Rv festgelegt.

MfG