Pages: [1] 2   Go Down
Author Topic: Drehimpulsgeber überempfindlich [endlich gelöst]  (Read 2221 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,
Ich habe gerade versucht einen Drehimpulsgeber anzuschließen. Leider will das ganze noch nicht so richtig.
Ich benutze die rotaryencoder-library und den einfachsten testsketch dazu. Die Verkabelung habe ich aus dem
Datenblatt übernommen. Terminal A hängt an Pin2 und B an 3

Wenn ich jetzt an dem Schaft drehe wird die Richtung korrekt erkannt. Allerdings wird bei einer Rastung 3-5 Werte weitergezählt.

Jemand eine Idee, wie ich das hinbekomme, dass pro Rastung immer nur genau 1 Wert weitergezählt wird?

greetings
Nils

Quote
/* Encoder Library - Basic Example
 * http://www.pjrc.com/teensy/td_libs_Encoder.html
 *
 * This example code is in the public domain.
 */

#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(4, 5);
//   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);
  }
}


* plan.JPG (52.15 KB, 871x485 - viewed 53 times.)
« Last Edit: December 11, 2012, 04:54:40 pm by dlca » Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 96
Posts: 4755
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
Encoder myEnc(4, 5);

Hmmh, ich glaube nicht, dass das der richtige Code ist. Wenn doch, dann ist diese Linie die Erklärung, warum nicht das herauskommt, was Du willst.
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20281
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Laut mitgelieferten Schaltbild sollte der Drehgeber mit einem RC-Glied entprellt werden. Hast Du die Schaltung so aufgebaut?
pylon will Dir sagen, daß Du das Objekt für die Bibliothek mit den Pins 4 und 5 initialisierst aber schreibst Du hättst den Encoder an pin 2 und 3 angeschlossen.
Du solltest die Seite http://www.pjrc.com/teensy/td_libs_Encoder.html genauer durchlesen.

Viel Grüße Uwe
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ich habe beides ausprobiert, 2 3 und 4 5, daran liegt es nicht, ich hatte nur vergessen wieder 2, 3 im sketch einzutragen.

Was hat es mit diesem Rc-Glied auf sich? In der Schaltung sehe ich 4 Widerstände und 2 Kondensatoren. Die sind auch alle mit den
Vorgesehenen Werten an ihrem Platz.
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20281
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Beim Öffnen bzw Schließen eines Kontakts hüpfen die Kontakte mehrmals und schließen erst dann zuverlässig. Das nennt man prellen. Bei genügend schnellen Schaltungen (zB Interrupt) ergibt das ein mehrfaches Betätigen des Kontakts. Der Kontakt muß entprellt werden. Durch den Widerstand wird er Kondensator langsam aufgeladen und behält auch während es Prellens den Zustand bei, sodaß der Eingang nur eine Betätigung sieht.

Grüße Uwe   
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok Danke für die Info. Ich hab mal ein Bild von meiner Schaltung angehängt, vllt. sieht ja wer einen Fehler. Ich hab alle Kontakte durchgemessen
und keinen Fehler gefunden.


* pot1.jpg (128.41 KB, 800x600 - viewed 65 times.)
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20281
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich sehe, daß die seitlichen Stromschienen nicht durchgängig über die ganze Länge sind. An der + Seite hast Du 3 Brücken hineingesteckt aber nicht auf der Masseseite. Könnte das das Problem sein, daß ein Kondensator nicht auf Masse ist?

ps: Die Schaltung müßte trotz gefälschten Arduino funktionieren (In der rechten oberen Ecke fehlt das "Made in Italy") .

Grüße Uwe
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Die Gnd-Schiene ist von unten verlötet, daher keine Drahtbrücken. Auf den Kondensatoren steht 103, das müssten die richtigen Werte sein oder?

Ich hab das Uno übrigens damals für 25€ über Amazon bestellt, ist natürlich blöde, wenn die mir ne Fälschung untergejubelt haben, aber bis jetzt
hat es tadellos funktioniert.
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20281
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja, ich habe gesehen, daß Amazon auch solche Arduinos vertreibt. Normalerweise findet mann sie bei Ebay von Asiatischen Verkäufern um den halben Preis. Schau mal auf die Unterseite und vergleich mit diesem Bild. Bei Fälschungen fehlt das "Made in Italy" ganz oder ist durch "Designed in Italy" ersetzt. Die Landkarte Italiens fehlt oder ist stark verzerrt. Wenn beides zutrifft kannst Du ja mal bei Amazon reklamieren daß sie Dir eine Fälschung verkauft haben. (zur Sicherheit schick mir per PM ein Foto der Unterseite und ich bestätige Dir den Verdacht).
http://arduino.cc/en/uploads/Main/ArduinoUnoBack.jpg

Fälschung heißt nicht umbedingt, daß er nicht funktioniert. Das heißt nur, daß ein Nachbau als Orginal-Arduino Verkauft wurde. Wenn er einen anderen Namen hätte, wäre er legitim.
Die Gnd-Schiene ist von unten verlötet, daher keine Drahtbrücken. Auf den Kondensatoren steht 103, das müssten die richtigen Werte sein oder?

