Oppure

Loading
15/11/17 11:46
Thejuster
Salve ragazzi, dopo un pò di lavoraccio effettuato su quel macchinario.
Ho trovato da un amico questo encoder.
L'ho preso perché me lo ha regalato, ai fronte di 300 del suo costo originale.

distrelec.it/it/trasduttore-di-velocita-angolare-24-vdc-200-omron-industrial-automation-e6b2-cwz6c-200p-2m/p/…

E' un encoder ad uso industriale quindi andrà benissimo per quello che sto facendo.


s17.postimg.org/qxy1lcq1b/…


s17.postimg.org/5csyxab5r/…


s17.postimg.org/d5jmppju7/…


In una delle foto c'è un sensore di prossimità.
Credevo che andava bene, ma invece no.
Perché la misurazione che mi serve e a decimi di millimetro e non a centimetri.
il sensore ti legge bene i centimetri ma non i millimetri quindi l'ho scartato.

C'è un solo problema o dubbio.

Prima di iniziare con l'installazione
e la riprogrammazione di tutto il progetto, non vorrei andare a casaccio


Questo encoder ha 6 cavi.
Non sò perché ne ha così tanti, ma andiamo avanti.


sempre su quel sito, ho trovato questo schema

distrelec.it/Web/Downloads/_t/ds/…

Da quel che ho letto, correggetemi se sbaglio.

Dovrebbe collegarsi in questo modo


Color Terminal
Brown Power supply
(+Vcc)
Black Output phase
A
White Output phase
B
Orange Output phase
Z
Blue 0 V (common)

Quindi Marrone e Blu per la corrente

A e B Sarebbe il passo che legge se non erro.
Fatto questo ho trovato questo esempio in rete

andrà bene o i valori vengono letti diversamente?



int encoderPin1 = 2;
int encoderPin2 = 3;
int ledPin1     = 5; // PWM
 
volatile int lastEncoded = 0;
volatile long encoderValue = 0;
 
long lastencoderValue = 0;
 
int lastMSB = 0;
int lastLSB = 0;
 
void setup() {
  Serial.begin (9600);
 
  pinMode(encoderPin1, INPUT);
  pinMode(encoderPin2, INPUT);
  pinMode(ledPin1, OUTPUT);
 
  digitalWrite(encoderPin1, HIGH); //turn pullup resistor on
  digitalWrite(encoderPin2, HIGH); //turn pullup resistor on
  analogWrite (ledPin1,LOW);
 
  attachInterrupt(0, updateEncoder, CHANGE);
  attachInterrupt(1, updateEncoder, CHANGE);
 
}
 
void loop(){
  Serial.println(encoderValue);
  if ( encoderValue > 255 ) { encoderValue = 255; }
  if ( encoderValue < 0 )   { encoderValue = 0; }
 
  analogWrite(ledPin1,encoderValue);
}
 
void updateEncoder(){
  int MSB = digitalRead(encoderPin1); //MSB = most significant bit
  int LSB = digitalRead(encoderPin2); //LSB = least significant bit
 
  int encoded = (MSB << 1) |LSB; //converting the 2 pin value to single number
  int sum  = (lastEncoded << 2) | encoded; //adding it to the previous encoded value
 
  if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderValue ++;
  if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue --;
 
  lastEncoded = encoded; //store this value for next time
}





mire.forumfree.it/ - Mire Engine
26/11/17 15:07
Thejuster
Buonasera ragazzi, dovo aver testato questo codice,
Dal monitor seriale continuo a vedere

0
0
0
0

Cioè e come se non legge i valori dell'encoder.
Il codice è sbagliato?

Ho collegato tutto seguendo lo schema del produttore ma non riesco a leggere i valori
mire.forumfree.it/ - Mire Engine
27/11/17 16:55
Thejuster
Risolto.

Leggendo direttamente i valori dati dall'encoder senza nessun algoritmo o conversione di dati.
semplicemente facendo


lcd.print(digitalRead(encoderPin1));



ottengo

0b0100 Quando è LOW
0b0111 Quando è HIGH

mi è bastao fare che quando entrambi i valori Encoder Pin 1 = 0b0111 e EncoderPin 2 = 0b0111
mi incrementa il passo

altrimenti rimane inviariato.
l'unico problema e che devo far avanzare fin quando il valore non è 0b0100
altrimenti continua ad incrementarmi il passo.

Sono andato in confusione perché questo modello di encoder ha 4 cavi
di cui 3 sono per la lettura

C'è un'altro cavo, il Z
che a differenza di un normale encoder, può essere letto semplicemente quel valore

in modo che,
Anzichè effettuare mezzo giro per aumentare il passo, ad ogni giro completo corrisponde un HIGH e LOW.
Comodo se si ha la necessità di un passo più lungo.

Spero che può essere di aiuto a qualcuno che si troverà in questa situazione.
Così saprà come uscirne fuori.

Saluti


mire.forumfree.it/ - Mire Engine