Hallo!
Ich bin gerade am basteln eines Spektrometers mithilfe eines
Gitterspiegels und nem Linien CCD ILX554.
Das Gehäuse steht, der CCD ist schon verbaut, doch ich hab ein kleines
Problem mit der Belichtungszeit. Weiss jemand, ob die Clock-Frequency
direkt die Belichtungszeit bestimmt? Es wird laut Datenblatt pro
Clock-Periode ein neuer Pixel analog ausgegeben.
Der aktuelle Stand des Projekts ist der:
- Mikrocontroller (ATmega8) sendet das Ansteuerungsprotokoll
(Rechtecksignal mit Start-bits, etc.
-Am Oszi kann man das Spektrum sehen. Anbei mal ein paar
Beispiel-Spektren verschiedener Lichtquellen.
Ich möchte jetzt jeden Pixel per ADC einlesen, und dann direkt übers
UART verschicken, aum am PC das Spekrum auszugeben. Nur ist jetzt die
Kombi ADC/UART so langsam, dass ich nur murks bekomme- wahrscheinlich
ist dann einfach die Belichtungszeit zu hoch?
http://www.moritz-greif.de/hohe_freq_GRUENE_LED.JPGhttp://www.moritz-greif.de/low_freq_GRUENE_LED.jpghttp://www.moritz-greif.de/energiesparlampe.jpghttp://www.moritz-greif.de/weisse_led.JPGhttp://www.moritz-greif.de/Halogenlampe.JPG
Hier mal zwei Spektren einer grünen LED , das eine mit 100kHz, das
andere mit 500khz- beide signale sind vom CCD invertiert, man sieht,
dass das signal mit langsamer ansteuerfrequenz nochmal invertiert ist,
ich nehme mal an, dass das signal so aussehen muss, wie mit der hohen
Ansteuerngsfreqenz?
Nur wie bekomme ich jetzt 2048 Pixel mit ~1µs/Pixel digitalisiert und
verschickt oder gespeichert?
Viele Grüsse,
moritz
Bin zwar kein CCD Spezialist .. aber bei Array Sensoren wird über die
Clocks schon die Belichtungszeit bestimmt. Ich mach das bei einer
umgebauten Webcam für Astrofotografie so um hohe Belichtungszeiten zu
bekommen.
Könntest Du vielleicht deine Schaltung und ein paar Source Code happen
posten? Habe auch noch Zeilen und Array Sensoren rumliegen mit dennen
ich gerne mal was machen würde.
Hey, cool. Ich hab meine ToUCam auch auf Langzeitbelichtung umgebaut,
nach SteveChambers....Und sie hat sogar einen neuen CCD bekommen (den
098BL)- aber das nur so am rande.. (-->http://astro.junetz.de/)
Hier mal der Code zum fortlaufenden ansprechen der Pixel:
1
init:
2
sbi portb, 0
3
sbi portb, 1
4
5
rcall warte
6
rcall warte
7
rcall warte
8
9
cbi portb, 0
10
11
sbi portb, 2
12
rcall warte
13
cbi portb, 2
14
15
sbi portb, 0
16
17
rcall warte
18
19
//h834 =2100 pulse
20
clr lowb
21
ldi highb, 8
22
ldi hilfr, 34
23
24
pulse:
25
sbi portb, 1
26
rcall warte
27
cbi portb, 1
28
rcall warte
29
30
dec lowb
31
brne pulse
32
33
dec highb
34
brne pulse
35
36
ldi highb, 1
37
ldi lowb, 1
38
39
dec hilfr
40
brne pulse
41
42
rjmp init
Ich versuche jetzt, mit einem zweiten AVR der auf dauerschleife den ADC
abfragt, die Daten an den PC zu übermitteln. Die Belichtungszeit würde
ich dann in AVR 1 über die Clock-Freqenz regeln.. das ist übrigens
dieses
Dazu müßte dein Controller bei den Wandlungen 100kSps schaffen!
2-5 us für einlesen und ablegen ist realistischer.
Die Übertragung in 1 us bei einem 8-bit Messwert bedeut
ohne Overhead 8MBit/s. UART geht nicht, nur SPI mit Buffer
und Leererkennung (neuere AVR mit UART als SPI-Master bis 10MBit/s)
Möglich einen Controller als reihnen Datensmmler so zu verwenden, wenn
der PC mitspielt. RS232 könnte dabei zur steuerung dienen.
Gruß Hans
Ah, ok. Das klingt interessant.
Also 2-5µS sind auch noch in Ordnung denke ich.
Welcher AVR mit diesem 10Mbit/s - SPI, der genauso per ISP zubeschrieben
ist, wie der ATmega8, käme denn da in Frage?
Was ist eine Leererkeenung?
Gruß,
moritz
Hallo Moritz,
z.B. Mega164p
Die Leererkennung ist ein Flag zum Anzeigen das der Sendbuffer
leer ist während das letzte Byte noch gesendet wird.
Dann kann man nachladen und der Datenstrom wird nicht
unterbrochen. Dazu wird die RS232-Einheit des AVR verwendet, da diese
denn Sendebuffer + Erkennung bereit hat (nur Als SPI-Master möglich).
Die normale SPI hat dies nicht, da heist es immer warten bis gesendet,
dann die neuen Daten ins Ausgaberegister.
Da die o.a. AVR 2 RS232 haben kann man immer noch über den PC
Messungen starten/stoppen ober Einstellungen ändern.
Nur der PC muß als SPI-Slave mit den Daten arbeiten können.
Wenn es nur "Singel shoot"-Messungen sein sollen geht aber auch
das zwischenspeichern in einem SPI-Ram und dann "gemütlich" senden.
Gruß Hans
Belichtungszeit unf Clock haengen nicht zusammen. Man kann zB eine
Sekunde belichten und nachher mit 1MSample auslesen. Sofern die Pixel
durch die sichtbaren Pixel rausgeschoben werden, so muss die Schiebezeit
kurz gegen die Belichtungszeit sein. Es mag auch CCDs geben, die haben
Blindpixel zum Schieben und benoetigen dann einen Latchimpuls, um die
sichtbare Zeile in die Unsichtbare zu laden, welche man dann nahezu
beliebig langsam auslesen kann.
Ok, beides interessante Anmerkungen.
-> Single Shoot wäre auch ne Möglichkeit, Live wäre natürlich schöner.
Das SPI-Ram interssiert mich dabei sehr - das wäre eigentlich für so
eine Anwendung ideal, und wenn das SPI dann auch noch 10M/bit hat, umso
besser. Gibt es einen Geheimtipp unter den SPI-Rams?
--> Den 164p schau ich mir mal genauer an
@3396:
Heisst das, wenn ich z.B. die Clock Leitung 1 s HIGH lasse, und dann
erst mit den Clock-pulsen beginne und die Pixel auslese, hab ich dann
ca. 1 s Belichtungszeit?
Also ist die Belichtungszeit quasi immer das Stück "CLOCK_HIGH" zwischen
den
Pulsfolgen (beim ILX554B mind. 2090 Impulse für 2048 Pixel)
"Die Schiebezeit muss kurz gegenüber der Belichtungszeit sein"...
heisst das bei einer Auslesezeit von sagen wir mal 0,2 Sekunden die
Belichtungszeit dann vllt minimal 0,4 Sekunden sein darf, o.ä.?
> ...Schiebezeit muss kurz gegenüber der Belichtungszeit...
ist wesentlich bei CCDs wo die sichtbaren Pixel als Schieberegister
benutzt werden. Dann werden die Pixel waehrend dem schieben noch mit
falschem Licht nach-belichtet. Wieviel das ausmacht.... Welche Kontraste
zwischen belichteten und unbelichteten Pixeln sollten denn erreicht
werden ? zB 1000:1, das wuerde einen 10bit Wandler rechtfertigen. das
wuerde dann auch verlangen, dass die Auslesezeit etwa 1/1000 der
Belichtungszeit sein muss. ... das benoetigt vielleicht etwas
ueberlegen...
Was bedeutet bei erhoehten Anforderungen an den Kontrast wuerde ich
einen externen 16bit Wandler mit 500kSample oder schneller mit einem
Zaehler in ein externes RAM schaufeln lassen. Den internen AVR Wandler
halte ich fuer gaenzlich ungeeignet fuer solche Anwendungen.
ISt das mit den sichtbaren Pixeln als Register beim ILX554B der Fall?
Aus dem spärlichen Datenblatt werde ich nicht ganz schlau.
Wie kann man das denn rauskriegen, ob die sichtbaren Pixel als
Schieberegister benutzt werden?
Ich denke ich orientiere mich dann mal in Richtung Externes RAM,
externer ADC, und dann Datenbübetragung per µC.
Aber im Moment gehts mir erstmal ums Prinzip.
Ich denke der CCD hat eine Dunkelzeile zum Schieben. Der Phi(ROG)
schiebt alles rueber und der Phi(clk) schiebt die Zeile raus. Das
erlaubt ein schnelles auslesen gemaess Seite 5. Der dynamische Bereich
ist mit 333 nicht wirklich toll. Das sind so um die 8.5 bit.
Ok, danke für die Info!
Nach Seite 5 hab ich das auch gemacht bis jetz. Nur habe ich
festgestellt, dass unter einer frequenz von etwa 100 khz, gar keine
richtigen Signale mehr ankommen -
Wenn ich das oben richtig verstanden habe, wird der CCD also
wahrscheinlich dann beim Auslesevorgang, und bevor der ROG-Pin low
gezogen wird belichtet - und das ist dem dann zu viel- wenn ich die
Wartezeiten/Frequenz nicht schnell genug mache. Richtig?
(Ich habe eben übrigens den CCD mit einem AVR angesteuert, und mit einem
zweiten AVR, der in Dauerschleife ADC-Samples gemacht und per UART
gesendet hat, ausgelesen. Ergebnis: ungefähr jedes 20ste Pixel kommt am
PC an....
Das ist natürlich räudigst lahm.)
Zum Thema Belichtungszeit:
So wie ich das sehe, bestimmt die Zeit zwischen den ROG-Pulsen die
Belichtungszeit. Wenn du kürzer belichten willst, als es deine
Auslesegeschwindigkeit zulässt, würde ich raten, nach dem Auslesen einen
ROG-Puls anzulegen, dann die gewünschte Belichtungszeit abzuwarten,
einen zweiten ROG-Puls anlegen und dann erst erneut auszulesen.
Gruß,
Magnetus
Magnus Müller wrote:
> Wenn du kürzer belichten willst, als es deine> Auslesegeschwindigkeit zulässt, würde ich raten, nach dem Auslesen einen> ROG-Puls anzulegen, dann die gewünschte Belichtungszeit abzuwarten,> einen zweiten ROG-Puls anlegen und dann erst erneut auszulesen.
Davon würde ich abraten. Keine Ahnung ob das bei allen CCDs so ist, aber
bei denen die ich hatte, haben sich die Daten dann addiert. Es ist also
auf jedenfall ein Auslesen zwischen den Impulsen notwendig, um ein
brauchbares Ergebnis zu erhalten.
Anscheinend bleiben ansonsten die Ladungsträger im Schieberegister
erhalten und die neuen werden einfach hinzugefügt.
@Benedikt:
Gut, dann halt so:
- 1x ROG-Puls
- zweitausendundirgenwas Pixel mit maximalem Takt durchshiften
ohne zu wandeln
- Restliche (Belichtungs-) Zeit abwarten
- 1x ROG-Puls
- CCD-Zeile normal auslesen / wandeln
Gruß,
Magnetus
Das Klingt sehr gut und Logisch !
Werde ich gleich heute abend ausprobieren!
Die 2090 Pulse kann man ja ohne auslesen schnell durchrattern, damit
kann ich ja praktisch alle beliebeigen belichtungszeiten einstellen,
top.
Also:
Rog - während belichtung im gange: schnelle auslesepulse - Rog -
langsame gemütliche auslesung mit gemütlichem senden an den PC - Rog -
Dummyauslesepulse - ...usw.
optimal.
Mich wundert nur, dass im Datenblatt die Belichtungszeit kein einziges
Mal erwähnt ist, das ist doch essentiell für jede Anwendung von den
Dingern!
Witzig, genau diese Idee hatte ich vor einer Woche auch, also
Spektrometer mit einem linearen CCD.
Wo hast du denn den Gitterspiegel her? Ich will dafür eigentlich eine CD
benutzen, etwa so:
http://astro.u-strasbg.fr/~koppen/spectro/spectrod.html, die
erreichbaren Ergebnisse sehen gut aus:
http://astro.u-strasbg.fr/~koppen/spectro/mk2e.html (ganz unten).
Allerdings ist die Fokusierung nicht so ganz einfach. Dafür deckt so ein
CCD einen sehr weiten Bereich ab.
Digitalisieren wollte ich eigentlich mit einem AVR, macht ja nix wenn
ein Auslesevorgang Sekunden dauert, hauptsache die Belichtungszeit
stimmt. Notfalls halt doch mit 'nem CPLD, schnellem ADC (hab hier noch
einen 8-Bitter mit 60MSPS rumfliegen) und SRAM.
Bei Ebay gab's vor einer Weile vollintegrierte CCD Signalprozessoren mit
schnellem ADC, da hatte ich mir mal 5 für 1€ geholt. Vielleicht kann man
damit was machen, wenn du einen willst kannst du gern haben. Bezeichnung
ist AD9806.
Coole Sache.
Den gitterspiegel hab ich von ebay, aus einem alten monochromator.
Die Idee mit der CD geht aber sicher auch gut.
Mein Kasten sieht bis jetzt ähnlcih aus, wie auf den Fotos aus deinem
zweiten Link. Kasten, Eingangsschlitz (mit noch zwei zusätzlichen
Blenden, gegen Streulicht, der Gitterspiegel und der CCD.
Also die Optikseite geht eigentlich gut, der Spiegel fokussiert ziemlich
genau in der Grösse des CCD's, du hast ja vvlt oben die Spektren auf den
Oszibild geshen, das ist jeweils über den ganzen CCD verteilt.
Der AD9806 scheint brauchbar zu sein, doch ist die Ansteuerung damit
sicher nicht wesentlich einfacher :-) allein weils kein DIP gehäuse
ist...
na vllt klappts auch nur mit nem AVR..
Aber cooles Projekt. Auch ein Hobby-Astronom?
Der Link auf die Seite von Joachim Köppen mit seinem CD ROM Spektroskop
ist gut.
Habs gleich mal ausprobiert...
Könnte man nicht anstatt der CCD Zeile das Ganze nicht noch einfacher
machen in dem man mit einer festtehen Fotodiode (oder 2-3 um eine
bessere Wellenlänge Abdeckung im UV/IR zu bekommen ) aufnimmt und dafür
die CD dreht?
Es sind ja nur 10Grad Drehwinkel (bzw. 30Grad bei einer DVD) notwendig
so dass eine einfacher Drehantrieb ausreicht (z.B. Magnetspule).
Die Auflösung von einem CCD dürfte halt um Größenordnungen besser sein.
Die die's bei Pollin gibt haben auf einer Länge von ca. 2.7cm 5400
Pixel, jeder davon 5µm breit.
@Moritz Greif
Hab schon öfter mal überlegt in die Hobbyastronomie einzusteigen, aber
es bisher noch nicht gemacht.
Der AD9806 gibt seine Daten halt schon parallel aus, und der ADC ist
auch schnell genug. Außerdem gibt's wählbare Verstärkung.
Wie willst du das Spektrometer eigentlich kalibrieren? Die einzelnen
Farben auf dem CCD haben ja ihren eigenen Empfindlichkeitsverlauf. Hab
mir schon überlegt eine Halogenlampe, bei der man das Spektrum ja
halbwegs vorhersagen kann, zu benutzen.
Ja, die Kalibrierung wird nochmal kniffelig. Meine Idee wäre eine
Natrium-Dampf-Lampe, die gibts in jeder Physik-Sammlung eines
Gymnasiums.
Die hat ja ganz bestimmte Linien, und damit kann man ja dann jedem pixel
eine Wellenlänge zuteilen..
Vielleicht findet sich für die Pixel ein Funktion, die jeder Wellenlänge
eine Empfindlichkeit zurordnet- damit könnte man dann das Spektrum genau
erschliessen (aber das ist im Moment für mich noch Zukunktsmusik..) :-)
Übrigens ich hab eben mal gemessen: Einmal ADC-Sample und dann per UART
verschicken (38400baud) dauert mit der wenig optimierten routine hier
aus dem AVR-Tutorial genau 30ms. bei 2048 pixeln wäre das im schlimmsten
Fall ca. 2 minuten für einmal CCD auslesen- ... aber egal, wenn es damit
mit der Belichtungszeit klappt, nach der Idee von Magnus Müller (Post
sihe oben), kann man später immer noch optimieren...
Die Wellenlänge ist glaub ich weniger das Problem, bei Ebay gibt's
günstig verschiedenfarbige Laser mit angegebener Wellenlänge.
Die Amplitude wird aber nochmal kniffelig. Die einzelnen Farben haben ja
abhängig von der Wellenlänge unterschiedliche Empfindlichkeiten.
@Moritz:
Sorry, aber sooooo selbsterklärend ist dein Codefragment nicht. Kein
Schwein weiß, an welchem Portpin du welchen Pin des CCDs angeschlossen
hast.
Ausserdem sind 30ms für 1 Sample mehr als zu viel Zeit. Das muss
schneller gehen. Ich kann mir auch nicht vorstellen, dass das CCD die
Ladungen über einen Zeitraum von 2 Minuten halbwegs unverfälscht halten
kann.
Aus deinem Code geht auch nicht hervor, wie lange die einzelnen
Warteschleifen verzögern. Wie hoch ist die Baudrate des USARTs? Wie hoch
ist der ADC getaktet? Wie sieht deine Funktion "messe und sende" aus?
(usw... usw...)
Gruß,
Magnetus
jahh ich dachte, so ungefähr müsste es klar sein, aber ok:
-16MHZ Quarz
-"kurz" dauert 16 zyclen
-"warte" dauert 500 zyclen
-ADC hat Vorteiler 128 heisst 125kHz
-messe_und_sende ist praktisch die erste Funktion aus dem AVR-Tutorial
"ADC"
(256Messwerte mitteln, per klartext an den PC, dauert natürlich immens
lang...)
-Baudrate 38400
Aber deine Anmerkung mag stimmen: "Ich kann mir auch nicht vorstellen,
dass das CCD die
Ladungen über einen Zeitraum von 2 Minuten halbwegs unverfälscht halten
kann." Das ist wahr. Ich hab den Chip wunderbar auslesen können, am PC
schön innem kleinen Delphi-Programm die Kurve gesehen, aber da war
leider kein Spektrum, was ich vorher (mit schneller Freq) am Oszi top
gesehen habe.
Ich mach das jetzt so:
- jedes zweite Pixel wird ausgelesen, der ADC ist ja schnell, OHNE
Mittelung, braucht kein Mensch, auch nur als 8 bit wert. Dieser wird
dann im SRAM gespeichert. NACH 1000 EINTRÄGEN lese ich alle aus und
sende sie an den PC. Hoffe das geht.
Wenn nicht, möchte ich einen schnellen externen ADC verwenden, hab hier
gerade den ADC0803 bekommen.
Gruss,
Moritz
Moritz Greif wrote:
> -messe_und_sende ist praktisch die erste Funktion aus dem AVR-Tutorial> "ADC"> (256Messwerte mitteln, per klartext an den PC, dauert natürlich immens> lang...)
256 Werte mitteln... wozu denn?
> -Baudrate 38400
Na ja... 38400 Baud heißt 3840 Bytes/Sekunde. Bei ~2000 Messwerten a
8Bits also ca. 0,52 Sekunden nur für die Übertragung. Aber das sollte
nicht sooo kritisch sein...
> kann." Das ist wahr. Ich hab den Chip wunderbar auslesen können, am PC> schön innem kleinen Delphi-Programm die Kurve gesehen, aber da war> leider kein Spektrum, was ich vorher (mit schneller Freq) am Oszi top> gesehen habe.
Du kannst ja zur Sicherheit mal während der Wandlung den Ausgang des
CCDs mit dem Oszi messen.
> Ich mach das jetzt so:> - jedes zweite Pixel wird ausgelesen, der ADC ist ja schnell, OHNE> Mittelung, braucht kein Mensch, auch nur als 8 bit wert. Dieser wird
Richtig so. Das braucht hier wirklich kein Mensch.
Gruß,
Magnetus
ok, also ich hab nun eine fast-life anzeige des spektrums. Nur stimmt
das timing irgendwie überhaupt net, ich vermute mal dass der Chip
übersteuert..
Ich wüsste gern, wie schnell ein ADC seine Samples macht, wenn er mit
125kHz läuft. Preisfrage: Wie lange dauert dieses Codestückchen:
1
sample_adc:
2
sbi ADCSRA, ADSC
3
wait_adc:
4
sbic ADCSRA, ADSC
5
rjmp wait_adc
6
7
in adlow, ADCL
8
in adc_wert, ADCH
Kann das unterschiedlich lange brauchen, z.B. je nach Spannung/frequenz,
o.ä. ?
Einen [Dioden-]Laser als Wellenlaengenreferenz zu nehmen ist suboptimal.
Denn ein Diodenlaser kann irgendeine Wellenlaenge haben. Die laeuft mit
der Termperatur auch weg. Wie genau soll so eine Kalibrierung denn sein
?
Ja, es geht auch ohne Zeilenarray, indem man das Gitter dreht. Solche
Geraete sind auch auf dem Markt. Dann wird eine Messung serialisiert.
Fuer Astroanwendungen, wo man eh nicht genug Licht hat scheint mir das
nicht die passende Idee zu sein. Fuer ein Spektrometer scheint mir der
genannte Sensor auch nicht passend zu sein, denn ein dynamischer Bereich
von 360:1 ist eher mager. Die Pixel sind auch etwas klein, was die
Ladung betrifft. Ein Pixel einer passenden CCD kann mindeststens 30'000
Elektronen halten und sollte ein Rauschen von einigen wenigen Elektronen
haben. Diese dann auch zu messen ist dann nicht so trivial.
ok, das sind 104µs..
zu lang...
ich werde den ADC0803LCN ausprobieren, der soll mit 1Mhz takten, das
wären bei 20 Takten 20µs - und man kann den sogar noch bis 3 Mhz
hochtakten..
Ich würde beim AVR bleiben. Dieser hat den Vorteil, dass man das Signal
AC Koppeln kann, und durch Umschalten der Pins auf Ausgang den
Referenzwert speichern kann. Somit hat man den Offset hardwaremäßig
beseitigt. Ein AVR schafft auch etwa 30-50kS/s mit etwas über 8bit
Auflösung.
Der ADC0803 ist laut Datenblatt nur für 13ksps spezifiziert.
@3372
Nach der groben Kalibrierung kann man das Ding ja in die Sonne halten
und die Spektrallinien raussuchen. Das hat dann auch gleich den Vorteil,
dass man über den gesamten empfindlichen Bereich kalibrieren kann, falls
es zB. nichtlineare Verzerrungen gibt.
Das Problem der geringen Empfindlichkeit könnte man ja umgehen, indem
man mehrmals mit unterschiedlichen Zeiten belichtet. 1mal so, dass die
hellen Pixel stimmen, dann so, dass die mittelhellen gerade noch nicht
übersteuern, und dann so, dass die langsamen gerade noch nicht
übersteuern. Über die Belichtungszeit kann man das dann zurückrechnen.
Bei dem CCD das es von Pollin gibt, ist im Datenblatt übrigens angegeben
wie sich die Ladung mit der Zeit abbaut. Wenn man das Timing aber
konstant hält, könnte man das sicherlich wegkalibrieren.
Das Problem mit der Ueberbelichtung ist, dass die Ladung in die
benachbarten Zellen abfliesst, ausser es gibt einen Blooming pin, der
die Ladungs sammelt. Und auch Chipflaeche braucht. Flaechige CCDs haben
teilweise Blooming, bein Zeilen hab ichs noch nicht gesehen.
...in die benachbarten Zellen abfliesst ... bedeutet, die Linie wird
immer breiter.
Müsste man mal ausprobieren. Zur Not ist die Auflösung nahe heller
Linien dann halt nicht ganz so gut, aber die wird ja nun nicht gerade
die nächsten 100 Pixel überstrahlen.
Wenn man es schafft den Bereich 300nm..1000nm auf das CCD abzubilden,
hat man bei den Pollin CCDs theoretisch (bei einwandfreier Fokusierung)
eine Auflösung von 0.129nm - braucht man nicht wirklich.
Die Ausleseproblematik könnte man auch so lösen: Man belichtet, und
liest immer nur ein paar Pixel aus. Die restlichen kann man dann sehr
schnell durchshiften.
Oder man macht es über interleaving: Man liest z.B. nur jedes 8. Pixel
aus. Ich würde mal sagen für >90% alles Messungen reicht das.
Sollte man mehr Auflösung benötigen, misst man halt mehrmals und liest
dann immer versetzt nur jedes 8. Pixel aus. So hat man die volle
Auflösung auf Kosten der Messdauer. Lässt man den ADC z.B. mit 48kHz
laufen und liest nur jedes 8. Pixel aus, so dauert ein Auslesen etwa
14ms. Die Auflösung liegt dann bei etwa 1nm und die effektive
Auslesegeschwindigkeit bei 384kPixel/s.
Jep das war so in etwa auch mein Ansatz, ich habs jetzt mal so gelöst,
dass ich jedes zweite pixel ausgelesen habe( hat net befriedigend
geklappt). Natürlich kann man das noch nach oben ziehen, und jedes
8.Pixel auslesen. Teste ich morgen mal.
Nur was ich mich frage, was das Datenblatt auch nicht hergibt, kann man
denn die Pulse-Zeiten beim Auslesen verändern??
Also kann man praktisch jeden 8. Pulse durch den Ausleseprozess
strechen, und danach die nächsten 7 Pulse wieder schnell machen? Wenn
das ginge wären viele Probleme gelöst! (z.B. kann man eben die ersten
20 Pixel auslesen, dann 2080 Pulse durchrattern, dann Pixel 21-40
auslesen, usw...
oder eben jedes 8.Pixel und dann versetzt im nächsten Durchgang...
Warum ich stutzig bin, was die Zeiten angeht: im Datenblatt steht was
von
clock pulse duty soll zwischen 40 und 60 % liegen und wird berechnet
aus :
100 × low_zeit / (low_zeit + high_zeit)
Heisst das, das zwar die Low- und die zugehörige High-Zeit gleich sein
müssen (halt eben ~ungefähr gleich), aber die einzelnen Perioden
unterschiedliche Low/High-Timings haben dürften...?
Was die Auflösung angeht: einigermassen reproduzierbare, kalibrierte
Messeregbnisse mit 10nm Auflösung wär ja schon super. Wenn das dann noch
einigermassen Live ging, umso cooler.
Übrigens das ist das zentrale Code-Stückchen mit dem ich immerhin ca.
alle 0,2 s ein Spektrum auf den PC bekomme, was am Oszi genauso
aussieht, leider dauert das Auslesen viel zu lange, die Werte werden
völlig verfälscht und es kommt eigentlioch nur murks raus, Screenshot
dazu in einem frühreren post.
1
go:
2
rcall init //sende ROG-Impuls
3
rcall sende_pulse_dummy //"lese" ganz schnell aus (halt 2100 Pulse )
4
rcall init
5
rcall sende_pulse_dummy
6
rcall init
7
rcall sende_pulse_dummy
8
9
rcall init
10
rcall lese_echt_aus //lese jedes zweite pixel aus, und save im SRAM
Hab mir mal so'n Spektroskop von der CD Seite nachgebaut, die Dinger
funktionieren erstaunlich gut, auch bei relativ dunklen Lichtquellen
(Straßenlaterne ggü).
Unterschied zwischen einer Osram 9W 6000K ESL und einer Megaman 11W
6500K Vollspektrum war auch schön zu sehen (wobei die Osram scheinbar
auch 4 Leuchstoffe hat), CCFLs haben auch 'n lustiges Spektrum (das vom
Monitor war auch gut zu sehen).
Warte aber immernoch auf die CCDs.
ja cool.
Optisch beobachten kann ich auch mit meinem Schuhkarton echt viel. Aber
um halt echt ein genaues Spektrum dann zu haben, braucht man halt schon
den Chip.
Ich räum jetzt erstmal mein zimmer auf, und danach gibts wieder eine
grosse Programmier-Attacke, ich will endlich diesen Chip bändigen!
Ok, ich habs. Voll geil.
Es war richtig: Man darf die Pulse-Zeiten verändern, muss nur high und
low time gleich lassen pro Periode.
Anbei das Energiesparlampen-Spektrum. Irgendwas stimmt noch mit den
countern nicht, aber ansonsten sehr cool. Ich übertrage (theoretisch)
525 Pixel, jedes 4 pixel. ich lichte ungefähr 300-800 nm auf den Chip,
heisst ich hab ca. 1 nm Auflösung im besten Falle.
Die Aktualisierung ist jetzt bei ca. 0,2 s, geht flott.
Ich verbesser nun mal das Delphi-Proggi, und lös das
Counter-Problemchen.
Sooo. Langsam nimmt die Sache ein Gesicht an. Alle 0,2 s etwa gibts ein
frisches Spektrum auf den Monitor, jetzt auch ohne Fehler links und
rechts (siehe oben in den ersten Versuchen)
Die Sache mit den Countern ist gelöst, ich übertrage jetzt jedes 4.
Pixel an den PC, alle anderen Pixel werden schnell übergangen (ungefähr
2 µs/Periode). (Die Pixel werden erst im SRAm zwischengespeichert)
Es werden also 512 Pixel gemessen. Da der Gitterspiegel das Spektrum auf
den vollen Chip auffächert, hab ich eine (rechnerische) Auflösung, von
1 Pixel / nm Wellenlänge.
Das Gerät heisst nun "Diligent Spectrum V1.0" ... :-)
Bilder und Spektren auf:
http://www.moritz-greif.de/diligent_spectrum/
Morgen versuche ich mal, das rauschen des ADC's etwas zu verringern
(Gibts da Alternativen zum Mittelungsverfahren?), und dann gibts für das
Gerät eine schöne Holzbox, und natürlich eine gelötete Platine, schön in
der Box integriert.
Dann will ich das Ding mal kalibieren, um jedem Pixel zumindest mal ne
ungefähre Wellenlänge zuzuweisen.
Dann will ich die Werte Excel-tauglich machen, oder ein Algorithmus
schreiben, um zwei Kurven voneinander abzuziehen - Stichwort
Transmissionskurve eines Filters ermitteln.
Gruss,
Moritz
Schaut gut aus. Kannst das Ding ja morgen mal in's Tageslicht halten. Je
nachdem welche Linien noch erkennbar sind, kannst du die Auflösung
ermitteln und gleichzeitig die Wellenlänge kalibrieren.
Begrenzt wird die Sache sicherlich durch die Blende. Je breiter die ist,
desto breiter auch der Bereich auf dem CCD auf den eine bestimmte
Wellenlänge abgebildet wird.
Hab's spaßeshalber mal mit der Digitalkamera probiert. Hätte nicht
gedacht, dass das mit dem Autofokus so gut klappt (musste das Ding aber
auch auf Dia-Adapter stellen), zu sehen ist eine 9W Energiesparleuchte.
2 Linien haben nicht draufgepasst (gibt noch eine blau/uv und eine
rot/infrarot), konnte die Kamera dazu nicht gut genug positionieren. Die
Farbwiedergabe ist erstaunlich schlecht... der breite blaue Bereich geht
eigentlich in's cyan, und die grün/orang/roten linien vor der dicken
roten sehe ich allesamt als orange, bei der ersten noch richtiges
orange, bei der letzten orange-rot.
So'n Spektrum bekommt heut übrigens Farbwidergabeindex 80..89.
@Moritz
Deine Aufnahme von der ESL passt eigentlich auch ganz gut dazu. Der
Höcker links müsste rot sein, der Anstieg danach die vielen dunklen
roten, dann der Höcker in der mitte die beiden grünen und der kleine
Höcker rechts der breite blaue Bereich.
Je höher die Auflösung sein soll, desto schmaler muss der Spalt sein.
Hab nochmal an der Auflösung gearbeitet. Jetzt sieht man die im Bild
grün/orangene Doppellinie viel besser aufgelößt (die real beide orange
erscheinen).
Vor den beiden grünen gibt's übrigens noch eine etwas schwachere grüne,
sieht man oben. Durch die kurze Belichtungszeit sieht man's hier nicht.
Und so sieht eine grüne CCFL aus.
Eine Infrarotröhre hab ich leider nicht da, und auf UV reagiert der CCD
der Kamera auch nicht besser als das Auge (eher noch schlechter).
Meine CCDs sind heut angekommen, bin grad beim programmieren. Das CCD
unterstützt 2 Auslesemodi, einmal "bit clamp mode", einmal "line clamp
mode". Das Datenblatt sagt leider nicht was das nun genau bedeutet -
liest zufällig jemand mit, der das weis?
Der Unterschied ist, das beim bit clamp mode neben der reset gate clock
beim Auslesen jedes Pixels auch die Reset feed-through level clamp clock
getaktet wird. Beim line clamp mode wird die Leitung einmal vor
Auslesebegin auf 0 gezogen, und bleibt dann während des Auslesens
dauerhaft auf 1.
Der CCD ist ein UPD8872 von NEC.
Also ich denke der Line clamp mode ist der richtige. Ausserdem hast du
da weniger zum ansteuern. Ich habe eine ähnliche Auslese-Reihenfolge
programmiert. Wahrscheinlich wird beim setzen der Leitung da die ganze
Linie des CCD's in das Schieberegister geladen.
Ich habe mir das Datenblatt von diesem CCD jetzt nicht angeschaut, aber
bei anderen CCDs ist es so, dass kurz vor dem eigentlichen Pixelwert ein
Referenzwert ausgegeben wird, und die gemessene Helligkeit der Differenz
zwischen diesem Wert und dem ausgegeben Pixelwert entspricht. So werden
Offsetfehler automatisch behoben. Ich koppel daher die Signale über
Kondensatoren an die ADC Pins, und stelle die Pins während des
Referenzwerts kurz auf Ausgang, um die Kondensatoren auf die
Referenzspannung zu laden. Anschließend werden die Pins wieder auf
Eingang geschaltet und die Spannungen vom ADC gemessen. Somit ist der am
Pin anliegende Spannunsgwert kleiner, und man kann so die ADC Auflösung
besser ausnutzen. Viele mit 12V betriebenen CCDs liefern nämlich eine
Spannung irgendwo um die 5-7V, was zuviel für einen 5V ADC ist.
Dem Datenblatt (gibt's zB. auf datasheetcatalog.net) nach wird der
Referenzwert in beiden Modi ausgegeben.
Wenn im bit clamp mode wirklich vor jeder Ausgabe neu belichtet wird,
wäre das ja genau das was wir brauchen. Dann hat man viel mehr Zeit um
jeden Pixel auszulesen, weil sich die Zeile im Zeilenpuffer nicht
abbaut.
Hab's jetzt übrigens zum Laufen bekommen (im bit clamp mode), konnte
auf'm Oszi die Spannungen beobachten. Nu geht die Sache an den ADC.
> Wenn im bit clamp mode wirklich vor jeder Ausgabe neu belichtet wird,
Was meinst du vor jeder Ausgabe ? Jedem Pixel ?
Belichtet wird immer zwischen 2 TG Impulsen.
Ich habe mir das Datenblatt mal angesehen. Ich bin mir nicht absolut
sicher, aber ich denke ich weiß was das CLB Signal macht. Und zwar genau
das was ich zuvor geschrieben habe: Der letzte Pixel wird mit RB am
Ausgang gelöscht und mit CLB auf einen definierten Schwarzwert gesetzt.
Für ein stabiles Signal sollte man dies besser bei jedem Pixel erzeugen.
Ich bin mir nicht sicher, ob bei der Line Version nur einmalig der Wert
am Anfang ausgegeben wird, oder ob intern irgendwo der Wert nur 1x pro
Zeile gesampled wird. Wenn es letzeres ist, dann wäre der Bit Modus
besser, vor allem wenn die Auslesgeschwindigkeit niedrig ist, damit
während dieser Zeit kein Offsetfehler entsteht.
Da der begrenzende Faktor eigentlich der ADC und das Wegschaffen der
Daten ist, dürfte genug Rechenleistung da sein, um auch diesen einen
zusätzlichen Impuls zu erzeugen.
Aber wenn du dir das Timing-Diagramm dazu anguckst wird doch in beiden
Modi Vos ausgegeben, und zwar nach der steigenden Flanke auf RB (mit
etwas Verzögerungszeit). Oder kommt der Vos Wert ohne CLB aus einem
Puffer?
PS wie ich grad sehe hat das Ding sogar 10800 Pixel, für jede Farbe
5400mal 2 übereinander.
Nu klappts soweit am AVR. Scheint, dass das CCD sehr empfindlich auf
Übersteuern reagiert. Die Ausgangsspannung geht dann auf 0V zurück, und
es dauert dann im dunkeln ein paar Sekunden bis wieder normale Werte
rauskommen (mehr als einen Auslesezyklus).
Das Übersteuern macht nach wie vor Probleme, hab's jetzt aber geschafft
eine komplette Zeile auszulesen, die Werte sind soweit auch stimmig.
Irgendwie funktioniert das mit der Belichtungszeit aber nicht richtig.
Es ist völlig egal wie lang ich TG oben halte, es kommen immer exakt die
selben Werte raus (meine Testwerte haben sich teilweise um Faktor 100
unterschieden).
Die Zeit die RB und CLB auf low sind, hat aber einen sehr deutlichen
Einfluss. Je länger, desto empfindlicher wird die Sache.
Wenn ich das CCD das erste mal nach einer Pause anspreche ist es
übersteuert, dann dauert's ein paar Sekunden und die Daten stimmen.
I_ H. wrote:
> Aber wenn du dir das Timing-Diagramm dazu anguckst wird doch in beiden> Modi Vos ausgegeben, und zwar nach der steigenden Flanke auf RB (mit> etwas Verzögerungszeit). Oder kommt der Vos Wert ohne CLB aus einem> Puffer?
Ich muss zugeben, bei diesem CCD ist das Datenblatt etwas dumm, aber in
anderen Datenblättern und hier ist es beschrieben:
http://www.necel.com/en/faq/f_ccd.html#1502
I_ H. wrote:
> Irgendwie funktioniert das mit der Belichtungszeit aber nicht richtig.> Es ist völlig egal wie lang ich TG oben halte, es kommen immer exakt die> selben Werte raus (meine Testwerte haben sich teilweise um Faktor 100> unterschieden).
Du machst das ja auch falsch:
Die Belichtungszeit ist zwischen 2 TG Impulsen, also TG kurz auf auf
high (zwischen 5 und 50µs), danach wieder auf Low, alles auslesen und
dann TG wieder auf high. Wenn TG länger auf high bleibt, dann ist das
ein undefinierter Zustand (laut Datenblatt). Vermutlich wird dann direkt
in das Schieberegister belichtet.
Ahh... jetzt ergibt das für mich einen Sinn. Dann haben sich die Werte
also dadurch verändert, dass ich mit längeren RB bzw. CLB Pulsen länger
zum Auslesen gebraucht hab.
Der CCD wurde dann wohl dadurch übersteuert, dass ich vergleichsweise
lang zum Auslesen brauch. Denn so hell war's eigentlich garnicht.
Schreit eigentlich doch nach einem CPLD. Na mal sehen was ich aus dem
AVR noch rausbekomme. Alle ADCs die ich da hab und die schnell genug
wären, sind leider SMD.
Für was brauchst du das ganze so schnell ?
Machs doch so wie weiter oben beschrieben:
Vor der Messung ein schnelles Auslesen und die Daten verwerfen, dann die
Belichtungszeit warten und anschließend die Werte richtig Auslesen und
an den PC schicken. Wenn dies ein paar 10ms dauert stört nicht weiter
(abgesehen von einem minimalen Fehler). Wenn der Sensor während dem
langsamen Auslesen überbelichtet ist das doch egal, denn diese Daten
werden vor der nächsten Messung sowieso wieder verworfen.
Wenn der Sensor richtig überbelichtet dauert es eine ganze Weile bis da
wieder gültige Daten rauskommen. Hab's mir mal auf'm Oszi angeguckt,
dann geht Vos auf fast 0V runter.
Hab auch mal bei einem bestimmten Pixel die Daten angelegt und dann
einfach 2ms gewartet. War deutlich zu sehen, wie die Spannung immer
weiter gefallen ist. Das Diagram auf Seite 17 im Datenblatt sagt ja
auch, dass sich die Spannung nach 5ms storage um 1V verändert. So
interpretiere ich das zumindest.
Soweit funktioniert's jetzt aber erstmal. Das Problem ist halt auch,
dass der Sensor ein paar Pixel mehr hat als der ILX554, sind ja immerhin
5mal so viele. Und die wollen auch alle durchgeschoben werden.
1mal alles auslesen und verschicken dauert jetzt etwa 4..5 Sekunden. Bei
jedem Auslesevorgang werden 54 Pixel gesampled (Vos und Vout). Wie oben
wird gesampled, nochmal gesampled (dabei alte Daten überschrieben), und
das dann per USART versendet. Das ganze 200mal, wobei die gesampelten
Pixel je 1 verschoben werden.
Nu brauch ich nur noch ein Prog, das die Binärdaten interpretiert.
Dürfte nur ein paar Minuten dauern. Die Ausgabe darf dann gnuplot
machen.
I_ H. wrote:
> 1mal alles auslesen und verschicken dauert jetzt etwa 4..5 Sekunden.
Dann bleibt wohl nur Baudrate höher drehen oder die Daten erst in ein
SRAM schreiben und anschließend übertragen.
Ich braucht glaube ich so 100ms pro Auslesevorgang (500kBaud über
FT232).
> Wie oben> wird gesampled, nochmal gesampled (dabei alte Daten überschrieben), und> das dann per USART versendet.
Wiso samplest du 2x ? Das kostet doch nur Zeit, oder verstehe ich da was
falsch ?
Na genau so:
> Vor der Messung ein schnelles Auslesen und die Daten verwerfen, dann die> Belichtungszeit warten und anschließend die Werte richtig Auslesen und
Ist nur schwer vorhersehbar, wie lang das Versenden per USART dauert.
Desswegen mach ich vorher einen Auslesevorgang ohne Versenden. Ob ich
dabei nun sample oder die Belichtungszeit anders abwarte ist doch egal.
Das Versenden ansich dauert aber trotz 54kbaud nicht so arg lang, das
Gewackel an den Leitungen zum CCD braucht die meiste Zeit. Daten werden
binär versendet, dauert für alle zusammen etwa 1.1 Sekunden.
Wär aber in einer Minute umgeändert, es funktioniert so erstmal und es
kommen brauchbare Daten raus. Dadurch, dass ich nur 54 Werte pro
Durchlauf sample brauch ich zwar viele Durchgänge, aber die storage time
ist dafür sehr kurz.
Die meiste Geschwindigkeit würde es bringen, wenn ich nicht jeden der
10800 Pixel auslese. Aber im Endeffekt ist die Geschwindigkeit so schon
ok, ich will lieber genaue Ergebnisse haben.
CCDreadSamp(i) erzeugt die Init-Sequenz mit TG und liest alle 10800
Pixel, dabei 54 Samples in ccdBuffer (der Rest wird nicht gesampled). i
gibt dabei den Offset für's Interleaving an (0..199, 54*200 gibt 10800).
Ah, OK. Jetzt verstehe ich wie du das machst. Das ist auch eine gute
Lösung, die auch problemlos funktionieren sollte. Wenn du für den Dummy
Read jetzt noch eine andere, schnellere Version ohne ADC baust, dann
bist du noch etwas schneller. Und zwischen dem Dummy Read und dem echten
sollte man vielleicht noch eine einstellbare Pause einbauen, um auch
eine längere Belichtung zu erreichen. Ich musste teilweise auf ein paar
100ms hochgehen, wenn die Lichtquelle recht schwach war.
Aber 10800 Pixel sind glaube ich ein wenig zuviel an Auflösung. Das
würde 0,065nm Auflösung entsprechen, und dafür braucht man schon eine
verdammt gute Optik um das auch noch sauber aufzulösen. Ich würde nur
jeden 4. Pixel auslesen, dann liegt die Auflösung immer noch bei 0,25nm,
das sollte reichen.
Ausleseprogramm steht. Musste noch fftw3, plplot und gnuplot
nachinstallieren (gentoo), das kommt davon, dass im home-Verzeichnis
alle Einstellungsdaten etc. liegen... da wechselt man auf amd64 und
nachdem KDE installiert ist, sieht es so aus wie die alte Distri. Dafür
merkt man dann alle Nase lang, dass hier und da noch Programme fehlen.
Die Belichtungszeit ist noch ziemlich kurz, desswegen der geringe
Ausschlag. Die 100ms sind schonmal eine gute Referenz, da kann ich mich
dann dran orientieren (allerdings werden bei 200 Durchgängen dann 20s
draus :().
Das Bild stimmt soweit, hatte noch die Optik von einem alten Scanner da,
da ist 'ne passende Linse dabei die je nach Einfallswinkel auf einen
anderen CCD Pixel fokusiert. Der kleine Jitter da drauf kommt wohl
davon, dass sich das Signal beim Auslesen abbaut.
Wenn's dunkler ist geht das sicher besser, da ist nicht so viel diffuses
Licht da.
Das Mistding sträubt sich ganz schön. Irgendwie auch kein Wunder, die
Empfindlichkeit vom ILX554 ist >100mal so hoch.
So sieht das Ergebnis unter realen Bedingungen aus (zeigt in den
Spektrometer zum Durchgucken).
Ich habe ein ähnliches Spktrometer (mit CD und CCD aus altem Scanner)
aufgebaut. Bei lander Belichtungszeit (ca. 100 ms) wegen schwacher
Lichtquellen, muss man auf Streulicht aus der Umgebung achten.
Ein bleibendes Problem ist aber noch die relativ starke zufällige
Streuung an der CD. Eine CD ist halt doch kein gutes Gitter. Als ein
extremes Beispiel gibt eine UV LED bei mir fast volles Signal auf allen
Kanälen bis in den IR Bereich.
Zur Kalibirung der Wellenlängen solle schon eine Energiesparlampe
reichen. Da findet man zu genügend Linien Wellenlängen angegeben.
Also ich hab auch festgestellt, bei einem Sonnenspektrum z.B. kann man
das Spektrometer gar nicht lichtdicht genug kriegen. Und wenn der einmal
überbelichtet ist, brauch er auch eine ganze weile, bis der CCD wieder
normal reagiert. Ich werde bald mal versuchen, die Belichtungszeit über
den PC regelbar zu machen.
@ulrich:_ kennst du einen Lampentyp, bei dem man eine linie direkt
erkennt, wo also auch das Spektrum im Internet ist?
Übrigens: ein befreundeter Physiker hat mir das geschrieben:
Der Strahl aus dem Spalt ( idealerweise 0.1 – 1 mm ) muß über eine optik
aufgeweitet werden , so daß parallel das ganze Gitter beleuchtet wird.
Die reflektierte Strahlung des Gitters wird dann auf das CCD focussiert
- je nach Wellenlange ist das ein ganz genau definierter Ort auf dem
CCD . ganz ohne Optik geht’s also nicht ….
Du brauchst mehr als eine Linse . Das licht muß parallel auf das Gitte
fallen – dann wird es parallel ( für eine bestimmte Wellenlange) das
Gitter wieder verlassen . dann mußt Du es auf den Detektor fokussieren .
Das Gitter wird idealerweise voll ausgeleuchtet.
Übrigens ich hab ja einen Artikel zu dem thema angefangen, will aber
keinem irgendwas wegnehmen.Ich bastel an dem Artikel ein bisschen
weiter, aber bevors "Konkurenz-Artikel" für den wettbewerb gibt, würd
ich den lieber mit jemand zusammen schreiben, und dann das Multimeter
teilen...:-)...
Also ich will kein "wer hat möglichst schnell am meisten tolles
gebastelt, und den schöneren Spektrometer-Artikel"-Kampf. :-)
Moritz Greif wrote:
> kennst du einen Lampentyp, bei dem man eine linie direkt> erkennt, wo also auch das Spektrum im Internet ist?
z.B. Natriumdampflampe oder auch eine UVC Lampe um EPROMs zu löschen,
oder noch viele andere Gasentladungslampen die ohne viel Gasgemisch
auskommen.
> Du brauchst mehr als eine Linse . Das licht muß parallel auf das Gitte> fallen – dann wird es parallel ( für eine bestimmte Wellenlange) das> Gitter wieder verlassen . dann mußt Du es auf den Detektor fokussieren .> Das Gitter wird idealerweise voll ausgeleuchtet.
Genau das ist das Problem das ich auch habe. Ich hab seit geschätzt 1-2
Jahren ein CCD inkl Ansteuerung und PC Software rumliegen. Ebenso ein
Gitter. Nur an der Optik mangelt es bei mir. Die sollte nämlich schon
einigermaßen hochwertig sein, um eine hohe Auflösung zu erreichen.
Angeblich soll ein Hohlspiegel sogar besser sein als eine Linse um die
Strahlen parallel zu machen.
Das mit dem Focussieren ist klar. Bei mir ist das eine Linse, die erst
das Licht vom Spalt ungefähr parallel macht und dann zurückgestreute
Licht etwas höher auf den CCD lenkt. CCD und Spalt sind dabei etwa
gleich weit von der Line (und Gitter) entfernt.
Die Spektren der Energiepsarlampen sind eigentlich fast alle gleich. Ich
hatte die Position der Linien im Wikipedia gefunden. Allerdings hat sich
der Artikel mittlerweilen deutlich verändert.
Das Spektrometer ist bei mit in einem etwas Schuhschaltel großen
Holzkasten, der innen im wesentlichen Schwarz ist. Bei der großen
Empfindlichkeit ist auch ein 6 mm Sperrholz nicht mehr Lichtdicht!
Die Strahlen kann man auch annährend parallel machen, indem man die
Entfernung zwischen CD und Spalt sehr groß macht.
Es geht auch mit einer einzigen Linse (sonst würden die
Durchguckspektrometer nicht funktionieren, im Auge gibt's auch nur eine
einzige Linse). Die muss dann zwischen CCD und CD liegen, und
idealerweise hat der Spalt den Durchmesser 0.
Im Anhang hab ich das Ding aus dem Scanner (also CCD+Sammellinse in
Abschirmgehäuse auf die Platine geschraubt, die Abmessungen sind so,
dass parallele Strahlen auf dem CCD exakt scharf werden) mal auf den
Spalt gerichtet. Der Abfall ist schon ziemlich scharf geworden.
Ich hab bei mir grad Probleme mit der Mechanik, also das CCD und die CD
genau zu positionieren.
Wenn man nur den großen Abstand nimmt um das Licht annähernd parallel zu
machen, verschenkt man recht viel von der Intensität. Das ist dann so
ähnlich wie Fotos mit der Lochkamera, das geht, aber langsam.
Es geht auch ohne Linse, mit einem gebogenem Gitter. Aber dadurch wird
die beschaffung des Gitters bestimmt nicht leichter. Für kommerzielle,
kompakte Spektrometer wird das aber zum Teil so gemacht. Im Prinzip sind
Linsen ohnehin weniger geeigent als Hohlspiegel, wegen der
Wellenlängenabhängigen Brechung und Refelexionen an den Oberflächen.
Also ich habe eben mal einen ADC0803 angesteuert. Das Oszi sagt, eine
ADC-Messugn vom Start bis der Wert im Register ist, braucht 20µs.
Im Gegensatz zu den beim AVR (16Mhz) ermittelten 104 µs recht schnell!
Damit kann ich ja dann bei gleichem Verhalten des ILX554 5 Mal so viele
Pixel auslesen, heisst ich könnte damit den vollen chip auslesen
(2048px), wenn nicht das SRAM es begrenzen würde.
Hallo,
hier mal ein Beispiel für die "zu Fuss" Methode ohne CCD.
Hab einfach das CD Gitter auf einen Motor geklebt und das Spektrum mit
einer Fotodiode (SFH203P) mit meinem ADC Logger aufgenommen. Das Signal
ist invertiert.
Die Photodiode schwächelt etwas im Blaubereich, aber das könnte man ja
mit weiteren Dioden ausgleichen.
Das ist ja cool. Hast du die CD auf einen Schrittmotor aufgeklebt?
Welchen Controller benutzt du für den ADC-Logger?
Prinzipiell hat man bestimmt viel weniger Probleme als mit einem CCD
(Vor allem Timing-Probleme). Wie viel Grad hast du den Motor immer
verdreht für ein messpunkt?
Mir ist gestern aus völlig unerklärlichen Gründen das CCD abgeraucht.
Von jetzt auf gleich hat's nur noch Mist ausgegeben, und kurze Zeit
später flossen 160mA und auf einer Seite wurde es bedenklich warm :(.
Hab zum Glück noch eins da gehabt. Mit einer Photodiode könnte man einen
Doppelspalt probieren. Also Spalt, Licht fällt da durch auf die CD
Oberfläche. In dem Bereich wo reflektiert wird noch einen Spalt, durch
den das reflektierte Licht auf die Photodiode fällt. Dadurch "guckt die
Diode in eine bestimmte Richtung".
>Hast du die CD auf einen Schrittmotor aufgeklebt?
Neh neh, alles viel einfacher. Hab den CD Streifen mit Tesafilm auf ein
kleines PC Lüfterchen geklebt, das mit reduzierter Spannung lamsam vor
sich hin eiert.
Hab noch nichtmal eine Lichtschranke zur Indexpunkterkennung ... sollte
ja auch nur ein Schnellschußhäck sein, um das Prinzip auszuprobieren.
>Welchen Controller benutzt du für den ADC-Logger?
Eigengestrickte Übungsaufgabe von mir: AVR M16 dessen interner 10Bit ADC
in ein externes 128KB SRAM streamed.
Davor ein 4 Kanal OpAmp Vorverstärker mit schaltbarer verstärkung.
Das ganze wird dan per USB am PC angezeigt/gesteuert.
Für die Aufnahme hab ich einfach 1.4sec aufgezeichnet und dann
reingezoomed.
>Prinzipiell hat man bestimmt viel weniger Probleme als mit einem CCD
Kommt drauf an, habs noch nicht durchgerechnet aber...
- Meine Diode hat eine Fläche von 1x1mm, der μPD8872 des Pollin CCD hat
48dots/mm - um die selbe theoretische Auflössung zu erziehlen müsste man
also 48mal soweit entfernt sein.
- wie es mit der Lichtempfindlichkeit der Dioden im Vergleich zum CCD
aussieht bin ich aus den Angaben im DB noch nicht schlau geworden
- man braucht eine sehr gute Motor Lagerung sonst hat man jitter
- ebenfalls jitter bei Drehzahl/Indexpunkterkennung.
>In dem Bereich wo reflektiert wird noch einen Spalt, durch>den das reflektierte Licht auf die Photodiode fällt.>Dadurch "guckt die Diode in eine bestimmte Richtung".
Ja das ist bei mir noch ein Problem, die Diode hat einen Öffnungswinkel
von 75°, da müsste noch ein Spalt/Tubus davor.
>Welchen externen SRAM-Chip hast du verwendet?
Ich hab meine auch aus dem E-Schrott. Aber z.B. Reichelt hat auch
ettliche 50-70ns SRAMS, sogar 512KB im DIL.
Die Geschwindigkeit ist unkritische, da sowieso der interne ADC der
Flaschenhals ist.
Die Addressgenerierung erfolgt extern mit einem Zählerbaustein der vom
M16 per toggle getaktet wird, da ich nur seq. Lesen/Schreiben brauche,
das gleich für die Kontrollsignale.
Aufnehmen kann ich entweder im Blockmodus in den SRAM mit nachfolgendem
Verschicken an den PC oder im Streamingmodus von bis zu 4 Kanälen mit
einer Abtastfreq. von max. 50-200Hz mit Livechart Anzeige am PC, aber
hier ist der Engpass eher die Grafik Update Geschwindigkeit des PC.
Für solche Spielerein wie mit der Photodiode ist so ein Logger trotz
seiner Limitierungen ganz nützlich.
Ich wollte schon lange eine grössere Version mit einem externen 40MSps
ADC bauen, bin aber noch nicht dazu gekommen.
Nachdem mir der 2. CCD auch aus unerklärlichen Gründen abgeraucht ist
(lag's vielleicht an den 1.68kOhm Last an den 3 Ausgängen?), hab ich das
Thema erstmal beiseite gelegt.
Bei Ebay gibt's allerdings sehr günstig Webcams, die Dinger gibt's
inzwischen auch mit mehreren Megapixeln für wenig Geld (10..20€). Werd's
mal damit probieren. Da ist die Optik dann auch gleich integriert, und
das Auslesen ist auch kein Problem.
Wie man an den Digicambildern sieht, können da recht brauchbare
Ergebnisse rauskommen (und ohne Autofokus geht das noch schärfer). Ist
die Webcam fix positioniert, könnte man das auch kalibrieren, lange
Belichtungszeiten geht indem man viele Bilder übereinander legt.
In Echtzeit geht das Einstellen und Positionieren auch viel besser.
Ich war bei den billigen Hongkong-Webcams ja auf vieles vorbereitet, hab
extra geschaut, dass bei der Auflösung physikalisch dabei steht... aber
das rot, grün und blau extra gezählt werden war mir neu.
Naja... kann man nix machen, das Stativ was bei war, ist ganz brauchbar.
Von den bekannten Herstellern gibt's welche die wirklich >>1MPixel
haben, mal schauen ob ich mir sowas besorge.
Ein echter Vorteil ist, dass man die Belichtungszeit per Software
einstellen kann. Das mitgelieferte "Programm" kann aber Standbilder nur
aufnehmen, wenn man auf'm Knopf auf der Webcam drückt (unter Linux
geht's auch so, aber da kann ich die Belichtungszeit nicht einstellen).
Man könnte an den Bildern noch so einiges rumrechnen. Hab 'n Linuxprog
gefunden, das einstellbar viele Bilder übereinander legt, so bekommt man
das Rauschen fast vollständig weg.
Hab mal eine Belichtungsreihe gemacht, weil ich an die Kamera musste
liegen die Bilder nicht ganz übereinander. Man könnte in Software nun
eine richtige Belichtungsreihe machen, und vll sogar die Farbsäume der
überbelichteten Bereiche wegrechnen.
Und das letzte. Die grüne Doppelline sieht man sehr gut. Aber bei 300k
Bildpunkten nutzt das nicht viel, die Auflösung ist einfach grottig.
Ansonsten könnte das mit einer Webcam mit hoher Auflösung ganz gut
funktionieren, wenn man wirklich an alle Parameter (va. Belichtungszeit
und Weißabgleich) rankommt. Mit einer Belichtungsreihe ist zumindest die
dynamische Auflösung ok.
>Mir ist gestern aus völlig unerklärlichen Gründen das CCD abgeraucht.
Zerstörung durch elektrostatische Ladungen. Auf das Thema wird im
Datenblatt extra hingewiesen.
Ich habe momentan keine Lösung dafür - vielleicht eine Art Faradaykäfig.
ELECTROSTATIC BREAKDOWN
CCD image sensor is protected against static electricity, but
destruction due to static electricity is sometimes
detected. Before handling be sure to take the following protective
measures.
1. Ground the tools such as soldering iron, radio cutting pliers of or
pincer.
2. Install a conductive mat or on the floor or working table to prevent
the generation of static electricity.
3. Either handle bare handed or use non-chargeable gloves, clothes or
material.
4. Ionized air is recommended for discharge when handling CCD image
sensor.
5. For the shipment of mounted substrates, use box treated for
prevention of static charges.
6. Anyone who is handling CCD image sensors, mounting them on PCBs or
testing or inspecting PCBs on
which CCD image sensors have been mounted must wear anti-static bands
such as wrist straps and ankle
straps which are grounded via a series resistance connection of about 1
MΩ.
Das merkwürdige ist ja, dass es anfangs funktioniert hat. Hab mit'm
Multimeter nachgemessen wieviel Strom es zieht, anfangs waren's 32mA.
Nach ein paar Minuten ging's auf 160mA hoch und das Ding ist gut warm
geworden. Auf dem Ausgangssignal war anfangs noch eine Frequenz
aufmoduliert (vll 20Hz oder so, aber kein Netzbrummen).
Auf'm Steckbrett hatte ich mit dem Ding auch lange keine Probleme. Dann
hab ich den 1. CCD auf Lochraster gelötet - vll 1 Minute 30mA, dann 160.
Verdrahtung 10mal gecheckt, alls ok.
2. CCD auf Lochraster gelötet, vor'm Anschließen alles 10mal gecheckt -
ok. Eine Minute ok, dann 160mA.
Bei Egay gibt's für 20€ Digitalkameras mit 12mpix. Leider werden die
einen zu kleinen CCD haben, und man kann per Software sicher nicht alles
steuern.
Hab's gerade nochmal mit meiner inzwischen etwas angegrauten Nikon
Coolpix 4300 mit Stativ probiert, ist eigentlich super geworden. Ist nur
ein Bild aus einer Belichtungsreihe.
Aber um das Ding dann wirklich kalibieren zu können, darf sich die
Kamera halt nicht mehr bewegen. Und eigentlich wollte ich mit der Nikon
auch noch 'n paar andere Bilder machen.
Außerdem funktioniert der Autofokus nur dann gut, wenn ein paar kräftige
Linien vorhanden sind.
Man könnte vielleicht bei fest eingestelltem Weißableich über die RGB
Werte kalibrieren (Wellenlänge). Die Empfindlichkeit der einzelnen
Farben für die einzelnen Wellenlängen bleibt ja konstant.
Ok, also alles andere als 'ne ordentliche Digicam macht keinen Sinn,
wenn man ordentliche Auflösung haben will. Hab's mit etwas schmalerem
Spalt + Zoom nochmal probiert. Das grau im rechten Teil ist die
Reflektion der Kamera an der CD, anordnung war nicht ganz optimal.
Weiß zufällig jemand, ob's eine Kamera gibt die man vollständig über USB
steuern kann? Ach ja, billig sollte sie natürlich auch sein ;-)
Ich hab auch mal Tageslicht probiert, man erkennt einige Spektrallinien.
Ich hab mal ein bisschen an dem letzten Bild rumgerechnet. Ein grobes
einmessen hat für die beiden gut sichtbaren Linien rechts von dem
breiten grünen Balken 574.8nm und 576.96nm ergeben. Die Auflösung in dem
Bild beträgt etwa 127.56pm/pixel.
Nach etwas Recherche lag ich beim ersten Ausmessen wohl um 2.2nm absolut
daneben. Für die blaue ganz links hatte ich den absoluten Wert 436nm,
für die rote ganz rechts hatte ich keinen exakten Wert, nur ~610nm.
Nach http://www.free-form.ch/tools/speclid.html kann die Sache
eigentlich nur so aussehen:
1. schmale rechts vom grünen Balken: Hg 577.0nm
fast nicht sichtbar rechts daneben: K/Cu: 578.2nm
gut sichtbar rechts: Hg 579nm
schlecht sichtbar rechts: K 580.2nm
Mit dem richtigen Offset für Hg 577.0nm sehen die Werte so aus
(Tabelle/Messung)
577.0nm/577.0nm
578.2nm/578.28nm <-0.08nm sind nicht messbar
579nm/579.17nm <- ~1 pixel vermessen
580.2nm/580.44nm <- ~2 pixel vermessen
Gemessen hab ich jeweils über Entfernung zwischen 577nm und zu messender
Linie, bei der letzten waren das 27 Pixel.
Die breite der 577nm Linie hab ich mit 765pm bzw. 6 Pixeln ermitteln.
Ich glaub damit ist die Sache schon sehr genau geworden. Mit einem
schmaleren Spalt könnte man die Linienbreite auch noch drücken, bei
meinem Spektrometer bin ich an die Grenze der machbaren Spaltbreite
gestoßen, sprich der muss weiter von der CD weg.
Ach ja, die 3 Linien im blauen sind eine optische Täuschung. Wenn ich
ihn auf blau fokusieren lasse, kommt nur eine Linie raus. Linsen brechen
ja Wellenlängenabhängig. Das ist in einer Kamera zwar bis zu einem
gewissen Grad kompensiert, aber scheinbar nicht vollständig.
PS interessiert das eigentlich noch jemanden?
I_ H. wrote:
> PS interessiert das eigentlich noch jemanden?
Auf jedenfall!
Ich hätte nie gedacht, dass man mit einer CD so genau messen kann.
Allerdings würde ich eher den Ansatz mit dem CCD weiterverfolgen, denn
das lässt sich besser kalibrieren und automatisieren.
Hab mir bei Ebay grad eine m$ webcam geschossen (NX-6000), das Ding ist
mit 2MPix Video und 7.2MPix Standbild angegeben. Im Standbild sollen
3200x2380 möglich sein (mit Interpolation), also wird es effektiv wohl
die hälfte sein - reicht auch.
Die Optik am CCD selber zu machen halte ich inzwischen für nahezu
unmöglich. Die Auflösung wär zwar bombastisch, aber nutzt ja nix wenn
nur Pixelbrei rauskommt.
Die Webcam könnte man fest im Spektrometer installieren, und dann alles
per Software steuern. Die einfache Optik in dem Ding ist vll auch
weniger anfällig für verschiedene Wellenlängen, bei einer einzigen Linse
kommt dann nur eine konstante Verschiebung raus, die man wegrechnen
kann.
Vielleicht liegt es auch an meinem Aufbau, blau muss nämlich einen etwas
kürzeren Weg zurücklegen als rot.
Na mal schauen. Hätte aber auch nicht gedacht, dass mit der Kamera so
viel geht. Werd mir nachher wohl mal ein neues Spektrometer bauen, das
dann deutlich länger ist.
Hab übrigens grad festgestellt, dass ich schon über das, was ich noch
sehen kann, hinaus bin. Die Linie bei 578.2nm kann ich nicht mehr sehen
(nur erahnen weil ich weis, dass sie da ist), die bei 582.2nm ist auch
sehr schwach.
Bin auf 102pm/pixel runtergekommen, aber da macht der Autofokus
Probleme. Die Linien werden dann so dunkel, dass er sich nicht mehr
scharf stellen kann.
Auf einem anderen Bild hatte ich Linienbreiten von 500pm, und da müsste
noch ein bisschen was gehen (vll 300..400). Insgesammt scheint das neue
Spektrometer also zu funktionieren.
Viel mehr macht dann aber glaub ich auch keinen Sinn mehr. Von der
relativen Genauigkeit her dürften sehr gute Laborspektrometer auch nicht
viel besser sein, nur bei denen sind die Werte ordentlich kalibriert.
Im Anhang ist das alte Spektrometer zu sehen (bevor jetzt jemand denkt
ich sei pervers weil ich entkoffeinierten Cappuchino trinke - das ist
Ersatzdroge für die ganzen koffeinhaltigen Sachen).
Links unten ist die einstellbare Blende, rechts das Guckloch. Wenn man
da gerade reinguckt, schaut man senkrecht auf die CD, die plan an der
Rückwand klebt. Hat den Vorteil, dass man sich langwiriges Ausrichten
sparen kann, dafür sind Reflektionen mit der Kamera problematisch.
Das neue ist etwa 2.5mal so lang.
EDIT: 309pm Linienbreite :)
So, fertig für heute. Hab mal versucht das Zeugs zu analysieren. Die
Linien wo kein ? dabei steht sind eigentlich recht eindeutig gewesen, da
waren die Abweichungen auch sehr klein.
Eisen dürfte auch bei sein, scheinbar absorbiert das auch ein paar
Wellenlängen. Steht auf der Seite leider nicht bei was das für Linien
sind.
Das Helium passt an die Stelle wo ich es markiert hab, da es aber nur 2
theoretisch sichtbare Linien gibt, wovon eine in den blauen Nebel liegt,
bin ich mir nicht ganz sicher.
Morgen nehm ich vielleicht mal das Spektrum einer HQL Lampe auf (hab
so'n lustiges Ding da). Tageslicht würde sich jetzt auch mal anbieten.
Beeindruckend...
Wenn du dein Spektrometer nicht mehr brauchst, kannst du es ja deiner
alten Schule schenken.
Kommt dort im Physik Untericht bestimmt gut an und würde den Schülern
zeigen mit welch einfachen Mittel man heutzutage Wissenschaft betreiben
kann.
Hab mir mal die HQL Lampe vorgenommen. Schade, dass die Kamera kein UV
abbildet, das Ding macht nämlich extrem viel. Normales Papier (das bei
UV Bestrahlung blau fluoresziert) erscheint unter dem Licht lila, Sachen
die nicht fluoreszieren erscheinen gelb.
Muss mir bei Gelegenheit mal ein Programm schreiben, das mir die
Auswertung abnimmt. Auf der CDROM Spektroskop Seite sind noch ein paar
mehr Linien für Gasentladungen angegeben
(http://astro.u-strasbg.fr/~koppen/discharge/index.html).
Die Werte ohne was dahinter sind die gemessenen, die mit einem Element
dahinter dazu passende Linien. Die doppelt unterstrichenen hab ich zum
kalibrieren benutzt, bei den dicken Linien ist's nicht soo genau
geworden (die breiten Linien kommen durch die hohe Temperatur im
Brenner).
Bei dem Fe bin ich mir nicht ganz sicher, da passen allerdings so viele
Linien. YVO4:Eu ist der Leuchtstoff auf dem äußeren Kolben, hab dazu ein
Spektrum in einem guten PDF gefunden
(https://www.fh-muenster.de/fb1/downloads/personal/Lichttechnik-Hochdruckentladungslampen.pdf).
Die Elektroden sind bei dem Ding aus Wolfram, leider hab ich dazu kein
Spektrum gefunden.
Ach ja, das ganze ist zum Schluss *2 skaliert, daher stimmt der pm/pix
Wert nicht mehr.
EDIT: Das wo gelb YVO4:Eu dran steht sind vermutlich doch Hg Linien. Die
linke auf jeden Fall, die rechte vermutlich auch.
Der erste Teil vom Auswertungsprog ist fertig. Man kann ihm 2 beliebige
Punket mit zugehöriger Wellenlänge geben (müssen nichtmal die gleiche
Höhe haben) und er legt ein beliebiges anderes Spektrum daneben.
Außerdem wird die nichtlineare Verzerrung der DVD mit einbezogen, die
Auflösung in nm/pixel ist nämlich wellenlängenabhängig.
Im Bild sind die Hg Linien dargestellt, und nachdem die
Nichtlinearitäten mit einberechnet sind, passt es nun haargenau, auch
bei den weniger intensiven Linien die sich auch im Spektrum finden (muss
man dann aufzoomen, wollt nur nicht wieder so'n 4k Pixel Klopper
einstellen).
An einigen Stellen lassen sich auch Linien erahnen die im Hg Spektrum
vorhanden sind, exakt an der richtigen Position (zB. rechts neben dick
blau). Da einige Hg Linien sehr breit sind, ist deren Intensität
entsprechend niedrig.
Ich hab inzwischen mal was zusammengezimmert, das die Krümmung der
Linien ausmisst und dann alle Pixel im Bild der gleichen Wellenlänge
aufaddiert.
Dabei hat sich ein netter Nebeneffekt von der Farbkamera gezeigt. Die
Pixel auf dem CCD sind ja alle gleich, nur sitzt ein Farbfilter drüber.
Der ist aber auch nicht perfekt, und bei sehr stark belichteten
Bereichen läuft die Sache in's weiß, weil genug Licht durch den Filter
durchkommt.
Dadurch sieht man auch in den total überbelichteten Bereichen anhand der
anderen Farben sehr gut wo der peak ist. Im Bild ist rgb der Kamera und
lila sind die Spitzen die Hg liefern würde.
Seh grad, man sieht sogar die Hg-Linien kurz nach 400nm im blauen (mit'm
Auge sieht man die helle der 3 problemlos). Einfallswinkel ist noch
nicht ganz kalibriert, steht im moment auf 75°, daher die kleinen
Abweichungen im blauen.
Probiere gerade eine neue Quelle für CCDs aus, hab bei egay grad 4 alte
Barcodescanner für 2€ ersteigert. Die CCDs da drinnen haben 2048 Pixel
und die Optik um einen Barcode aus 50cm Entfernung zu lesen ist auch
schon drinnen. Klingt also vielversprechend.
Hab nun endlich die Barcodescanner hier. Da drinnen sitzen Toshiba
TCD1205D, nach allem was ich im Datenblatt so gelesen hab, sind die
Dinger sehr gut geeignet.
Die Photozellen sind deutlich größer (beim NEC 5x5µm, bei dem hier
14x200µm), die Empfindlichkeit ist höher (160mal so hoch), das Ding hat
einen eingebauten Shutter (Belichtungszeit ist also nicht von der
Auslesezeit abhängig), und die spektrale Empfindlichkeit reicht von etwa
200nm bis 1000nm (das Diagram hört bei 400nm und 70% Empfindlichkeit
auf). Außerdem ist schon eine vollständige Optik dabei.
Die Sache ist auch so gebaut, dass man den CCD nicht ausbauen braucht.
Wäre so ohne weiteres auch nicht möglich, da Quarzglasfenster und
Keramikgehäuse, splittert verdammt schnell.
Na bitte. No NEC no cry :)
Die Sache hat noch einige Kinderkrankheiten, beim 1. Auslesen sind
regelmäßige Fehler drinnen (beim kontinuierlichen Auslesen nicht) und
scharf ist die Sache auch noch nicht. Außerdem sitzt der CCD mit Optik
am Durchguckspektrometer.
Das Bild ist invertiert, der Einbruch kurz vor 1500 ist der grüne Peak
der Leutstoffröhre. Bei 1100 müsste der 430nm sein, bei 1650 der dicke
rote.
Die Belichtungszeit ist noch recht moderat. Laut Datenblatt geht noch
deutlich mehr bevor der Schwarzwert ansteigt, von der Helligkeit her
passt das also. Der grüne Peak ist übrigens übersteuert.
Na lecker, das wird'n Spaß. Das Ding ist leider kurzsichtig, scheinbar
kann gerade dieser Barcodeleser nicht auf 50cm auslesen grmpf.
Mit brauchbarem Zoom (die Linse kann man zwischen 3 Positionen
verschieben) liegt die scharfe Entfernung bei etwa 7cm, so weit muss
dann auch der optische Weg zum Schlitz sein.
Ansich dürfte das kein Problem werden, aber es wird dann sehr kniffelig
einen schmalen Schlitz zu bekommen. Je schmaler, desto besser die
mögliche Auflösung.
Ansonsten ist die Optik ganz brauchbar, hab Linien mit wenigen Pixeln
breite gehabt. Ein bisschen weitwinklig, aber das ist auch kein Problem,
kommt die CD eben direkt vor die Linse.
Vielleicht findet sich auf Ebay eine Schlitzmaske, hab sowas schonmal
gesehen.
Btw. interessiert das hier überhaupt noch jemanden?
>Btw. interessiert das hier überhaupt noch jemanden?
Na, lass nicht gleich den Kopf hängen. Auch wenn es hier etwas ruhiger
zugeht wie in dem n+1.ten LED Blinker Thread, so gibt es sicher doch den
ein oder anderen der an deinen Experimenten interessiert ist.
Ich selbst hab leider momentan noch viel zu viel anderes vor, als dass
ich mich jetzt an den Bau eines Spektrometer machen könnte, werd aber
wenn es soweit ist sicher über die vielen Tips hier froh sein - von
daher schon jetzt ein Danke.
Nach langem Probieren hab ich jetzt endlich die DVD so fest bekommen,
dass es klappt. Das Bild ist wieder die Leuchtstoffröhre. Der kleine
Höcker links dürfte 360nm haben, den sehe ich nicht, aber Quecksilber
leuchtet da ganz gut. Der große Ausschlag ist grün, der ganz rechts
liegt im Infrarot.
Auflösung ist noch grottenschlecht, weil der Schlitz etwa 5mm breit ist.
Hab ein kleines DVD Stück per Heißkleber auf die Platine vom
Barcodeleser geklebt. Nachdem ich das mit'm Auge kalibriert hatte (so
dass der CCD die Brechung auch sieht) hat's eigentlich wunderbar
geklappt, hätte ich so nicht erwartet.
Der Ausschnitt ist auf der X-Achse 1:2 skaliert, also 1 Pixel auf'm Bild
sind 2 Pixel auf'm CCD. Mehr Pixel in x geht leider nicht, der
Öffnungswinkel beträgt etwa 45°, daher gucken 500px am Anfang und
nochmal 500px am Ende daneben.
So schaut die Sache mit der Kamera aus (richtig hochauflösendes
Leuchtstoffröhrenspektrum hatte ich wohl noch nicht gepostet).
Eins kann man jetzt schon sagen, an die Auflösung kommt die CCD Methode
ganz einfach nicht ran.
Man sollte übrigens aufpassen, dass die Rillen auf der CD parallel dem
Spalt laufen. Zumindest in dem Bereich, den man anguckt.
Man sieht auf den Kamerabildern überall, dass die Linien oben/unten
unscharf werden. Da laufen die Linien nicht mehr parallel, das lässt
sich mit anderem Fokus nicht korrigieren.
Was passiert, wenn man den LinienCCD auf die falsche Stelle ausrichtet,
dürfte klar sein... etwa 3 Stunden rumfrickelei, wieso der Mist nicht
scharf werden will ;).
Hab die Schärfe jetzt nicht übermäßig genau eingestellt, aber sollte so
passen. Sieht auch schon viel besser aus. Das "Rauschen" ist übrigens
keins, die Empfindlichkeit der Pixel scheint nicht exakt gleich zu sein.
Sieht zwischen unterschiedlichen Aufnahmen gleich aus.
So kann sich die Sache aber schonmal sehen lassen. Der größte Peak ist
grün (links blau, rechts rot), an der hellsten Stelle übersteuert (10x
Op im AVR, nicht CCD).
Als nächstes werd ich wohl mal die dimmbare Halogenlampe ranziehen. Dann
kann ich über das Spektrum die Lichtfarbe zurückrechnen und mir anzeigen
lassen... auch eine Alternative zum hingucken. Außerdem kann ich dann
mal die Empfindlichkeit kalibrieren.
Und hier ist sie auf voller Helligkeit. Man kann sehen, wie sich die
Intensität in Richtung blau verschiebt.
Was die Wellen da zu suchen haben weis ich nicht. Peaks sind immer auf
den selben Wellenlängen. Jetzt da ich weis wonach ich suchen muss, hab
ich die Wellen auch im Durchguckspektrometer gefunden. Witzige Sache
das.
EDIT: Ahh... das schein am Reflektor zu liegen, der macht die Wellen
rein. Bei dem seh ich's ganz deutlich, bei der Birne selber sind sie
nicht da.
Ganz rechts (bei 2100) sind übrigens etwa 1060nm. Da ist die CCD
Empfindlichkeit im Vergleich zum Maximum bereits auf etwas über 5%
gefallen.
Die Optik vom Barcodescanner ist leider ziemlich unscharf. Die Linse
selber hat auf der Rückseite (Richtung CCD) nochmal einen Spalt, im
Moment sind also 2 Spalten vorhanden, einmal am Eingang vom Spektrometer
vor der DVD, und dann nach der Linse zwischen DVD und CCD.
Dementsprechend kommt natürlich recht wenig Licht an. Hatte testweise
bei einer der Linsen mal den Spalt entfernt, aber hab es dann einfach
nicht mehr scharf bekommen.
Immerhin steht jetzt die Kalibrierung so halbwegs (+/- 1..2nm). War
garnicht so einfach... nachdem ich das Modell fertig hatte (5 oder 6
Parameter) und die Messwerte nix brauchbares gebracht haben, hab ich ihn
einfach die besten Parameter anhand bekannter Linien ausprobieren
lassen.
Bis 1000nm geht das Ding leider nicht, bei 850 ist schluss. Liegt daran,
dass Infrarot immer stärker gebrochen wird. Der UV Bereich ist
theoretisch möglich, allerdings hatte ich bei 200nm schon Ausschläge...
das wäre UV-C, das wird allerdings von der Luft absorbiert. Ich schätze
mal ab so 300nm ist es brauchbar, hab aber auch nix zum Testen da.
Im Anhang ist eine grüne LED, die spikes sind beim Auslesen
reingekommen, muss mal schauen wo das herkommt. Das Rauschen will ich
noch wegrechnen.
Eine effektive Rauschunterdrückung ist mir noch nicht gelungen. Ich hab
schon versucht mit Schwarzbildern rumzurechnen, aber scheinbar ist das
Problem nicht nur der Schwarzwert, der mit steigender Belichtungszeit
immer weiter (und für jeden Pixel individuell) ansteigt, sondern auch
die Empfindlichkeit jedes Pixels.
Das heist ich müsste zusätzlich noch einen Weißwert aufnehmen. Im Moment
hab ich dazu keine Lust, dazu müsste ich den CCD nochmal aus dem
Spektrometer rausholen. Hätte man besser vorher gemacht.
Eine Variante wäre allerdings, eine Quelle mit kontinuierlichem Spektrum
(=Glühbirne) auszumessen und das Rauschen dann wegzurechnen. Hätte den
Vorteil, dass da gleich auch die individuelle spektrale Empfindlichkeit
der Pixel berücksichtigt wird, letztendlich bekommt ja jeder Pixel Licht
mehr oder weniger einer Wellenlänge.
Ein kleines bisschen hat der Schwarzwert aber schon gebracht. Im Anhang
ist eine Originalaufnahme von Tageslicht (etwa 400ms Belichtungszeit,
256 ADC Abtastungen pro Pixel) ohne gegengerechnetes Schwarzbild.
Und so sieht die Sache mit gegengerechnetem Schwarzbild aus. Vor allem
im linken Teil ist das Rauschen deutlich geringer, aber bei größeren
Werten hat die individuelle Empfindlichkeit einen größeren Einfluss, und
die ist noch nicht rausgerechnet.
Normalerweise sollte der Wert 0 erreichen wo kein Anteil im Spektrum
ist, das tut es nicht wegen Streulicht.
Die Spektrale Empfindlichkeit ist übrigens noch nicht rausgerechnet,
daher stimmt der Verlauf so noch nicht mit der echten Intensität
überein. Bei 700nm beträgt die zB. nur noch 80% und fällt dann schnell
ab.
Interessant ist der Knick bei etwa 760nm ->
http://de.wikipedia.org/w/index.php?title=Bild:Atmosph%C3%A4rische_Durchl%C3%A4ssigkeit.png&filetimestamp=20080131182221
Passt relativ gut zu dem kleinen Knick den man auf diesem Bild erkennen
kann.
Die Sache mit den Wellenlinien muss ich mir mal genauer angucken, keine
Ahnung ob das so in ordnung ist.
Also ich kann die Barcodescanner als CCD Quelle nur empfehlen. Hab
inzwischen noch einen 2. fertig gemacht, aber die Optik entfernt und mir
einen Satz Linsen bei Ebay geschossen.
Ich schaff es trotz zugeklebtem Gehäuse und kürzester Belichtungszeit
nicht, das Ding mit der Hand so abzudecken, dass der Pegel unter etwa
20% vom Maximum fällt.
Den x10 Verstärker vom ATMega hab ich noch garnet benutzt, geschweige
denn den x200 Verstärker, der bei dunklen Szenen auch brauchbare
Ergebnisse liefert (was Rauschen angeht).
Schade ist nur, dass die Auflösung mit 2048pix nicht soo berauschend
ist.
Hab mal angehängt wie die Dinger aussehen, bei dem unteren hab ich,
nachdem das Fenster vom CCD gesplittert war (echtes Quarzglas), alles
runtergekratzt um von hinten durchgucken zu können.
Das weiße rechts im unteren Bild ist eine Reflektion, das Licht kommt
von vorn.
Nachdem ich mich 'ne Ewigkeit daran versucht habe, die Linsenoptik
scharf zu bekommen, hab ich die Sache mit den Linsen erstmal auf Eis
gelegt.
Stattdessen mussten die Scannerspiegel herhalten. Der erste Versucht ist
eigentlich garnicht schlecht geworden, ist eine grüne CCFL.
Brechen tut das Licht diesmal keine DVD, sondern eine Folie von Ebay.
Die Anordnung ist denkbar einfach, Licht tritt durch einen Spalt ein,
trifft nach der Brennpunktentfernung auf einen Hohlspiegel, wird
reflektiert, trifft dann nach etwa 3/4 Brennpunktentfernung auf die
Folie und nach der gesamten Brennpunktentfernung auf den CCD. Die Folie
lenkt das Licht abhängig von der Wellenlänge um ein paar Grad in der
Horizontalen aus.
Durch den einen Spiegel ergibt sich leider nur eine 1:1 Abbildung, also
das Bild das auf den CCD projeziert wird, ist genauso groß wie das
aufgenommene. Dadurch liegt die Grenze der Auflösung bei der
Spaltbreite.
Ich hatte auch mal eine Signallampe auf die Weise abgebildet (ohne
Lichtbrechung), da war der Peak etwa 5 Pixel breit (~70µm). Die Sache
ist, bei genügend kleinem Spalt (in dem Fall war der Glühfaden wirksam),
also recht genau.
Der Schwarzwert ist noch ziemlich hoch (etwa 66% vom Endwert, im Bild
rausgerechnet), weil die Sache offen neben mir auf dem Tisch liegt. Die
Lichtausbeute ist eigentlich ganz ok, lässt sich aber noch um
Größenordnungen steigern (Licht lässt sich mit einer Linse auf den Spalt
fokusieren).
Also alles in allem scheint das die weit bessere Methode zu sein. Die
Folie hat außerdem den Vorteil, dass man einstellen kann, wie weit das
Spektrum aufgefächert wird (Entfernung zwischen CCD und Folie).
Dafür muss man mehr Grips in den Spalt investieren, der muss wirklich
klein sein.
Durch die direkte Abbildung kann man sogar ausrechnen, wie breit der
Spalt ist. In dem Fall sind's etwa 40pixel, da einer 14µm breit ist,
also 0.56mm.
Da könnte sogar wirklich noch was draus werden, das ist der grüne Peak
im CCFL Spektrum. Ist aber garnet so einfach auf alle Wellenlängen
scharf zu stellen, neben der Entfernung spielt da auch noch die Rotation
vom CCD eine Rolle.
Na bitte... Gedult führt bekanntlich zum Erfolg. Die beiden kleinen
Peaks links sind die beiden orangen Quecksilberlinien, das große rechts
davon ist grün, und nochmal rechts davon blau (430nm). Dann kommt bei
400nm nochmal blau, und bei 360nm (nicht auf'm Bild) ist nochmal eine UV
Linie.
Die beiden Quecksilberlinien links hab ich mit dem anderen CCD
Spektrometer nicht hinbekommen, hier sind sie nun ganz deutlich zu
sehen.
Das Bild durch's Handspektrometer ist übrigens sehr weit oben zu sehen.
So sieht übrigens der Aufbau aus. Das grüne Leuchten über der CCFL ist
ein Abflussrohr, scheinbar ist das Ding nicht ganz lichtdicht.
Normalerweise sitzt zwischen CCFL und CCD auch noch eine Trennwand, aber
da kann ich nicht durchfotographieren...
Durch die geringe Krümmung vom Hohlspiegel ist das etwas größer
geworden, aber was solls - es funktioniert. Nu darf ich mir überlegen,
wie ich das fest zusammenbaue. Hab schon überlegt das einfach mit
Heißkleber auf'm Schreibtisch festzumachen, aber das ist dann irgendwie
doch zu unpraktisch.
Das ist etwas älter, aber ansich das selbe. Der helle Fleck links ist
die Signallampe gegen Papier projeziert (die rote und blaue Linie ist
auf'm Steckbrett, man erkennt auch noch die Kontaktfelder), rechts davon
dann das Spektrum durch das transparente Gitter.
Bin übrigens von der CD weggekommen, weil die Linien nicht gerade sind.
Da wo das Licht gebrochen wird ist das Bild ja noch nicht fokussiert,
also das Licht von jedem Bildpunkt verteil sich über eine gewisse
Fläche. Das wird dann problematisch wenn die Linien nicht gerade sind,
weil dann je nach Position in eine andere Richtung abgelenkt wird, da
kommt dann so ohne weiteres nie ein scharfes Bild raus.
Mist... der Aufbau hat eine grundsätzliche Unschärfe, weil das Licht
nicht überall mit dem selben Winkel auf die Gitterfolie trifft (sieht
man auch im Bild oben).
Hab das mal durchgerechnet, wenn ich nur 1/3 vom Spiegel benutze (etwa
10°) lässt sich die Abweichung bei korrekter Ausrichtung vom Gitter auf
etwa 1.8nm drücken, bei falscher Ausrichtung werden es auch mal >100nm.
Das erklärt, wieso das so 'ne Frickelei war, das Ding richtig
auszurichten.
Bei 30° sind es schon 16nm, bei 5° sind's nur noch 0.4nm.
Um das vollständig zu korrigieren muss ein 2. Hohlspiegel her, nur dann
kann man das einfallende Licht wirklich parallelisieren, durch's Gitter
schicken, und dann auf den CCD fokussieren.
Eine Alternative ist, das Licht vorher mit einer Linse zu sammeln und
auf den Spalt zu richten, der in einer so großen Entfernung steht, dass
der Öffnungswinkel nach dem Spalt eben möglichst gering ist
(Linsenbreite vs. Spaltentfernung).
Bei Ebay hab ich ein paar richtige Hohlspiegel in Aussicht, damit bau
ich dann vll ein 3. Spektrometer. Jetzt werd ich wohl erstmal den 30°
Hohlspiegel auf 2*15° stutzen (Plastik hat halt auch Vorteile), ist
immernoch deutlich mehr als 5 oder 10°.
Nochjemand hier?
So langsam kann ich verstehen, wieso Optiken für zB. Kameras so
kompliziert sind. Das was man in der Schule bezüglich Optik gelehrt
bekommt (bzw. das woran ich mich noch erinnern kann) ist alles Müll,
nach dem Motto schöne heile Welt. Die Wirklichkeit ist dagegen grausam!
Plaziert man eine punktförmige Lichtquelle im Brennpunkt eines
sphärischen Hohlspiegels sind die reflektierten Strahlen nicht
parallel. Bis etwa 30° Spiegelwinkel funktioniert das mit recht geringen
Abweichungen, aber darüber wird es immer schlimmer. Genauso gilt das
natürlich umgekehrt für parallele einfallende Strahlen.
Und setzt man eine Lichtquelle in den Mittelpunkt vom Hohlspiegel (also
Kreismittelpunkt, Hohlspiegel ist Ausschnitt vom Umfang) und verschiebt
sie dann, so das nicht genau auf die Quelle zurückreflektiert wird, ist
die Sache genauso unscharf.
Für den ersten Fall, also parallel/fokussiert bzw. umgekehrt gibt es
Parabolspiegel. Da funktioniert das aber auch nur für einen bestimmten
Einfallswinkel, desswegen plazieren die bei Teleskopen ihre
Planarspiegel auch immer im Strahlengang, was ja eigentlich recht
dämlich anmutet, weil dann weniger Licht reinkommt... so wie hier:
http://wwwex.physik.uni-ulm.de/lehre/gk3a-2002/img470.gif
Hab mal ein Prog geschrieben, dass Spiegel- und Linsensysteme simulieren
kann. Im Bild ist oben die Strahlenquelle, unten sollte es wieder auf
einen Punkt fokusiert werden. Ist offensichtlich nicht so ganz der Fall.
Nu kann ich immerhin simulieren wie sich die geringsten Abweichungen
erzielen lassen. Später kann ich dann damit auch das Beugungsgitter
simulieren und ihn automatisiert nach der besten Anordnung suchen
lassen.
Die Figur die da unten, wo der Fokus sein sollte, entsteht, nennt sich
übrigens Kaustik. Und ähnliche Effekte treten auch bei Linsen auf (es
sind mehrere), + chromatische Aberation.
Da wird auch klar, wieso in normalen Fotoapparaten 3 bis 5 Linsen
stecken.
So langsam kann sich die Sache sehen lassen (mal schauen, wann ich
POV-Ray Konkurrenz machen kann). Auf'm Bild grün ist der Hohlspiegel,
blau das Gitter so wie ich es da hab. Lichtquelle (600nm, 500nm und
400nm) ist ganz oben, die Strahlen fangen etwas vor'm Fokus an, damit
man dessen Breite (1 Pixel) genau erkennen kann.
Brechung am Gitter wird ordentlich simuliert. Eine neue Erkentnis ist
auch schon gereift, bisher hatte ich nur die Spektralzerlegung im Bild
oben probiert, also die, die zur Quelle hin gebrochen wird.
Die unten ist aber offensichtlich schärfer, zumindest bei der Anordnung
hier. Dachte bisher immer, die unten wär absolut unbrauchbar.
Es macht fast den Eindruck, als könnte man die sphärische Aberation vom
Hohlspiegel mit der Abweichung am Gitter halbwegs kompensieren. Der
blaue Fokus unten sieht zB. verdammt gut aus, besser als der weiße.
Als nächstes muss ich mir noch einen Mechanismus ausdenken, der
automatisch die Qualität vom Fokus bestimmt, dann kann ich ihn per Brute
Force optimieren lassen.
>So langsam kann sich die Sache sehen lassen
In der Tat, wird ja immer professioneller. Ich muss mich jedesmal, wenn
ich deine Berichte lese, zurückhalten um nicht auch gleich damit
anzufangen. Hab schon zuviele offene Projekte...
>sphärische Aberation vom Hohlspiegel mit der Abweichung am Gitter halbwegs>kompensieren
Wieviel mm Fokusabweichung hast du denn über das CCD?
Die Krönung wäre natürlich wenn du diesen ganz einfach elektromechanisch
(Magnetspule, Piezo) am CCD/Gitter oder Spiegel nachführen könntest.
Bei CD/DVD Leseköpfen wird dies ja auch so gemacht.
Eventuell must du dann mehre Teilaufnahmen machen.
Wäre es nicht sinnvoll wenn du in der Artikelsammlung einen kleinen
Beitrag aufnimmst, der auf diesen Thread verlink?
Es wäre doch mehr als schade, wenn das hier gesammlte Wissen eines Tages
spurlos unter den 100000 Threads verschwindet.
>Plaziert man eine punktförmige Lichtquelle im Brennpunkt eines>sphärischen Hohlspiegels sind die reflektierten Strahlen nicht>parallel. Bis etwa 30° Spiegelwinkel funktioniert das mit recht geringen>Abweichungen, aber darüber wird es immer schlimmer. Genauso gilt das>natürlich umgekehrt für parallele einfallende Strahlen.
Soweit ich mich an meine Optik-.Kenntnisse erinnere, war das genau der
Grund dafür, warum man Hohlspiegel nicht aus einem Kreis- bzw.
Kugelausschnitt, sondern einer Parabel bzw. Paraboloid macht - oder
verwechsle ich da was?
Frank
Kupfer Michi wrote:
> Wäre es nicht sinnvoll wenn du in der Artikelsammlung einen kleinen> Beitrag aufnimmst, der auf diesen Thread verlink?>> Es wäre doch mehr als schade, wenn das hier gesammlte Wissen eines Tages> spurlos unter den 100000 Threads verschwindet.
Hat er doch schon gemacht...
http://www.mikrocontroller.net/articles/Digitales_PC-Spektrometer#Weitere_Bilder_und_Beispielspektren
Gruß,
Magnetus
Hat etwas gedauert, so schaut die Sache aus:
n=-1:
fr=0.111029
fg=0.0411198
fb=0.0235626
n=0:
f=0.188892
n=1:
fr=0.396001
fg=0.358758
fb=0.325035
Einheiten gibt es noch nicht, das Bild stellt für x und y die
Koordinaten 0 bis 100 dar.
fr ist der beste Fokus für rot, fg für grün und fb für blau. Bei n=0
(das was unbeeinflusst durch's Gitter durchgeht) ist's bei allen 3
gleich, also nur ein Wert. n=-1 ist nach unten gebrochen, n=1 nach oben.
Die Einheiten kann man vielleicht grob mit cm vergleichen, 0.2mm Fokus
wären dann 14pixel auf dem CCD, 1.88mm schon unbrauchbare 134px.
Schön ist, dass die für n=-1 alle 3 besser sind als ohne Gitter. Nu kann
ich ihn mal ein bisschen mit den Werten rumprobieren lassen. Es könnte
sich aber herausstellen, dass die Fokuspunkte der verschiedenen
Wellenlängen nicht auf einer Linie liegen... der CCD mag keine Knicke
:(.
Eine mechanische Nachführung wollte ich eigentlich nicht reinmachen,
wahrscheinlich muss ich dann alle Nase lang neu kalibrieren. Aber
scheinbar lässt sich das ja so ausrichten, dass alle Wellenlängen
gleichzeitig scharf/schärfer werden.
Den Artikel werd ich mal irgendwann etwas überarbeiten, was da steht ist
stellenweise obsolete (der Artikel ist von moritzz). Mit Linsen wird es
sehr schwer, nach dem Spalt würde ich nur noch Achromate einsetzen, und
selbst da bleiben gewisse Bauchschmerzen.
Den Thread werd ich auch mal deutlicher hervorheben, jetzt gibt's ja
nicht nur Bilder sondern auch ein bisschen Theorie.
@Frank
Jup, aber bei dem ist das dann nicht mehr so einfach. Das gilt nur, wenn
die Lichtstrahlen auf einen bestimmten Punkt senkrecht einfallen, und
dann liegt der Fokus mitten in der parallelen Strahlen. Also mal eben
zur Seite ablenken wie im Bild oben geht damit auch nicht, da bräuchte
man extra Spiegel.
Hab's geschafft 500nm auf etwa 2 Pixel zu fokussieren, die anderen waren
mit 30px nicht soo schlecht. Allerdings liegen die Fokuspunkte tatsache
nicht auf einer Linie.
Als nächstes werd ich aber erstmal genau ausmessen müssen, was ich da
habe.
>Eine mechanische Nachführung wollte ich eigentlich nicht reinmachen,>wahrscheinlich muss ich dann alle Nase lang neu kalibrieren
Ich dachte da ja auch an eine Art Autofokus:
- Ablenkungsparameter durchsteppen und bei jedem Wert eine Aufnahme
machen
- Abschnittsweise DFT des Spektrum berechnen und über die Steps hinweg
den
Step suchen bei dem der hochfrequenten Anteile im DFT maximal wird.
- Regressionsgerade berechnen
Dies kann man entweder als Autokalibrierung per Knopfdruck bei einer
bekannten Lichtquelle mit guter Spektrallienienverteilung machen und die
Ablenkwerte dann abspeichern oder bei jedem Spektrum neu, denn wenn das
Spektrum keine geigneten Spektrallinien zur Auswertung enthält ist es ja
sowieso egal wenn das ganze nicht ganz scharf ist.
Ist natürlich ne ganze Ecke aufwendiger...
Hätte schon zweifellos Vorteile. Ich hab schon überlegt 2 CCDs
hinzustellen, aber da ich sehr wahrscheinlich nur eine Reflektion (-1
oder +1) scharf bekomme, würde das wohl nichts bringen.
Nur die Mechanik ist halt nicht ganz so trivial. Floppy-Schrittmotoren
hätte ich 2 da, aber da gehört ja noch mehr dazu.
Hab jetzt endlich mal den Spiegel vermessen, 46.5cm Radius und 12.3°
Ausschnitt. Mit einer genügend großen Auslenkung der Reflektion (also
Entfernung des Fokuspunktes von der Quelle) ergibt sich ohne Gitter eine
Genauigkeit von 10px. Die 0.188 oben entsprächen 134px.
Die Sache hat bei fixem Fokuspunkt einen Freiheitsgrad, den muss ich
noch genau bestimmen (anschaulich: Im Bild oben den Spiegel nach unten
verschieben und dann so drehen, dass der Fokuspunkt wieder stimmt).
>Nur die Mechanik ist halt nicht ganz so trivial
Och, das könnte man vielleicht ganz einfach halten da du ja, wenn ich
das richtige verstanden habe, nur wenige mm Verschiebung brauchst.
Z.B. ein oder beide Enden des CCD auf einen kleinen Lautsprecher
(=Tauchspule) kleben, bzw. eine mechanische Übertragung herstellen.
Es kommt ja überhaupt nicht darauf an, dass du eine lineare
Übertragungsfunktion hast, bzw. diese langzeitstabil ist.
Hauptsache der Fokusbereich wird abgedeckt, den Rest besorgt der
Autofokusabgleich.
Statt der DFT kann man natürlich auch einfachere Verfahren anwenden um
eine Kennzahl für die "Bildschärfe" zu extrahieren.
Das CCD muss ja auch fest sitzen, ich glaub ganz so einfach wird es dann
doch nicht.
Was aber gehen könnte, wäre das Gitter direkt auf einem Schrittmotor zu
montieren. Dann könnte man das frei drehen, und hätte so nicht nur die
Möglichkeit den Einfallswinkel zu verändern, sondern könnte das Spektrum
auch soweit auffächern, dass es nicht mehr auf den CCD passt. Je nach
Winkel kann man sich dann aussuchen, welchen Wellenlängenbereich man
aufnimmt, mit entsprechend besserer Auflösung.
Mit einem Gitterhohlspiegel ließe sich das Problem mit dem
Einfallswinkel übrigens umgehen, richtig positioniert (Spalt im
Kreismittelpunkt) fallen die Strahlen überall im selben Winkel auf die
Oberfläche.
Übrigens hab ich grad festgestellt, dass das Ausnutzen vom oben
angesprochenen Freiheitsgrad essentiell für das korigieren der
sphärischen Aberation ist.
Für UV Licht hab ich einen Fokus von 0.5 Pixeln erreicht, ist die
Entfernung von Quelle und Fokus zum Kreismittelpunkt der Linse identisch
waren 30px das beste Ergebnis.
So schaut bisher das beste Ergebnis aus:
36.37 12.66 2.178 12.89 25.28 17.88; 1864
Die ersten 5 Werte sind die Pixelbreiten für 800, 600, 500, 400 und
300nm, danach der durchschnitt. Nach dem Semikolon der Abstand in Pixeln
zwischen 300nm und 800nm, in dem Fall würde also sogar noch ein keines
bisschen mehr draufpassen.
Die Linearität der Fokuspunkte muss ich noch ausrechnen, sieht aber
nicht schlecht aus.
Ich denke die Untergrenze für die Spaltbreite liegt bei etwa 200µm oder
~14 Pixel.
Mist... war ein Fehler im Code. Infrarot ist allgemein etwas schwierig,
das hat immer den schlechtesten Fokus und auch die größte Abweichung.
Wenn ich 400nm und 600nm auf 0 festsetze, hat grün 0.48mm Abweichung.
Gleicht man das an bleibt also die Hälfte übrig.
27.26 9.345 1.352 10.5 20.35 13.76, 1915 ;
Mit einer deutlich veränderten Anordnung. Die Werte sind durch die
1915px Breite nochmal besser. Ich muss das wirklich mal in nm umrechnen.
Scheinbar lassen sich für verschiedenste Anordnungen recht schnell recht
gute Werte finden, vielleicht gibt es ja wirklich eine Ausrichtung bei
der die Abweichungen zu fast 0 werden (vor allem die Fokusentfernung).
Eine interessante Kombination hatte ich bereits, da sind die Werte über
fast alle Gitterwinkel gleich geblieben, allerdings bei >100px.
Normalerweise überstreicht das locker Faktor 10.
Ich bin inzwischen mal dazu gekommen ein altes Teleobjektiv für 3€ von
Ebay auszuprobieren. Die ersten Ergebnisse sahen sehr gut aus, Bild war
sehr sehr hell und auch ziemlich scharf. Konnte mir das Spektrum von
meiner Test-CCFL noch nie so gut auf'm Blatt Papier angucken, auch die
orange Doppellinie war klar erkennbar.
Hallo,
ich hab mir nicht alle Beiträge hier durchgelesen (sind ja irgendwie
schon sehr viele geworden :-) )
Ich würde gern das Spektrometer nachbauen
(http://www.mikrocontroller.net/articles/Digitales_PC-Spektrometer).
Nun wollte ich fragen, ob es irgendwie eine kompletten Schaltplan davon
gibt.
Außerdem bin ich noch nicht so fit im Thema Mikrocontroller und deshalb
wär ich über jede Hilfe sehr dankbar. Außerdem: Gibt es noch irgendetwas
zu beachten bei dem Bau? Und ist er überhaupt für Anfänger geeignet?
Palmenroller
Falls es noch jemanden interessieren sollte...
Ich hab mit dem Projekt nochmal angefangen, mit einer etwas veränderten
Optik und einem XMega32A4 mit 64kB SRAM als Unterbau (ich bin immer
wieder begeistert von dem Ding). Das Ergebnis schlägt alles bisherige,
sogar die Bilder mit der Kamera.
http://ih.doesntexist.org/ucnet/spec1.png - da könnte man sogar noch
weiter reinzoomen
So sieht 'ne 6000K Energiesparleuchte aus, aufgenommen in einem
HDR-Modus bei dem der uC das CCD mit aufsteigenden Belichtungszeiten
belichtet und die jeweils gut verwertbaren (=hell genug, nicht zu hell)
Pixel speichert.
Zum Vergleich, selbes Bild, statt dem Linien-CCD aber mit einer
Spiegelreflex:
http://ih.doesntexist.org/ucnet/spec2.jpg
Die beiden Höcker bei 1500 == die grüne und orangene Linie sind gerade
mal 2nm auseinander. Hier nochmal im Detail:
http://ih.doesntexist.org/ucnet/spec3.png
Der Peak bei etwa 1300 ist grad mal 3 Pixel breit, wobei der 3. schon
<50% vom max. Wert liegt. Die Spiegelreflex kommt mit der Dynamik
natürlich nicht mit.
Die Veränderungen waren eigentlich relativ einfach:
- Spalt durch eine ordentliche Konstruktion ersetzt. Hab 2 Arme von
einem Zollstock genommen, Seite an Seite gelegt, 2 lagen Papier
dazwischen und das dann mit Klebeband zusammengeklebt, so dass es die
Arme zusammendrückt. Der Spalt ist 0.1mm..0.2mm breit und richtig
gleichmäßig.
- Statt der Linse liegt jetzt ein echtes Objektiv im Strahlengang. Ist
ein altes 70-210mm Zoom mit M42 Sockel, die CCD Aufnahmen schafft's
sogar bei Offenblende. Leider dürfte das Ding aber das ferne UV
schlucken, also nix mit UV-B.
- Direkt vor dem Objektiv hängt die bereits angesprochene Gitterfolie.
- Und halt der XMega mit mehr als genug SRAM.
Was noch zu tun ist:
- Die Folie wölbt sich immer ein klitze kleines bisschen. Tut sie das zu
stark, wird das Bild verzerrt. Das will ich noch korigieren, indem ich
das Ding auf eine Glasplatte klebe.
- Durch Streulicht gibt es noch Nullpunktfehler. Liegt daran, dass die
Konstruktion im Moment noch offen ist, löst sich hoffentlich von selber
wenn ich den Kasten zu mache.
Und zu guter letzt noch 'n Härtetest:
http://ih.doesntexist.org/ucnet/spec4.png
Die Neon-Glimmlampe in einer Steckdosenleiste. Das ist allerdings schon
ein ziemlicher Grenzfall, aber man erkennt immerhin noch ziemlich viele
Peaks.
http://www.baader-planetarium.de/dados/kundenreferenz/mueller_gross_neon_200l.jpg
So schaut das in guter Qualität aus. Die 4 großen Peaks zwischen 600 und
625nm erkennt man recht gut, das sind die bei ~1750. Dann kommt auf 1800
der rechts neben den 4, dann groß-klein-groß, und dann kommen die beiden
großen Peaks die auf 640nm im anderen Bild liegen (inklusive dem einen
Pixelfehler vom CCD).
Also eigentlich sind sie alle da wo sie sein sollten. Kann's kaum
erwarten den Dunkelbildabzug zu implementieren, aber das Ding ist auch
einfach zu dunkel.
Arrrr.... ich liebe es, wenn solche Sachen funktionieren.
http://ih.doesntexist.org/ucnet/spec5.png
Jetzt mit Dunkelbildabzug. Sagte ich vorhin die Glimmlampe wäre zu
dunkel?
Hat eigentlich jemand die Variante mit dem Drehschlitz und der
Photodiode weiterverfolgt?
Falls es euch interessiert: Die Ixus Digitalkameras lassen sich mit ner
"custom-firmware" booten, dazu gibts ja das chdk Projekt. Damit könnte
man vielleicht einen mobilen "Spektralisator" bauen. Hat jemand ne Idee,
wie ich ne Cd vor die Kameralinse kleben kann?
Das wird nicht gut funktionieren, hatten wir schon. Die CCD Pixel haben
grad mal 14µm Abstand (sind aber sau empfindlich weil sie 200µm hoch
sind), und trotzdem hab ich für die Glimmlampe schon 0.8s
Belichtungszeit gebraucht (meine Olympus hätte in der Situation ~2min
gebraucht).
Wenn man 'ne ähnliche Auflösung mit Fotodiode will, braucht die auch
einen 14µm breiten Schlitz (viel Spaß beim Bauen), und dann werden
immernoch pro Pixel 0.8s Belichtungszeit fällig.
Und zu guter letzt muss man den Schlitz auch noch auf 14µm genau
positionieren können, um die Pixel zu treffen.
Umgekehrt könnte man zwar einen motorisierten Monochromator bauen (wiki
sagt wie der genau funktioniert), aber da bleibt immernoch das Problem
der in dem Fall µgrad genauen Positionierung. Und sämtliche
Teleskopsteuerungen aus der Astronomie zeigen, dass das nicht trivial
ist.
Kann allen, die CCDs auslesen, nur empfehlen die Timings sehr großzügig
auszulegen!
Nachdem ich das Shutter-Gate und das Shift-Gate jetzt 10µs zusätzlich
stehen lasse, hat sich das Rauschen auf fast 1/10 reduziert.
Moin Moin,
ich interessiere mich sehr für das Thema. Mir persönlich geht es um den
Bau eines Spektrometers zur Messung der Extinktion/Fluoreszenz von
Farbstofflösungen.
@ I_ H.
Welchen Aufbau verwendest du momentan? Immernoch einen Barcode-Scanner?
Ich interessiere mich nämlich sehr für einen nachbau.^^ Verwendest du
auch das Durchlicht-Gitter von Astromedia?
MfG Echo
Jup, der CCD ist immernoch der aus dem Barcode Scanner. Das Ding hat den
Vorteil gegenüber Scanner-CCDs, dass es etwa Faktor 100 empfindlicher
ist.
Der Aufbau sieht so aus:
http://ih.doesntexist.org/ucnet/s3.jpg
Inzwischen ist das alles befestigt, lichtdicht verpackt und auf 0.1nm
genau kalibriert. Vorn am Objektiv hängt die Gitterfolie (ja, ist von
Astromedia).
Ganz links wo das Isoband klebt ist der Spalt, aus den Schenkeln von
'nem Zollstock (nebeneinander gelegt, Blatt Papier dazwischen, mit
Klebeband zusammengeklebt (wichtig, das Klebeband ist leicht elastisch
und drückt die Schenkel richtig zusammen)).
Das Gitter hat 900 Linien/mm, am liebsten hätte ich ein 50mm Objektiv,
aber hatte nur ein 80-200mm Zoom übrig. Bei dem passt leider wirklich
nur der sichtbare Bereich auf's CCD, hätte ganz gern noch ein bisschen
IR und UV.
Mal schauen ob ich mir ein anderes Gitter besorge, oder ein anderes
Objektiv.
Hmm kay,
als Spalt wollte ich ne Konstruktion aus 2 Rasierklingen nehmen, deren
Spaltmaß wird dann mit nem Spaltmaßprüfer eingestellt (dieses Werkzeug
mit den vielen Metallblättchen). Wegen CCD muss ich ma gucken, hab da
noch keine Erfahrung mit. Es gäbe ja die Sensoren von Pollin oder die
ILX von Sony zur Auswahl. Ich werde mir wahrscheinlich erstmal das
Papp-Spektroskop von Astromedia mitbestellen um mich da einigermaßen
reinzufinden xD. Momentan nutze ich BASCOM für kleinere Projekte mitm
AVR, aber ich denke das kommt nicht hin mit der Geschwindigkeit des
CCDs? Gibts zu den CCDs nich auch entsprechende Peripherie-ICs bzw
Verstärker die den Auslesevorgang automatisch übernehmen können und mir
nur dat Datenpaket liefern im Endeffekt?
MfG und schonmal danke für die Hinweise zu deinem Aufbau
Hi, hier ist der Assemblercode...
...und das Delphi-Tool, was ich damals geschrieben hatte, liest die
Daten am COM port ein, und zeigt sie als Spektrum an.
Der Code hat zwar geklappt, ist natürlich aber n bissl durcheinander.
Also ich blick da jetzt ehrlich gesagt auch nicht mehr so krass durch.
Aber falls es fragen gibt, kann ich gerne behilflich sein. Am Besten
isses wahrscheinlich, sich den Code (sowohl PC als auch Mikrocontr.)
nochmal in schön selbst zu proggen, dann weiss man am Besten Bescheid
:-)
Moritz
Gibt es denn neues auf dem Gebiet?
Bei Pollin gibt es z.Zt. CCD-Zeilen mit 2x5400 bzw. 2x10680 Pixel, die
verwendenten NEC-Bausteine sind leicht anzusprechen. Als Auswerte-µC
habe ich mir den dsPIC33FJ64MC802 ausgeguckt, der hat 16kByte RAM und
einen ADC mit 1 Msps.
Hello,
Ich möchte mit einem µC einen CCD Zeilensensor auslesen. Könnt ihr mir
bitte mit einer ausgeprobten Hardware Schaltung aushelfen?
Ich wäre sehr dankbar.
FEZA
Hallo zusammen,
bin auf das Projekt Spektrometer aufmerksam geworden und wollte gerne
mal in dieser Richtung an den langen Wochenenden im Keller basteln. In
der Projektbeschreibung sind die Links leider ohne Funktion, bzw. Ich
komme auf eine Seite wo man sich einloggen muß.
Hat vieleicht jemand den letzten aktuellsten Code, der hier früher zum
Download stand und kann diesen zumailen? Wäre schön :-)
Gruß an alle,
Basti
Basti schrieb:> bin auf das Projekt Spektrometer aufmerksam geworden und wollte gerne> mal in dieser Richtung an den langen Wochenenden im Keller basteln. In> der Projektbeschreibung sind die Links leider ohne Funktion, bzw. Ich> komme auf eine Seite wo man sich einloggen muß.>> Hat vieleicht jemand den letzten aktuellsten Code, der hier früher zum> Download stand und kann diesen zumailen? Wäre schön :-)
Ich habe auch mal in einem eigenem Projekt damit rumgebastelt.
Vieleicht hilft Dir ja mein Link dazu:
http://bascom-forum.de/showthread.php?4201-Spektroskopie-mit-ILX551B-2048-Pixel-Zeilensensor
Die Software ist zwar in Bascom geschrieben, ist aber für das Projekt
schnell genug. Lässt sich auch sehr einfach in C übersetzenn, da
eigentlich das Ganze sehr kurz und simpel ist. Den Quellcode findest Du
beim obigen Link.