{"id":57,"date":"2017-04-17T15:40:37","date_gmt":"2017-04-17T15:40:37","guid":{"rendered":"http:\/\/iludis.de\/?p=57"},"modified":"2018-12-24T16:22:27","modified_gmt":"2018-12-24T16:22:27","slug":"fotodiode-am-transimpedanzwandler","status":"publish","type":"page","link":"https:\/\/iludis.de\/?page_id=57","title":{"rendered":"Fotodiode am Transimpedanzverst\u00e4rker"},"content":{"rendered":"<p>Linienerkennung muss ein Roboter st\u00e4ndig durchf\u00fchren. Oftmals ist es problematisch, dass die n\u00f6tigen Lichtmessungen nicht genau genug und nicht schnell genug ablaufen.\u00a0Der Roboter schie\u00dft trotz <a href=\"http:\/\/fluuux.de\/2013\/04\/interrupts-mit-arduino-benutzen\/\">Interrupt-Programmierung<\/a> \u00fcber das Ziel hinaus.<\/p>\n<p>Die <a href=\"http:\/\/www.playembedded.org\/blog\/en\/2016\/01\/08\/detecting-obstacle-with-ir-sensor-and-arduino\/\">fertig gekauften Bauteile zur Helligkeitsmessung <\/a>funktionieren meist\u00a0\u00fcber Fototransistoren oder langsame <a href=\"http:\/\/cactus.io\/hookups\/sensors\/light\/ldr\/hookup-arduino-to-ldr-sensor\">LDRs<\/a>, deren Messwerte am Spannungsteiler mit <a href=\"http:\/\/www.learningaboutelectronics.com\/Articles\/LM393-comparator-circuit.php\">LM393-Comparatoren<\/a>\u00a0in &#8220;0&#8221; oder &#8220;1&#8221;, also in Bin\u00e4rwerte gewandelt\u00a0werden.<\/p>\n<p>Besser w\u00e4re hier\u00a0eine schnelle Helligkeitsmessung, m\u00f6glichst mit linearem Messwertverlauf. Daher kommen Fotodioden und deren Fotostrom-Aufbereitung mit einem <a href=\"https:\/\/de.wikipedia.org\/wiki\/Transimpedanzverst%C3%A4rker\">Transimpedanzverst\u00e4rker<\/a> in Frage.<\/p>\n<h5>Prinzip des Transimpedanzverst\u00e4rkers<\/h5>\n<p>Ein Transimpedanzverst\u00e4rker wandelt den Fotostrom der Fotodiode in eine proportionale Ausgangsspannung um. Die Wandlung von Strom zu Spannung erfolgt an einem sogenannten Operationsverst\u00e4rker. Die Verst\u00e4rkung der Spannung wird mit der Gr\u00f6\u00dfe eines Widerstands eingestellt:\u00a0Je gr\u00f6\u00dfer der Widerstand, desto gr\u00f6\u00dfer die Ausgangsspannung. Der Kondensator unterdr\u00fcckt eventuelles Rauschen.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/Signalweg.png\"><em>Abb. 1: Schema des Testaufbaus<\/em><\/a><a href=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/Signalweg.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-64\" src=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/Signalweg.png\" alt=\"\" width=\"600\" height=\"257\" srcset=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/Signalweg.png 905w, https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/Signalweg-300x129.png 300w, https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/Signalweg-768x329.png 768w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<h6 style=\"text-align: left; padding-left: 30px;\"><span style=\"color: #333333;\">Erkl\u00e4rung zur Fotodiode:<\/span><\/h6>\n<p style=\"text-align: left; padding-left: 30px;\"><span style=\"color: #333333;\">Eine <span style=\"color: #0000ff;\"><a style=\"color: #0000ff;\" href=\"https:\/\/de.wikipedia.org\/wiki\/Photodiode\">Fotodiode <\/a><\/span>ist eine kleine Solarzelle; die verwendete <span style=\"color: #0000ff;\"><a style=\"color: #0000ff;\" href=\"http:\/\/www.vishay.com\/docs\/81521\/bpw34.pdf\">BPW34<\/a><\/span>\u00a0besitzt eine Fl\u00e4che von 7,5 Quadratmillimetern und liefert damit\u00a0nur einen sehr schwachen Strom von maximal 50\u03bcA bei lediglich 0,2-0,3 Volt Spannung. Damit kann der Arduino nichts anfangen!<\/span><\/p>\n<h6 style=\"text-align: left; padding-left: 30px;\"><span style=\"color: #333333;\">Kurze Erkl\u00e4rung zum Operationsverst\u00e4rker:<\/span><\/h6>\n<p style=\"padding-left: 30px;\">Der Strom der Fotodiode wird durch einen Operationsverst\u00e4rker in eine Spannung gewandelt. Ein Operationsverst\u00e4rker ist ein integriertes elektronisches Bauteil, welches grunds\u00e4tzlich so aufgebaut ist:<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/OpampUebersicht.png\"><em>Abb. 2: Darstellungen des Operationsverst\u00e4rkers<\/em><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-78\" src=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/OpampUebersicht-300x117.png\" alt=\"\" width=\"600\" height=\"235\" srcset=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/OpampUebersicht-300x117.png 300w, https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/OpampUebersicht-768x300.png 768w, https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/OpampUebersicht.png 900w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<ol>\n<li style=\"padding-left: 30px;\"><span style=\"color: #333333;\">Zwei Anschl\u00fcsse zur Spannungsversorgung: : Ein &#8220;VDD&#8221; f\u00fcr die positive Spannungsversorgung\u00a0und einen an Masse (GND, &#8220;Ground&#8221;).<br \/>\n<\/span><\/li>\n<li style=\"padding-left: 30px;\"><span style=\"color: #333333;\">Einen Ausgang: An &#8220;Out&#8221; erh\u00e4lt man das vom Operationsverst\u00e4rker aufgearbeitete Spannungs-Signal.<br \/>\n<\/span><\/li>\n<li style=\"padding-left: 30px;\">Zwei Eing\u00e4nge: Einen nicht invertierenden Eingang &#8220;IN+&#8221; und einen invertierenden Eingang &#8220;IN-&#8220;. Prinzipiell wird der Spannungsunterschied zwischen den beiden Eing\u00e4ngen gemessen und sehr hoch verst\u00e4rkt: Typischerweise etwa um den Faktor 100.000. Da man solche Verst\u00e4rkungen nicht ben\u00f6tigt, stellt man mittels Widerst\u00e4nden die gew\u00fcnschte Verst\u00e4rkung ein.Hier eine sehr gute Online-Simulation eines Operationsverst\u00e4rkers:<br \/>\n<span style=\"color: #0000ff;\"><a style=\"color: #0000ff;\" href=\"http:\/\/www.falstad.com\/circuit\/e-amp-invert.html\">http:\/\/www.falstad.com\/circuit\/e-amp-invert.html<\/a><\/span><br \/>\nEs handelt sich hierbei um die Grundschaltung dieses Bauteils.<\/li>\n<\/ol>\n<h6 style=\"padding-left: 30px;\"><span style=\"color: #333333;\">Erkl\u00e4rung zum weiteren Signalweg:<\/span><\/h6>\n<p style=\"text-align: left; padding-left: 30px;\"><span style=\"color: #333333;\">Die Ausgangsspannung des Operationsverst\u00e4rkers wird vom <span style=\"color: #0000ff;\"><a style=\"color: #0000ff;\" href=\"http:\/\/www.arduino-tutorial.de\/analog-input\/\">Analog-Digital-Wandler des Arduinos<\/a><\/span> gelesen und in einen Wertebereich zwischen 0 (dunkel: kein Fotostrom) und 1024 (hell: voller Fotostrom) gewandelt. In dieser Schaltung wird der Eingang der Analoge Eingang &#8220;A0&#8221; des Arduinos verwendet.<\/span><\/p>\n<h5>Ziel der Schaltung<\/h5>\n<p>Wichtig ist, dass der Aufbau einfach und schnell und mit g\u00fcnstigen Bauteilen umgesetzt werden kann.<\/p>\n<p style=\"text-align: left;\">Die folgende Schaltung\u00a0wurde in <a href=\"http:\/\/www.mouser.de\/multisimblue\/\">Multisim Blue<\/a>\u00a0simuliert, dann am Arduino aufgebaut und getestet:<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/FotoBreadboard.jpg\"><em>Abb. 3: Foto des Testaufbaus<\/em><\/a><br \/>\n<a href=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/FotoBreadboard.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-52 size-medium\" src=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/FotoBreadboard-225x300.jpg\" alt=\"Foto des Testaufbaus\" width=\"225\" height=\"300\" srcset=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/FotoBreadboard-225x300.jpg 225w, https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/FotoBreadboard.jpg 600w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/a><a href=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/PhotodiodenSchaltung_Steckplatine.png\"><em>Abb. 4: Fritzingzeichnung\u00a0des Testaufbaus<\/em><\/a><br \/>\n<a href=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/PhotodiodenSchaltung_Steckplatine.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-54 size-medium\" src=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/PhotodiodenSchaltung_Steckplatine-225x300.png\" alt=\"Fritzing-Zeichnung\" width=\"225\" height=\"300\" srcset=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/PhotodiodenSchaltung_Steckplatine-225x300.png 225w, https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/PhotodiodenSchaltung_Steckplatine.png 600w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/a><\/p>\n<h5><strong>Als Bauteile werden ben\u00f6tigt:<\/strong><\/h5>\n<ol>\n<li><a href=\"http:\/\/www.ti.com\/lit\/ds\/symlink\/tlc271b.pdf\">TLC271ACP <\/a>Operationsverst\u00e4rker (SingleSupply, recht\u00a0g\u00fcnstig)<\/li>\n<li><a href=\"http:\/\/www.vishay.com\/docs\/81521\/bpw34.pdf\">BPW 34<\/a> Fotodiode (liefert 50 \u03bcAmpere Kurzschlussstrom, g\u00fcnstig)<\/li>\n<li>Metallwiderstand 100 k\u03a9<\/li>\n<li>Keramik-Kondensator 10 pF<\/li>\n<\/ol>\n<p>Dieser Operationsverst\u00e4rker kann direkt am Arduino mit 5V betrieben werden; da er aber nicht &#8220;Rail-to-Rail-Out&#8221;-f\u00e4hig ist, reicht die Ausgangsspannung nur bis ca. 3.8Volt. Diese 3.8 Volt erzeugen bei der AD-Wandlung immerhin einen Wertebereich von 0 bis ca. 850 bei der 10Bit-Aufl\u00f6sung des Arduino-ADCs. Ein passender Rail-to-Rail-OpAmp w\u00e4re z.B. der LMC6482 (wird getestet; die Simulation lief vielversprechend)<\/p>\n<h6 style=\"padding-left: 30px;\"><span style=\"color: #333333;\">Erl\u00e4uterung zu Rail-to-Rail-Out: <\/span><\/h6>\n<p style=\"padding-left: 30px;\"><span style=\"color: #333333;\">Ein Operationsverst\u00e4rker ben\u00f6tigt eine Spannungsversorgung, \u00e4hnlich wie ein normales elektronisches Ger\u00e4t. \u00dcblicherweise reicht aber die Ausgangsspannung -also die Spannung, die der OpAmp am Ausgang maximal liefern kann &#8211; nicht an die Spannungsversorgung heran. Eine besondere Eigenschaft ist es daher, wenn ein OpAmp das schafft, dann wird diese Konstruktionsform als &#8220;Rail2Rail-Out&#8221; bezeichnet. Der TLC271 kommt ca. 1.2 Volt bis an die Versorgungsspannung heran, schafft also bei 5Volt Spannungsversorgung lediglich 3.8 Volt maximal.<\/span><\/p>\n<h5><strong>Der Simulationsaufbau in Multisim Blue:<\/strong><\/h5>\n<p style=\"text-align: center;\"><a href=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/MultisimFotoDiodeOrg.png\"><em>Abb. 5: Aufbau in Multisim Blue<\/em><\/a><a href=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/MultisimFotoDiodeOrg.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-56\" src=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/MultisimFotoDiodeOrg-300x278.png\" alt=\"Multisim Opamp mit Fotodiode\" width=\"222\" height=\"205\" srcset=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/MultisimFotoDiodeOrg-300x278.png 300w, https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/MultisimFotoDiodeOrg.png 443w\" sizes=\"auto, (max-width: 222px) 100vw, 222px\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/MultisimFotoDiode.png\"><em>Abb. 6:\u00a0Ersatzschaltung in Multisim Blue<\/em><\/a><a href=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/MultisimFotoDiode.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-55\" src=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/MultisimFotoDiode-300x197.png\" alt=\"Multisim Ersatzschaltung\" width=\"312\" height=\"205\" srcset=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/MultisimFotoDiode-300x197.png 300w, https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/MultisimFotoDiode.png 624w\" sizes=\"auto, (max-width: 312px) 100vw, 312px\" \/><\/a><\/p>\n<p style=\"text-align: left;\">In der Ersatzschaltung wird die Fotodiode\u00a0als Dreiecksstromquelle angen\u00e4hert; das angeschlossene Oszilloskop zeigt den simulierten Spannungsverlauf.<\/p>\n<h6 style=\"text-align: left; padding-left: 30px;\"><span style=\"color: #333333;\">Erl\u00e4uterung der Simulation<\/span><\/h6>\n<p style=\"text-align: left; padding-left: 30px;\"><span style=\"color: #333333;\">Die Schaltung simuliert den Strom der Fotodiode, indem eine st\u00e4ndig wechselnde Stromst\u00e4rke (hier mit 1kHz, das sind 1000 Hertz, also 1000 Wechsel\u00a0pro Sekunde) auf die Schaltung wirkt. Die Simulation der Wechselspannung ist n\u00f6tig, weil Operationsverst\u00e4rker ihre Eigenschaften mit steigender Frequenz \u00e4ndern: Meistens wird die Verst\u00e4rkung schw\u00e4cher und es kommen Signalverzerrungen hinzu.\u00a0<\/span><\/p>\n<h5 style=\"text-align: left;\"><strong>Programmierung am Arduino<\/strong><\/h5>\n<p style=\"text-align: left;\">Der Arduino-Code f\u00fcr den Test ist sehr einfach: Es wird eine Serielle Verbindung zum Arduino aufgebaut, die \u00fcber USB-Kabel ausgelesen wird. Etwa alle 25 Millisekunden wird dabei der aktuelle Helligkeitswert am Analogport &#8220;A0&#8221; ausgelesen und unmittelbar an PC \u00fcbermittelt:<\/p>\n<pre class=\"brush: c; gutter: true\">int test; \r\nvoid setup() {    \r\n  pinMode(A0, INPUT);    \r\n  Serial.begin(9600); \r\n} \r\n\r\nvoid loop() {    \r\n  test = analogRead(A0);    \r\n  Serial.println(test);    \r\n  delay(25); \r\n}<\/pre>\n<h5 style=\"text-align: left;\"><strong>Programmierung in Processing<\/strong><\/h5>\n<p>Um die Daten zu visualisieren, gen\u00fcgt eigentlich der Serielle Plotter der Arduino-Programmierumgebung. Allerdings ist eine portable, Arduino-unabh\u00e4ngige L\u00f6sung praktischer, wie z.B. mittels\u00a0<a href=\"https:\/\/processing.org\/\">Processing<\/a>. Hier der Screenshot des Processing-Applets:<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/ScreenshotProcessing.png\"><em>Abb. 7:\u00a0Screenshot des Processing-Applets<\/em><\/a><a href=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/ScreenshotProcessing.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-53 size-medium\" src=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/ScreenshotProcessing-300x293.png\" alt=\"Screenshot Experimentalapplet\" width=\"300\" height=\"293\" srcset=\"https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/ScreenshotProcessing-300x293.png 300w, https:\/\/iludis.de\/wp-content\/uploads\/2017\/04\/ScreenshotProcessing.png 642w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Der Vollst\u00e4ndigkeit halber noch der Quelltext des Processing-Applets:<\/p>\n<pre class=\"brush: java; gutter: true\">import processing.serial.*;\r\nSerial arduinoKommunikation;\r\nString messwert;\r\nint x, xalt;\r\nint y, yalt;\r\n\r\nvoid setup()\r\n{\r\n  size(640, 600);\r\n  background(102);\r\n  String portName = Serial.list()[0];\r\n  arduinoKommunikation = new Serial(this, portName, 9600);\r\n  x = y = xalt = yalt = 0;\r\n}\r\nvoid draw()\r\n{\r\n  if ( arduinoKommunikation.available() &gt; 0)\r\n  {\r\n    messwert = arduinoKommunikation.readStringUntil(&#039;\\n&#039;);\r\n    if (messwert != null) {\r\n      if (x == 0) {\r\n        stroke(0);\r\n        fill(102);\r\n        rect(0, 0, 640, 600);\r\n        line(0, 560, 640, 560);\r\n        line(0, 48, 640, 48);\r\n        stroke(0);\r\n        fill(0);\r\n        textSize(12);\r\n        text(&quot;null-Linie&quot;, 570, 575);\r\n        text(&quot;1024-Linie&quot;, 570, 44);\r\n        xalt = x;\r\n        yalt = y;\r\n      }\r\n      messwert = trim(messwert);\r\n      y = 560 - Integer.parseInt(messwert) \/ 2;\r\n      \/\/println(messwert);\r\n      stroke(102);\r\n      fill(102);\r\n      rect(xalt + 5, yalt - 25, 45, 25);\r\n      stroke(51);\r\n      for (int i = 1; i &lt; 10; i++) {\r\n\r\n        line(0, 48 + i * 51, 640, 48 + i * 51);\r\n      }\r\n      fill(102);\r\n      stroke(255);\r\n      rect(x + 5, y - 25, 45, 25);\r\n      stroke(255);\r\n      fill(255);\r\n      line(x, y, xalt, yalt);\r\n      textSize(18);\r\n      if (y &lt; 100) {\r\n        text(messwert, x + 10, y - 5);\r\n      } else {\r\n        text(&quot; &quot; + messwert, x + 10, y - 5);\r\n      }\r\n      xalt = x;\r\n      yalt = y;\r\n      x = x + 1;\r\n      x = x % 640;\r\n    }\r\n  }\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Linienerkennung muss ein Roboter st\u00e4ndig durchf\u00fchren. Oftmals ist es problematisch, dass die n\u00f6tigen Lichtmessungen nicht genau genug und nicht schnell genug ablaufen.\u00a0Der Roboter schie\u00dft trotz Interrupt-Programmierung \u00fcber das Ziel hinaus. Die fertig gekauften Bauteile zur Helligkeitsmessung funktionieren meist\u00a0\u00fcber Fototransistoren oder langsame LDRs, deren Messwerte am Spannungsteiler mit LM393-Comparatoren\u00a0in &#8220;0&#8221; oder &#8220;1&#8221;, also in Bin\u00e4rwerte gewandelt\u00a0werden.&hellip; <\/p>\n<p class=\"toivo-read-more\"><a href=\"https:\/\/iludis.de\/?page_id=57\" class=\"more-link\">Read more <span class=\"screen-reader-text\">Fotodiode am Transimpedanzverst\u00e4rker<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":{"0":"post-57","1":"page","2":"type-page","3":"status-publish","5":"entry"},"_links":{"self":[{"href":"https:\/\/iludis.de\/index.php?rest_route=\/wp\/v2\/pages\/57","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iludis.de\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/iludis.de\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/iludis.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/iludis.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=57"}],"version-history":[{"count":0,"href":"https:\/\/iludis.de\/index.php?rest_route=\/wp\/v2\/pages\/57\/revisions"}],"wp:attachment":[{"href":"https:\/\/iludis.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=57"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}