Pages: [1] 2 3   Go Down
Author Topic: encoder in quadratura  (Read 2555 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Parma
Online Online
Edison Member
*
Karma: 21
Posts: 2417
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21871
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quale encoder hai?
Ciao Uwe
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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);
}

Logged

Parma
Online Online
Edison Member
*
Karma: 21
Posts: 2417
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Con

Code:
analogWrite(motore,0);

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

Offline Offline
Newbie
*
Karma: 1
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?

Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Full Member
***
Karma: 4
Posts: 219
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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).
« Last Edit: August 25, 2012, 04:04:32 am by cyclone » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Parma
Online Online
Edison Member
*
Karma: 21
Posts: 2417
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Full Member
***
Karma: 4
Posts: 219
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Full Member
***
Karma: 4
Posts: 219
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@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.
Logged

Offline Offline
Full Member
***
Karma: 4
Posts: 219
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.  smiley
« Last Edit: August 25, 2012, 05:16:01 am by cyclone » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1] 2 3   Go Up
Jump to: