Optische encoder USdigital EM1 2-2500-1 uitlezen ARDUINO

Hallo alle

bij het demonteren van een robot joint ben ik bij een encoder uitgekomen.
ik zou deze graag willen uitlezen met een Arduino, maar hier heb ik wat vragen over.

De encoder heeft 3 outputs, channel A, channel B en een index. (5VDC)
deze heb ik gekoppeld aan inputs van een Arduino uno, en ik krijg ze binnen.
alleen denk ik dat de cyclus tijd niet voldoet.
ik heb enkel ervaring met cyclus tijden bij industriële PLC's. (safety, PT100...)
Bij een Arduino is het wat moeilijker ben ik achtergekomen :D
Eerst vraag ik mij af hoe ik de cyclus tijd kan achterhalen van mijn arduino ?
En wat welke cyclus tijd heb ik nodig voor deze sensoren en waar moet ik op letten ?
dit heb ik gevonden in de datasheet, datasheet staat ook in de bijlage.

Welke cyclustijd heb je nodig:

je hebt een puls van MAX 300kHz. Als de motor stilstaat , komen er ook geen pulsen binnen!

Welke tijd heeft de arduino?

Geen!
de arduino is gewoon een processor. hij loopt het programma tot het eind af en begint bovenaan opnieuw.
je kan ongeveer berekenen hoe lang het programma duurt door naar de machinetaal te kijken in combinatie met de frequentie van het kristal.

je kunt wel een interrupt gebruiken. lees het hele verhaal eens door om te begrijpen hoe encoders werken:
https://playground.arduino.cc/Main/RotaryEncoders/#Waveform

GMT+1

300 kHz op een Arduino wordt wel een uitdaging.
De rotary encoders op een arduino zijn normaal de encoders voor een user interface. Dan mag je blij zijn met 100 Hz. De meeste libraries kunnen niet veel sneller.

Een Arduino Uno loopt op 16 MHz klokfrequentie. Dus die doet 16 instrukties per milliseconde.

Voor snelle encoders worden meestal hardware tellers gebruikt met kwadratuur encoders. Sommige microprocessors hebben zulke tellers aan boord, maar de Arduino UNO niet.

De cyclus-tijd van een arduino ligt niet vast. Die hangt af van het aantal instrukties die in de loop() worden uitgevoerd, en dat kan dus bij elke run een andere tijd opleveren.

En de Arduino library is geoptimaliseerd op max gebruikers gemak, zodat de code onafhankelijk wordt van het model arduino. En dat gaat nogal ten koste van cpu snelheid.

[Bericht gewijzigd door deKees op 4 december 2021 23:51:10 (99%)]

Mocht u bereid zijn een bestaande library te gebruiken; Ik gebruik naar tevredenheid deze: https://github.com/PaulStoffregen/Encoder

Hij schrijft met interrupts 127 kHz te halen op een 32U4, ik geloof dat wel. Mijn eigen toepassingen zijn echter veel trager, ik heb het nooit nagemeten. Uiteraard zijn er veel snellere 'Duinos.

Maar is die 300 kHz een getal dat u daadwerkelijk verwacht, of eenvoudigweg het maximum dat de encoder haalt?

300 kHz lijkt mij wel erg veel, in de spec lees ik : 32 tot 2500 Counts per revolution. Dit moet je delen door 2, omdat er 2 kanalen zijn. Dan wordt het max 1250 CPR. Het toerental moet dan al 300kHz/1250 = 240 t/sec ofwel 14400 t/min....
Dus, best even nameten met een scoop.

Op 5 december 2021 09:32:16 schreef RP6conrad:
300 kHz lijkt mij wel erg veel, in de spec lees ik : 32 tot 2500 Counts per revolution. Dit moet je delen door 2, omdat er 2 kanalen zijn. Dan wordt het max 1250 CPR. Het toerental moet dan al 300kHz/1250 = 240 t/sec ofwel 14400 t/min....
Dus, best even nameten met een scoop.

300khz zal wel het max van de optische modulen zijn dan, het ligt vooral aan de hoeveelheid streepjes de schijf die de module uitleest ?
Hoe moet ik dit zien, hij leest de streepjes en maakt om de beurt de 2 channels hoog ?
En 1 revolutie is dan 1 paar streepjes ?
Hier zijn wat foto’s van de module + schijf.

60204

Golden Member

Misschien kan je dit document van @GJ eens doornemen, ik vond het heel interessant. Mogelijks vind je hier wat antwoorden.

https://www.nidec-netherlands.nl/media/3956-engineering-documentatie-t…

Western civilization? That would be a good idea! (HR '89-'12)