Hvordan få analog inngang på BeagleBone Black


I denne Linux.com serien på BeagleBone Svart vi har sett hvordan du bruker Linux-grensesnittet tillater oss å få tilgang chips i løpet av SPI og motta avbrudd når spenningen på en pinne endringer. Denne gangen vil vi ta en titt på hvordan du kan få analog inngang på BeagleBone svart.

Mens GPIO, skjer TWI, og SPI kommunikasjon ved hjelp av bare de to statene høy spenning og jord spenning, med analog inngang deg kan lese mange verdier i mellom høy og lav.

Eksempler der du kanskje vil bruke analog inngang er sensing miljøet, for eksempel ved hjelp av en Fotomotstånd å se hvor lyst det er i dag, eller en temperatursensor . Menneskelig interaksjon tilbyr også mange analoge innganger som bruker potentiometers, joysticks eller resistive berøringsskjermer.

Denne artikkelen er levert uten garanti eller egnethet for noe formål. Jeg har gjort de tingene som er beskrevet, og det ser ikke ut til å ha vondt min BeagleBone Svart eller noe annet. Noen hardware oppsett du gjør er på egen risiko.

Test Analog Input

Mens GPIO pinnene på BeagleBone svart løype på 3,3 volt, de analoge inngangs pins kan bare akseptere opp til 1,8 V maksimum. Du husker kanskje at pinne 1 og 2 på P9 er bakken med 3 og 4 er både en forsyning for 3,3 V. Når du arbeider med analoge målinger vi i stedet ønsker de analoge bakke og analog kraftledninger. Alle pinnene vi ønsker er på P9 header, som er den nærmeste til strømkontakten. Pin 32 er VDD_ADC med Pin 34 som GNDA_ADC. Analoge innganger er på pinnene 33 og 35 gjennom 40 inkluderende. Analog inngang null er på pinne 39. For fullstendig informasjon om overskriftene i System Reference Manual.

For å teste analog inngang jeg bruker en 10K lineær potensiometer. Hvis potensiometeret er satt opp i serie med en fast motstand så vil det fungere som en spenningsdeler. Utformingen jeg anvendt plassert en fast motstand før potensiometeret og en spenning prøve blir tatt ved inngangen til potensiometeret. Den faste motstand har to formål; å påføre et lite spenningsfall fra 1,8 V leveres fra VDD_ADC og å tilby noen motstand mot strøm som flyter gjennom kretsen når potensiometeret er satt til det er minimal motstand.


Ser på spenningen skillelinjen teori, vurdere oppsettet som vist på bildet over, er R1 en fast motstand på 1k ohm og R2 kan variere mellom 10k og 0k. Den hvite ledningen er prøven punkt som vil endre seg i spenning som glideren på potensiometeret flyttes. Når potensiometeret har sin maksimale motstand (10k) prøven spenningen vil være rundt R2 /(R1 + R2) * VIN = 10000 /(10000 + 1000) * 1,8 = 1,64 V. Når potensiometeret er innstilt på en lav motstand og deretter Prøven spenning vil tendere mot 0 V.

Ved hjelp av en Extech EX330 multimeter jeg fant at VDD_ADC header på min BeagleBone Svart ga 1,803 V. 1K motstand jeg brukte var litt under sin vurdert verdi. Potensiometeret tilbudt en maksimal motstand av 10.4k ohm. Når potensiometeret ble innstilt på maksimal verdi prøvepunktet lese på 1,645 V. Fortsatt under den 1,8-V maksimumsverdien for analog inngang på BeagleBone svart så alt er bra.

Tilkobling styret med strøm og jord kan gjøres ved å forbinde den røde tråden i det ovennevnte bilde for å VDD_ADC (tappen 32) og den grønne til GNDA_ADC (tappen 34). Før jeg koblet prøvepunktet til noen analog inngang jeg bestemte meg for å kontrollere spenningsområde den kan tilby. Jeg fikk mellom 20 mV og opp til 1,644 V med potensiometeret glidebryteren på enten ekstreme. Flytte glidebryteren ca 1 /6th unna 20 mV slutten av sitt spor ga en V lesing, men lesingen ble ganske lineær derfra til 1,644 V slutten av sporet. Skifte 1k fast motstand med en 10k motstand gi en mer lineær lesing mellom to mV til en V som potensiometeret ble justert. Så jeg forlot 10k fast motstand i resten av artikkelen.

