Page 1 of 1

Encoder ottico HEDS-5540 con Arduino Uno

PostPosted: 11 May 2016, 13:55
by dani90
Ciao, premettendo che è da poco tempo che uso Arduino, volevo chiedere se mi potreste aiutare per il mio problema. Ho un motore "maxon DC motor 118742" da 9V collegato ad un encoder "Avago HEDS 5540#A02" con una risoluzione da 500 cpr, mediante il quale mi servirebbe sapere solo e soltanto il numero di giri che il motore effettua (non mi interessa controllare il motore impostando io il senso di rotazione o un preciso numero di giri). Utilizzo un Arduino Uno e girando tra i forum ho capito come effettuare i collegamenti, ma non sono riuscito a capire bene che programma scrivere. Chiarisco che non mi serve sapere ogni istante di tempo il numero di giri del motore, ma ogni secondo o ogni decina di secondi mi basterebbe.
Potreste darmi una mano nella stesura del codice su Arduino grazie? Perché come dicevo ho provato almeno una 30ina di codici diversi ma non sono riuscito a trovarne uno che funziona bene.

Re: Encoder ottico HEDS-5540 con Arduino Uno

PostPosted: 16 May 2016, 07:42
by deluca
Salve Dani90,
per contare il numero dei giri puoi utilizzare il segnale Index che è presente su quel tipo di encoder.
Poi aprire una finestra temporale programmando un timer del Atmega e conteggiare all'interno di quella finestra gli impulsi che ti arrivano dall'index.

Re: Encoder ottico HEDS-5540 con Arduino Uno

PostPosted: 17 May 2016, 14:14
by dani90
Ciao Deluca,
innanzitutto grazie della risposta. Io ho trovato in giro soluzioni utilizzando i canali A e B (o il singolo canale), ma con nessuna di queste ho ottenuto quello che volevo.
In merito al
Poi aprire una finestra temporale programmando un timer del Atmega e conteggiare all'interno di quella finestra gli impulsi che ti arrivano dall'index.

Puoi spiegarmi per favore cosa dovrei fare di preciso?

Re: Encoder ottico HEDS-5540 con Arduino Uno

PostPosted: 17 May 2016, 14:18
by dani90
Il seguente codice potrebbe andare bene secondo lei:
Code: Select all

volatile unsigned long  count = 0;
unsigned long copyCount = 0;

unsigned long lastRead = 0;
unsigned long interval = 1000;//one second

void setup()
{
  Serial.begin(9600);
  Serial.println("start...");
 
  pinMode(2,INPUT_PULLUP);
  attachInterrupt(0, isrCount, RISING); //interrupt signal to pin 2
}

void loop()
{
  if (millis() - lastRead >= interval) //read interrupt count every second
  {
    lastRead  += interval;
    // disable interrupts,make copy of count,reenable interrupts
    noInterrupts();
    copyCount = count*60;
    count = 0;
    interrupts();
 
    Serial.println(copyCount);

  }
}

void isrCount()
{
  count++;
}