Inkrementell kodare

Roterande inkrementell pulsgivare med axel fäst vid dess genomgående öppning
Introduktion till inkrementella kodare, från VideoWiki -skriptet Incremental Encoder

En inkrementell kodare är en linjär eller roterande elektromekanisk enhet som har två utsignaler, A och B , som avger pulser när enheten flyttas. Tillsammans A- och B -signalerna både förekomsten av och rörelseriktningen. Många inkrementella kodare har en extra utsignal, typiskt betecknad index eller Z , som indikerar att kodaren är placerad vid en speciell referensposition. Vissa pulsgivare tillhandahåller också en statusutgång (typiskt betecknat larm ) som indikerar interna feltillstånd såsom ett lagerfel eller sensorfel.

Till skillnad från en absolutkodare indikerar inte en inkrementell kodare absolut position; den rapporterar endast förändringar i position och, för varje rapporterad positionsändring, rörelseriktningen. Följaktligen, för att bestämma den absoluta positionen vid något speciellt ögonblick, är det nödvändigt att skicka kodarsignalerna till ett inkrementellt kodargränssnitt , som i sin tur kommer att "spåra" och rapportera kodarens absoluta position.

Inkrementella kodare rapporterar positionsförändringar nästan omedelbart, vilket gör att de kan övervaka rörelserna hos höghastighetsmekanismer i nästan realtid . På grund av detta används inkrementella omkodare ofta i applikationer som kräver exakt mätning och kontroll av position och hastighet .

Kvadraturutgångar

Två fyrkantsvågor i kvadratur. Rörelseriktningen indikeras av tecknet för A - B fasskillnaden som i detta fall är negativ eftersom A följer B .

En inkrementell kodare använder en kvadraturkodare för att generera dess A- och B- utgångssignaler. Pulserna som emitteras från A- och B -utgångarna är kvadraturkodade, vilket betyder att när den inkrementella kodaren rör sig med en konstant hastighet, är A- och B -vågformerna fyrkantvågor och det finns en 90 graders fasskillnad mellan A och B .

Vid en viss tidpunkt kommer fasskillnaden mellan A- och B -signalerna att vara positiv eller negativ beroende på kodarens rörelseriktning. I fallet med en roterande encoder är fasskillnaden +90° för medurs rotation och -90° för moturs rotation, eller vice versa, beroende på enhetens design.

Frekvensen av pulserna på A- eller B -utgången är direkt proportionell mot kodarens hastighet (positionsändringshastighet); högre frekvenser indikerar snabb rörelse, medan lägre frekvenser indikerar lägre hastigheter. Statiska, oföränderliga signaler matas ut på A och B när givaren är orörlig. I fallet med en roterande pulsgivare anger frekvensen hastigheten för pulsgivarens axelrotation, och i linjära pulsgivare anger frekvensen hastigheten för den linjära traverseringen.

Konceptuella ritningar av kvadraturkodarens avkänningsmekanismer

Upplösning

Upplösningen hos en inkrementell kodare är ett mått på precisionen hos positionsinformationen som den producerar. Kodarupplösningen specificeras typiskt i termer av antalet A (eller B ) pulser per enhetsförskjutning eller, ekvivalent, antalet A (eller B ) fyrkantvågscykler per enhetsförskjutning. I fallet med roterande omkodare anges upplösningen som antalet pulser per varv (PPR) eller cykler per varv (CPR), medan linjär kodarupplösning vanligtvis anges som antalet pulser som avges för ett visst linjärt genomloppsavstånd (t.ex. 1000 pulser per mm ).

Detta i motsats till mätupplösningen för givaren, som är den minsta positionsändring som givaren kan upptäcka. Varje signalkant A eller B indikerar en detekterad positionsändring. Eftersom varje fyrkantsvågscykel på A (eller B ) omfattar fyra signalkanter (stigande A , stigande B , fallande A och fallande B ), är kodarens mätupplösning lika med en fjärdedel av förskjutningen som representeras av en hel A- eller B -utgångscykel . Till exempel har en linjär pulsgivare med 1000 pulser per mm en mätupplösning per cykel på 1 mm / 1000 cykler = 1 μm, så denna kodares upplösning är 1 μm / 4 = 250 nm.

Symmetri och fas

Inkrementella kodare uppvisar symmetri- och fasfel på grund av sensorfel

Vid rörelse med konstant hastighet skulle en ideal inkrementell kodare mata ut perfekta fyrkantvågor på A och B (dvs pulserna skulle vara exakt 180° breda) med en fasskillnad på exakt 90° mellan A och B. I riktiga omkodare är dock pulsbredderna aldrig exakt 180° på grund av sensorimperfektioner och fasskillnaden aldrig exakt 90°. Vidare A- och B -pulsbredderna från en cykel till en annan (och från varandra) och fasskillnaden varierar vid varje A- och B -signalflank. Följaktligen kommer både pulsbredden och fasskillnaden att variera över ett intervall av värden.

För varje speciell kodare definieras pulsbredden och fasskillnadsområdena av "symmetri" respektive "fas" (eller "fasning") specifikationer. Till exempel, i fallet med en kodare med symmetri specificerad som 180° ±25°, garanteras bredden på varje utpuls att vara minst 155° och inte mer än 205°. På liknande sätt, med fas specificerad som 90° ±20°, kommer fasskillnaden vid varje A- eller B -kant att vara minst 70° och inte mer än 110°.

Signaltyper

Inkrementella kodare använder olika typer av elektroniska kretsar för att driva (sända) sina utsignaler, och tillverkare har ofta möjligheten att bygga en viss kodarmodell med någon av flera drivrutinstyper. Vanligt tillgängliga drivrutiner inkluderar öppen kollektor, mekanisk, push-pull och differential RS-422.

Öppna samlare

Schematiskt diagram av en typisk öppen samlardrivrutin. Utgångsmotståndet är inbyggt i vissa kodare; om den inte är inbyggd krävs ett externt motstånd.

Open collector- drivrutiner fungerar över ett brett spektrum av signalspänningar och kan ofta sänka betydande utström, vilket gör dem användbara för att direkt driva strömslingor , optoisolatorer och fiberoptiska sändare .

Eftersom den inte kan generera ström måste utgången från en drivenhet med öppen kollektor anslutas till en positiv likspänning via ett pull-up-motstånd . Vissa kodare tillhandahåller ett internt motstånd för detta ändamål; andra gör det inte och kräver därför ett externt pull-up-motstånd. I det senare fallet är motståndet typiskt placerat nära kodargränssnittet för att förbättra brusimmuniteten.

Kodarens logiska signalspänning på hög nivå bestäms av spänningen som appliceras på pull-up-motståndet ( V OH i schemat), medan lågnivåutgångsströmmen bestäms av både signalspänningen och lastresistansen (inklusive pull-up). motstånd). När föraren växlar från den låga till den höga logiska nivån samverkar belastningsresistansen och kretskapacitansen för att bilda ett lågpassfilter, som sträcker ut (ökar) signalens stigtid och därmed begränsar dess maximala frekvens. Av denna anledning används vanligtvis inte öppna kollektordrivrutiner när kodaren kommer att mata ut höga frekvenser.

Mekanisk

En kretskortsmonterad, roterande mekanisk inkrementell pulsgivare

Mekaniska (eller kontakt ) inkrementella kodare använder glidande elektriska kontakter för att direkt generera A- och B -utgångssignalerna. Typiskt är kontakterna elektriskt anslutna till signaljord när de är stängda så att utgångarna kommer att "drivas" lågt, vilket i praktiken gör dem till mekaniska ekvivalenter till öppna kollektordrivare och därför föremål för samma signalkonditioneringskrav (dvs externt pull-up-motstånd).