Lese analog inngang

Prøven punktet kan kobles til hvilken som helst analog inngang, valgte jeg analog inngang 0, som er pin 39 på P9 spissen.

Min BeagleBone Svart var allerede oppsett for analog inngang. Kapp-bone-iio linje er det du ønsker å se når du viser din spilleautomater fil, som vist nedenfor. Jeg prøvde å fjerne min cape-bone-iio være skriftlig -7 til sporene fil, som forårsaket mine analoge input-filer til å forsvinne fra /sys, men også skapt ustabilitet, låse meg ut av å lese sporene filen igjen før jeg restartet BeagleBone Svart .

 root @ beaglebone: ~ # echo cape-bone-iio > /sys/devices/bone_capemgr.*/slots...root@beaglebone:~# katt /sys/devices/bone_capemgr.*/slots 0: 54: PF --- 1: 55: PF --- 2: 56: PF --- 3: 57: PF --- 4: ff: POL Bone-LT-eMMC-2G, 00A0, Texas Instrument, BB-BONE-EMMC-2G 5: ff: PO-- Bone-Black-HDMI, 00A0, Texas Instrument, BB-BONELT-HDMI 6: ff: PO-- Bone-Black-HDMIN, 00A0, Texas Instrument, BB-BONELT-HDMIN 7: ff: Pol Styr Navn Board, 00A0, Styr Manuf, cape-bone -iio 8: ff: Pol Styr Navn Board, 00A0, Styr Manuf, am33xx_pwm 9: ff: Pol Styr Navn Board, 00A0, Styr Manuf, BB-SPIDEV010: ff: Pol Styr Navn Board, 00A0, Styr Manuf, GPIO-P9 0,1211: ff: Pol Styr Navn Board, 00A0, Styr Manuf, GPIO-P9.1512: ff: Pol Styr Navn Board, 00A0, Styr Manuf, GPIO-P9.2313: ff: Pol Styr Navn Board, 00A0, Styr Manuf , bone_pwm_P9_1414: ff: Pol Styr Navn Board, 00A0, Styr Manuf, GPIO-P9.2615: ff: Pol Styr Navn Board, 00A0, Styr Manuf, GPIO-P9.27 

Filene som lar deg få tilgang til den analoge innganger er gjemt bort inne /sys der du ikke kan tenke for å finne dem. Filene er også i store bokstaver så vil trolig unngå ditt første forsøk på å bruke finne for å få på dem

 root @ beaglebone. /Sys # cd /systemrot @ beaglebone: /sys # funn. -iname "ain *" ./enheter /ocp.3 /helper.12 /AIN0. /enheter /ocp.3 /helper.12 /AIN1 ... 

Følgende målinger ble tatt da jeg flyttet potensiometeret slider fra minst motstand mot maksimal motstand med en 10k motstand i serie før potensiometeret

 root @ beaglebone. /sys/devices/ocp.3/helper.12# katt AIN00root @ beaglebone: /sys /enheter /OCP. 3 /helper.12 # cat AIN0427root @ beaglebone: /sys/devices/ocp.3/helper.12# katt AIN0746root @ beaglebone: /sys/devices/ocp.3/helper.12# katt AIN0921 

Mens de oven AIN filer gi muligheten til å oppbevare får den nåværende verdien av analog inngang, kan du liker å ha hardware fylle en buffer med verdiene for deg. På denne måten vil du ikke trenger å bekymre deg bestemt tidspunkt, kan du bare lese alle verdier over siste sekund eller to på en gang. Dessverre fant jeg mange relativt nye nettsider med informasjon om hvordan du gjør dette, men hva jeg fant i konflikt på subtile måter.

Eksempelet fil fra kjernen kilder på drivere /staging /iio /Dokumentasjon /generic_buffer.c får sitert ofte. Texas Instruments har en patch til denne filen til å fjerne triggere og kontinuerlig vise de analoge inngangsverdier på konsollen. Dessverre har jeg funnet ut at min Linux-kjernen nektet å aktivere en buffer for analog inngang (er) uten en trigger være oppsett, med relevant dmesg vist nedenfor

 [463,846511] Buffer ikke startet. Ingen trigger 

