De wereld van elektronica en robotica zit vol met geweldige kleine uitvindingen waarmee we allerlei bewegingen kunnen besturen en monitoren. Een van de meest veelzijdige en nuttige elementen is ongetwijfeld de roterende encoder, zowel optisch als magnetisch. Deze apparaten zijn onmisbaar geworden in Arduino-, automatiserings- en motorbesturingsprojecten. Als je je ooit hebt afgevraagd wat een roterende encoder precies is, vraag je je vast af. Optische of magnetische draai-encoder: wat het is en voorbeelden: KY-040 en AS5600, u bent op de juiste plaats.
In dit artikel gaan we dieper in op de werking, toepassingen en praktische voorbeelden van roterende encoders, waarbij we ons met name richten op twee zeer populaire modules: de KY-040 en AS5600Je leert hoe je optische en magnetische encoders van elkaar kunt onderscheiden, wat hun fysieke en elektrische eigenschappen zijn, hoe je ze aansluit en programmeert in Arduino, en welke voordelen ze bieden, afhankelijk van je project. We geven je ook tips voor het kiezen en gebruiken van deze sensoren in je eigen projecten, alles op een duidelijke en boeiende manier uitgelegd, zonder relevante details weg te laten.
Wat is een roterende encoder?
Un roterende encoder Het is een sensor die is ontworpen om de hoekpositie, snelheid en draairichting van een roterende as of element. Dit apparaat zet de roterende beweging om in elektrische signalen (meestal digitale pulsen of analoge signalen) die vervolgens kunnen worden geïnterpreteerd door een microcontroller zoals een Arduino, een Raspberry Pi of zelfs een industriële controller.
Deze sensoren zijn essentieel in toepassingen waarbij de exacte positie van een as bekend moet zijn of het aantal omwentelingen dat deze heeft gemaakt. Ze worden vaak aangetroffen in printers, servomotoren, robots, numerieke besturingssystemen en natuurlijk in doe-het-zelfprojecten, van menu-interfaces tot snelheidsregelsystemen.
Typen roterende encoders: optisch versus magnetisch
Rotatie-encoders kunnen hoofdzakelijk worden onderverdeeld in optisch y magnetisch, hoewel er ook minder voorkomende varianten zijn, zoals capacitieve varianten.
Optische roterende encoder
De optische encoder, zoals de KY-040Het werkt op een schijf met markeringen of gaten en een optisch zender-/ontvangersysteem (fotodiode of LED). Terwijl de as roteert, genereren de onderbrekingen die door deze markeringen worden veroorzaakt elektrische pulsen die de microcontroller kan tellen en zo de hoekverdraaiing kan bepalen. De interne constructie bestaat doorgaans uit een statisch deel (de schijf) en een roterend deel (de as die aan het te meten element is bevestigd).
Dit type encoder onderscheidt zich door zijn hoge precisie en snelle respons. Ze zijn zeer nuttig in toepassingen waar mechanische robuustheid en digitaal leesgemak essentieel zijn, zoals in gebruikersinterfaces, volumeregelingen, draaimenu's en educatieve robots.
Magnetische roterende encoder
Aan de andere kant gebruikt de magnetische encoder een sensor die gevoelig is voor het magnetische veld (meestal een Hall-sensor of een gespecialiseerde chip zoals de AS5600), die de hoekpositie van een magneet die aan de as is gekoppeld, detecteert. Deze encoders bieden een hogere resolutie dankzij interne analoog-naar-digitaal-conversie en zijn minder gevoelig voor vuil of stof, omdat ze geen optische componenten gebruiken. Bovendien bieden ze doorgaans digitale (I²C of PWM) en/of analoge uitgangen, waardoor ze eenvoudig te integreren zijn in verschillende elektronische systemen.
Incrementele en absolute encoders: belangrijkste verschillen
De wereld van encoders is verder onderverdeeld in incrementeel y absoluut.
- Incrementele encoder: Het geeft een signaal in de vorm van pulsen telkens wanneer de as een bepaalde fractie roteert. Het aantal pulsen per omwenteling is afhankelijk van het ontwerp en model. Om de huidige positie te bepalen, moet het systeem deze pulsen tellen en onthouden vanaf een referentiepunt.
- Absolute encoder: Het geeft direct de huidige hoekpositie van de as weer, zelfs als deze is verplaatst terwijl het systeem was uitgeschakeld. Het heeft meestal een speciale codering op de schijf of een magnetische sensor met hoge resolutie.
In dit artikel concentreren we ons op incrementele encoders (zoals de KY-040) en een absolute magnetische encoder (AS5600), omdat dit de meest voorkomende en eenvoudigste zijn om te integreren in Arduino-projecten.
Algemene werking van een incrementele roterende encoder
De incrementele encoders (zoals de KY-040) bestaan uit twee uitgangskanalen, kanaal A en kanaal B, die digitale pulsen genereren die 90º uit fase zijn. Door de volgorde waarin deze kanalen veranderen te vergelijken, is het mogelijk om af te leiden de draairichting (met de klok mee of tegen de klok in), en daarnaast het tellen van de genomen stappen (posities).
Het geproduceerde signaal wordt "kwadratuur" genoemd en kent verschillende precisies:
- Enkele precisie: Slechts één rand in een kanaal vastleggen.
- Dubbele precisie: Opname van beide flanken in één kanaal.
- Viervoudige precisie: Opname van beide flanken op beide kanalen.
KY-040-rotatie-encoder: kenmerken, aansluitingen en gebruik met Arduino
El KY-040 Het is een van de meest gebruikte incrementele roterende encoders in de maakindustrie. Het is een compacte, betaalbare en gemakkelijk te vinden module, speciaal ontworpen om rechtstreeks aan te sluiten op Arduino-boards en andere microcontrollers.
Belangrijkste technische kenmerken van de KY-040:
- Type: Optische incrementele
- Voedingsspanning: 5V
- verbruik: 10 mA
- Cycli per omwenteling: 30
- Pulsen per omwenteling: 20
- Maat: 20 x 30 x 30 mm
- gewicht: 10 gram
- Geïntegreerde drukknop: Het is mogelijk om de as naar binnen te drukken alsof het een knop is, wat zeer nuttige extra functionaliteit toevoegt aan menu's of interfaces.
Pinbezetting:
- CLK: Kanaal A (pulsuitgang)
- DT: Kanaal B (pulsuitgang)
- SW: Geïntegreerde drukknop
- +: 5V voeding
- GND: Land
Hoe sluit je de KY-040 aan op Arduino?
De verbinding is direct en eenvoudig:
Pin KY-040 | Arduino-pin |
---|---|
CLK-extensie | 2 (of een andere digitale ingang) |
DT | 3 (of een andere digitale ingang) |
SW | 4 (of een andere digitale ingang) |
+ | 5V |
GND | GND |
Het kan ook gebruikt worden met Raspberry Pi door de verbindingspinnen te veranderen, bijvoorbeeld met GPIO16 voor CLK, GPIO15 voor DT en GPIO14 voor SW.
Innerlijke werking
In tegenstelling tot potentiometers, De KY-040 rotatie-encoder heeft geen beperking in de rotatiehoek., waardoor de as oneindig kan roteren. Intern glijden twee metalen borstels over een sectorgescheiden oppervlak, waardoor het contact wordt gesloten in verschillende combinaties die worden gedetecteerd door kanaal A en B.
De encoder stuurt digitale signalen terug naar beide pinnen, en de offset geeft de draairichting van de as aan. Bovendien is de absolute positie, omdat deze incrementeel is, alleen bekend zolang de telling vanaf het begin van het programma wordt bijgehouden; als de stroom uitvalt, wordt de telling gereset.
Basiscodevoorbeeld voor Arduino
Een klassiek voorbeeld van het gebruik van de KY-040 is het verhogen of verlagen van een teller op basis van de draairichting. Het vereenvoudigde schema zou er dan als volgt uitzien:
int A = 2; int B = 3; volatile int POSITIE = 0; int VORIGE = 0; void setup() { pinMode(A, INPUT); pinMode(B, INPUT); Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(A), encoder, LOW); } void loop() { if (POSITIE != VORIGE) { Serial.println(POSITIE); VORIGE = POSITIE; } } void encoder() { static unsigned long lastInterrupt = 0; unsigned long InterruptionTime = millis(); if (interruptionTime - lastInterruption > 5) { // Debounce if (digitalRead(B) == HIGH) { POSITIE++; } else { POSITIE--; } POSITIE = min(50, max(-50, POSITIE)); // Beperk het bereik lastInterrupt = interruptTime; } }
Deze code bevat debounce-beveiliging om onregelmatige metingen te voorkomen die het gevolg zijn van de mechanische eigenschappen van de contacten. Het wordt aanbevolen om deze beveiliging te implementeren in elk project met incrementele encoders.
Magnetische encoder: kenmerken, aansluitingen en gebruik met Arduino
El AS5600 is een magnetische roterende encoder met hoge resolutieIdeaal voor nauwkeurige vervanging van traditionele potentiometers, motorbesturing en robotica. Het belangrijkste voordeel is dat het gebruikmaakt van magnetische detectie, waardoor het ongevoelig is voor vuil en mechanische slijtage die optische lenzen aantasten.
Belangrijkste kenmerken van de AS5600:
- Type: Absoluut, magnetisch
- resolutie: 12 bits (4096 posities per beurt)
- Eten: 3,3V of 5V
- Interfaces: I2C (digitale) of analoge uitgang
- flexibele configuratie: U kunt de richting en de uitvoermodus via hardware selecteren
- Analoge uitgang: Spanning evenredig met de hoek, handig voor microcontrollers zonder I2C
- Hoge precisie en herhaalbaarheid: Het interne systeem is voorbereid om zelfs kleine hoekige bewegingen te detecteren
Pinout en verbinding met Arduino
Pen AS5600 | funcion | Arduino-pin (I2C) |
---|---|---|
VCC | voeden | 5V |
GND | Land | GND |
SDA | I2C-gegevens | A4 |
SCL | I2C-klok | A5 |
OUT | Analoge uitgang (optioneel) | A0 |
DIR/MODUS | Adres-/modusselectie | Volgens gewenste configuratie |
Belangrijke opmerking: Op verschillende borden Arduino UnoI2C-pinnen kunnen variëren. Controleer het schema van je bord.
Codevoorbeeld voor digitaal lezen (I2C)
Om het maximale uit de AS5600 met Arduino te halen, kunt u het beste de specifieke bibliotheek gebruiken (u kunt deze vinden in de Arduino IDE-bibliotheekbeheerder door te zoeken AS5600):
#erbij betrekken #erbij betrekken AS5600-encoder; void setup() { Serial.begin(5600); Wire.begin(); if (!encoder.begin()) { Serial.println("AS9600 niet gedetecteerd. Controleer de verbindingen."); while (5600); } Serial.println("AS1 geïnitialiseerd."); } void loop() { float angle = encoder.getAngle(); Serial.print("Hoek: "); Serial.print(angle); Serial.println("graden"); delay(5600); }
Met deze code kunt u de hoek in graden in realtime uitlezen. Ideaal voor toepassingen waarbij u de absolute positie met maximale resolutie moet weten.
Codevoorbeeld voor analoog lezen
Als u de voorkeur geeft aan een eenvoudigere verbinding of als uw microcontroller geen I2C ondersteunt, kunt u gebruikmaken van de analoge uitgang van de AS5600:
const int analogPin = A0; void setup() { Serial.begin(9600); pinMode(analogPin, INPUT); } void loop() { int value = analogRead(analogPin); float angle = map(value, 0, 1023, 0, 360); Serial.print("Analoge hoek: "); Serial.print(hoek); Serial.println("graden"); delay(100); }
Op deze manier krijgt u een meting die evenredig is met de werkelijke hoek van de as, afhankelijk van de positie van de magneet.
Praktische toepassingen en gebruikstips
Beide encoders hebben zeer uiteenlopende toepassingen in elektronicaprojecten:
- KY-040: Ideaal voor draaibare gebruikersinterfaces, menu's, helderheids- en volumeregeling, optieselectie, besturing van educatieve robots, domoticaprojecten en systemen die draaibediening vereisen zonder absolute hoekreferentie.
- AS5600: Ideaal voor motorpositie- en snelheidsregeling, industriële automatisering, positiedetectie in robotgewrichten, gestabiliseerde camerasystemen (cardanische ophanging), digitale potentiometers met hoge resolutie en alle toepassingen waarbij nauwkeurige hoekdetectie vereist is.
Enkele gebruikstips:
- Altijd implementeren anti-bounce filtering (debounce) bij gebruik van mechanische incrementele encoders zoals de KY-040 om foutieve metingen te voorkomen.
- Zorg ervoor dat de magneet bij de AS5600 goed is uitgelijnd met de sensor, zodat u betrouwbare en stabiele metingen krijgt.
- Houd er rekening mee dat bij incrementele encoders de positie-informatie verloren gaat als de stroomtoevoer wordt onderbroken. Bij de AS5600 gebeurt dit niet, aangezien dit absoluut is.
- Maak gebruik van de verschillende verbindingsmodi die beide encoders bieden om ze aan te passen aan de specifieke behoeften van uw project.
Vergelijking: Wanneer kiest u voor een optische encoder en wanneer voor een magnetische?
característica | KY-040 (incrementeel optisch) | AS5600 (Absoluut Magnetisch) |
---|---|---|
Signaaltype | Digitaal (kwadratuur) | Digitaal (I2C)/Analoog |
Resolutie | 20 pulsen/omwenteling | 4096 posities/ronde |
Werkt na stroomstoring | Nee (vereist opnieuw tellen) | Ja (absolute positie) |
Gevoeligheid voor stof/vuil | Gevoelige (mechanische onderdelen) | Zeer robuust |
Prijs | Zeer zuinig | gematigde |
Moeilijkheid van integratie | Heel eenvoudig met basiscode | Vereist I2C-bibliotheek of programmering |
Typische toepassingen | UX, menu's, eenvoudige bediening | Motorische controle, geavanceerde robotica |
De keuze tussen de twee hangt af van uw projectprioriteiten: eenvoud en lage kosten in het geval van de KY-040, en precisie en robuustheid in het geval van de AS5600.