Quadratursignale zählen

Guten Tag,

ich versuche momentan mit der Bibliothek (Encoder Library, for Measuring Quadarature Encoded Position or Rotation Signals) die Quadratursignale meines AMR-Sensors zu zählen. Wenn ich das Beispiel "example --> Basic" Hochlade wird mir immer folgender Fehler angezeigt(siehe Anhang).

Vielen dank für eure Hilfe.

Liebe Grüße
Mithra

Der Anhang fehlt.
Eine Fehlermeldung solltest du aber besser direkt im Forum in Code-Tags posten.

Oh Schuldige, das habe ich nicht gesehen.

Das ist der Code:
</* Encoder Library - Basic Example

#include <Encoder.h>

// Change these two numbers to the pins connected to your encoder.
// Best Performance: both pins have interrupt capability
// Good Performance: only the first pin has interrupt capability
// Low Performance: neither pin has interrupt capability
Encoder myEnc(5, 6);
// avoid using pins with LEDs attached

void setup() {
Serial.begin(9600);
Serial.println("Basic Encoder Test:");
}

long oldPosition = -999;

void loop() {
long newPosition = myEnc.read();
if (newPosition != oldPosition) {
oldPosition = newPosition;
Serial.println(newPosition);
}
}>

und das die Fehlermeldung:

</var/folders/dv/qxy9s8h55klgv5qmpg4k573w0000gn/T//ccT21rgt.ltrans0.ltrans.o: In function Encoder::isr0()': /Users/mithrarabet/Documents/Arduino/libraries/Encoder/Encoder.h:734: undefined reference to Encoder::interruptArgs'
/Users/mithrarabet/Documents/Arduino/libraries/Encoder/Encoder.h:734: undefined reference to Encoder::interruptArgs' /var/folders/dv/qxy9s8h55klgv5qmpg4k573w0000gn/T//ccT21rgt.ltrans0.ltrans.o: In function Encoder::isr1()':
/Users/mithrarabet/Documents/Arduino/libraries/Encoder/Encoder.h:737: undefined reference to Encoder::interruptArgs' /Users/mithrarabet/Documents/Arduino/libraries/Encoder/Encoder.h:737: undefined reference to Encoder::interruptArgs'
collect2: error: ld returned 1 exit status
Mehrere Bibliotheken wurden für "Encoder.h" gefunden
Benutzt: /Users/mithrarabet/Documents/Arduino/libraries/Encoder
exit status 1
Fehler beim Kompilieren für das Board Arduino/Genuino Uno.>

Die Lib ist wohl für den Teensy geschrieben, was dann Probleme auf dem Uno macht.

Tja....

Ach so, ok. Vielen Dank !

Kennt jemand vielleicht eine Library für den Arduino, womit ich meine Quadratursignale zählen kann?

LG

mithrbt:
Kennt jemand vielleicht eine Library für den Arduino, womit ich meine Quadratursignale zählen kann?

Was ist ein Quadingsda-Zähler überhaupt? Ein Link zu einem Produktdatenblatt könnte hilfreich sein.

Gruß

Gregor

mithrbt:
Kennt jemand vielleicht eine Library....

Machs dir doch selber...

Zählen ist doch nicht wirklich eine Kunst, oder?

--> Lesesstoff

Das ist das Evaluations-Kit mit den verschiedenen Sensoren:

und das ist der 8-Bit SIN/COS Interpolator:

https://www.ichaus.de/upload/pdf/TW2_datasheet_E2en.pdf

Ich habe den Code geschrieben und bekomme Quadratursignale ausgegeben.

<#define pinA PD5
#define pinB PD7
#define pinZ PD2

double varB = 0;
double varA = 0;
double varZ = 0;

void setup() {

Serial.begin(9600);

pinMode(pinZ, INPUT);
pinMode(pinA, INPUT_PULLUP);
pinMode(pinB, INPUT);
}

void loop() {

varA = digitalRead(pinA);
varB = digitalRead(pinB);
varZ = digitalRead(pinZ);

Serial.print(varA);
Serial.print("\t");
Serial.println(varB);

delay(100);

}>

Ich möchte die Signale zählen, damit ich messen kann, wie weit (in mm) sich der Sensor Vorwärts oder Rückwärts bewegt.

LG

gregorss:
Was ist ein Quadingsda-Zähler überhaupt?

Das soll wohl ein Rechtecksignal - Zähler sein.

Hier das Datenblatt in klickbar:
https://www.ichaus.de/upload/pdf/TW2_datasheet_E2en.pdf

Und der Code in Code-Tags:

#define pinA  PD5
#define pinB  PD7
#define pinZ  PD2

double varB = 0;
double varA = 0;
double varZ = 0;


void setup() {

 Serial.begin(9600);
 
 pinMode(pinZ, INPUT);
 pinMode(pinA, INPUT_PULLUP);
 pinMode(pinB, INPUT);
}


void loop() {
 
 varA = digitalRead(pinA);
 varB = digitalRead(pinB);
 varZ = digitalRead(pinZ);
 
 Serial.print(varA);
 Serial.print("\t");
 Serial.println(varB);
 
 delay(100);
 

 
}

Soviel Erste Hilfe erstmal von mir.

Gruß

Gregor

Bitte stelle die Sketches ( und Fehlermeldungen ) in Codetags ( Button </> links oben ). Sonst sind sie nur schlecht zu lesen. Und auch URL's solltest Du als Link einfügen. ( Edit: Wie von Gregor gemacht ). Das macht es den Helfern wesentlich einfacher.

Es macht wenig Sinn, eine Variable, die per 'digitalRead' gefüllt wird ( 0/1 ) als double zu definieren.

Hast Du denn schon die Softwarebeispiele von Sensitec ausprobiert? Wenn der Hersteller schon was mitliefert, sollte das doch immer der erste Schritt sein.

Tut mir leid, ich bin neu im Forum und wusste nicht wie das geht, vielen Dank für den Hinweis!

Ja, die Softwarebeispiele von Sensitec habe ich schon ausprobiert. Mit der Software "Analog_Plotter" bekomme ich Sinus- und Cosinussignale ausgegeben und über die andere kann ich den iC-TW2 einstellen.

Ich möchte nun Längen und Winkel messen, habe nur leider noch nicht so viel Erfahrung im programmieren.

LG

habe nur leider noch nicht so viel Erfahrung im programmieren.

Das musst du nicht sagen...

Denn:

  • Das sehen wir, auch ohne dass du das sagst
  • Ändern kannst nur du es

Warum soll unbedingt dieses Zähler-IC benutzt werden? Das Zählen von Drehzahlsignalen ist doch eine Standard-Aufgabe für einen Arduino!

Was genau liefert der Sensor, wieviele Impulse pro Sekunde...

DrDiettrich:
Warum soll unbedingt dieses Zähler-IC benutzt werden?

Weil er den Sensor aus seinen Kit ausprobieren möchte.

Allerdings sollten die zugehörigen Bsp. funktionieren?
Die Signale A/B deuten auf "normale" Drehgebersignale hin.
Ich hätte jetzt auch nur den Link wie in #6 gepostet.
Oder du suchst nach einer Rotary Lib.
Ob die dir aber bei dem IC wirklich weiterhilft weiß ich nicht recht. Denn der IC möchte wohl vorher noch parametriert werden. Das ist nichts für nebenbei. Wenn du sowas noch nie gemacht hast, brauchst viel Zeit dich einzuarbeiten. Wenn ich du wäre würde erstmal versuchen die Bsp. zum laufen zubekommen.

#define pinA  PD5
#define pinB  PD7
#define pinZ  PD2

bool B = 0;
bool A = 0;
int Z = 0;


int a_merke = LOW;
int b_merke = LOW;
int laenge;
int encoderWert=0;

void setup() {

  Serial.begin(9600);
  
  pinMode(pinZ, INPUT);
  pinMode(pinA, INPUT);
  pinMode(pinB, INPUT); 
}


void loop() {
  
  A = digitalRead(pinA);
  B = digitalRead(pinB);
  Z = digitalRead(pinZ);

  

if ((A == HIGH) && (a_merke == LOW)) {
 if (B == HIGH) {
 encoderWert++;
 } else {
 encoderWert--;
 }
  laenge = encoderWert * 5;
 Serial.println (laenge);
 }
 a_merke = A;

 
  delay(100);
  

  
}

Hallo,
Vielen Dank für eure ganzen Antworten !
Ich habe jetzt diesen Code geschrieben, womit ich meine Signale zählen kann. Leider klappt es nicht so gut mit dem Vorwärts und Rückwärts... Kann mir da jemand weiterhelfen?

LG

mithrbt:
... Kann mir da jemand weiterhelfen?

Zunächst solltest Du Deinen Code aufhübschen. So ist das Lesen jedenfalls kein Vergnügen (weshalb ich es mir erspare).

Gruß

Gregor

Hallo,

dein delay ist hier tötlich. Damit es richtig zählt arbeite den Link in #6 durch. Sonst wird das nichts.
Wenn du das ignorierst kann dir niemand helfen.