Hallo zusammen, ich möchte gern eine Spannung 0-10V (von einer Lichtsteuerung) über einen analogen Portpin eines ATmega328 einlesen (bzw. das entsprechende Spannungsverhältnis, da der 328 ja mit 5V läuft). Ich weiss, dass ich das mit einem Spannungsteiler am einfachsten realisieren kann, aber würde auch gern eine galvanische Trennung haben. Daher würde ich gern den Optokoppler PC817 verwenden. Die Grundschaltung wäre sicherlich die 3. (ganz rechts) hier aufgezeigte Möglichkeit mit dem Pullup an der Kathode : http://www.mikrocontroller.net/articles/Datei:Optokoppler_grundschaltungen.png 2 Fragen habe ich jedoch, bei denen ich nicht genau weiss, wie ich es am besten anstellen soll und natürlich möchte ich auch nicht die Messung durch irgendwelchen unüberlegten Murks ungenau werden lassen : 1.: Das Datenblatt des PC817 gibt einen maximalen Ausgangsstrom von 50mA an, was für den ATmega (max. 40mA) zu viel ist. Wie begrenze ich diesen Strom am besten ? Einen Widerstand zwischen Kathode und Portpin ? Wenn ja, wie groß ? R=U/I ist mir bekannt, aber soll ich eher knapp kalkulieren oder großzügig ? Oder sollte ich den Eingangswiderstand an OK1 erhöhen, sodass die LED schwächer leuchtet und sich dadurch indirekt auch der Ausgangsstrom verringert werden müsste ? 2.: Kann ich anstatt des extra 10K Pullups den internen Pullup (ich glaube 20K) verwenden ? Also funktioniert der überhaupt am analogen Eingang oder nur, wenn der Pin als digitaler Pin verwendet wird ? Und wenn der interne Pullup funktionieren würde, sollte ich den dann auch tatsächlich in dem Fall nutzen, wenn ich einen extra Widerstand zwischen Kathode und IC-Pin einbaue ? In dem Fall wäre der Pullup ja erst "nach" diesem Widerstand platziert und nicht "davor" sprich nicht mehr direkt an der Kathode angeschlossen. Wäre toll, wenn mir jemand helfen könnte ;) !
Max schrieb: > Daher würde ich gern den Optokoppler PC817 verwenden. Das bringts nicht, denn so ein normaler Optokoppler ist sehr unlinear. Da passiert erstmal bis etwa 1,5V gar nichts und dann fängt die interne LED sehr schnell an zu leuchten. Optokoppler für Analogsignale sind recht teuer und benötigen auch auf der Geberseite zumindest eine Stromversorgung, die du dann auch wieder galvanisch trennen müsstest. Überlege nochmal, ob du auf die galv. Trennung verzichten kannst.
Max schrieb: > Hallo zusammen, > > ich möchte gern eine Spannung 0-10V (von einer Lichtsteuerung) über > einen analogen Portpin eines ATmega328 einlesen (bzw. das entsprechende > Spannungsverhältnis, da der 328 ja mit 5V läuft). > > Ich weiss, dass ich das mit einem Spannungsteiler am einfachsten > realisieren kann, aber würde auch gern eine galvanische Trennung haben. > > Daher würde ich gern den Optokoppler PC817 verwenden. Die Grundschaltung > wäre sicherlich die 3. (ganz rechts) hier aufgezeigte Möglichkeit mit > dem Pullup an der Kathode : Die normalen Optokoppler können nur ein-aus richtig gut. "Analoge" Optokoppler sind selten und teuer. Also: Externen ADC mit SPI-Interface verwenden: http://www.reichelt.de/ICs-MCP-3-5-/MCP-3201-CI-SN/3/index.html?ACTION=3&GROUPID=5472&ARTICLE=90075&SEARCH=mcp3&OFFSET=500&WKID=0& SPI-Interface galvanisch trennen (das ist einfach, weil es digital ist) http://www.reichelt.de/ICs-ADC-ADXRS-/ADUM-1401-ARW/3/index.html?ACTION=3&GROUPID=5458&ARTICLE=107981&SEARCH=adum1401&OFFSET=500&WKID=0& DC-DC-Wandler verwenden, um den ADC und die ADC-Seite des Isolators zu versorgen, dann funktioniert der ADC nämlich auch, wenn keine Spannung anliegt http://www.reichelt.de/Wandler-Module-DC-DC/TMA-0505S/3/index.html?ACTION=3&GROUPID=4956&ARTICLE=120443&OFFSET=500&WKID=0&
Ich werfe da mal den IL300 in den Raum... Der ist zwar nicht ganz unkompliziert, kann aber mit entsprechender Beschaltung die Aufgabe erfüllen. Die Schaltung muss leider dem gerade egatterten Typ (-G,-H,... siehe Datenblatt) mit den Verstärkunsfaktoren in angepasst werden.
Ich hatte neulich die Gelegenheit, einen kurzen Blick auf eine "professionelle" (China-?)Platine zu werfen, die ein 0-10V Eingangssteuersignal in PWM wandelt (um MOSFETs zu treiben). Da war tatsächlich ein PC817 verbaut, der von einem ADC gemessen wurde und dieser dann wieder mit einem PWM-IC verbunden war. Viel mehr außer ein paar Widerständen war da sonst nicht drauf. Grundsätzlich scheint das also schon zu funktionieren. Da man damit aber nur Licht dimmt, fällt das schlechte Analogsignal vielleicht nicht so auf (das menschliche Auge hat ja keine lineare Wahrnehmung, was Helligkeit anbelangt) ? Matthias Sch. schrieb: > Das bringts nicht, denn so ein normaler Optokoppler ist sehr unlinear. > Da passiert erstmal bis etwa 1,5V gar nichts und dann fängt die interne > LED sehr schnell an zu leuchten. Na gut, aber vielleicht könnte man dieses unlineare ja eventuell softwareseitig lösen ? Also z.B. mit einer Umrechnungstabelle ? Die 10 Bit Genauigkeit des ATmega328 benötige ich sowieso nicht; 7 oder 8 Bit würden auch ausreichen. > Optokoppler für Analogsignale sind recht teuer und benötigen auch auf > der Geberseite zumindest eine Stromversorgung, die du dann auch wieder > galvanisch trennen müsstest. Da hatte ich vor Start dieses Threads folgende Meinung gefunden: Beitrag "Re: Galvanisch getrennte Spannungsmessung" > Überlege nochmal, ob du auf die galv. Trennung verzichten kannst. Die Trennung möchte ich eigentlich schon, da das Steuersignal von "extern" kommt und ich keinen Einfluß darauf habe. Bei Überspannung - z.B. wenn irgendso ein Fachmann meint, dass 12V anstatt max. 10V auch noch gut sind - würde ein Spannungsteiler schon zu viel Spannung bringen und der ATmega geht kaputt. Außerdem finde ich das mit einem Optokoppler auch deshalb elegant, weil man damit gleich noch einen einfachen Verpolungsschutz hat (glaube ich zumindest; ist ja nur eine LED im Eingang?). @Frank K. und Frank M. : vielen Dank für die Tipps; das wären schonmal zwei Alternativlösungen, falls die "keep it simple" - Idee mit dem PC817 doch nicht brauchbar ist ;)
Max schrieb: > Na gut, aber vielleicht könnte man dieses unlineare ja eventuell > softwareseitig lösen ? Also z.B. mit einer Umrechnungstabelle ? Die 10 > Bit Genauigkeit des ATmega328 benötige ich sowieso nicht; 7 oder 8 Bit > würden auch ausreichen. Murks, jede Temperaturaenderung macht dir deine Messung kaputt. Entweder Analogen Optokoppler nehmen (IL300) oder zuerst digitalisieren mittels ADC und diese Werte digital ueber Optokoppler auf die andere Seite uebertragen. Man kann auch mittels Komparator und D-Flipflop einen Deltasigma modulator aufbauen und dessen Ausgang (Digital) mittel OK galvanisch trennen. Auf der anderen Seite dann RC Glied nehmen und wieder ein Analoges Signal erzeugen, so haben es wahrscheinlich die Chinesen gemacht.
Max schrieb: > Na gut, aber vielleicht könnte man dieses unlineare ja eventuell > softwareseitig lösen ? Also z.B. mit einer Umrechnungstabelle ? Was willst Du da umrechnen? Die interne LED des Optokopplers fängt bei ca. 1,5V an zu leuchten, und dabei bleibt es, weil der Rest der Spannung am notwendigen Vorwiderstand abfällt. Wenn Du den wegläßt, brennt die LED durch. Du kriegst also garnicht mit, wenn die Spannung auf der Eingangsseite auf 10V ansteigt.
Max schrieb: > Die Grundschaltung > wäre sicherlich die 3. (ganz rechts) hier aufgezeigte Möglichkeit Sicherlich nicht, denn das ist ein digitaler Optokoppler. Du kannst 0.1V auf Eingangsseite nicht zum Ausgang signalisieren, du brauchst in jedem Fall eine Hilfsspannung auf Eingangsseite die (weil es ja galvanisch getrennt sein soll) von der Versorgung des ATmega328 galvanisch getrennt sein muss. Auf welche Art du zu einer Spannungsversorgung der Sendeseite des Optokopplers kommen kannst, wissen wir nicht, ob deine 0-10V Quelle eine Betriebsspannung zur Verfügung stellt, es eine Batterie sein darf, ein extra Trafo und Netzteil her muss oder du per Solarzelle oder DC/DC-Wandler eine Spannung überträgst. Es müssen nur wenige Milliampere sein, so 20mA reichen locker aus, bei 3 bis 24V, je nach dem was verfügbar ist. Erst wenn du diese Hilfsspannung hast, kann man weiterreden. Methoden ohne Hilfsspannung (Fluxgate-Förster oder so) sind für dich unerreichbar und viel teurer und ungenauer.
Sensor schrieb: > > Was willst Du da umrechnen? Die interne LED des Optokopplers fängt bei > ca. 1,5V an zu leuchten, und dabei bleibt es, weil der Rest der Spannung > am notwendigen Vorwiderstand abfällt. Wenn Du den wegläßt, brennt die > LED durch. Du kriegst also garnicht mit, wenn die Spannung auf der > Eingangsseite auf 10V ansteigt. > Der Vorwiderstand muss natürlich mindestens so groß sein, dass die LED die max. Eingangsspannung auch aushält; versteht sich ja von selbst. Aber die LED und das Photoelement im Optokoppler sind doch nicht "digital". Die LED kann doch verschieden hell leuchten (wenn ich anstatt 10V nur 5V anlege, muss sie ja dunkler werden, da der Vorwiderstandswert fix ist und in dem Fall für 5V eigentlich viel zu groß) - sonst wäre doch überhaupt keine analoge Übertragung möglich. Wie gut oder schlecht das bezüglich der Genauigkeit/Linearität klappt, ist natürlich mal noch eine andere Frage ... Helmut Lenzen schrieb: > Entweder Analogen Optokoppler nehmen (IL300) oder zuerst digitalisieren > mittels ADC und diese Werte digital ueber Optokoppler auf die andere > Seite uebertragen. Man kann auch mittels Komparator und D-Flipflop einen > Deltasigma modulator aufbauen und dessen Ausgang (Digital) mittel OK > galvanisch trennen. Auf der anderen Seite dann RC Glied nehmen und > wieder ein Analoges Signal erzeugen, so haben es wahrscheinlich die > Chinesen gemacht. Auf der einen Seite war tatsächlich nur ein Vorwiderstand und die beiden OK-Eingänge des PC817. Der Rest war auf der "anderen" Seite (hatte ein gemeinsames GND). Der Optokoppler-Ausgang war direkt über Widerstände (wahrscheinlich Pullup und Vorwiderstand) mit einem TSSOP-Bauteil verbunden. Da war das Logo von ST drauf und eine Bezeichnung "DC121" (oder so ähnlich). Das habe ich zwar im Internet nicht wieder gefunden, aber es gibt von TI einen "ADC121" - vielleicht ist das was baugleiches. Und dieses Teil war dann nur noch mit einem 8 Pin-IC verbunden und dieser mit einem MOSFET. Mich hatte eben die Einfachheit begeistert, aber wahrscheinlich taugt diese Konstruktion wohl doch nicht viel. Wäre ja auch zu schön gewesen ;) MaWin schrieb: > Du kannst 0.1V auf Eingangsseite nicht zum Ausgang signalisieren Das bei angelegten 0,1V nichts übertragen wird, weil die OK-LED da nicht leuchtet, sehe ich ein. Das ganze wurde zwar als "0-10V" bezeichnet, aber wahrscheinlich wäre "1,5V-10V" o.ä. treffender. Tatsächlich gibt es auch verschiedentlich die Bezeichnung "1-10V". Die ausgegebene PWM ist ja auch invertiert, d.h. bei 0V sind es 100% Duty Cycle und bei 10V (oder vielleicht auch nur 9V) 0%. Das die PWM überhaupt erst ab 1,5/2V kleiner als 100% wird, fällt wahrscheinlich nicht auf. > Auf welche Art du zu einer Spannungsversorgung der Sendeseite des > Optokopplers kommen kannst, wissen wir nicht Das ist ein Steuersignal, mit dem zumindest früher irgendwann mal dimmbare Lampen, Leuchtstoffröhren usw. geregelt wurden. Das kommt wohl aus der Haus-/Bühnentechnik bevor das auf digital (z.B. DMX, KNX, DALI o.ä.) umgestellt wurde, aber so genau weiss ich es jetzt auch nicht. Jedenfalls gibts da keine zusätzliche Spannungsversorgung der OK-Sendeseite, sondern die paar mA für die LED werden direkt aus der Signalleitung entnommen.
Max schrieb: > Das bei angelegten 0,1V nichts übertragen wird, weil die OK-LED da nicht > leuchtet, sehe ich ein. > Das ganze wurde zwar als "0-10V" bezeichnet, aber wahrscheinlich wäre > "1,5V-10V" o.ä. treffender. Tatsächlich gibt es auch verschiedentlich > die Bezeichnung "1-10V". Sicher, aber du schriebst 0-10V. > Die ausgegebene PWM ist ja auch invertiert, und jetzt schreibst du PWM. Ja was isses denn nu ? PWM wäre digital und kann als ein/aus Signal problemlos über den Optokoppler übertragen werden und erst auf Empfängerseite zu einem 0-5V Analogsignal verwandelt, oder auch direkt vom uC eingelesen werden.
MaWin schrieb: > Ja was isses denn nu ? > > PWM wäre digital und kann als ein/aus Signal problemlos über den > Optokoppler übertragen werden und erst auf Empfängerseite zu einem 0-5V > Analogsignal verwandelt, oder auch direkt vom uC eingelesen werden. ... das habe ich eigentlich in meinen Beiträgen weiter oben schon gesagt: ich habe neulich einen Blick auf eine Platine werfen können, welche diese 0-10V Eingangssignalspannung mittels PC817 und nachgeschalteten ADC-IC in eine PWM-Ausgabe wandelt (z.B. 5V Eingangsspannung => 50% PWM Duty Cycle). Also vergleichbar mit dem, was ich machen möchte - nur das der ADC bei mir eben schon direkt im ATmega ist. Grundsätzlich scheint es also möglich, aber ich weiss nicht, in welcher Genauigkeit die Messung erfolgt und welche Widerstandswerte ich mit welcher Beschaltung (siehe obersten Beitrag) ich für ein optimales Messergebnis verwenden sollte.
Max schrieb: > ich habe neulich einen Blick auf eine Platine werfen können, > welche diese 0-10V Eingangssignalspannung mittels PC817 und > nachgeschalteten ADC-IC in eine PWM-Ausgabe wandelt (z.B. 5V > Eingangsspannung => 50% PWM Duty Cycle). Mach mal einen Schaltplan und lass die Prosa weg.
Helmut Lenzen schrieb: > Mach mal einen Schaltplan und lass die Prosa weg. Es war genau wie diese Grundschaltung (ganz rechts, der PullUp könnte aber auch ein Pulldown gewesen sein) : http://www.mikrocontroller.net/articles/Datei:Optokoppler_grundschaltungen.png D.h. das 0-10V Signal war mit Vorwiderstand direkt am OK angeschlossen sprich Plus und Minus an U_EIN und GNDA. Der ganze andere Rest war galvanisch getrennt auf der anderen Schaltungseite. U_AUS ging über mind. einen Widerstand an einen ADC (eventuell "ADC121"). Auf dieser Seite gab es natürlich auch eine eigene Betriebsspannung, es war ein 78irgendwas verbaut - das GND war aber jedenfalls nicht mit GNDA verbunden, was durch die Massefüllung gut erkennbar war. Der Rest der Schaltung ist für mich nicht weiter von Interesse; vom ADC ging es (wahrscheinlich per SPI) zu einem achtbeinigen PWM-IC und von dort ans MOSFET-Gate. Mehr war nicht und mich interessiert auch nur der Teil vom OK zum ADC und nicht, was dann mit dem digitalen Singnal passiert.
Max schrieb: > ich habe neulich einen Blick auf eine Platine werfen können, > welche diese 0-10V Eingangssignalspannung mittels PC817 und > nachgeschalteten ADC-IC in eine PWM-Ausgabe wandelt (z.B. 5V > Eingangsspannung => 50% PWM Duty Cycle). Also hast du kein PWM, und wenn die Schaltung vor dem Optokoppler wäre, müsstest du eine Versorgungsspannung vor dem Optokoppler bereitstellen. Du kommst also so oder so nicht um eine Versorgungsspannung vor dem Optokoppler drumrum. Einzige Lösung wäre eine Schaltung die mit minimal 1.5V und wohl wenigen Milliamperes auskommt und die LED im Optokoppler blitzen lässt, also ein U/F Konverter Spannung in Frequenz. Dann kann man gleich in PWM wandeln.
Wenn man eine LED in den Gegenkopplungskreis eines Opamps baut, kann man sie ein wenig linearisieren, das hat Elektor früher mal im Formant Synthi gemacht, um mit LED Signale wie Sinus und Dreieck zu visualisieren. Aber das bedeutet noch nicht, das der Phototransistor auf der anderen Seite des OK auch linear arbeitet. Ausserdem bräuchtest du dann doch wieder auf der Eingangsseite eine Versorgung für den OpAmp. 'DC121' ? Hmm, Evtl. haben die Chins da einen simplen 74121 Monoflop benutzt und statt des zeitbestimmenden Widerstandes den OK genommen? Da kommt dann schon so etwas wie PWM raus, lineare Beziehungen kann man da aber nicht erwarten.
Matthias Sch. schrieb: > 'DC121' ? Hmm, Evtl. haben die Chins da einen simplen 74121 Monoflop > benutzt und statt des zeitbestimmenden Widerstandes den OK genommen? Da > kommt dann schon so etwas wie PWM raus, lineare Beziehungen kann man da > aber nicht erwarten. Wahrscheinlich habe ich Depp mir die falsche Nummer gemerkt, denn einen "DC121" gibts von ST nicht. Rechts oben stand auf dem Bauteil noch eine andere dreistellige Zahl, die ich als Chargennummer o.ä. abgetan hatte :( Nach etwas Recherche könnte es von ST auch der LM339 ("Low power quad voltage comparator") gewesen sein, wobei aber "LM" definitiv nicht drauf stand. Genau wie auf dem Bild, was ich über die Google-Bildersuche gefunden habe : http://www.icver.com/images/PIC/L/LM/LM339%28ST%29.JPG Könnte also sein, dass es ein LM339 war und dieser soweit ich das verstehe die U_AUS vom OK mit seiner eigenen Betriebsspannung vergleicht und das Ergebnis dann digital weiter meldet. Da die Messungenauigkeit aber wohl schon direkt im OK entsteht, kommt es eigentlich auch nicht mehr darauf an, was man da noch "hinterher" macht. Wahrscheinlich werde ich also wohl doch auf eine der vorgeschlagenen Lösungen (IL300 oder externen ADC mit SPI-Interface + OKs) setzen müssen.
Max schrieb: > Da war > tatsächlich ein PC817 verbaut, der von einem ADC gemessen wurde und > dieser dann wieder mit einem PWM-IC verbunden war. Dann wird aber die Reihenfolge sein: ADC -> PWM-IC -> PC817 -> MOSFET D.h. die Trennung erfolgt als digitales Signal. Ich hab sowas ähnliches mal gemacht: 0..5V -> ATtiny13 -> PC357 -> ATmega8 Die Datenübertragung erfolgte ähnlich einer IR-FB, d.h. lange Pulse = 1-Bit, kurze Pulse = 0-Bit.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.