Aktivering triggere kan kreve at du setter inn iio-trig-sysfs kjernemodul som vist nedenfor. Dette skaper nye iio_sysfs_trigger katalogen

 root @ beaglebone. /Sys /buss /iio /enheter # insmod /lib/modules/3.8.13/kernel/drivers/staging/iio/trigger/iio-trig-sysfs.koroot@beaglebone:/sys/bus/iio/devices# ltotal 0lrwxrwxrwx 1 root root 0 23 mars 02:36 iio: Device0 - > ../../../devices/ocp.3/44e0d000.tscadc/tiadc/iio:device0lrwxrwxrwx 1 root root 0 23 mars 03:01 iio_sysfs_trigger - > ../../../devices/iio_sysfs_trigger

I opprettet en gaffel av ADC-iio-kontinuerlig-sampling-userspace repository slik at jeg kunne endre noen filer. Jeg har også endret bruk av avstemningen () for å velge () slik at en mer nøyaktig telling av utløse hendelser er holdt. Når du leser større buffere avhengigheten av målingen () ikke differensiere slik at enhets-fila forblir klar til å gi data fordi loopen ikke hadde helt utladet dataene ennå. Kjernen i generic_buffer.c i ovennevnte gaffel bare venter på nye verdier på /dev /iio: Device0 bruker velger () og skriver dem ut i en lesbar form på konsollen

Nedenfor skriptet vil starte. generic_buffer kontinuerlig overvåking av analoge innganger 0 og 5. trigger vil bli sysfstrig1. Når du kjører skriptet vil produksjonen oppstartsmeldinger og deretter pause. Hvis den andre blokken med kommandoer nedenfor kjøres i en annen terminal deretter script_adc vinduet vil våren til livs utskrift kolonner med analoge målinger

 # cat ./script_adc.shecho 1 >.; /sys /buss /iio /enheter /iio_sysfs_trigger /add_triggerecho 1 > /sys /buss /iio /enheter /iio \\: Device0 /scan_elements /in_voltage0_enecho 1 > /sys/bus/iio/devices/iio\\:device0/scan_elements/in_voltage5_en./generic_buffer -n tiadc -t sysfstrig1 -l 128 -c 10 # ./script_adc.sh ... [pause i tid] ... wait__ 0 10 rs 80 ss 81315,000000 1508,000000 1315,000000 1456,000000 1315,000000 1429,000000 1315,000000 1421,000000 1315,000000 1414,000000 1315,000000 1413,000000 1315,000000 1410,000000 1315,000000 1408,000000 1315,000000 1411,000000 1315,000000 1411.000000 wait__ 1 10 rs 80 ss 81315,000000 1410,000000 1315,000000 1411,000000 

For å utløse den analoge buffer fra en annen terminal:

 root @ beaglebone: /sys /buss /iio /enheter /trigger0 # cat namesysfstrig1root @ beaglebone: /sys /buss /iio /enheter /trigger0 # echo 1 > trigger_now 

Mens bruken av triggere og to konsoller i ovennevnte er litt rart, det er ingenting som hindrer hovedprogrammet fra å bruke en timer for å kontinuerlig utløse den analoge inngangsenheten.

analog konverter i den BeagleBone Black er 12 biter så det bør tilby verdier mellom 0 og 4096. Dette er en litt bedre oppløsning enn de 10 bits som tilbys på Arduino styrene. Som maksimal spenning jeg tilby til analog pin er en V i denne artikkelen jeg kaster bort en masse prøvespenningsområde og dermed nesten halvparten av oppløsningen på analog inngang. Det viktigste å se på er at du aldri leverer over 1,8 volt til noen analog inngang. Det er også noen regler om å tilføre spenning til pinner og SYS_RESET som du bør ta en titt på å unngå damanging din BeagleBone Svart. Grensesnittet tilbudt analoge innganger kan du raskt få gjeldende verdier og bufring løsningen lar deg kontinuerlig overvåke dine innspill uten mangler noen prøver

For flere artikler i denne serien, se:.

Komme i gang med den BeagleBone Black: En 1GHz ARM Linux maskin for $ 45

BeagleBone Svart Del 2: Linux ytelsestester

BeagleBone Black: Hvordan få Avbryter Gjennom Linux GPIO

robotarmen Kontroll fra BeagleBone Svart

Hvordan kontrollere et tre hjul robot fra en tablett med BeagleBone Svart Anmeldelser