Den maximala utfrekvensen begränsas av samma faktorer som påverkar öppna kollektorutgångar, och ytterligare begränsad av kontaktstuds – som måste filtreras av kodargränssnittet – och av de mekaniska kontakternas arbetshastighet, vilket gör dessa enheter opraktiska för höga frekvensdrift. Vidare upplever kontakterna mekaniskt slitage under normal drift, vilket begränsar livslängden för dessa enheter. Å andra sidan är mekaniska omkodare relativt billiga eftersom de inte har någon intern, aktiv elektronik. Sammantaget gör dessa attribut att mekaniska omkodare passar bra för applikationer med låg belastning och låg frekvens.

PCB- och panelmonterade mekaniska inkrementella kodare används ofta som handmanövrerade kontroller i elektronisk utrustning. Sådana enheter används som volymkontroller i ljudutrustning, som spänningskontroller i bänkströmförsörjning och för en mängd andra funktioner.

Tryck dra

Push-pull-utgångar (t.ex. TTL ) används vanligtvis för direkt gränssnitt till logiska kretsar. Dessa är väl lämpade för applikationer där kodaren och gränssnittet är placerade nära varandra (t.ex. sammankopplade via tryckta kretsledare eller korta, skärmade kabeldragningar) och drivs från en gemensam strömkälla, och på så sätt undviker exponering för elektriska fält, jordslingor och transmissionslinjeeffekter som kan förstöra signalerna och därigenom störa positionsspårning, eller ännu värre, skada kodargränssnittet.

Differentialpar

Differentialutgångsvågformer från en inkrementell kodare

Differentiell RS-422- signalering är vanligtvis att föredra när kodaren kommer att mata ut höga frekvenser eller vara placerad långt bort från kodargränssnittet, eller när kodarsignalerna kan utsättas för elektriska fält eller common-mode spänningar, eller när gränssnittet måste kunna upptäcka anslutningsproblem mellan kodare och gränssnitt. Exempel på detta inkluderar CMM och CNC -maskiner, industriell robotik , fabriksautomation och rörelseplattformar som används i flyg- och rymdfarkostsimulatorer.

När RS-422-utgångar används, tillhandahåller kodaren ett differentiellt ledarpar för varje logisk utgång; till exempel är "A" och "/A" vanliga beteckningar för differentialparet aktiv-hög och aktiv-låg som innefattar kodarens A- logikutgång. Följaktligen måste kodargränssnittet tillhandahålla RS-422-linjemottagare för att omvandla de inkommande RS-422-paren till logik med enkel ände.

Huvudsakliga ansökningar

Positionsspårning

Inkrementella kodare används vanligtvis för att övervaka de fysiska positionerna för mekaniska enheter. Den inkrementella kodaren är mekaniskt ansluten till enheten som ska övervakas så att dess utsignaler kommer att ändras när enheten rör sig. Exempel på enheter inkluderar bollarna i mekaniska datormöss och styrkula, kontrollrattar i elektronisk utrustning och roterande axlar i radarantenner.

En inkrementell kodare håller inte reda på, inte heller indikerar dess utgångar den aktuella kodarens position; den rapporterar bara inkrementella förändringar i position. Följaktligen är det nödvändigt att tillhandahålla extern elektronik som kommer att "spåra" positionen för att bestämma kodarens position vid något speciellt ögonblick. Denna externa krets, som är känd som ett inkrementellt kodargränssnitt, spårar position genom att räkna inkrementella positionsändringar.

När det tar emot varje rapport om inkrementell positionsändring (indikerat av en övergång av A- eller B -signalen), kommer ett kodargränssnitt att ta hänsyn till fasförhållandet mellan A och B och, beroende på tecknet på fasskillnaden, räkna upp eller ner. Det kumulativa värdet för "räkneverk" anger avståndet tillryggalagt sedan spårningen började. Denna mekanism säkerställer exakt positionsspårning i dubbelriktade applikationer och förhindrar i enkelriktade applikationer falska räkningar som annars skulle bli resultatet av vibrationer eller mekanisk vibration nära en AB-kodövergång.

Förskjutningsenheter

Ofta måste pulsgivarantalet uttryckas i enheter som meter, miles eller varv. I sådana fall omvandlas räknevärdena till önskade enheter genom att multiplicera med förhållandet mellan kodarförskjutningen per räkning :

.

Vanligtvis utförs denna beräkning av en dator som läser räkningarna från det inkrementella kodargränssnittet. Till exempel, i fallet med en linjär inkrementell kodare som producerar 8000 räkningar per millimeters rörelse, beräknas positionen i millimeter enligt följande:

.

Målsökning

För att ett inkrementellt kodargränssnitt ska kunna spåra och rapportera absolut position, måste kodarräkningen korreleras till en referensposition i det mekaniska system som kodaren är ansluten till. Detta görs vanligen genom att ställa in systemet, vilket består av att flytta det mekaniska systemet (och kodaren) tills det är i linje med en referensposition, och sedan störa den associerade absoluta positionen in i kodargränssnittets räknare.

En närhetssensor är inbyggd i vissa mekaniska system för att underlätta målsökning, som matar ut en signal när det mekaniska systemet är i sitt "hemma" (referens) läge. I sådana fall hemställs det mekaniska systemet genom att flytta det tills kodargränssnittet tar emot sensorsignalen, varpå motsvarande positionsvärde fastnar i positionsräknaren.

I vissa roterande mekaniska system (t.ex. roterande radarantenner) är "positionen" av intresse rotationsvinkeln i förhållande till en referensorientering. Dessa använder typiskt en roterande inkrementell kodare som har en index (eller Z ) utsignal. Indexsignalen bekräftas när axeln är i sin referensorientering, vilket gör att kodargränssnittet blockerar referensvinkeln i sin positionsräknare .

Vissa inkrementella kodarapplikationer saknar referenspositionsdetektorer och måste därför implementera referenssökning på andra sätt. Till exempel kommer en dator, när en mus eller styrkula pekdon används, vanligtvis att hem enheten genom att anta en central, initial skärmposition vid uppstart och stoppa motsvarande räkneverk i X- och Y-positionsräknare. I fallet med panelkodare som används som handmanövrerade kontroller (t.ex. ljudvolymkontroll), hämtas den initiala positionen vanligtvis från flash eller annat icke-flyktigt minne vid uppstart och fastnar i positionsräknaren och vid avstängning den aktuella positionsräkningen sparas i ett icke-flyktigt minne för att fungera som startposition för nästa uppstart.

Hastighetsmätning

Mekaniska transportörer som denna använder vanligtvis roterande inkrementella omkodare som återkopplingsanordningar för varvtalsreglering med sluten slinga

Inkrementella omkodare används vanligtvis för att mäta hastigheten hos mekaniska system. Detta kan göras i övervakningssyfte eller för att ge feedback för rörelsekontroll , eller båda. Utbredda tillämpningar av detta inkluderar hastighetskontroll av radarantennrotation och materialtransportörer , och rörelsekontroll i robotik , CMM och CNC -maskiner.

Inkrementella kodargränssnitt syftar främst till att spåra mekanisk förskjutning och mäter vanligtvis inte hastigheten direkt. Följaktligen måste hastigheten mätas indirekt genom att ta derivatan av positionen med avseende på tid. Positionssignalen är i sig kvantiserad , vilket innebär utmaningar för att ta derivatan på grund av kvantiseringsfel, speciellt vid låga hastigheter.

Kodarhastigheten kan bestämmas antingen genom att räkna eller genom att tidsstyra kodarens utpulser (eller flanker). Det resulterande värdet indikerar en frekvens eller period, från vilken hastighet kan beräknas. Hastigheten är proportionell mot frekvensen och omvänt proportionell mot perioden.

Efter frekvens

Om positionssignalen samplas ( en diskret tidssignal) detekteras och räknas pulserna (eller pulskanterna) av gränssnittet, och hastigheten beräknas typiskt av en dator som har läsåtkomst till gränssnittet. För att göra detta läser datorn av positionsräkningarna från gränssnittet vid tidpunkten och sedan, vid något senare tillfälle läser räkningarna igen för att få . Medelhastigheten under intervallet till beräknas sedan:

.

Det resulterande hastighetsvärdet uttrycks som antal per tidsenhet (t.ex. antal per sekund). I praktiken är det dock ofta nödvändigt att uttrycka hastigheten i standardiserade enheter som meter per sekund, varv per minut (RPM) eller miles per hour (MPH). I sådana fall kommer programvaran att ta hänsyn till förhållandet mellan antal och önskade avståndsenheter, såväl som förhållandet mellan samplingsperioden och önskade tidsenheter. Till exempel, i fallet med en roterande inkrementell kodare som producerar 4096 räkningar per varv, som läses en gång per sekund, skulle programvaran beräkna RPM enligt följande:

.

När man mäter hastighet på detta sätt är mätningsupplösningen proportionell mot både kodarupplösningen och samplingsperioden (den förflutna tiden mellan de två samplen); mätupplösningen blir högre när samplingsperioden ökar.

Efter period

Alternativt kan en hastighetsmätning rapporteras vid varje kodarutgångspuls genom att mäta pulsbredden eller perioden. När denna metod används utlöses mätningar vid specifika positioner istället för vid specifika tidpunkter. Hastighetsberäkningen är densamma som visas ovan (antal/tid), även om i detta fall mätningens start- och stopptider ( och ) tillhandahålls av en tidsreferens.

Denna teknik undviker positionskvantiseringsfel men introducerar fel relaterade till kvantisering av tidsreferensen. Den är också mer känslig för sensoricke-idealiteter såsom fasfel, symmetrifel och variationer i övergångsplatserna från deras nominella värden.

Inkrementellt kodargränssnitt

PCI Express 6-axis incremental encoder interface.Input connectors for encoder signals RS-422 line receivers FPGA PCI Express edge connector
PCI Express 6-axligt inkrementell kodargränssnitt. Uppifrån och ned: ingångskontakter (L) och linjemottagare (R); FPGA; bakplanskontakt

Ett inkrementell kodargränssnitt är en elektronisk krets som tar emot signaler från en inkrementell kodare, bearbetar signalerna för att producera absolut position och annan information och gör den resulterande informationen tillgänglig för externa kretsar.

Inkrementella kodargränssnitt implementeras på en mängd olika sätt, inklusive som ASIC , som IP-block inom FPGA:er , som dedikerade perifera gränssnitt i mikrokontroller och, när höga räknehastigheter inte krävs, som pollade (programvaruövervakade) GPIO:er .

Oberoende av implementeringen måste gränssnittet sampla kodarens A- och B -utgångssignaler tillräckligt ofta för att detektera varje AB-tillståndsändring innan nästa tillståndsändring inträffar. Vid detektering av en tillståndsändring kommer den att öka eller minska positionsantalet baserat på om A leder eller följer B . Detta görs vanligtvis genom att lagra en kopia av det tidigare AB-tillståndet och, vid tillståndsändring, använda de nuvarande och tidigare AB-tillstånden för att bestämma rörelseriktningen.

Linjemottagare

Inkrementella kodargränssnitt använder olika typer av elektroniska kretsar för att ta emot kodargenererade signaler. Dessa linjemottagare tjänar som buffertar för att skydda nedströms gränssnittskretsar och tillhandahåller i många fall även signalkonditioneringsfunktioner.

Enkelslut

Inkrementella kodargränssnitt använder typiskt Schmitt triggeringångar för att ta emot signaler från kodare som har ensidiga (t.ex. push-pull, öppen kollektor) utgångar. Denna typ av linjemottagare avvisar i sig lågnivåbrus (med hjälp av sin ingångshysteres) och skyddar nedströmskretsar från ogiltiga (och möjligen destruktiva) logiska signalnivåer.

Differentiell

RS-422 linjemottagare används vanligtvis för att ta emot signaler från kodare som har differentiella utgångar. Denna typ av mottagare avvisar common-mode-brus och omvandlar de inkommande differentialsignalerna till den enda form som krävs av nedströms logiska kretsar.

I verksamhetskritiska system kan ett kodargränssnitt krävas för att upptäcka förlust av insignaler på grund av strömavbrott i kodaren, fel på signaldrivrutinen, kabelfel eller kabelbortkoppling. Detta åstadkoms vanligtvis genom att använda förbättrade RS-422 linjemottagare som upptäcker frånvaron av giltiga insignaler och rapporterar detta tillstånd via en "signal förlorad" statusutgång. Vid normal drift störningar (korta pulser) uppträda på statusutgångarna under ingångstillståndsövergångar; typiskt kommer kodargränssnittet att filtrera statussignalerna för att förhindra att dessa fel tolkas felaktigt som förlorade signaler. Beroende på gränssnittet kan efterföljande bearbetning inkludera generering av en avbrottsbegäran vid upptäckt av signalförlust och sändning av meddelande till applikationen för felloggning eller felanalys.

Klocksynkronisering

En 2-FF synkroniserare. Linjemottagarens utsignal tillförs D in ; D ut -signalen skickas till kvadraturavkodaren.
Vid höga klockfrekvenser kan synkronisatorerna använda tre (som denna) eller fler vippor för att minska bitfelsfrekvensen

Ett inkrementellt kodargränssnitt består till stor del av sekventiell logik som stimuleras av en klocksignal . Emellertid är de inkommande kodarsignalerna asynkrona med avseende på gränssnittsklockan eftersom deras timing bestäms enbart av kodarens rörelse. Följaktligen måste utsignalerna från A och B (även Z och larm , om sådana används) synkroniseras med gränssnittsklockan, både för att undvika fel på grund av metastabilitet och för att tvinga signalerna in i kvadraturavkodarens klockdomän.

Typiskt utförs denna synkronisering av oberoende ensignalsynkronisatorer såsom de två vippor som visas här. Vid mycket höga klockfrekvenser, eller när en mycket låg felfrekvens behövs, kan synkronisatorerna inkludera ytterligare vippor för att uppnå en acceptabelt låg bitfelsfrekvens .

Ingångsfilter

I många fall måste ett kodargränssnitt filtrera de synkroniserade kodarsignalerna innan de bearbetas vidare. Detta kan krävas för att avvisa lågnivåbrus och korta brusspikar med stor amplitud som vanligtvis förekommer i motortillämpningar och, i fallet med kodare av mekanisk typ, för att avstudsa A och B för att undvika räknefel grund av mekanisk kontaktstuds .

Hårdvarubaserade gränssnitt tillhandahåller ofta programmerbara filter för kodarsignalerna, som tillhandahåller ett brett utbud av filterinställningar och därmed tillåter dem att avstudsa kontakter eller undertrycka transienter som härrör från brus eller långsamt svängande signaler, efter behov. I mjukvarubaserade gränssnitt A och B vanligtvis anslutna till GPIO: er som samplas (via polling eller kantavbrott) och avstudsas av programvara.

Kvadraturavkodare

En kvadraturavkodare omvandlar A- och B -signalerna från en inkrementell kodare till riktnings- och räkneaktiveringssignaler , som används för att styra en synkron upp/nedräknare

Inkrementella kodargränssnitt använder vanligen en kvadraturavkodare för att omvandla A- och B -signalerna till riktnings- och räkneaktiveringssignaler (klockaktivering) som behövs för att styra en dubbelriktad (upp- och nedräkning) synkron räknare .

