-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: mehrere encoder an einem µC

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418

    mehrere encoder an einem µC

    Anzeige

    ich Suche nach einer möglich keit mehre encoder mit einem µC auszuwerten
    es geht in ersterlinie nach einer programm struktur dafür. das programm an sich wird dann auf einem arduino oder irgendein atmel µC geschrieben
    es sollen erstmal 4 encoder gleichzeitig ausgelesen werden sollte aber bis zu 8 encoder erweiter bar sein.
    der unterschied zwischen erster und der zweiten nachfolgenden flanke beträgt 40µS der code unten geht für einen encoder und den code hatte ich im netz gefunden
    man könnte zwar das ganze genauso aufbauen wird aber bei 4 oder dann eventuell 6 geplanten encodern bissel stressig
    Code:
    void loop() { 
       n = digitalRead(encoder0PinA);
       if ((encoder0PinALast == LOW) && (n == HIGH)) {
        
                               if (digitalRead(encoder0PinB) == LOW) {
                               encoder0Pos--;
                                                                     } else {
                           encoder0Pos++;
                           
                           }
                                 
         Serial.print (encoder0Pos);
         Serial.print ("/");
       } 
       encoder0PinALast = n;
     }
    es ist zwar kein richtiger encoder aber es gibt das selbe signalschema aus
    Bascom bietet zwar ein befehl für encoder kann dieser auch mehrere encoder parallel auswerten? wenn ja wieviele?
    mfg thomas
    was gibt es noch zu sagen

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    24.07.2008
    Alter
    54
    Beiträge
    224
    Hi Thomas,

    Siehe auch http://www.roboternetz.de/phpBB2/viewtopic.php?p=185332 Bascom hat wohl kleinere Schwierigkeiten mit Encodern...
    Kommt auf Deine Aufgabenstellung und auf die Encoder an. Wenn Du außer den Encoderabfragen noch etwas anderes im Programm machen möchtest, würde ich bis zu 8 Stück nicht an einen einzelnen µC hängen. Denk doch mal über folgende zweigeteilte Lösungen nach:
    - Ein "Vor-µC" wertet die Encoder aus und sendet bei bestimmten Bedingungen ein Signal als Interrupt an den Haupt-µC
    - Mit einer diskreten Schaltung je Encoder (Zähler etc.) erzeugst Du eben dieses Signal (nicht so flexibel wie die erste Lösung, aber dann wär's nur ein µC)
    Geht das nicht auch einfacher???

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Wenn du rechnest:
    40 µS Bei 8 Encodern bleiben 5 µS je Encoder
    das mal µC Quartz (sagen wir 16 MHZ)
    hast du für jeden Flanke ~ 80 CPU-Cyclen zum Verarbeiten.
    (wenn der Controller sonst nix zu tun hat)
    das scheint mir knapp, aber prinzipiell möglich.

    Was Bascom mit Encodern treibt, kannst du hier sehen:
    http://www.rn-wissen.de/index.php/Ba...ur-.29_ENCODER
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Hallo!

    @Thomas$

    Um prellenden Encoder auszuwerten muss man ihn normaleweise zweimal mit bestimmten Zeitabstand (ca. 10 ms) auslesen.

    Als nötige Zeit zwischen Auslesungen anstatt leerer Verzögeröngsschleife habe ich immer wiederholend ausführbare Unterprogramme (z.B. Displayausgabe) mit gemessener gesamter Ausfürungszeit um 10 ms verwendet. Ich programmiere aber PICs in ASM und könnte dir bei AVRs leider nicht konkret helfen.

    MfG

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    bei mir prellt hier nichts

    edite: ich löse mal das rätsel warum nichts prellt es ist kein richtiger encoder aber ein maussensor ich hab bisher nur eine achse ausgelesen und es ging meine idee war ja mehre mäuse auszulesen nach dem mir das ps2 zeug zu umständlich erschien und ich somit auch an platz sparen kann (noch noch der eine chip und nicht der rest der sonst drum herum dran ist.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    hab eine lösung hinbekommen in Bascom die arduino lösung kann ich bei bedarf auch reinstellen fals jemand doch ein fehler bei meinem programm findet der sagt es mir bitte auch danke
    http://einbeinreicht.blogspot.com/2010/02/encoder.html

  7. #7
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Wie Schnelle man den Encoder auslesen muß hängt von der Drehzahl und Auflösung ab. Wegen Prellen und verschleiß kann es bei mechanischen Encodern ja nicht so schnell gehen. Da reicht es in der Regel aus alle 10 ms oder so ähnlich auszulesen. Das ist reichlich Zeit, auch für 10 Encoder oder mehr.

    Die einfachen Lichtschraken in einer Maus können auch nur endlich schnell gehen. So bei etwa 20-50 kHz sollte Schluß sein. Da muß man sich da aber schon etwas anstrengen mehr als 2 Encoder immer schnell genug auszulesen. Wenn man natürlich nicht so schnell dreht, geht es da auch ohne problem langsamer und mit mehr kanälen.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    ich wollte das für den OM02 nutzen das ist ein optischer maussensor der gibt das signal auch so aus wenn ich das datenblatt richtig verstanden hab.
    bei meinen jetzigen versuchen hab ich eine doppelichschranke und eine encoder scheibe auf folie ausgedruckt. das ganze stellt eine lego uhr (mechanisch ) die ziel position wird durch die zeit immer weiter verschoben

  9. #9
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die Auswertung wird schon so ähnlich wie im Programm ganz oben laufen. Grob geschätzt ist die Laufzeit pro Decoder und Durchlauf etwa 100 Zyklen, eher etwas schneller. Man sollte für einen Schritt den der Decoder macht wenigstens 4 Durchläufe der decoderroutine haben.

    Wenn man das ganze in eine Timer ISR legen will, sollte man aber den ganzen Code in eins haben ohne Funktionsaufruf. Die alternative wäre es die Decoderroutine nur bei einer Änderung, z.B. über den Pinchange interupt aufzurufen.

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    12.12.2004
    Ort
    Trier
    Beiträge
    38
    Zitat Zitat von Besserwessi
    ...Grob geschätzt ist die Laufzeit pro Decoder und Durchlauf etwa 100 Zyklen, eher etwas schneller.
    Ich habs gerade im Simulator durchexerziert:
    275 Takte ohne Drehung am Encoder
    288 Takte für eine Rastung weiter

    Dabei habe ich allerdings die Portansteuerungen und die Wartezeit (die mir in den Augen wehtut!) auskommentiert.

    Zitat Zitat von Besserwessi
    Man sollte für einen Schritt den der Decoder macht wenigstens 4 Durchläufe der decoderroutine haben.
    Wozu? Sein Encoder prellt angeblich doch nicht und "rastet" pro Bitwechsel ein.

    Mfg
    screwdriver
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit. - Sergej P. Koroljow

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •