Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

difficoltà nella lettura di un encoder

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] difficoltà nella lettura di un encoder

Messaggioda Foto Utenteluchinho » 8 apr 2018, 19:25

Io ho un encoder con due canali A e B e devo calcolare il tempo tra un passo e il successivo (se va in senso orario cioè durante il fronte di salita del canae A il valore del canae B deve essere lo stesso del canale A cioè HIGH) e in questo caso ci calcolo il deltatempo, nel caso in cui il verso sia antiorario entra in un sottoprogramma che blocchi l'interrupt e aspetti un tempo k qualsiasi.

Attualmente ho scritto il programma che scrive il tempo tra un passo e l'altro nella seriale e scrive errore nel caso vada in senso antiorario MA questo non accade e sembra che scrive valori errati.

Codice: Seleziona tutto
volatile int valoreB = 0;
volatile int i =0, j=0;
volatile int k=0;

unsigned long inizio_A = 0;
unsigned long fine_A = 0;
unsigned long diff_A = 0;

void setup() {
pinMode(2, INPUT);
pinMode(4,INPUT);
Serial.begin(9600);

attachInterrupt(digitalPinToInterrupt(2), fronte, RISING);
}

void loop() {
if(k==0) {

if(j < i){
  fine_A = inizio_A;
  inizio_A = micros();
  diff_A = inizio_A - fine_A;
  j = i;
  Serial.print(diff_A/100000);
  Serial.print (" ");
  Serial.println(i);
}
if(k==1){
  Serial.print ("erroreeeeeeeeeeeeeeeeeeee    ");
  Serial.println (i);
  inizio_A = 0;
  fine_A = 0;
}
}
}
void fronte(){
  valoreB= digitalRead(4);
if(valoreB==HIGH){
   
    i ++;
    k = 0;
    }
   if(valoreB==LOW){
   
    k=1;
   }

  }


Chiedo aiuto
Avatar utente
Foto Utenteluchinho
0 3
 
Messaggi: 23
Iscritto il: 15 giu 2017, 22:24

0
voti

[2] Re: difficoltà nella lettura di un encoder

Messaggioda Foto Utentexyz » 8 apr 2018, 20:09

Quel codice è molto confuso, incompleto e si capisce poco.

Per leggere un rotary encoder non serve conoscere il tempo basta una xor:

http://www.rocketnumbernine.com/2010/03 ... ry-encoder
Avatar utente
Foto Utentexyz
6.864 2 4 6
G.Master EY
G.Master EY
 
Messaggi: 1778
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[3] Re: difficoltà nella lettura di un encoder

Messaggioda Foto UtenteDarioDT » 8 apr 2018, 21:54

Ma è un encoder di un motore?
Dario
ƎlectroYou e non smetti mai di imparare!
Avatar utente
Foto UtenteDarioDT
5.235 4 8 13
Master
Master
 
Messaggi: 1267
Iscritto il: 16 apr 2012, 20:13
Località: Bari

0
voti

[4] Re: difficoltà nella lettura di un encoder

Messaggioda Foto Utenteluchinho » 9 apr 2018, 21:55

xyz ha scritto:Quel codice è molto confuso, incompleto e si capisce poco.

Come posso migliorarlo ?

DarioDT ha scritto:Ma è un encoder di un motore?
Dario

Era utilizzato per un motore ma l'ho tolto per adattarlo un utilizzo analogo. Ma perché è rilevante se fosse stato per altro scopo?
Avatar utente
Foto Utenteluchinho
0 3
 
Messaggi: 23
Iscritto il: 15 giu 2017, 22:24

0
voti

[5] Re: difficoltà nella lettura di un encoder

Messaggioda Foto Utentexyz » 10 apr 2018, 10:50

luchinho ha scritto:Come posso migliorarlo ?

Il link precedente contiene un codice efficiente per leggere questi tipi di encoder con 2 uscite in quadratura. Se cerchi esistono altre spiegazioni con codice, ad esempio:

https://playground.arduino.cc/Main/RotaryEncoders
http://andrewjkramer.net/motor-encoders-arduino
Avatar utente
Foto Utentexyz
6.864 2 4 6
G.Master EY
G.Master EY
 
Messaggi: 1778
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

1
voti

[6] Re: difficoltà nella lettura di un encoder

Messaggioda Foto UtenteSandroCalligaro » 10 apr 2018, 11:25

DarioDT ha scritto:Ma è un encoder di un motore?
Dario

Era utilizzato per un motore ma l'ho tolto per adattarlo un utilizzo analogo. Ma perché è rilevante se fosse stato per altro scopo?
E' importante saperlo, per capire qual è la frequenza massima degli impulsi e la precisione che ti occorre.
Normalmente, nel controllo motore si utilizzano periferiche dedicate al conteggio veloce degli impulsi, perché eseguire l'operazione in software non è efficiente e, nella maggior parte dei casi, nemmeno fattibile.
Avatar utente
Foto UtenteSandroCalligaro
2.970 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1181
Iscritto il: 6 ago 2015, 19:25

0
voti

[7] Re: difficoltà nella lettura di un encoder

Messaggioda Foto Utenteluchinho » 12 apr 2018, 21:31

SandroCalligaro ha scritto:E' importante saperlo, per capire qual è la frequenza massima degli impulsi e la precisione che ti occorre.
Normalmente, nel controllo motore si utilizzano periferiche dedicate al conteggio veloce degli impulsi, perché eseguire l'operazione in software non è efficiente e, nella maggior parte dei casi, nemmeno fattibile.


Ho capito, infatti io devo utilizzare questo encoder da 1080 passi per giro per basse velocità (5 m/h) molto lente perciò non ci dovrebbero essere problemi.

Ma ho appena provato a capire se il conteggio è giusto con un semplice codice che scriveva nella seriale il numero di passi e se giravo l'albero in modo veloce ne leggeva pochissimi tipo 200 passi invece se lo giravo piano ne leggeva in più circa 1800
Avatar utente
Foto Utenteluchinho
0 3
 
Messaggi: 23
Iscritto il: 15 giu 2017, 22:24

0
voti

[8] Re: difficoltà nella lettura di un encoder

Messaggioda Foto Utenteluchinho » 12 apr 2018, 21:32


Un po' un casino, non è proprio immediato da capire
Avatar utente
Foto Utenteluchinho
0 3
 
Messaggi: 23
Iscritto il: 15 giu 2017, 22:24


Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti