Nu bijna 4 jaar geleden had ik een oproep gedaan om een optisch detectie systeem te ontwerpen. Zie:
http://www.circuitsonline.net/forum/view/64949/1
Na heel wat voorstellen werd uiteindelijk een definitief ontwerp gemaakt mede door de vele inputs op dit forum. Tot heden wordt dit gebruikt, ieder jaar opnieuw wel een aangepaste versie maar het werkt vrij goed.
Maar aan ieder systeem zijn er altijd nog wat nadelen en tekorten, vandaar dat ik op het punt sta een vrij nieuw ontwerp te maken, iets moeilijker maar dat de nadelen van het huidig systeem wegneemt.
Even de doelstelling opsommen.
Ik heb een high-speed detectie nodig, die via een lens kijkt of een object op de ideale plaats staat en mij een detectie signaal geeft om de camera's, shutters en flitsen te sturen. Het vorige systeem gebruikte slechts 1 photodiode waardoor er slechts een level beschikbaar was om de detectie te homologeren. Het nadeel hiervan is dat de objecten enorm verschillen tussen volledig wit en volledig zwart waardoor de meetsignalen enorm sterk verschillen. Als je heldere oppervlakten hebt resulteerd dit doorgaans in een te vroege detectie waardoor een object niet volledig op de juiste diepte afstand staat en bijgevolg niet perfect in focus. Merkt ook op dat er een tijd verloopt tussen detectie signaal en het echt flitsen van de foto vanwege de zogenaamde shutter-lag. Zelfs al is de detectie uiterst perfect dan nog zal er altijd een belangrijk verschil ontstaan tussen detectie en foto. Het gaat hier om macro opnames, gewoonlijk is het totaal beeld slechts 80mm breed. Als op deze closeup afstand (lens staat op 450mm van het objet) een insect voorbij vliegt aan 20 km/uur wat vrij normaal is, dan is de verplaatsing zo groot dat een normale shutter-lag van 53ms van een heel goede DSLR camera veel te groot is (vliegen staan gewoon niet meer op de foto). Daarom zullen 2 externe high-speed shutters gebruikt worden
Ik heb nu een nieuw ontwerp gestart om hieraan zoveel mogelijk te verhelpen. De bedoeling is om vooraf meer informatie te bekomen van een object die beweegt in de buurt van het focuspunt. Merk op dat normaal een camera het omgekeerde doet, hij tracht de lens te focuseren op het onderwerp en dan de foto te nemen( maar dit gaat veel trager dan 100 us). Ik doet het net andersom, als een object in focus komt op een vaste ingestelde afstand neem ik de foto. Een vrij eenvoudig princiep.
De problemen zijn echter vooral in de korte beschikbare tijden. Daarom even de specs op een rij plaatsen:
- De uitlees cyclus mag niet hoger zijn dan 100 us
- De rekencyclus voor beslissingen ook nog eens max 100 us
- Er wordt een IR of rode laser straal gebruikt.
- Er worden 2 groene lasers gebruikt waarvan de lichtbundel samenkomt in het vaste focuspunt en wordt enkel gebruikt om visueel te zien waar dit focuspunt ligt (IR licht is voor onze ogen niet zichtbaar)
- Vliegrichting moet bepaalt worden. De trigger zal verschillen tussen naderen en verwijderen van de camera.
- Er is informatie nodig hoeveel het object uit focus is.
Ik heb een kleine tekening gemaakt van de nieuwe meetopstelling:
New detector with line array photodiode. by fotoopa, on Flickr
Om nu preventief informatie te verzamelen van een bewegende object (meestal insect) zou ik een line array photodiode gebruiken van 128 pixels. Op de tekening staat een TSL1402R maar dit zou een TSL202R worden omdat die slechts 200 dpi is, de 128 pixels staan hierdoor iets verder uit elkaar waardoor de meetsensor langer is (16mm). Deze meetsensor komt in een afzonderlijke macro meetlens, de AF60/2.8D en op de plaats waar normaal de camera komt. Het beeld wordt hierdoor op de line array geprojecteerd. Omdat de laser voor het meetsignaal gebundeld is tot ongeveer een diameter van 4 mm zal hij op de sensor na reflectie van een object ook een klein lichtpuntje geven. Ik heb ondertussen opgemeten dat de projectie op de sensorplaats 1/7 is van de breedte gemeten in het focus vlak (afstand 450mm). Als een laserlicht 4mm projectie is zal op de sensor een puntje komen ( in het ideaal geval) van 4/7= 0.57 mm.
De sensor heeft een pitch van 125 um, dus alle 125 um staat een pixel. Die laserprojectie zou dus in het ideaal geval 0.57/0.125= 4.5 pixels belichten.
Enkel een object dat zich bevindt in de lijn van de laserstraal kan een projectie geven op de sensor en de plaats zal afhangen van de positie van het object. Meer naar voor zal de blauw lijn als limiet hebben, meer naar achter zal de rode lijn als limiet hebben. Zo tenminste stel ik het mij voor. Praktijk zal wel behoorlijk afwijken maar dat moet gemeten worden.
Het omgevingslicht zal ook een behoorlijk signaal geven op de array maar daarvoor kan je de integratietijd wijzigen zodat de array niet gaat satureren door de omgeving zoals zonlicht(ook de meetlens bevat een diafragma die instelbaar is). Trouwens het laserlicht moet minstens zo sterk zijn dat het in alle gevallen boven het omgevingslicht uitkomt maar dat is op zich niet zo moeilijk, je ziet vb de groene lasers projectie nog steeds bij vol zonlicht.
Er zijn een aantal problemen die moeten opgelost worden en waarvoor ik hoop wat tips te verkijgen. Het uitlezen van de sensor is hier analoog en kan op een max pixel rate van 5 MHz. Mijn eis van uitlezen in 100 us is dus niet zo moeilijk maar... Iedere pixel moet nog terzelfde tijd via een snelle 8 bit AD omgezet worden. Er is zelfs een type array waar die reeds inzit maar hij is:
- niet direct in voorraad
- is een moeilijke package om te solderen.
- is weinig flexibel.
- en is duurder maar anders moet je een AD bijrekenen en dan speelt dit minder rol.
Ik zou echter gaan voor analoge uitgang en dan een AD met SPI interface gebruiken. Ik moet de inlezing toch doen met een FPGA want weinig controller zullen instaat zijn om die data zo snel in te lezen en dan nog te verwerken binnen de gestelde tijd.
Zo een AD met SPI is vb: ADS7888. Kost niet veel maar is vooral klein, weinig pootjes en gemakkelijk soldeerbaar. De meetlens zit niet op de hardware board, hoe minder draden hoe beter. De array sensor bestaat uit 2 delen die parallel kunnen uitgelezen worden zodat de tijd maar over 64 pixels komt ipv 128. Ik zou 2 van deze SPI AD's gebruiken want alles kan vrijwel synchroon gestuurt worden via state machines in de FPGA. Er is wel een clock nodig van 25 MHz maar met een FPGA is dit geen probleem.
De analog pixel uitlees snelheid gaat tot 1.25 MHz, wordt dus 2.5 MHz voor de beiden samen en geeft een totaaltijd van rond de 52 us voor 2 x 64 pixels. Dit voldoet aan mijn eisen.
Nu komt het probleem, intern in de FPGA zullen die 128 licht-pixels van 8 bit opgeslagen zitten. Er zal hoogst waarschijndelijk ergens een piek curve over meerdere pixels zitten als iets in het bereik komt, is het perfect in focus dan zou deze piek ongeveer in het midden moeten liggen. Ik moet nu via eenvoudige bewerkingen kunnen bepalen waar ongeveer die piek ligt. Speek mij niet van ingewikkelde formules om dit te bepalen maar splits ze in normale bewerkingen, shift, add, sub, comp, mul ik weet niet wat maar hou het bewerkbaar (verstaanbaar) en zeken met integers, geen floating point routings. Er zitten wel 32 stuks multiplayers in van elk 9 x 9 bit in mijn FPGA die berekeningen in enkele clocks kunnen uitvoeren op heel hoge speed. Aan de wiskundigen zou ik vragen zo iets in bewerkingen uit te schrijven die ik dan kan implementeren. (Ik heb enkel naar de kleuterschool geweest en dat is ruim 60 jaar geleden)
Dat er ook rekening moet gehouden worden over verschillende metingen is geen probleem, de FPGA bevat high-speed interne ram om meerdere 128 8 bit pixles op te slaan en hiermee verder te rekenen. Ik heb ruim 100 us om alles te berekenen, vergeet niet als je over vb 8 metingen een richting of diepte zou moeten bepalen dat dit al 1K ram bevat aan data. Die richting zou ik willen, want een object die naar het focuspunt verschuift zal een piekverschuiving in de data positie geven.
Allez dat hoop ik allemaal. Ik zou volgende week de componenten bestellen bij Mouser want die zijn in voorraad. Je weet ik heb graag reeds de volgende dag een kant en klare print om te bestukken en te testen. Dus geen double face, geen multilayer, just go en run.
Met mijn picoscoop zou ik direct op het analoog uitgangs signaal de curve moeten zien hoe dit verloopt. Dus tot daar zou het snel kunnen gaan. Er is 1 belangrijke onbekende, ik weet helemaal niet hoelang de integratietijd zal zijn tussen de metingen. Moest die te lang zijn dan gaat het volledige project naar de vuilbak. Maar met de huidige bestaande metingen op een gewone photodiode zoals reeds 3 jaar gebruikt heb ik tot 1V bij een belichtingspuls van 30 us. Ik hoop dat deze array het zeker niet slechter doet.
Oefs, een lange boterham. Kom niet af met sensors zoals in de lowcost digitale meters want die meten per 39 ms en niet in enkele us. Ik ga ook geen componenten bestellen buiten de normale shops maar enkel zoals Mouser, Conrad, Digkey of onze eigen hof leveranciers. Kom niet af met alternatieven uit china of ebay.
Ter info, deze unit gaat volgend jaar gebruikt worden voor 3D opnames maar nu met 2 externe shutters die slechts 6 ms shutter-lag hebben. Ik moet een insect van 1x1mm ook vrij zwart kunnen detecteren op een werkafstand van ongeveer 0.5m.
Frans.