Hvordan man hurtigt lancerer 3D optisk ToF-sensing design
Bidraget af DigiKeys nordamerikanske redaktører
2022-04-26
Optisk afstandsmåling af ToF (Time-of-Flight) spiller en grundlæggende rolle i forskellige applikationer, der spænder fra industriel aftastning til gestusbaserede brugergrænseflader. Med tilgængeligheden af præcise, højhastigheds multipixel ToF-sensorer kan udviklerne implementere mere sofistikerede 3D sensing-algoritmer, som er nødvendige i disse applikationer. Udviklingstiden er dog langsommere på grund af kompleksiteten af det optiske multipixel sensing-subsystem.
I denne artikel gennemgås de grundlæggende principper for ToF. Derefter introduceres et optisk ToF-evalueringskit fra Broadcom, som gør det muligt for udviklere hurtigt at lave prototyper af præcise 1D- og 3D-afstandsmåleapplikationer samt hurtigt at implementere brugerdefinerede optiske ToF sensing-løsninger.
Det grundlæggende i optisk ToF-teknologi
Optisk ToF-teknologi, der anvendes til at opnå nøjagtige afstande, som er nødvendige i flere forskellige applikationer, gør det muligt at foretage målinger baseret på den tid, det tager lys at bevæge sig gennem luften. De specifikke beregninger, der anvendes til at foretage disse målinger, er generelt baseret på to forskellige metoder - direkte og indirekte ToF. Ved direkte ToF, også kendt som pulse-ranging, måler en enhed tiden mellem udsendelse og modtagelse af en bestemt lysimpuls af en ToF-sensor ved hjælp af ligning 1:
Ligning 1
Hvor:
c0 = Lysets hastighed i vakuum
∆T = Tid mellem udsendelse og modtagelse
Selv om konceptet er enkelt, er der en række udfordringer forbundet med at udføre nøjagtige målinger med denne metode, herunder behovet for tilstrækkeligt kraftige sendere og modtagere, signal/støjforbedring og præcis registrering af pulskanter.
Indirekte ToF-metoder anvender derimod en moduleret kontinuerlig bølge og måler faseforskellen mellem de transmitterede og modtagne signaler i henhold til ligning 2:
Ligning 2
Hvor:
c0 = Lysets hastighed i vakuum
fmod = Laser-modulationfrekvens
∆φ = Bestemt faseforskel
Ud over at reducere kravene til sender- og modtagerenergikrav, mindsker den indirekte ToF-tilgang kravene til pulsformning, hvilket forenkler designkompleksiteten for at udføre 3D-afstandsmåling og bevægelsesdetektion.
Både direkte og indirekte metoder kræver omhyggelig udformning af den optiske front-end og præcis styring af sender- og modtagersignaler. I årevis har udviklere kunnet drage fordel af integrerede optiske ToF-sensorer, der kombinerer sendeenheder og modtagesensorer i en enkelt pakke. Ikke desto mindre har tidligere generationer af disse enheder typisk krævet, at udviklerne har måttet afveje en eller anden kombination af ydeevne eller driftsegenskaber som f.eks. strømforbrug, rækkevidde, nøjagtighed og hastighed. Sådanne kompromiser har vist sig at være en væsentlig hindring for et voksende antal industrielle sensing applikationer, der skal fungere på mellemlange afstande på op til 10 meter (m).
Mere avancerede indirekte ToF-sensormoduler som Broadcoms AFBR-S50MV85G er designet specielt til at imødekomme det stigende behov for hurtige og præcise resultater ved mellemstore afstande, samtidig med at de har en minimal pakkestørrelse og et minimalt strømforbrug. Broadcoms AFBR-S50MV85G-EK-evalueringskit og det tilhørende softwareudviklingssæt (SDK) er baseret på denne sensor og udgør en multipixel ToF sensor udviklingsplatform, der gør det muligt for udviklere hurtigt at implementere 3D ToF sensing-applikationer.
Hvordan et integreret modul forenkler ToF-afstandsmåling
AFBR-S50MV85G-modulet, der er udviklet til industrielle sensorer, giver en komplet optisk ToF sensing-løsning i en enkelt pakke. De integrerede komponenter omfatter en VCSEL-laser (vertical-cavity surface-emitting laser) på 850 nanometer (nm) til infrarød (IR) belysning, en sekskantet 32-pixel sensormatrix, integrerede linser til VCSEL- og sensoroptik og et applikationsspecifikt integreret kredsløb (ASIC).
Senderen, der er placeret i en fast position i forhold til målings-matrixen, belyser et målobjekt, hvilket får et vist antal pixels i målematrixen til at registrere det reflekterede IR-signal. I grundlæggende drift gør dette modulet i stand til at understøtte nøjagtig afstandsmåling fra hvide, sorte, farvede, metalliske eller retro-reflekterende overflader - selv i direkte sollys - takket være de indbyggede muligheder for undertrykkelse af omgivende lys.
Efterhånden som afstanden til et objekt mindskes, giver automatisk kompensation for parallaksefejl mulighed for målinger med næsten ingen nedre grænse for afstanden. Samtidig giver kombinationen af IR-belysning og målings-matrixen mulighed for at få adgang til yderligere oplysninger om objektet, herunder dets bevægelse, hastighed, hældningsvinkel eller lateral justering. Som følge heraf kan modulet levere de data, der er nødvendige for at bestemme retning og hastighed for et forbipasserende eller nærmer sig et mål-objekt (figur 1).
Figur 1: Ved hjælp af data fra AFBR-S50MV85G-modulets 8 x 4 pixel målings-matrix kan udviklere implementere 3D-applikationer, der kan måle objektbevægelseskarakteristika. (Billedkilde: Broadcom)
Modulets indbyggede ASIC, der styrer den præcise drift af VCSEL og målings-matrixen, leverer alle de kredsløb, der er nødvendige for at drive VCSEL'en, opsamle analoge signaler fra målings-matrixen og konditionere digitale signaler (Figur 2).
Figur 2: En ASIC integreret i AFBR-S50MV85G-modulet indeholder alle de kredsløb, der er nødvendige for at drive modulets VCSEL-lyskilde, opsamle modtagne signaler fra målings-matricen og generere digitale data til overførsel via en SPI-bus. (Billedkilde: Broadcom)
ASIC'ens integrerede forsyningskredsløb gør det muligt for modulet at køre på en enkelt 5 volts forsyning, mens den integrerede fabrikskalibrerede og temperaturkompenserede RC-oscillator (RC) og den digitale PLL (Phase Locked Loop) leverer alle de nødvendige clock-signaler. På grund af denne integration kan udviklere nemt integrere modulet i deres design ved hjælp af en mikrocontroller-enhed (MCU) og et par ekstra eksterne komponenter. Interfacet til MCU'en kræver kun en GPIO-ben (general-purpose input/output) til et data-klar-signal fra modulet sammen med en forbindelse via modulets digitale SPI-interface (Serial Peripheral Interface) (Figur 3).
Figur 3: Broadcoms AFBR-S50MV85G-modul kræver kun en MCU og nogle få yderligere komponenter til implementering af et komplet ToF-målings-system. (Billedkilde: Broadcom)
Som supplement til dette enkle hardwaredesign leveres den tilhørende software funktionalitet, der er nødvendig for at implementere afstandsmåling, i Broadcom's ToF-driver-software. Mens modulet håndterer den optiske dataindsamling til afstandsmåleapplikationer, udfører Broadcom ToF-driver-softwaren, der er inkluderet i virksomhedens AFBR-S50 SDK, alle hardware-konfigurations-, kalibrerings- og målingstrin. Under målingen uddrager driverens software både afstands- og amplitudeværdierne for pixelerne.
Hvordan man hurtigt udvikler en applikation til afstandsmåling
Sammen med AFBR-S50 SDK giver Broadcom's AFBR-S50MV85G-EK evalueringskit en omfattende platform til hurtig prototyping og udvikling af applikationer til afstandsmåling. Sættet leveres med et adapterkort med AFBR-S50MV85G-modulet, NXP's FRDM-KL46Z-evalueringskort baseret på en Arm Cortex-M0+ MCU og et mini-USB-kabel til tilslutning af evalueringskortet til en bærbar computer eller et andet indlejret system (Figur 4).
Figur 4: Broadcoms AFBR-S50MV85G-EK-evalueringskit og den tilhørende software udgør en komplet platform til evaluering og prototyping af ToF-afstandsmåleapplikationer. (Billedkilde: Broadcom)
For at udføre ToF-afstandsmåling med evalueringskittet kræves der kun få trin for at komme i gang. Når AFBR-S50 SDK'et er downloadet, guider en installationsguide udvikleren gennem en hurtig installationsprocedure. Når udvikleren har startet Broadcoms AFBR-S50 Explorer-softwareapplikation, der er inkluderet i SDK-pakken, opretter softwaren forbindelse til AFBR-S50-evalueringskortet via USB-interfacet, modtager måledataene via driversoftwaren, der kører på NXP-kortets MCU, og giver brugeren mulighed for at vise resultaterne i et 1D- eller 3D-plot (Figur 5).
Figur 5: AFBR-S50 Explorer-softwaren forenkler evalueringen af ToF-målinger ved hjælp af 3D-plots, der viser den modtagne belysningsamplitude for hver pixel i ToF-sensormatricen. (Billedkilde: Broadcom)
Som vist i figur 5 viser 3D plotvisningen aflæsninger fra hver enkelt pixel, men softwaren tilbyder en alternativ visning, der gør det muligt for udviklere kun at se de pixels, der anses for gyldige til måling. I denne alternative visning fjernes pixels, der ikke opfylder de definerede kriterier, fra plottet (figur 6).
Figur 6: Med Broadcoms AFBR-S50 Explorer-software kan udviklere se strømlinede 3D-plots med målinger, der eliminerer pixels, der ikke opfylder foruddefinerede kriterier. (Billedkilde: Broadcom)
For at undersøge målepræcision og ydeevne i forskellige anvendelsesscenarier som f.eks. belysning, refleksionsevne og overfladetype kan udviklere se virkningen af forskellige sensing-konfigurationer, f.eks. ved at bruge flere pixels til forbedrede 3D-applikationer eller færre pixels til 1D-applikationer, der kræver mere præcis måling. Når udviklerne har evalueret målemetoderne i deres prototyper, kan de bygge videre på den eksempler på software, der er inkluderet i Broadcoms AFBR-S50 SDK, for hurtigt at implementere brugerdefinerede ToF sensing-applikationer.
Opbygning af brugerdefinerede ToF sensing-softwareapplikationer
Broadcom bygger understøttelse af ToF sensing-applikationer omkring en effektiv arkitektur baseret på AFBR-S50-kernebiblioteket, der omfatter sensor hardwarespecifik kode, en API (Applikation Programmering Interface) og hardwareabstraktionslag (HAL) (Figur 7).
Figur 7: Inden for Broadcoms ToF-operationsmiljø giver ToF-driver-API'en brugerprogramkode adgang til kalibrerings-, måle- og evalueringsfunktioner i det prækompilerede ToF-driver kernebibliotek. (Billedkilde: Broadcom)
Som en del af AFBR-S50 SDK-pakken leverer Broadcom kernebiblioteket som en forudkompileret ANSI-C-biblioteksfil, der indeholder alle de data og algoritmer, der er nødvendige for at køre AFBR-S50MV85G-hardwaren. Kernebiblioteket, der kører på afstandsmålingssystemets MCU, leverer funktionalitet, herunder kalibrering, måling og evaluering, til at udføre afstandsmåling med minimal behandlingsbelastning eller strømforbrug. Fordi kernebibliotekets funktioner håndterer alle de underliggende detaljer, er den grundlæggende målecyklus, som udvikleren ser, ligetil (figur 8).
Figur 8: AFBR-S50 SDK ToF-softwaren minimerer processorens arbejdsbyrde ved hjælp af afbrydelser og callbacks. (Billedkilde: Broadcom)
Ved starten af hver målecyklus (initieret af en periodisk timer-Interrupt eller IRQ) starter MCU'en målingen og vender straks tilbage til en tomgangstilstand (eller fortsætter med at behandle en applikationskode). Når målingen er afsluttet, bruger AFBR-S50MV85G-modulet den tilsluttede GPIO-linje til at signalere en afbrydelse og vækker MCU'en til at starte en dataaflæsning på SPI-bussen, inden den vender tilbage til sin tidligere tilstand. Når dataaflæsningen er afsluttet (signaleret af en SPI done IRQ), udfører MCU'en kode til evaluering af de erhvervede ToF-sensordata.
For at undgå at miste måledata forhindrer kernebiblioteket starten af en ny målecyklus ved at blokere databufferen, indtil evalueringsrutinen kaldes. Derfor vil udviklerne typisk inkludere en dobbelt buffer til rå data for at muliggøre en interleave udførelse af måle- og evalueringsopgaver.
For udviklere af applikationssoftware beskytter de centrale biblioteksrutiner detaljerne i kalibrering, måling og evaluering. Udviklere kan faktisk bruge evalueringskittet og AFBR-S50 Explorer-applikationen som en komplet prototypeplatform til at levere måledata til softwareapplikationskode på højt niveau.
For udviklere, der har brug for at implementere brugerdefineret applikationssoftware, kombinerer AFBR-S50 SDK-pakken de prækompilerede kernebiblioteksmoduler med flere softwareeksempler. Derfor kan udviklere hurtigt skabe deres egne ToF sensing-applikationer ved at bygge på de eksempler på programmer, der er indeholdt i SDK'et. Udviklere kan få adgang til AFBR-S50MV85G-hardware og AFBR-S50 kernebibliotekets funktionalitet i deres applikations-specifikke softwarekode ved at kalde funktioner i AFBR-S50 SDK API'et og specificere deres egne funktioner til de forskellige callbacks, der understøttes af kernebiblioteket (se figur 7 igen).
Broadcom leverer omfattende dokumentation om API'et og eksempler på software, så udviklerne hurtigt kan tilpasse softwareeksemplerne til deres behov eller starte helt forfra. Faktisk er den grundlæggende måle- og evalueringscyklus ukompliceret, idet den blot skal matche brugerdefinerede funktioner og API-kald til målecyklussen (se figur 8 igen). F.eks. omfatter en målecyklus, som tidligere omtalt, tre faser: ToF-enhedens integration, dataaflæsning og evaluering. De centrale biblioteks-API-opkald, der er nødvendige for at starte disse tre faser, omfatter:
- Argus_TriggerMeasurement(), som udløser en enkelt måleramme asynkront
- Argus_GetStatus(), som returnerer STATUS_OK, hvis målingen er afsluttet med succes
- Argus_EvaluateData(), som evaluerer nyttige oplysninger fra de rå måledata
Broadcom demonstrerer denne grundlæggende målesløjfe i et prøveprogram, der er inkluderet i SDK-distributionen, som vist i Listing 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);
}
}
}
Listing 1: Kode eksemplet i Broadcom AFBR-S50 SDK-distributionen demonstrerer det grundlæggende designmønster for indsamling og evaluering af ToF-data fra AFBR-S50MV85G-modulet. (Kode kilde: Broadcom)
Som det fremgår af listen, udgør de tre API-funktionskald, der er nævnt tidligere, rygraden i udførelsen af en målecyklus. Ved at studere API-dokumentationen og andre eksempler på applikationer i SDK'et kan udviklere hurtigt implementere komplekse 3D-applikationer ved hjælp af modulets evne til at levere de data, der er nødvendige for at bestemme avancerede egenskaber som f.eks. hastighed, retning og hældningsvinkel for et målobjekt.
Konklusion
Optiske ToF-sensing enheder har muliggjort anvendelser i forskellige segmenter, der kræver præcis afstandsmåling, men begrænsninger i måleområdet, nøjagtigheden eller pålideligheden har bremset udvidelsen til anvendelser som industrielle sensing-systemer, der kræver apparater med lav effekt, der kan levere nøjagtige resultater på længere afstande. Et integreret optisk ToF-subsystem fra Broadcom opfylder disse nye krav til næste generations sensing-applikationer. Ved hjælp af et evalueringskit baseret på denne enhed kan udviklere hurtigt implementere systemer til præcisionsmåling i 1D-programmer og til kompleks sporing af objektbevægelser i 3D-programmer.
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.


