Roland van Leusden
It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
Mijn werkwijze voor SMD:
- Flux (no clean) op de PCB met een fluxpen
- IC solderen volgens de "sleep" methode
- Overtollig soldeer verwijderen met litze
- Alles gesoldeerd dan ultrasoon reinigen
- Print beschermen met plastic lak
Sleep methode:
Flux en enkele nieuwe soldeerpinnen staan al op mijn volgend bestel lijstje. Litzedraad heb ik nog op voorraad, dit gebruik ik al jaren.
Na wat vertraging heb ik weer verder kunnen werken. De schilderwerken gingen voor, hierdoor kon ik geen printjes etsen. Maar vandaag liggen alle films klaar en zijn aan het drogen in de oven op 50 graden.
Ik heb een extra interface kaart gemaakt die past op de meeste Terasic boards zoals de DE1, DE0, DE0-nano en CPLD MAX-II. Een 40 polige 3M connector kabel verbind 36 vrije I/O pinnen naar deze interface board. Hierop zit nu standaard een LCD 4x20 char display, enkele extra drukknoppen, extra power inputs voor 5V en 3.3V en de rest van de I/O signalen hebben een aantal transistor buffers o.a. om de lasers te sturen of camera of flitsen enz. De interface bevat ook de aansluitingen voor de nieuwe SMD line array detector.
Hier de interface voor de FPGA boards:
fpga_interface_schema by fotoopa, on Flickr
fpga_iterface_layout by fotoopa, on Flickr
fpga_interface_bestukking by fotoopa, on Flickr
En ook nog de bestukking van de SMD onderdelen van de detector. Nu de componenten binnen zijn heb ik de pinout nog even kunnen checken zodat de behuzingen correct zijn.
line_array_smd_bestukking by fotoopa, on Flickr
Ten laatste morgen zouden de printjes geetst zijn en geboort, klaar voor de bestukking. De meet resultaten zullen wat later zijn want ze voorspellen heel mooi weer en dan zitten er heel veel beetjes buiten, tijd voor wat nieuwe 3D opnames. Ook nachtwerk zal er weer aan te pas komen want de nachtvlinders vliegen ook liever bij hoge temperatuur. Zoals altijd zijn afbeeldingen klikbaar naar de full resoluties op mijn Flickr site waar alle grotes opstaan.
Update:
De printjes zijn geetst, geboord, beschermlak en even in de oven gebakken op 80 graden. Zo verdampt het vocht en blijft de beschermlaag harder en beter bestand tegen de vingers tijdens het solderen.
De PCB van de FPGA interfaceboard:
fpga_interface_pcb by fotoopa, on Flickr
En de SMD line array detector printje; foto lijkt veel groter dan de eigenlijke print in werkelijkheid omdat dit een macro opname is. Je ziet echter duidelijk of de etsing en sporen van goede kwaliteit zijn.
line_array_pcb by fotoopa, on Flickr.
Etsen en boren samen ongeveer 2.5 uur werk voor de beide printjes.
big bang
Niets is zo eerlijk verdeeld als verstand: iedereen denkt er genoeg van te bezitten
Wow Fotoopa, die printjes zien er onwezelijk scherp uit! Puur klasse.
Welke printer (voor layout), welke sheets gebruik jij? En etsmiddel: ferrichloride/ammoniumpersulfaat/natriumpersulfaat(fijnetsmiddel)?
- - big bang - -
Ontwikkelaar natriumhydroxid.
http://www.conrad.be/ce/nl/product/527882
Etsen Natriumpersulfaat vroeger ook van Conrad maar nu hebben ze het niet meer, gebruik nu van Dick B.
Printer doodgewone Canon 520 printer-scanner low cost met gewone Canon inkt op Avery inkjetfolie sheets (Conrad). Perfecte printing, nooit problemen met belichting of etsen.
ontwikkelaar altijd tussen 25 en 30 graden ( termometer gebruiken!).
Na 5 seconden zie je de sporen komen, max na 30 seconden is de ontwikkeling gedaan, direct afspoelen en etsen.
Etsen rond de 60 graden maar dit is niet kritisch.
Layouts van eagle, output op 1000 dpi (1 mils resolutie) Dan doe ik wat update in PS en als alles klaar is pas ik een minimum filter toe op de tekening van 1 pixel ( 1 mil ) Hierdoor worden de afstanden tussen de baantje langs beide zijden 1 mil kleiner en dit voor het compenseren van het onderetsen.
Gebruik glazenschaaltje vloeistof inhoud 0.33L ontwikkelaar 1/3 dopje, het etsmiddel is 80 gr (afwegen). Ik maak daar tot 5 europakaarten mee af. Ik bewaar nooit gebruikt ontwikkelaar of etsmiddel, gewoon wegkiepen en de volgende maal nieuw. Voor 0.3L is die kost de moeite niet om dat in flessen te gaan bewaren en je hebt altijd perfecte konditie's. Bewijze de layouts.
Update:
Ik gebruik ook de Bungard printen:
http://www.conrad.be/ce/nl/product/529249/
Altijd de 100x160mm enkelzijdig, aankoop normaal per 10 stuks ( zijn dan goedkoper) en blijven minstens 2 jaar goed. Als het ontwerp kleiner is plaats ik op de film enkele kleinere printjes bij tot het volledig formaat gevuld is. Ik heb hiervoor verschillende layouts liggen met kleine klemstrookjes, testprintje.
[Bericht gewijzigd door fotoopa op (14%)]
big bang
Niets is zo eerlijk verdeeld als verstand: iedereen denkt er genoeg van te bezitten
Bedankt voor de info fotoopa. Tis maar een weet.
Ik ets zowel met ferrichloride als met natriumpersulfaat. Gaat wel scherp. Ik moet zeggen, de laatste printen die ik verwerkte waren fotogevoelige printen van Farnell, en die waren echt superscherp. Het heeft dus ook met de conditie van de fotolak te maken.
(tja, ik kreeg vroeger van een vriend 5(!) Bungard printen van 51cmx57cm met fotolaag nog nieuw in de verpakking, en tegen dat je die ophebt is ze al wat ouder. Nu, Bungard is heel lang houdbaar hoor)
- - big bang - -
Eindelijk weer nieuwe gegevens. De mechanische opstelling heeft behoorlijk wat voorbereidend werk gekost. Heel wat stukken moesten gedraad en gefreest worden voor de meetopstelling. De FPGA module moest ook worden geprogrammeerd om de nodige signalen te generen.
Hierbij de opstelling:
tsl202r_setup by fotoopa, on Flickr
Ook de eerste metingen zijn gedaan:
tsl202r_signals by fotoopa, on Flickr
Om de details te zien zal je waarschijndelijk de volle resolutie file moeten bekijken via Flickr ( doorklikken).
De eerste resultaten zijn vrij positief. Wat direct opviel was het enorme fijne pieksignaal van de geprojecteerde laser. Maar als je kijkt naar de projectie in de meetlens dan wordt het bolletje van de laserpointer slechts een heel klein puntje door de gebruikte lens op 550 mm meetafstand. Vandaar dat slechts 1 pixel van de line array voledig belicht wordt. Dit is te weinig en ik ga ofwel de straal moeten vergroten ofwel een lens met grotere focal lengte gebruiken. Ik had eerst bijna geen signaal met een ledlamp op 1 cm van het object maar het viel me dan binnen dat het lichtspectrum van de sensor veel hoger ligt, ongeveer ideaal voor een rode laser pointer. Door de laserpointer uit te richten zag ik plots die piek verschijnen, het gewone licht is slechts rond de 60 mV, het laserlicht gaat tot boven op het saturatie level met de lens volledig open. De lens 1 stop toegedraaid heeft ongeveer 2V piek en dit bij een integratietijd van 71 us. Als je die tijd verhoogd dan wordt het signaal evenredig hoger tot je de saturatie bereikt. Op donkere vlakken is het signaal echter veel veel lager. Dit zal moeten opgevangen worden door iets meer laservermogen ( nu 1mw) en een eventueele langere integratie tijd. Die tijd zou ik zelfs kunnen variable nemen om een soort auto regeling in te bouwen zodat ik zeker niet te veel omgevingslicht heb waardoor de sensor zou kunnen satureren. Oef nog heel veel werk en metingen. Zodra ik het object iets verplaats in de diepte zie ik heel snel de piek op de array verschuiven. Door de gebruikte hoek is dit super gevoelig, iets wat ik echt nodig heb.
@ alex278,
Ha daarmee kan ik nog even wachten, mijn beestjes vliegen gelukkig wat trager.
Maar licht meten is toch behoorlijk leuk, zeker als je hiervoor een toepassing heb. Vandaag heb ik verschillende metingen gedaan om de invloed van het omgevingslicht op de laser meting te zien. En dat valt behoorlijk mee.
Hiervoor heb ik een test gedaan met een halogeen lamp van 1000W op een afstand geplaatst van 40 cm van een testkaart. De testkaart was voorzien van enkele zwarte en witte zones teneinde de reflectie te kunnen meten. Ook de rode laserpointer had ik ongeveer in het midden van het witte vlak gericht. De metingen zijn heel duidelijk:
tsl202r_light_1KW by fotoopa, on Flickr
De rode lange puls geeft de uitleestijd weer om de 128 pixels uit de line array te lezen. Iedere pixel uitlezing duurt 445 ns. De blauwe lijnen geven de meetwaardes aan. Buiten de uitleeszones is het signaal 0V. In de witte zones komt het signaal wat hoger, naar rechts toe stijgt het wat maar dit komt omdat de 1000W lamp aan die kant opgesteld stond. De zwarte zones geven nog net een signaal aan die wat boven de nul ligt. In het midden is de piek te zien van de laserpointer. Omdat de pointer slechts een klein puntje is wordt er op de lijnsensor slechts 1 volle pixels echt goed belicht. De sensor zit op de plaats waar normaal een camera zou zitten, dus op dezelfde sensor afstand. Bij Nikon is dit 46.5mm.
Omdat ik vooral de positie in het Z vlak moet weten ( de diepte) is de positie van de gereflecteerde piek op de linesensor heel belangrijk. Net zoals een afstandsmeter heeft die positie aan of het voorwerp voor, op of na het ideale focuspunt ligt. Ik heb bijgevolg een grenswaarde links en rechts tov het center waarbij ik nog kan besluiten dat een foto nog scherp zal zijn. Dat is juist de bedoeling van deze opstelling. De totale tijd die nodig is om een trigger te geven is hier slecht 71 us. Mijn doelstelling was om beneden de 200 us te blijven. Veel korter dan die 71 us wordt moeilijk omdat de integratietijd voor de sensor te kort wordt waardoor het signaal te zwak. In de definitieve opstelling ga ik een laser van rond de 10 mW gebruiken ipv de huidige 1mW. Dit zal een gunstige invloed hebben op de signaal gevoeligheid.
Ik ga nu proberen om meer dynamische live metingen te doen met objecten ipv testkaart. Dan gaan de signalen heel wat meer spreiding hebben en wordt het tijd om reken algorithmen te gebruiken. Maar nu weet ik al dat de absolute waarde van de amplitude minder belangrijk is als je maar de positie van de piekwaarde goed kunt bepalen. Die positie geeft aan of je een foto mag nemen.
Update:
Om de invloed van de focalt lengte van de lens te weten heb ik een meting gemaakt met een AF200/4D macro lens inplaats van de AF60/2.8D macro lens. Het verschil is duidelijk, gezien er meer macro is, meer vergroting van het beeld op dezelfde meetafstand, zijn er nu meer pixels belicht door de reflectie van de rode laserpointer.
tsl202r_af200macro by fotoopa, on Flickr
De opname vertoont ook meer details van de analoge output van de line sensor chip. Hier ziet je dat de settling time rond de 169 ns is, 185 max volgens de datasheets. Deze waarde is belangrijk voor de volgende stap waar ik de ADC wil gaan koppelen om de analoge spanning om te zetten naar digitaal en serieel uit te lezen naar de FPGA op hoge snelheid. De figuur geeft aan dat er nu 4 pixels belicht worden. De lens stond op F5.6, wat 1 stop van volledig open is. Het verhogen van de laserpower van 1mW naar 10 mW zal het signaal verder versterken. Hiervoor moet ik een nieuwe laserpointer aankopen. Het blijft een speling tussen integratie tijd en levels maar het ziet er naar uit dat ik gemakkelijk de totale meetperiode van 100 us zal halen om een detectie signaal te berekenen voor de camera's (3D opnames).
Straks kan ik de ADC's, 2 x ADS7888, bestukken en de uitleesmode wijzigen van 1 x 128 pixels naar 2 x 64 pixels. Hierdoor kan ik de ADC tijd beperken. Alle signalen zijn op de FPGA interface reeds voorzien. Je ziet hier ook hoe belangrijk het is om metingen te kunnen maken. Een Picoscope, een Intronix LA, een STK600, een DE1 FPGA board, het zijn allemaal zo belangrijke elementen die je heel snel helpen bij de verschillende testen. Alle meettoestellen hebben ook directe uitgang voor documentaie op de PC wat heel konfortabel en snel is bij gebruik.
[Bericht gewijzigd door fotoopa op (26%)]
Op 31 juli 2012 10:35:37 schreef Lord Anubis:
Prachtig om dit te zien, en ben iedere keer onder de indruk van je fotos op je ws, Petje af.
Bedank! Het is natuurlijk juist de bedoeling foto's te kunnen maken van minder voor de handliggende insecten. Vooral voor degenen die een 3D game scherm hebben kunnen ze nog beter de beelden beoordelen. Toch zijn de web versie's nog niet de meest geschikte voor een full HD scherm omdat ik mij nu eenmaal moet beperken in breedte om ze ook cross-view te kunnen zien. Ik heb echter de origineele beelden in full HD 3D op 1920x1080 pixels voor 120Hz monitors.
Het ontwerp staat niet stil. Ik heb nu zelf een oude lens omgebouwd. Deze lens komt uit de jaren 1952, een Linhof Schneider 105-3.5. Daarvan was de shutter gebroken. Ik heb de beide lensdelen gebruikt en een nieuw tussenstukje gemaakt met binnen schroefdraad van 29.5x0.5mm. Zo een schroefdraad op een draaibank maken is echt precies werk maar het is gelukt en de beide lensdelen draaien daar mooi in. Voor de achterkant heb ik een Nikon F-mount adaptor gedraaid met een verschuifbare tussenbus voor het focuseren. Nu kan ik deze nieuwe lens op mijn bestaande F-mount interface als detector lens gebruiken.
P8032518 by fotoopa, on Flickr
De resultaten zijn zoals verwacht heel goed. Het focuseren moet wel heel juist gebeuren maar dan heb je ook heel sterk signaal. Ik heb ook de rode 1mW laserpointer vervangen door een groene van 10 mW en dit maakt heel veel verschil. Ook voor het praktisch gebruik zie ik in volle zon veel beter een groene pointer dan een rode.
De nieuwe meetresultaten bij 71.3 us integratie tijd:
tsl202r_schneider_105mm by fotoopa, on Flickr
Het wordt nu silaan tijd om de analoge waarden nu via de snelle ADC convertors in de FPGA te pompen. De metingen geven nu reeds aan dat het bepalen van de juiste afstand ( dus plaats waar de insecten zich bevinden) vrij eenvoudig zal zijn. Er blijkt bij reflectie altijd een bult te zijn van enkele pixels breed zelfs al is het reflecterend object vrij zwart. En de positie van die bult in de line array geeft heel nauwkeurig de afstand van het object tov het ideale middenpunt. Diepte meting op 0.5mm is zeker geen probleem. De huidige testen zijn gedaan op 500 mm afstand van de voorkant van de lens camera. Als ik dichter ga bekom ik nog meer signaal en is de meetnauwkeurigheid nog hoger. Dat de sensor gaat satureren is geen probleem want het is enkel de positie in de array die belangrijk is.
Er is weer heel wat veranderd sinds de mijn laatste post. Om de camera te richten op de insecten heb ik zelf 2 groene lasers nodig om de lichtpuntjes te zien. Rode lasers zijn in volle zon te zwak, vooral ik minder goed rood zie.
De nieuwe metingen heb ik nu gedaan met deze 2 groene lasers ipv een rode van 650 nm. Hoewel de groene rond de 535 nm liggen en iets meer op de rand van de doorlaatkurve van de sensor blijken ze toch veel meer signaal af te geven op de line sensor. Dit komt vooral omdat groen beter zichtbaar is en het vermogen is hier ook 10 mW per stuk.
Maar met 2 lasers heb ik nu 2 spots als ze niet juist in focus zijn. Met 1 laser heb je maar 1 spot en die verschuift in positie. Hierdoor heb je ook informatie of je voor of achter het focuspunt ligt. Met 2 lasers heb je dit niet meer. Je kan enkel zeggen dat ze juist in focus zijn als de beide spots samenvallen en ook de richting van of naar het focuspunt kan je weten aan het vergroten of verkleinen van de afstand tussen beide spots.
Een analoge opname van 2 spots iets uit elkaar, dus iets uit focus:
tsl202r_2_green_lasers by fotoopa, on Flickr
Ondertussen heb ik de detector volledig bestukt en werken ook de beide high speed adc7888 convertors. De hoogst toegelaten serieele clock hiervoor is 25 MHz. Alles vertrekt vanaf een PLL uit de FPGA op de dubbele frequentie, dus max 50 MHz. Ook de volledige timing draait synchroon vanaf deze PLL clock. Hier is zo een volledige uitlezing te zien op de Intronix LA:
adc_line_array_fpga by fotoopa, on Flickr
Voor goede leesbaarheid zal je wel naar de hoge resolutie versie moeten gaan kijken. Er zijn 2 adc chips omdat ze beiden de helft van de line array uitlezen zodat de totale uitleestijd gehalveerd wordt. De uitlezing bevat ook de serieele data omgezet door de LA waardoor je direct de waarde van de adc's kunt lezen. De max piekwaarde is rond de 184 eenheden, hogere waardes zijn niet mogelijk omdat de line sensor in verzadiging gaat door het hoge signaal. Is er geen spot te zien dan ligt het adc niveau vrij laag, in ieder geval beneden de 10 bij gewoon omgevings licht.
Het volledige princiep staat hier nog even in detail getekend:
line_array_detector by fotoopa, on Flickr
Nu komt het echte rekenwerk en hiervoor zou ik graag hulp hebben. Als er reflectie is van een object heb ik 1 spot indien in focus en 2 spots die iets van elkaar liggen indien ze uit focus zijn. Hoe verder de spots uit elkaar liggen hoe meer uit focus. Een normale focus zone is vooraf te bepalen ( lens + afstands berekening) en hierdoor kan ik met zekerheid weten of een object op dat ogenblik voldoende scherp zou zijn. Gaan de spots bij opeenvolgende metingen naar elkaar toe dan beweegt het object zich richting focus. De meest eenvoudige manier van werken kan dus reeds zijn als de spots herkenbaar (meetbaar) zijn en binnen een onderlinge max afstand liggen. Die max afstand zal ergens tussen 10 en 15 pixels zijn.
Een spot heeft altijd de zelfde vorm, enkel zijn amplitude verschilt. Maar de amplitude opzich heeft geen waarde enkel de positie. Normaal zijn de spot pixels in totaal rond de 5 opeenvolgende pixels. Bij heel zwarte objecten kunnen deze spot waardes amper boven de omgevingswaarden uitkomen maar voorlopig ziet er dat vrij goed uit want zwart mat oppervlakten geven al snel waarden die 10 to 15 eenheden boven de omgeving vallen. De bultjes zijn dus wel degelijk op te merken.
Het omgevingslicht op zich is zeker geen konstante. Ze moet bij iedere scan opnieuw gemeten worden. Als de zon op komt zal die grondwaarde vrij behoorlijk stijgen maar de bultjes van de spots blijven daar wel boven zweven en blijven dus detecteerbaar.
Ik zou graag op het einde van iedere line scan reeds de actueele omgevingswaarde hebben en zou via een eenvoudige methode de positie's van de 2 spots willen weten.
De serieele data vorm is dus altijd iets in de aard van:
7-7-7-7-15-25-16-9-7-7-7-7-17-29-25-9-7-7-7
Andere pieken moeten nooit gezocht worden want die kunnen niet optreden of je zou toevallig ergens op een spiegel reflectie moeten krijgen maar daar gaan we ons geen zorgen over maken. De 2 spots kunnen wel veel verschillen in amplitude omdat de reflectie van de beide punten op verschillende helderheden van het object kunnen vallen. Maar weerom, het is niet de amplitude maar wel de positie in de array die telt. Saturatie is geen probleem, die waarden zijn dan rond de:
-7-11-30-185-184-50-15-7
De spot kan iets breder zijn maar de vorm blijft hetzelfde, het is gewoon de positie waar de max ligt op 1 tot 2 pixels nauwkeurig die telt.
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Ik denk dat het handig is om bij het inclocken van de data alle samples op te tellen. Aangezien je, als ik me goed herinner, in totaal 256 pixels krijgt, heb je dan een gemiddelde waarde als je de onderste 8 bits weggooit. Je zou, tegelijkertijd, ook een maximale en eventueel een minimale waarde kunnen bijhouden, die kunnen verderop in het algoritme handig zijn, en de data komt nu toch al een keer langs.
Je zou dan eerst alle pixel data kunnen opslaan, en als de minimale, maximale en gemiddelde waarde bekend zijn, alles gaan verwerken. Eventueel kun je ook de minimale, maximale en gemiddelde waarden van de vorige cyclus gebruiken, en bij het binnenhalen van de data deze al direct verwerken.
Het eenvoudigste is waarschijnlijk om eerst een drempelwaarde te bepalen, bijvoorbeeld halverwege de gemiddelde en maximale pixel intensiteit. Daarmee kun je dus elk pixel reduceren tot een bit; hij maakt wel of geen deel uit van een reflectie.
Terwijl de data binnenkomt, kun je dus bijhouden of je in een reflectie zit of niet. Als het vorige pixel onder de drempelwaarde lag, en het huidige erboven, is dat het begin van een stip, en andersom het eind van een stip. Als je nu vanaf het begin van beide helften van de sensor op zoek gaat naar een opgaande flank, waarbij je die van de 2de sensor gebruikt als je er op de 1ste sensor geen hebt gevonden, en precies andersom zoekt naar de laatste neergaande flank, heb je volgens mij alle informatie die je nodig hebt.
Naar mijn idee is het helemaal niet nodig om de beide stippen los van elkaar te zien; de breedte van elke stip is, als ik het goed begrepen heb, toch altijd min of meer gelijk, en de tussenafstand lijkt me ook niet bijzonder interessant. Juist de afstand tussen het begin van de eerste stip en het einde van de tweede, en eventueel de positie van die twee punten lijkt me interessant. Door de eerste opgaande en de laatste neergaande flank te zoeken, ga je de twee stippen als een grote stip beschouwen.
Je zou ook kunnen bekijken of het handig is om naar het verschil tussen pixels te kijken (eventueel steeds een overslaan, vanwege het pixel met de halve intensiteit bij elke rand), in plaats van naar de absolute helderheid. De rest van het algoritme blijft dan hetzelfde.
Niet dat ik je direct kan helpen, maar wel een vraag.
De afstand van je picture frame ruimte naar je lens, de ideale spot positie, is deze altijd vast?
Zijn de twee lasers ook altijd op gelijk/vaste afstand van je Lens zijde? Of is het de bedoeling om ze kunnen regelen dat ze dichter of verder van de zijkant van de lens vandaan kunnen komen.
Als deze kan veranderen zal de spots op je max focus punt verder of dichter bij je ideaale focus punt komen. Spots dus dichter of verder uit elkaar. Zal dan ook je LA beïnvloeden denk ik zo en je berekeningen er achter om een actie te triggeren.
Over hoe bepaal je of je object nu zich bevind bij de voorste of achterste twee spots?
Ga je het laser signaal moduleren ( desnoods van maar één laser ), of één laser een aangepaste kleur?
Wat als je object zich net rechts schuin 3mm van het ideale punt bevind? Je zal maar een dot zien, misschien ook geen, maar het object zal scherp zijn. Je ziet dan of de linker laser dot, of de rechter. Je laser is 4mm. Zou twee bredere bundels niet beter zijn, en ze dan om en om aanzetten en meten via je LA? 4mm op 80 x 35 is nogal klein
@SparkyGSX,
Alvast bedankt voor de uitgebreide gegevens. Er zit een hele hoop leuke dingen bij, ik ben al wat aan het programmeren.
Eerst nog even dit:
Ik beschouw de 2 stukken array als een geheel.
Er zijn nu 2x64 pixels=128 totaal.
Veranderingen in belichting zijn relatief traag tov de uitlezing.
Ik zou genoeg hebben aan een 100 us cyclus (integratie tijd).
Dit zijn 10.000 sampels/sec, de snelste vleugelslag van insecten ligt rond de 1000Hz 10x trager dan mijn uitlezing.
Bewegingen van camera zijn ook relatief traag voor licht veranderingen.
Hierdoor mag je stellen dat het verschil bij de uitlezing van de 2 array stukjes onderling geen overgangsproblemen zal geven.
Een detectie blijf zeker meerdere scans signaal geven.
Spijtig kunnen groene lasers niet snel aan en af geschakeld worden. Nu hebben ze een starttijd nodig van 100 ms.
Mijn vorige IR lasers kon je schakelen tot 5 MHz.
Ik heb groene lasers nodig omdat ik zelf ook de projectie punten moet zien. Zo kan ik de camera richten naar het gewenste object. IR lasers vallen niet meer in de doorlaat van de line sensor, enkel rode lasers. Maar door het aanzetten van de groene lasers zou mijn signaal van rode lasers gestoort worden. Daarom nu deze opstelling met enkel 2 groene lasers en geen rode.
In een filmpje zou ik het mooi kunnen tonen, als mijn hand beweegt hoe snel ook zie je de spotjes gewoon naderen en weer opengaan. Dit komt overeen met naderen naar focus en terug verwijderen. Het is net als de oude afstemoog van in de jaren stilletjes in de oude radios.
Voor de waarde van het omgevingslicht zou ik idd alle samples gewoon optellen tijdens het binnenkomen en daarvan de 8 hoogste bits uitlezen ( 64 past hier goed per adc, is 6 bits laten vallen) Zelfs al zijn er 2 sterke spots binnen de scan, ze hebben maar max 8 pixels in het aandeel van de som omdat dit de max breedte van de 2 spots is. Het gemiddelde zal net ietjes hoger liggen maar dat is zelfs beter. trouwens lichtinval van de zijkant geeft nu al een oplopend/aflopend omgevingslicht van enkele pixels van de ene naar de andere kant.
Nu ben ik bezig aan een optelling ( gemiddelde) van 4 lopende pixels tijdens het binnen lezen ( is net een venster dat je op de inlees string plaatst. Zodra er een spot voorbijkomt zal ik altijd die piek moeten zien, bij de hoogste som ligt die piek dan -2 pixels, die piek weet ik en de positie ook, dus kan opgeslagen worden tijdens het inlezen. Maar over de detectie van de 2de piek moet ik nog even nadenken. Vooral 2 spots kunnen in amplitude erg verschillen in dezelfde scan. Ook kunnen de 2 spots perfect boven elkaar liggen waardoor er slechts 1 spot kan gemeten worden.
Tijdens de afregeling kan ik ervoor zorgen dat het ideaal focuspunt niet precies in het midden van de array valt. Dit is puur een optische regeling en het verminderd overgangs problemen. Zijn de spots ver uit elkaar dan is het resultaat voorlopig niet belangrijk, enkel de afstands verandering tussen de spots bij opeenvolgende scan wel.
@ Lord Anubis,
De afstand camera en object ligt vast, focus punt ook.
Lasers staan zijdelinks op een vaste afstand en worden gericht naar het midden van het beeld. Komt een object precies in focus dan zullen beide spots samenvallen.
Ik kan niet weten uit een scan of het object voor of na het focuspunt ligt wel of het niet te ver verwijderd is. Uit meerdere scans kan ik wel de richting bepalen en dus wel weten als het object zich naar of van het focuspunt beweegt. Uit de DOF berekeningen kun je ook bepalen hoeveel die afwijkingen zijn die nog een scherp beeld zullen geven. Hierdoor ligt de max toegelaten afstand tussen de spots vast. Of het onderwerp nu iets voor of na het ideaale punt zicg bevind maakt eigenlijk niets uit, het beeld zal nog goed zijn.
De huidige laserspot geeft op de array ongeveer 4 pixels belicht. Een insect van 1 mm zou nog net een detectie moeten kunnen geven. Maar dan zal hij juist ter hoogte van de laserstraal moeten vliegen. Dit is bij afregeling normaal in het horizontaal vlak, halve hoogte van het beeld. Hoe grotere insecten hoe meer ze mogen afwijkingen van deze hoogte. De macro instelling is altijd zo dat voor de doelgroep een beeldkader gebruikt wordt die daarmee overeenkomt. Als je beestje van 1mm in volle vlucht wens op te nemen zal je beeldkader niet veel groter mogen zijn dan rond de 24mm. Dat is heel close macro!
Update1 17H05
Het systeem met de lopende som van 4 pixels tijdens de inlezing werkt idd perfect. Iedere afzonderlijke spot geeft een piek som waarde mooi aan en de echte piek positie is idd -2 pixels. Perfect mooi te zien op de LA ( Hé daarom heb je veel kanalen nodig want nu heb ik 2 x 8 bits sum + alle andere serieele signalen nodig, ruim 25 ingangen op de LA zijn nu gebruikt). Op de LA zie je nu direct sum BCD de waardes voorbij komen. Ik gebruik ook nog eens 2 eigen serieele protocols bij het inlezen van de adc's. Vandaar dat een LA waar je via een Wizard alle mogelijke protocols kunt maken dat dit echt leuk is ( en uiteindelijk goedkoop) om te werken.
Nu ga ik het gemiddelde gaan berekenen van het omgevings licht door de som van alle pixels te maken tijdens de inlezing. Weer enkele regels verilog!
Het omgevingslicht op dit lopend venster als de lasers niets relecteren blijft nettjes op 3 eenheden staan voor beide array stukjes. Nu is het omgevingslicht binnen vrij laag te noemen. Straks zou het totaal gemiddelde ook op dit level moeten liggen.
Die 2x 8 bit lopende som geeft ik op 16 extra uitgangen op de FPGA. Nog een reden om FPGA boardjes hiervoor te gebruiken. Je hebt zat aan vrije I/O pinnen en snelheden spelen geen rol. Nu monitor ik gewoon realtime deze resultaten. Dat is gewoon anders niet haalbaar. Een paar regels code brengen deze resultaten naar de LA.
Update2 19H20
Ik heb de optelling nu ook gedaan van alle 128 pixels en daarna 7 bit geschift als deling om zo het gemiddelde te bekomen. Dat werkt perfect. Ik had het geluk dat tijdens de meting de zon net opkwam in mijn bureel en zag zo de omgevingswaarde zelfs stijgen van normaal 4 tot 19. Als ik een wit object plaats rond de focuszone maar uit focus zodat er 2 spots komen wordt het gemiddelde max 11 eenheden hoger. Dit klopt want 2 x 4 saturatie pixels(180)/128 geven deze 11 extra waardes als level.
Gebruik ik een zwart object dan komt er maar 1 eenheid bij het gemiddelde omdat de spot piekwaardes veel lager liggen. Ik zie bijgevolg geen probleem om uit deze totaal sum het gemiddelde te berekenen. Het minimum spot level zou ik dan rond de 5 eenheden boven het gemiddelde van de vorige scan gebruiken. Dit is een heel eenvoudig algorithme. Ik heb nu 32 extra I/O pinnen voor de LA gemaakt waar al deze resultaten kontinue beschikbaar zijn om realtime te monitoren.
Het wordt toch een redelijk projectje! Zopas de nieuwe FPGA module ontvangen. Foto is uit de hand gemaakt met mijn compact cameratje de EP-PL3 met de standaard lens 14-42:
DE0_nano fotoopa by fotoopa, on Flickr
Ongeloofelijk hoe ze dat kunnen maken voor zo een lage prijs. Alles is natuurlijk relatief maar je zou er nooit de chips voor kunnen kopen. Met meer dan 22.000 LE bloks is dit een enorme krachtige module op een kleine oppervlakte. De 2 belangrijkste 40 pins connectors zitten mooi op de zijkant, ideaal om op mijn uiteindelijke driver module op te pluggen. Nu hebben zo ook een mooie ADC convertor opzitten, 8 channels 12 bit elk 200Ks/sec, iets dat vroeger een probleem was en nog de enige reden waarom je een micro -controller kon gebruiken. Nu heb je dat ook niet meer nodig.
Voor de gebruikte algorithmes ben ik er ver door. Tests tonen aan dat het geheel moet werken in de praktijk. Zoals "SparkyGSX" voorstelde bereken ik nu een gemiddelde omgevings waarde. Ik doe het over 8 volle lijnen van 128 pixels als doorlopende module. De ram is synchroon toegangkelijk voor lezen en schrijven, zowel bij het realtime inlezen van nieuwe data als de uitlezing voor de gemiddelde en piekwaardes. Uit het gemiddelde van die 8 lijnen wordt dan de gemiddelde omgevingswaarde ook lopend berekend. Dit is een kontinue proces en vrij gemakkelijk synchroon te implementeren. De piekwaarde bereken ik nu over 5 pixels ook als lopende waarde. Omdat een pixel nooit boven de 185 kan komen door de begrenzing via saturatie kunnen 5 pixels in 10 bit die ik dan deel door 4 (2 x shiften) Het resultaat wordt bijgevolg 5/4 wat een mooie piek waarde geeft. Zodra de piekwaarde daalt wordt het center positie en waarde opgeslagen. Een en ander is een beetje grafisch voorgesteld in volgende tekening:
detectie_berekening by fotoopa, on Flickr
Nu ik de definitieve board heb kan ik alles hierop overzetten. De voorbereiding is al gedaan, de nieuwe aansluitingen zijn bepaald en straks kan ik alles testen met de DE0_nano board. Het grote voordeel is dat de aansluitingen op dezelfde plaats zitten waardoor mijn reeds gemaakte test driver module kan gebruikt worden. Alle verilog code is juist copy-paste en compileren. Zelds de LA mag opdezelfde plaats blijven hangen. In de FPGA zit meer dan 600Kbit ram, dus ook daar geen probleem en nu hebben ze ook een 2 KB serial eeprom erbij zitten. Dat is ideaal om variable instellingen op te slagen in de field. Er zit zelfs voorbeeld code van uitlezing bij de source, ook in verilog.
Als je het mij vraagt, een super module...
Metingen geven aan dat ik op een afstand van 600mm een verandering in focus zie op 0.8mm nauwkeurig en bij kortere afstanden wordt dit ongeveer tot 0.5mm. Op 600mm afstand is de DOF, de zone waarbij het beeld nog scherp is 10 mm voor en na het ideale punt. De detectie heeft bijgevolg ruim 20 pixels range waarbij hij ziet dat een foto nog mag genomen worden. Ik doe 10.000 metingen per seconde of 100 us per volledige meting. De bovengrens ligt ongeveer op 15.000 metingen per seconde en dan staat de PLL op 50 MHz van de DE0_nano board.
kwijl!
dit gaat mijn pet echt te boven. Wel leuk om te zien dat mijn DE1 bord wat ik aan je verkocht hebt, toch goed besteed is 
Heeft ie toch nog iets nuttigs kunnen doen in zijn leven, buiten alleen maar de binnenkant van mijn kast zien 
Idd je board doet het uitstekend. Ze zijn bestand tegen een stootje en zolang je echt niets zwaar mishandelt blijven ze werken.
Het project ziet er mogelijks ingewikkeld uit maar het zijn opzich allemaal kleine eenvoudige dingen die samen een geheel vormen. Dat ik zo een project afzonderlijk online plaats is om regelmatig bijkomende tips te krijgen voor bepaalde deeloplossingen en anderzijds kan het voor nieuwe gebruikers een overzicht geven hoe ik een groter project aanpak en hoe het in de loop van de uitwerking evolueert.
Ook hier ben ik gestart met heel wat onbekende factoren maar wel met de overtuiging dat er veel kans was dat het kon werken.
Vandaag heb ik voor het eerst de kleine DE0-nano board geprogrameerd. Ook dat is weer even wennen want er is wat verschil in methode met de DE1. Erg is het echter niet want de eerste poging was al een succes. Het volledige programma van de DE1 werkt nu op de DE0-nano. Ook de LCD display draait hierop. Met zoveel beschikbare I/O's kom je niet zo gauw in de problemen. De Logic analyser ligt trouwens met nog 24 extra monitor lijnen op vrije uitgangen. In totaal hebt ik 81 I/O pinnen beschikbaar, 5 extra clock ingangen en 8 analoge ingangen. En dat allemaal op een boardje dat iets langer is dan een 40 pins flatkabel connector.
DE nieuwe FPGA board DE0-nano van Terasic is nu aangesloten ipv de oudere grotere DE1 board. Dit piepklein boardje is een echte krachtpatser, bezit enorm veel I/O's, heel veel LE's en interne ram enz.
Een beeldje van de huidige opstelling:
DE0_nano_detectorboard by fotoopa, on Flickr
De omschakeling van de DE1 board naar deze nano board is vrij eenvoudig en snel verlopen. Alle verilog code kon zonder meer overgenomen worden. Enkel moest ik alle I/O pinnen opnieuw bepalen. Maar nu heb ik hiervoor een nul project gemaakt waar alle I/O's instaan zodat ik ook de volgende maal deze bewerking niet meer hoef uit te voeren.
Mijn interface voor de DE1 was al gemaakt maar gezien Terasic dezelfde aansluit connectors gebruikt moest ik enkel de flatcable her inpluggen. Zo eenvoudig gaat dit! Ook de aansluiting van de LCD was hetzelfde, zelfde verilog code. Na de eerste compilatie heb je dan ook meteen beeld op je display.
Ik heb aan het design een aantal parameters toegevoegd die via drukknopjes instelbaar zijn. Deze parameters geven een heel mooie interactieve setting voor later in de field. Ik heb het blokschema aangepast nu de resultaten buiten alle verwachtingen zijn:
line_array_detector_v3 by fotoopa, on Flickr
De Altera Quartus software is een super tool voor deze toepassing. Ik moest meerdere 10 bits binaire waardes omzetten naar 3 ascii BCD waarden voor het display. Ik had een 1024 entry case gemaakt, 10 bit input, 3 x 8 bit bit output en na compilatie zag ik dat hij het zelf mooi in de interne ram had geplaatst. Bij het opstarten plaatst hij zelf de overeenkomende data erin. Hierdoor heeft hij nauwelijks extra registers nodig en de 10 bit binair naar 3 x 8 bit ascii bcd characters duurt juist getelt 1 systeem clok. Nu draait alles op 32 MHz, dus 33ns later heb ik mijn resultaat! Vroeger in software moest dat wel langer duren terwijl mijn huidige aanroep code nu slechts 1 lijntje verilog is.
Ik kon eigenlijk geweten hebben dat ik direct een ram (rom) kon maken maar achteraf gezien is het toch vlugger gegaan. Voor alle waarden boven de 1000 geeft ik *** als resultaat omdat ik slecht 3 digits gebruik.
De algorithmes voor de trigger berekeningen zitten erin en werken buitengewoon goed. Ik gebruik nu slechts het lopend gemiddelde over 2 bytes van de array ( 1 volle lijn vertraagd) en sla de max waarde en overeenkomende positie op. Op het einde van een lijn kijk ik of de bekomen waarde voldoet aan een aantal parameters zowel amplitude ( voldoende boven de ruis) als postie. Voldoet die dan geef ik een trigger signaal uit. Dit werkt echt super precies, is totaal onafhangkelijk van de helderheid van het object ( zolang er maar voldoende signaal is natuurlijk). ik stel ook een ruis niveau in en kan ook de integratietijd via de drukknopjes online veranderen. Zelfs het focuseerpunt (FOCUS paramter) is instelbaar waardoor er correcties mogelijk zijn moest de gemiddelde opnames teveel naar achter of naar voor liggen. De nauwkeurigheid op 500 mm afstand is nu 0.8mm in diepte.
Het gemiddelde omgevings licht wordt per lijn berekend uit 128 pixels en vergeleken met een ontvangen lichtpuls. Dit voor het trigger criterium.
Dit is mijn beste FPGA project die ik ooit gemaakt hebt, heel weinig code en heel goed werken.
paulp
I thought, I thought of everything
Als er een top 10 zou zijn van de mooiste projecten zou dit project op eenzame hoogte nr 1 staan, echt klasse dit.
Gatze
Congratulations on your purchase. To begin using your quantum computer, set the power switch to both off and on simultaneously
Idd, ik hoop dat ik op die leeftijd ook nog zo kundig ben
Bedankt voor de support!
Maar een mens moet toch iets nuttigs doen op deze leeftijd.
Ik wil hier vooral aangeven hoe je een project in eenvoudige stappen kunt opbouwen. Vooral de jonge beginners hebben geen weet meer van wat er inzit, geen datasheets enz. Ze starten met gewoon iets over te nemen en dan beginnen de problemen. Ook gaan ze veel te groot van start waardoor ze de basis missen.
Ze moeten ook meer bewust zijn dat kunnen meten heel belangrijk is. Hoe zou ik mijn project kunnen maken zonder LA, zonder scoop, zonder FPGA met tools enz. Bij die keuze heb ik zo weinig mogelijk bespaart en het altijd als een investering beschouwd. Maar goed, de middelen van jongeren zijn veel beperkter ( vooral omdat ze ook andere uitgaves hebben).
Dit project is nog maar de voorbereiding van het definitieve project. Dat start altijd rond November maar tegen die tijd moeten alle testen gedaan zijn zodat de definitieve versie kan gemaakt worden. Vooral de mechanische inbouw kan later niet zo gemakkelijk wijzigen als je daar de verkeerde keuzes gemaakt hebt. Samenbouw van alle delen is een van de moeilijkste en tijdrovende werken.
Vandaar dat ik nu een nieuwe mogelijke combinatie aan het opstellen ben. Het einddoel is vooral om heel kleine vliegende insecten in volle vlucht te kunnen fotograferen. Klein is max 1 mm. Daarom moet de macro lens behoorlijk goed zijn en is er de nood aan deze supergevoelige en high-speed detector op 0.5mm nauwkeurig en binnen de 100 us te meten.
Zo tijd om weer een (voorlopige foto) te plaatsen van de opstelling om volgende week uitvoerig te testen.
Nikon-Olympus by fotoopa, on Flickr
Hier is vooral de externe shutter bijgekomen (3.5ms shutter-delay) en ook de dc-dc module om de 65V te maken voor het aansturen van de magneet van de shutter. Die aansturing is heel kritisch, je mag maar een korte puls sturen op de 65V ( ongeveer 4ms pulsduur). er wordt gebruik gemaakt van een hoge overspanning opdat de shutter voldoende snel zou zijn ( vandaar die 65V op een 5V spoel). Die specs zijn opgegeven door de fabrikant en moet je heel nauwgezet volgen of je shutter is naar de maan! De camera is hier de Olympus E-EPL3 via een Nikon adaptor en de DIY gemaakte shutter interface naar de AF200/4D macro lens.
Ook andere macro lensen kunnen erop zoals de AF60/2.8D macro of de AF105/2.8D macro. De 105mm lenzen zou ik echter laten staan op de huidige ingebruik zijnde 3D setup. Maar er kan ook direct een Nikon camera op zoals de D300, D200 of zelfs nog mijn oeroude D100. Al deze cameras worden via de FPGA + interface aangestuurt. Straks moeten ook nog de flitsen erop maar dat gedeelte is nu al enkele jaren in gebruik en is gewoon een kwestie om de verilog module via copy-paste in het project te plakken.
Verwacht nog geen beestjes, daarvoor is het veel te vroeg. De planning is normaal tegen maart 2013.
MGP
LDmicro user.
(offtopic)
Op 24 augustus 2012 09:19:00 schreef shizzle dizzle:
[...]
Idd, ik hoop dat ik op die leeftijd ook nog zo kundig ben
Ik denk eerder dat je moet "binnen" zijn tegen dan 
(ontopic)
Idd een heel omvangrijk en mooi project, ik sta altijd versteld van de nieuwe stukken/componenten die je elke keer introduceert.