Quote
Die Gnd-Schiene ist von unten verlötet, daher keine Drahtbrücken. Auf den Kondensatoren steht 103, das müssten die richtigen Werte sein oder?
Also müßte, soweit ich das aus der Ferne beurteilen kann, die Schaltung richtig sein. 103 ist der richtige Wert (10 * 10^3 pF).

http://arduino.cc/playground/Main/RotaryEncoders#Debounce noch 2 ähnliche Entprellschaltungen mit andern Werten.

Notfalls kannst Du es mit einem MC14490 versuchen (Cext =ca 1µF)

Grüße Uwe
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Auf der Rückseite steht designed in italy. Ich werde mal gucken, ob ich die Rechnung noch habe und werde mich dann an Amazon wenden, ich hab ja schließlich ein originales Arduino bezahlt.

Ich habe grade nochmal alles neu verkabelt und einen anderen Impulsgeber ausprobiert mit dem gleichen Ergebnis. Wenn man die Kondensatoren rauszieht ändert sich nichts am Verhalten, mit 1uf Elektrolytkondensatoren wird mal richtig, mal garnicht und mal zu viel gezählt smiley-eek. Ich habe mehrere Quellen gefunden, wo genau die gleiche Schaltung verwendet wird nur bei mir will es ums Erbrechen nicht klappen.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://www.reichelt.de/index.html?;ACTION=7;LA=3;OPEN=0;INDEX=0;FILENAME=F100%252F402097STEC12E08.PDF;SID=10UGQTkn8AAAIAAAL2qsg97267f7f0f68809c8c158477217962ce

Das ist das komplette Datenblatt des Drehimpulsgebers. Kann es sein, dass das Ding mehr Impulse als andere auslöst?
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 96
Posts: 4755
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nach dem Datenblatt wird pro Umdrehung auf jedem Pin 24 Mal ein Puls ausgelöst. Mit Deiner Bibliothek solltest Du also pro Umdrehung 48 Einheiten hoch-/runtergezählt kriegen. Im Datenblatt steht aber auch, dass die Rasterung in 24 Schritten gemacht wird, somit werden pro Rastpunkt 2 Einheiten hochgezählt.

Hast Du die Möglichkeit, daran mal ein Oszilloskop anzuschliessen? Damit siehst Du, welche Pulse wann ankommen und kannst evtl. die externe Beschaltung entsprechend ändern.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nein, ich hab leider kein Oszilloskop zum testen. Bei einer Umdrehung komme ich auf einen Wert von über 100.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ich bin immernoch keinen Schritt weiter mit den Verdammten Drehimpulsgebern, ich brauche aber zwingend einen für mein Projekt.
Als kleinen Versuch habe ich jetzt einfach mal an jeden Anschluss eine kleine Led gehängt. Und siehe da, bei einem Schritt leuchtet
jede Led einmal kurz auf. Je nachdem wierum ich drehe entweder die eine oder die andere zuerst. Manchmal bleibt die eine Led jedoch
nach einem Schritt an und geht dann erst nach dem nächsten wieder aus, jmd eine Idee, woran das liegen könnte?

Da ich inzwischen alle Libraries, die man im Internet so findet ausprobiert habe und keine richtig funktioniert, bleibt mir wohl nix anderes
übrig, als die Impulse per Hand auszulesen.

Ps: hat vllt. jemand eine Idee, wieso sich Ino-Dateien unter win7 weigern mit der arduinosoftware zu verlinken?
« Last Edit: December 11, 2012, 11:41:29 am by dlca » Logged

Cologne
Offline Offline
Sr. Member
****
Karma: 7
Posts: 475
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo dlca,
versuche es mal mit diesem Code
Code:
#define PINA 2
#define PINB 7
#define INTERRUPT 0  // that is, pin 2
volatile boolean turned;   // rotary was turned
volatile boolean up;  // true when turned cw

// Interrupt Service Routine for a change to encoder pin A
void isr ()
{
  if (digitalRead (PINA))
    up = digitalRead (PINB);
  else
    up = !digitalRead (PINB);
  turned = true;
}  // end of isr

void setup ()
{
  digitalWrite (PINA, HIGH);     // enable pull-ups
  digitalWrite (PINB, HIGH);
  attachInterrupt (INTERRUPT, isr, CHANGE);   // interrupt 0 is pin 2
}

void loop ()
{
  if (turned)
    {
    if (up)
      [i]<hier Unterprogramm für cw-Drehung aufrufen>[/i];
    else
      [i]<hier Unterprogramm für ccw-Drehung aufrufen>[/i];
    turned = false;
    }
}
Die Ausgänge des Encoders gehen auf 2 und 7. Die Pullups in deiner Schaltung kannst du weglassen, die sind hier per Software gemacht.
Logged

Pages: [1] 2   Go Up
Jump to: