Slik kommer du raskt i gang med designer for optisk flyvetidsdeteksjon i 3D
Bidrag fra DigiKeys nordamerikanske redaktører
2022-04-26
Avstandsmåling for optisk flyvetid (ToF – Time of Flight) spiller en grunnleggende rolle i ulike applikasjoner, fra industriell deteksjon til gestbaserte brukergrensesnitt. Med tilgjengeligheten av nøyaktige, høyhastighets ToF-sensorer med multipiksel, kan utviklere implementere mer sofistikerte tredimensjonale (3D) deteksjonsalgoritmer som er nødvendig i disse applikasjonene. Utviklingstiden reduseres imidlertid på grunn av kompleksiteten til multipiksel-undersystemet for optisk deteksjon.
Denne artikkelen tar for seg de grunnleggende prinsippene innen ToF. Deretter introduserer den et optisk ToF-evalueringssett fra Broadcom som gjør det mulig for utviklere å raskt utføre prototyping av nøyaktige 1D- og 3D-applikasjoner for avstandsmåling, samt raskt implementere tilpassede optiske ToF-deteksjonsløsninger.
Grunnleggende om optisk ToF-teknologi
Optisk ToF-teknologi brukes til å anskaffe de nøyaktige avstandene som trengs i flere applikasjoner, og muliggjør målinger basert på tiden det tar for lys å bevege seg gjennom luft. De spesifikke beregningene som brukes til å utføre disse målingene, bygger generelt på to ulike tilnærminger – direkte og indirekte ToF. I direkte ToF, også kjent som pulsavstandsmåling, måler en enhet tiden mellom sending og mottak av en bestemt lyspuls av en ToF-sensor ved å bruke ligning 1:
Formel 1
Der:
c0 = lysets hastighet i vakuum
∆T = Forløpt tid mellom sending og mottak
Selv om dette er enkelt som et konsept, står evnen til å utføre nøyaktige målinger med denne tilnærmingen overfor en rekke utfordringer, deriblant behovet for tilstrekkelig kraftige sendere og mottakere, signal-til-støy-forbedring og presis pulskantdeteksjon (puls edge detection).
Til sammenligning bruker indirekte ToF-metoder en modulert kontinuerlig bølge og måler faseforskjellen mellom sendte og mottatte signaler i henhold til ligning 2:
Formel 2
Der:
c0 = lysets hastighet i vakuum
fmod = Lasermodulasjonsfrekvens
∆φ = Beregnet faseforskjell
I tillegg til å redusere strømkravene til sender og mottaker, vil den indirekte ToF-tilnærmingen løsne på kravene til pulsforming, og forenkler konstruksjonskompleksitet når det gjelder å utføre avstandsmåling og bevegelsesdeteksjon i 3D.
Både direkte og indirekte måter krever nøye utforming av den optiske inngangen og nøyaktig styring av sender- og mottakersignaler. I årevis har utviklere kunnet dra nytte av integrerte optiske ToF-sensorer som kombinerer senderenheter og mottakersensorer i én enkelt kapsling. Likevel har tidligere generasjoner av disse enhetene vanligvis krevd at utviklere velger bort en kombinasjon av ytelse eller driftsegenskaper som strømforbruk, rekkevidde, nøyaktighet og hastighet. Slike kompromisser har oppstått som en sentral hindring for et voksende sett av industrielle deteksjonsapplikasjoner som må operere ved middels avstander på opptil 10 meter (m).
Mer avanserte indirekte ToF-sensormoduler, for eksempel Broadcom sin AFBR-S50MV85G, er spesialkonstruert for å håndtere det økende behovet av nøyaktige og raske resultater, samtidig som minst mulig kapslingstørrelse og strømforbruk opprettholdes. Broadcom sitt AFBR-S50MV85G-EK-evalueringssett, som er basert på denne sensoren, og det tilknyttede programvareutviklingssettet (SDK – software development kit), er en multipiksel ToF-sensorutviklingsplattform som gjør det mulig for utviklere å raskt implementere ToF-deteksjonsapplikasjoner i 3D.
Slik forenkler en integrert modul ToF-avstandsmåling
AFBR-S50MV85G-modulen, som er utviklet for industrielle deteksjonsapplikasjoner, leverer en komplett optisk ToF-deteksjonsløsning i én enkel kapsling. De integrerte komponentene inkluderer en 850 nanometer (nm) overflateemitterende laser med verticalt hulrom (VCSEL – vertical-cavity surface-emitting laser) for infrarød (IR) belysning, en sekskantet sensormatrise med 32 piksler, integrerte linser for VCSEL og sensoroptikk, samt en anvendelsesspesifikk integrert krets (ASIC – application-specific integrated circuit).
Senderen, som er plassert i en fast justert stilling i forhold til sensormatrisen, lyser opp et målobjekt, noe som fører til at et visst antall piksler i sensormatrisen detekterer det reflekterte IR-signalet. Under grunnleggende drift, gjør dette modulen i stand til å støtte nøyaktig avstandsmåling fra hvite, svarte, fargede, metalliske eller retroreflekterende overflater – selv i direkte sollys – takket være de integrerte egenskapene for demping av omgivelseslys.
Etter hvert som avstanden til et objekt reduseres, vil automatisk kompensasjon for parallaksefeil muliggjøre målinger uten noen nedre avstandsgrense. Samtidig gjør kombinasjonen av IR-belysning og deteksjonsmatrisen det mulig å få tilgang til ytterligere informasjon om objektet, for eksempel bevegelse, hastighet, vippevinkel eller sideveis justering. Som et resultat kan modulen levere data som er nødvendig for å fastsette retning og hastighet for et målobjekt som passerer eller nærmer seg (figur 1).
Figur 1: Ved å bruke data innhentet fra AFBR-S50MV85G-modulens 8x4-piksel deteksjonsmatrise, kan utviklere implementere 3D-konstruksjoner som er i stand til å måle bevegelsesegenskapene til objekter. (Bildekilde: Broadcom)
Modulens integrerte ASIC, som orkestrerer nøyaktig drift av VCSEL og deteksjonsmatrisen, leverer alle kretsene som kreves for å drive VCSEL, analog signalinnhenting fra deteksjonsmatrisen og digital signalbehandling (figur 2).
Figur 2: En ASIC integrert i AFBR-S50MV85G-modulen inkluderer alle kretsene som kreves for å drive modulens VCSEL-lyskilde, innhente mottatte signaler fra deteksjonsmatrisen og generere digitale data for overføring over en SPI-buss. (Bildekilde: Broadcom)
ASIC-ens integrerte forsyningskretser gjør det mulig for modulen å fungere fra én enkel 5-volts forsyning, mens den integrerte fabrikkalibrerte og temperaturkompenserte motstand-kondensator-oscillatoren (RC – resistor-capasitor) og den digitale fasereguleringssløyfen (PLL – phase locked loop) leverer alle de nødvendige klokkesignalene. På grunn av denne integrasjonen kan utviklere enkelt innlemme modulen i konstruksjonen sin ved å bruke en mikrokontroller (MCU – microcontroller unit) og noen ekstra eksterne komponenter. Grensesnittet med mikrokontrolleren krever bare en generell inngang/utgang-pinne (GPIO – general-purpose input/output) for å få et dataklart signal fra modulen, sammen med en tilkobling gjennom modulens digitale serielle periferigrensesnitt (SPI – serial peripheral interface) (figur 3).
Figur 3: Broadcom sin AFBR-S50MV85G-modul krever kun en mikrokontroller og noen få ekstra komponenter for implementering av et komplett ToF-deteksjonssystem. (Bildekilde: Broadcom)
Som et supplement til denne ukompliserte maskinvarekonstruksjonen, er den tilknyttede programvarefunksjonaliteten som trengs for å implementere avstandsmåling tilgjengelig i Broadcom sin ToF-driverprogramvare. Mens modulen håndterer den optiske datainnsamlingen for bruksområder relatert til avstandsmåling, utfører Broadcom ToF-driverprogramvaren som er inkludert i den bedriftsforsynte AFBR-S50 SDK alle maskinvarekonfigurasjoner, kalibreringer og måletrinn. Under måling trekker driverprogramvaren ut både avstands- og amplitudeverdiene til pikslene.
Slik utvikler du raskt en konstruksjon for avstandsmåling
Når Broadcom sitt AFBR-S50MV85G-EK-evalueringssett kombineres med AFBR-S50 SDK, oppnås en omfattende plattform for rask prototyping og utvikling av applikasjoner for avstandsmåling. Settet kommer med et adapterkort som inneholder AFBR-S50MV85G-modulen, NXP sitt FRDM-KL46Z-evalueringskort basert på en Arm Cortex-M0 + MCU, og en mini-USB-kabel for å koble evalueringskortet til en bærbar datamaskin eller et annet integrert system (figur 4).
Figur 4: Broadcom sitt AFBR-S50MV85G-EK-evalueringssett og den tilknyttede programvaren gir en komplett plattform for å evaluere og utføre prototyping av applikasjoner med ToF-avstandsmåling. (Bildekilde: Broadcom)
Utføring av ToF-distansemåling med evalueringssettet krever bare noen få trinn for å komme i gang. Når AFBR-S50 SDK-en har blitt lastet ned, vil en installasjonsveiviser veilede utvikleren gjennom en rask installasjonsprosedyre. Etter at utvikleren har startet Broadcom sin AFBR-S50 Explorer-programvare som er inkludert i SDK-pakken, kobles programvaren til AFBR-S50-evalueringskortet via USB-grensesnittet, mottar målingsdataene gjennom driverprogramvaren som kjører på NXP-kortets mikrokontroller, og gjør det mulig for brukeren å vise resultatene i et 1D- eller 3D-diagram (figur 5).
Figur 5: AFBR-S50 Explorer-programvaren forenkler evalueringen av ToF-målinger gjennom 3D-diagrammer som viser mottatt belysningsamplitude for hver piksel i ToF-sensormatrisen. (Bildekilde: Broadcom)
Som vist på figur 5, viser 3D-diagramvisningen avlesninger fra hver piksel, men programvaren gir en alternativ visning som gjør det mulig for utviklere å kun se pikslene som anses som gyldige for måling. I denne alternative visningen, fjernes piksler som ikke oppfyller definerte kriterier fra diagrammet (figur 6).
Figur 6: Med Broadcom sin AFBR-S50 Explorer-programvare kan utviklere se strømlinjeformede 3D-diagrammer av målinger som eliminerer piksler som ikke oppfyller forhåndsdefinerte kriterier. (Bildekilde: Broadcom)
For å utforske målingsnøyaktighet og -ytelse i ulike bruksområdescenarier, for eksempel belysning, refleksjonsevne og overflatetype, kan utviklere se effekten av ulike deteksjonskonfigurasjoner, for eksempel bruk av flere piksler for å oppnå forbedrede 3D-applikasjoner, eller færre piksler for 1D-applikasjoner som krever mer nøyaktig måling. Etter å ha evaluert målemetoder i prototypene sine, kan utviklere bygge på eksempelprogramvaren som er inkludert i Broadcom sin AFBR-S50 SDK for å raskt kunne implementere tilpassede applikasjoner for ToF-deteksjon.
Bygge tilpassede applikasjoner ToF-deteksjonsprogramvare
Broadcom bygger støtte for ToF-deteksjonsapplikasjoner rundt en effektiv arkitektur basert på AFBR-S50-kjernebiblioteket som omfatter sensormaskinvarespesifikk kode, et programmeringsgrensesnitt (API – application programming interface) og maskinvareabstraksjonslag (HAL – hardware abstraction layer) (figur 7).
Figur 7: I Broadcom sitt ToF-driftsmiljø leverer API-en for ToF-driveren brukerapplikasjonskoden som gir tilgang til funksjoner for kalibrering, måling og evaluering i det forhåndskompilerte ToF-driverkjernebiblioteket. (Bildekilde: Broadcom)
Som en del av AFBR-S50 SDK-pakken, tilbyr Broadcom kjernebiblioteket som en forhåndskompilert ANSI-C-bibliotekfil som integrerer alle dataene og algoritmene som trengs for å kjøre AFBR-S50MV85G-maskinvaren. Når kjernebiblioteket kjøres på avstandsmålingssystemets mikrokontroller, leverer det funksjonalitet som omfatter kalibrering, måling og evaluering for å utføre avstandsmåling med minimal prosesseringsbelastning eller strømforbruk. Fordi kjernebibliotekets funksjoner håndterer alle underliggende detaljer, er den grunnleggende målesyklusen som observeres av utvikleren, enkel (figur 8).
Figur 8: AFBR-S50 SDK ToF-programvaren minimerer prosessorens arbeidsbelastning ved hjelp av avbrudd og tilbakekall. (Bildekilde: Broadcom)
I starten av hver målesyklus (initiert av et periodisk tidsavbrudd eller IRQ), vil mikrokontrolleren starte målingen og gå umiddelbart tilbake til en inaktiv tilstand (eller den fortsetter å behandle en eller annen applikasjonskode). Etter at målingen er fullført, bruker AFBR-S50MV85G-modulen den tilkoblede GPIO-linjen til å signalisere et avbrudd, og vekker mikrokontrolleren slik at den starter en dataavlesning på SPI-bussen før den går tilbake til sin tidligere tilstand. Etter at dataavlesningen er fullført (signalisert av en SPI utført IRQ), kjører mikrokontrolleren kode for å evaluere de innsamlede ToF-sensordataene.
For å forhindre tap av måledata, forhindrer kjernebiblioteket starten av en ny målesyklus ved å blokkere databufferen helt til evalueringsrutinen kalles. Som sådan vil utviklere vanligvis inkludere en dobbel buffer for rå data for å tillate overlappet utførelse av måle- og evalueringsoppgaver.
For programvareutviklere vil kjernebibliotekets rutiner skjerme detaljene for kalibrering, måling og evaluering. Utviklere kan faktisk bruke evalueringssettet og AFBR-S50 Explorer-applikasjonen som en komplett prototypeplattform for å levere måledata til programvareapplikasjonskode på høyt nivå.
For utviklere som har behov for å implementere tilpasset programvare, kombinerer AFBR-S50 SDK-pakken de forhåndskompilerte kjernebibliotekmodulene med flere programvareeksempler. Som et resultat kan utviklere raskt opprette sine egne ToF-deteksjonsapplikasjoner ved å bygge på eksempelapplikasjonene som leveres med SDK-en. Utviklere kan få tilgang til AFBR-S50MV85G-maskinvare og AFBR-S50-kjernebibliotekfunksjonalitet i sin anvendelsesspesifikke programvarekode ved å kalle funksjoner i AFBR-S50 SDK API-en og spesifisere sine egne funksjoner for de forskjellige tilbakekallene som støttes av kjernebiblioteket (se figur 7 igjen).
Broadcom leverer omfattende dokumentasjon om API-en og eksempelprogramvaren, slik at utviklere raskt kan tilpasse programvareeksemplene i henhold til egne behov eller starte fra bunnen av. Den grunnleggende måle- og evalueringssyklusen er faktisk enkel, og innebærer rett og slett å samsvare tilpassede funksjoner og API-kall med målesyklusen (se figur 8 igjen). For eksempel inkluderer en målesyklus, som vi diskuterte tidligere, tre faser: ToF-enhetens integrasjon, dataavlesning og evaluering. Kjernebibliotekets API-kall som trengs for å starte disse tre fasene, omfatter følgende:
- Argus_TriggerMeasurement(), som utløser en enkel målingsramme asynkront
- Argus_GetStatus(), som returnerer STATUS_OK når målingen er fullført
- Argus_EvaluateData(), som evaluerer nyttig informasjon fra de rå målingsdataene
Broadcom demonstrerer denne grunnleggende målesløyfen i en eksempelapplikasjon som er inkludert i SDK-distribusjonen, vist i liste 1.
Kopi
int main(void)
{
status_t status = STATUS_OK;
/* Initialize the platform hardware including the required peripherals
* for the API. */
hardware_init();
/* The API module handle that contains all data definitions that is
* required within the API module for the corresponding hardware device.
* Every call to an API function requires the passing of a pointer to this
* data structure. */
argus_hnd_t * hnd = Argus_CreateHandle();
handle_error(hnd ? STATUS_OK : ERROR_FAIL, "Argus_CreateHandle failed!");
/* Initialize the API with default values.
* This implicitly calls the initialization functions
* of the underlying API modules.
*
* The second parameter is stored and passed to all function calls
* to the S2PI module. This piece of information can be utilized in
* order to determine the addressed SPI slave and enabled the usage
* of multiple devices on a single SPI peripheral. */
status = Argus_Init(hnd, SPI_SLAVE);
handle_error(status, "Argus_Init failed!");
/* Print some information about current API and connected device. */
uint32_t value = Argus_GetAPIVersion();
uint8_t a = (value >> 24) & 0xFFU;
uint8_t b = (value >> 16) & 0xFFU;
uint8_t c = value & 0xFFFFU;
uint32_t id = Argus_GetChipID(hnd);
argus_module_version_t mv = Argus_GetModuleVersion(hnd);
print("\n##### AFBR-S50 API - Simple Example ##############\n"
" API Version: v%d.%d.%d\n"
" Chip ID: %d\n"
" Module: %s\n"
"##################################################\n",
a, b, c, id,
mv == AFBR_S50MV85G_V1 ? "AFBR-S50MV85G (v1)" :
mv == AFBR_S50MV85G_V2 ? "AFBR-S50MV85G (v2)" :
mv == AFBR_S50MV85G_V3 ? "AFBR-S50MV85G (v3)" :
mv == AFBR_S50LV85D_V1 ? "AFBR-S50LV85D (v1)" :
mv == AFBR_S50MV68B_V1 ? "AFBR-S50MV68B (v1)" :
mv == AFBR_S50MV85I_V1 ? "AFBR-S50MV85I (v1)" :
mv == AFBR_S50SV85K_V1 ? "AFBR-S50SV85K (v1)" :
"unknown");
/* Adjust some configuration parameters by invoking the dedicated API methods. */
status = Argus_SetConfigurationFrameTime( hnd, 100000 ); // 0.1 second = 10 Hz
handle_error(status, "Argus_SetConfigurationFrameTime failed!");
/* The program loop ... */
for (;;)
{
myData = 0;
/* Triggers a single measurement.
* Note that due to the laser safety algorithms, the method might refuse
* to restart a measurement when the appropriate time has not been elapsed
* right now. The function returns with status #STATUS_ARGUS_POWERLIMIT and
* the function must be called again later. Use the frame time configuration
* in order to adjust the timing between two measurement frames. */
Argus_TriggerMeasurement(hnd, measurement_ready_callback);
handle_error(status, "Argus_StartMeasurementTimer failed!");
STATUS_ARGUS_POWERLIMIT)
{
/* Not ready (due to laser safety) to restart the measurement yet.
* Come back later. */
continue;
}
else
{
/* Wait until measurement data is ready. */
do
{
status = Argus_GetStatus(hnd);
}
while (status == STATUS_BUSY);
handle_error(status, "Waiting for measurement data ready (Argus_GetStatus) failed!");
/* The measurement data structure. */
argus_results_t res;
/* Evaluate the raw measurement results. */
status = Argus_EvaluateData(hnd, &res, (void*) myData);
handle_error(status, "Argus_EvaluateData failed!");
/* Use the obtain results, e.g. print via UART. */
print_results(&res);
}
}
}
Liste 1: Eksempelkode i Broadcom AFBR-S50 SDK-distribusjonen demonstrerer det grunnleggende utformingsmønsteret for å innhente og evaluere ToF-data fra AFBR-S50MV85G-modulen. (Kodekilde: Broadcom)
Som vist i listen, utgjør de tre API-funksjonskallene som ble nevnt tidligere, ryggraden i utførelsen av en målesyklus. Ved å studere API-dokumentasjonen og andre eksempelapplikasjoner i SDK-en, kan utviklere raskt implementere komplekse 3D-applikasjoner ved å bruke modulens evne til å levere dataene som trengs for å fastsette avanserte egenskaper som hastighet, retning og vippevinkel for et målobjekt.
Konklusjon
Optiske ToF-deteksjonsenheter har muliggjort applikasjoner i diverse segmenter som krever nøyaktig avstandsmåling, men begrensninger i måleområde, nøyaktighet eller pålitelighet har tøylet utvidelse inn i applikasjoner som industrielle deteksjonssystemer som krever laveffektenheter som er i stand til å levere nøyaktige resultater ved lengre avstander. Et integrert optisk ToF-undersystem fra Broadcom oppfyller disse nye kravene til neste generasjons deteksjonsapplikasjoner. Ved å bruke et evalueringssett basert på denne enheten, kan utviklere raskt implementere systemer for presisjonsmåling i 1D-avstandsmålingsapplikasjoner og for sporing av komplekse objektbevegelser i 3D-applikasjoner.
Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.


