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
C# UI Designer
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
C# UI Designer
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
C# UI Designer