Vanligtvis är en kvadraturavkodare implementerad som en finita-tillståndsmaskin (FSM) som samtidigt samplar A- och B -signalerna och sålunda producerar amalgamat "AB"-sampel. När varje nytt AB-prov förvärvas kommer FSM att lagra det tidigare AB-provet för senare analys. FSM:n utvärderar skillnaderna mellan de nya och tidigare AB-tillstånden och genererar riktnings- och räkneaktiveringssignaler som är lämpliga för den detekterade AB-tillståndssekvensen.

Kvadraturavkodartillståndstabell
Beskrivning AB-stat Utgångar
Tidigare Nuvarande CE DIR FELA
x1 x2 x4

Flyttade ett steg i riktning "framåt" ( A leder B )
00 10 1 1 1 1 0
10 11 0 0
11 01 1
01 00 0

Flyttade ett steg i "omvänd" riktning ( B leder A )
00 01 0 0
01 11 1
11 10 0
10 00 1 1
Ingen upptäckt rörelse 00 00 0 X
01 01
10 10
11 11
Flyttade ett obestämt antal steg 00 11 1
01 10
10 01
11 00

Statliga övergångar

I två på varandra följande AB-samplar kan den logiska nivån för A eller B ändras eller båda nivåerna kan förbli oförändrade, men i normal drift kommer A och B aldrig båda att ändras. I detta avseende är varje AB-sampel i praktiken en tvåbitars Gray-kod .

Normala övergångar

När endast A eller B ändrar tillstånd, antas det att kodaren har flyttat ett steg av sin mätupplösning och följaktligen kommer kvadraturavkodaren att hävda sin räkneaktiveringsutgång för att tillåta räknevärdena att ändras. Beroende på kodarens färdriktning (framåt eller bakåt), kommer avkodaren att hävda eller förneka sin riktningsutgång för att få räkneverken att öka eller minska (eller vice versa).

När varken A eller B ändras, antas det att kodaren inte har rört sig och så att kvadraturavkodaren negerar sin räkneaktiveringsutgång , vilket gör att räknevärdena förblir oförändrade.

Fel

Om både A- och B -logiktillstånden ändras i på varandra följande AB-sampel, har kvadraturavkodaren inget sätt att bestämma hur många inkrement, eller i vilken riktning kodaren har rört sig. Detta kan hända om kodarhastigheten är för hög för att avkodaren ska kunna bearbeta (dvs. frekvensen av AB-tillståndsändringar överstiger kvadraturavkodarens samplingshastighet; se Nyquist-hastighet ) eller om A- eller B -signalen är brusig .

I många kodartillämpningar är detta en katastrofal händelse eftersom räknaren inte längre ger en korrekt indikation av kodarens position. Följaktligen kommer kvadraturavkodare ofta att mata ut en ytterligare felsignal som bekräftas när A- och B -tillstånden ändras samtidigt. På grund av det här tillståndets svårighetsgrad och tidskänsliga karaktär kopplas felsignalen ofta till en avbrottsbegäran .

Klockmultiplikator

En kvadraturavkodare tillåter inte nödvändigtvis att räkningarna ändras för varje inkrementell positionsändring. När en avkodare upptäcker en inkrementell positionsändring (på grund av en övergång av A eller B , men inte båda), kan den tillåta att räkningarna ändras eller så kan den förhindra räkning, beroende på AB-tillståndsövergången och avkodarens klockmultiplikator .

Klockmultiplikatorn för en kvadraturavkodare heter så eftersom den resulterar i en räknehastighet som är en multipel av A- eller B -pulsfrekvensen. Beroende på avkodarens design kan klockmultiplikatorn kopplas in i designen eller så kan den vara konfigurerbar under körning via insignaler.

Klockmultiplikatorvärdet kan vara ett, två eller fyra (typiskt betecknade "x1", "x2" och "x4", eller "1x", "2x" och "4x"). I fallet med en x4-multiplikator kommer räkningarna att ändras för varje AB-tillståndsändring, vilket resulterar i en räknehastighet lika med fyra gånger A- eller B - frekvensen. x2- och x1-multiplikatorerna tillåter att räkningarna ändras på vissa, men inte alla AB-tillståndsändringar, som visas i kvadraturavkodartillståndstabellen ovan (notera: den här tabellen visar en av flera möjliga implementeringar för x2- och x1-multiplikatorer; andra implementeringar kan möjliggöra räknas vid olika AB-övergångar).

Positionsrapportering

Ur en applikations perspektiv är det grundläggande syftet med ett inkrementellt kodargränssnitt att rapportera positionsinformation på begäran. Beroende på applikation kan detta vara så enkelt som att låta datorn läsa positionsräknaren när som helst under programkontroll. I mer komplexa system kan positionsräknaren samplas och bearbetas av mellantillståndsmaskiner, som i sin tur gör samplen tillgängliga för datorn.

Provregister

Ett kodargränssnitt använder typiskt ett provregister för att underlätta positionsrapportering. I det enkla fallet där datorn kräver positionsinformation under programstyrning, kommer gränssnittet att sampla positionsräknaren (dvs. kopiera de aktuella positionsräkningarna till provregistret) och sedan kommer datorn att läsa räkningarna från provregistret. Denna mekanism resulterar i atomär drift och säkerställer därmed integriteten hos provdata, som annars kan vara i fara (t.ex. om provets ordstorlek överstiger datorns ordstorlek).

Utlöst provtagning

I vissa fall kanske datorn inte programmerat (via programmerad I/O ) kan erhålla positionsinformation med adekvat tidsprecision. Till exempel kan datorn vara oförmögen att begära prover på ett tidsbegränsat periodiskt schema (t.ex. för hastighetsmätning) på grund av variabilitet i programvarans timing. I vissa applikationer är det också nödvändigt att kräva prover när externa händelser inträffar, och datorn kanske inte kan göra det i tid. Vid högre kodarhastigheter och upplösningar kan positionsmätningsfel uppstå även när avbrott används för att kräva prover, eftersom kodaren kan röra sig mellan den tidpunkt då IRQ signaleras och provkravet utfärdas av avbrottshanteraren.

För att övervinna denna begränsning är det vanligt att ett inkrementellt kodargränssnitt implementerar hårdvaruutlöst sampling, vilket gör det möjligt för den att sampla positionsräknaren vid exakt kontrollerade tidpunkter som dikteras av en triggeringångssignal. Detta är viktigt när positionen måste samplas vid vissa tidpunkter eller som svar på fysiska händelser, och väsentligt i applikationer som fleraxlig rörelsekontroll och CMM, där positionsräknare för flera kodargränssnitt (en per axel) måste vara samtidigt provades.

I många applikationer måste datorn veta exakt när varje sampel förvärvades och, om gränssnittet har flera triggeringångar, vilken signal som utlöste provinsamlingen. För att uppfylla dessa krav kommer gränssnittet vanligtvis att inkludera en tidsstämpel och triggerinformation i varje prov.

Händelseavisering

Samplingsutlösare är ofta asynkrona med avseende på programvarukörning. Följaktligen, när positionsräknaren samplas som svar på en triggersignal, måste datorn meddelas (typiskt via avbrott ) att ett sampel är tillgängligt. Detta gör att programvaran kan vara händelsestyrd (mot polled ), vilket underlättar responsivt systembeteende och eliminerar pollingoverhead.

Exempel på FIFO

På varandra följande provtagningstriggers kan inträffa snabbare än vad datorn kan bearbeta de resulterande proverna. När detta händer kommer informationen i provregistret att skrivas över innan den kan läsas av datorn, vilket resulterar i dataförlust. För att undvika detta problem tillhandahåller vissa inkrementella kodargränssnitt en FIFO- buffert för sampel. När varje sampel samlas in, lagras det i FIFO. När datorn kräver ett prov är det tillåtet att läsa det äldsta provet i FIFO.

Anteckningar

externa länkar