Go Down

Topic: encoder in quadratura (Read 2824 times) previous topic - next topic

max00

ciao a tutti, sono nuovo ho una leggera esperienza di arduino, derivante una libreria piena di libri a tema.
sto svolgendo un progetto con arduino, controllo di velocità di un motorino elettrico, ma la difficoltà maggiore è leggere il segnale del mio encoder in quadratura per poter definire la velocità.
Ogni volta che leggo ricevo valori improbabili e penso che sia un errore di campionamento.

  *encoder a quadratura un gradino ogni rivoluzione
  *un motorino elettrico 6900rpm

quindi a ogni giro dobrei avere un qualcosa che mi sembri una serie di 1 e 0 ripetuti che dovrebbero indicarmi la rotazione ma questo non avviene consigli?

ovviamente grazie in anticipo

flz47655

Hai un oscilloscopio che puoi utilizzare per vedere cosa esce fuori dall'encoder?

uwefed

Quale encoder hai?
Ciao Uwe

max00

innanzitutto grazie per le risposte....

allora si la forma d'onda che esce è un onda quadra tramite l'oscilloscopio.

l'encoder è heds-5500

questo è il codice per capire che segnale arriva:

#include <SoftwareSerial.h>

#define encoder 6
#define motore 3

int val = 0;
int cont=0;
float durata=0;

void setup() 
{
  pinMode(encoder,INPUT);
  pinMode(motore,INPUT);
  Serial.begin(9600);

}

void loop()
{
  analogWrite(motore,0);
  val=digitalRead(encoder);
  Serial.println(val);
}


flz47655

Con

Code: [Select]
analogWrite(motore,0);

sicuro di non fermare il motore?
Ad ogni modo a che frequenza è l'onda quadra? Magari è troppo veloce per Arduino
Ciao

max00

allora analogWrite=0 mi è servito per girare il rotore a mano e verificare cosa stesse ricevendo il pin mentre per verificare se la frequenza è troppo alta cosa dovrei vedere?


max00

sul datasheet del encoder
Count Frequency f 100 kHz Velocity (rpm) x N/60

cyclone

#7
Aug 25, 2012, 10:47 am Last Edit: Aug 25, 2012, 11:04 am by cyclone Reason: 1
dubito fortemente che riuscirai a leggere la sequenza in quadratura con il solo arduino alla max velocità.
la famiglia HEDS5xxx sono encoder con risoluzione molto elevata e in base alla sigla si può arrivare fino a 1024 CPR.

anche gestendo bene i segnali A e B utilizzando gli interrupt potrai stare dietro alla lettura solo se farai andare il motore molto ma molto lentamente.
per migliorare un pò la funzione di intercettazione e conteggio degli impulsi dovresti scrivere la routine in assembly (codice macchina).

max00

grazie ma per cultura e per l'acquisto di un nuovo encoder/motore che frequenza legge arduino

flz47655

Quote
mentre per verificare se la frequenza è troppo alta cosa dovrei vedere?


Deve essere inferiore alla frequenza massima che puoi leggere con digitalRead e il resto del codice

Ciao

cyclone

sni per digitalRead, ma il tutto dipende fortemente, come dicevo prima, da come gestisci l'interrupts di intercettazione degli impulsi.

max00 hai mai usato la gestione degli external int ?

max00

e una tesi devo usare arduino ma potrei cambiare il motore... ps nom so come gli dovrei usare gli interrupt

cyclone

@legacy,
concordo, quello sarebbe l'ideale usando il QUE...
oppure aggiungere un chippetto dedicato o una piccola CPLD-ad hoc implementando un  QUE e con  uscita I2C o SPI in modo da far respirare l'atmega che poverino in queste applicazioni ha bisogno dell' ossigeno.

cyclone

#13
Aug 25, 2012, 12:12 pm Last Edit: Aug 25, 2012, 12:16 pm by cyclone Reason: 1

e una tesi devo usare arduino ma potrei cambiare il motore... ps nom so come gli dovrei usare gli interrupt


non vorrei scoraggiarti,
scusa ma allora come vorresti leggere un encoder in quadratura? non capisco.
devi prima studiare a cosa servono gli int e la loro gestione .... se nò te la scordi la tesi.  :)

max00

sono inesperto dovrei leggere il segnale dell'encoder ma ho capito che la frequenza dell'onda wuadra e troppo alta quindi o cambio encoder o uso gli interrupt... ora nonho capito come dovrei usare gli interrupt

Go Up