-         

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

Thema: Terminalprogramm, Datenübertragung und

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607

    Terminalprogramm, Datenübertragung und

    Anzeige

    Hi

    Ich habe inzwischen einen USB Programmierer gefunden, 11€ kostet die Platine im Bausatz - ist ein "Privatmann" der den Spaß verkauft. Weis aber grad nich wie die heißt, sitze am Laptop - da hab ich die nicht gespeichert.

    Jetz habe ich in dem Akku Thread im Elektronikbereich einen Datenlogger gesehen und das soll mein erstes Projekt werden. Quasi ein Vorprojekt für das Hauptprojekt.

    Sinn der Aktion ist es, einen Motor mit 2, 4, 5 (oder 12V, wenn es ein 12V Motor ist) Festspannung zu versorgen und über 10s die Drehzahl zu loggen. Die gemessenen Drehzahlen und die verstrichene Zeit soll dann über den USB Logger auf den PC Übertragen werden, in das Terminal, und als Excel Datei speicherbar sein. Das das geht sah ich in dem anderne Thread, ich würde nur gerne mehr darüber lesen.

    Prinzipell weis ich wie der logger aussieht:
    Ich lass im Hintergrund einen Timer laufen der jede Sekunde die aktuell gemessene Drehzahl und die Aktuelle Zeit (da lass ich eine int Variable Mitlaufen) an den PC schickt, im richtigen Format.
    Die Drehzahl würde ich über eine Gabellichtschranke an der Motorwelle messen. Frage: Gitb es einen Interrupt der immer dann eine Aktion auslöst wenn an einem bestimmten PIN eine 1 anliegt? Das wäre erste Sahne, dann könnte ich alles im Hintergrund laufen lassen...

    Die Drehzahl würde ich auch über eine int Variable mitlaufen lassen. Immer wenn am Pin eine 1 anliegt Zähl ich die Variable um eins hoch. Da ich weis wieviele einsen eine Umdrehung hat, kann ich die gezählte Zahl durch diese Anzahl teilen und in der Drehzahlvariable speichern.

    Oder denk ich da zu Primitiv?

    Viele Grüße, Danke fürs lesen und helfen

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Der Witz bei dataloggern ist normalerweise, dass die Daten erst mal zwischen gespeichert werden, z.B. auf einer SD-karte oder im Dataflash. Erst Später wird der Pc angeschlossen und die Daten übertragen. Zum Teil kann man die Daten wohl auch direkt zum PC senden, dann ist das aber kein Standalone Data-logger mehr.

    Es gibt externe interrrupts die genau auf signale am externen pine reagieren. Die Drehzahl mißt man besser über das stoppen der Zeit für eine Umdrehungen. Für diese kurzen Zeiten gäbe es da als Speziallfall noch die ICP-funktion. Die nimmt einem viel Arbeit bei der Zeitmessung ab und erlaubt Zeitmessungen mit einer Auflösung von 1 Zyklus (50 ns bei 20 MHz Takt).

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    Naja Standalone muss der logger nich unbedingt sein - ich bin ja Mobil mit meinem Laptop und jetzt gleich mit SD Karte und kram einzusteigen würde mir misfallen - ich habe das ja nich umsonst ausgesucht: Das Projekt ist ja ziemlich Simpel.

    Also, es scheint bessere möglichkeiten zum Drehzahlmessen zu geben. Die Ink. Scheiben haben ja, soweit ich das gelesen habe, zwei 90° zueinander verdrehte "Strichcodes". Hm - mit einer Gabellichtschranker hätte ich dann eine 1 wenn beide Striche nebeneinander liegen oder? Hab mich damit noch nicht ganz beschäftigt, neuland

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    47
    Beiträge
    2.556
    mit einer Gabellichtschranker hätte ich dann eine 1 wenn beide Striche nebeneinander liegen oder?
    ...damit kann man die Drehrichtung bestimmen - also dadurch, welche Lichtschranke relativ zur Anderen Signal meldet.
    http://www.dj5am.de/drehgeb/drehgeber.html
    Danke an Alle, die uns bei der erfolgreichen 1.000€-Aktion der IngDiba unterstützt haben! | https://www.hackerspace-bremen.de | http://www.pixelklecks.de |

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    Okay, das sind 2 Sensoren - Ich habe hier im Forum aber schon öfter die Drehzahlmessung über einen Sensor gesehen ... oder wäre es besser das ganze mit einem Magnet zu lösen? Wie beim Fahrradtacho ebend... da gabs ja glaube ich auch eine Lösung

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.557
    Zitat Zitat von BlackDevil
    Okay, das sind 2 Sensoren - Ich habe hier im Forum aber schon öfter die Drehzahlmessung über einen Sensor gesehen ...
    Drehzahlmessung geht natürlich mit einem Sensor. Drehrichtungserkennung geht (nach allem was ich weiß) nur mit (mindestens) zwei Sensoren, aber da kannst Du auch die Drehzahl gleich mitmessen. Ich messe die Drehzahl an zwei Motoren mit dem extINT0 und ~1 an einem mega168 - der mega macht natürlich noch andere Dinge dazu. Das kann man dann mit fallender (oder steigender) Flanke messen, so bekommt man gerade einen Incrementalgeberstreifen mit - bei mir ist es ein einfacher Unterbrecherflügel auf der Motorwelle. Diesen Incrementalgeberstreifen zählt man dann in einer recht kurzen ISR hoch und setzt den Zähler zurück, nachdem man - irgendwann - den Zählwert abgeholt hat. Abholen sollte man den Wert natürlich vorm Überlaufen *ggg*.

    Zitat Zitat von BlackDevil
    ... oder wäre es besser das ganze mit einem Magnet zu lösen? Wie beim Fahrradtacho ebend... da gabs ja glaube ich auch eine Lösung
    Damit habe ich keine Erfahrung. Ich bezweifle, dass das besser ist - der Motor erzeugt ein Magnetfeld das ne heftige Wechselfrequenz hat - ob das nicht stört ? ?
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    Also rein vom Prinzip her misst du die Drehzahl so wie ich anfangs dachte. Die drehrichtung ist mir eigentlich wurscht, ich will nur die Drehzahl bei Konstanter Spannung wissen (den verlauf). extINT0 ist ein Interrupt der im Hintergrund läuft und immer dann etwas tut wenn an einem Pin eine 1 anliegt? Habe mich bisher nur mit Timer INterrupts beschäftigt

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.557
    Hallo BlackDevil,

    Zitat Zitat von BlackDevil
    Also rein vom Prinzip her misst du die Drehzahl so wie ich anfangs dachte ...
    Das dachte ich auch, daher auch meine Einmischung hier.

    Zitat Zitat von BlackDevil
    ... extINT0 ist ein Interrupt der im Hintergrund läuft ...?
    Bitte nimm das nicht als vorwurfsvoll polemisch sondern eher als fachlich-pingelig: Interrupts laufen ja eigentlich fast immer "im Hintergrund". Sprich: Die Unterbrechung ist da, ohne dass "das Programm" was dazu tut - jedenfalls meistens.

    Zitat Zitat von BlackDevil
    ... extINT0 ist ein Interrupt der ... immer dann etwas tut wenn an einem Pin eine 1 anliegt ...
    Jein. Der externe Interrupt ist (lass mich über den mega168 sprechen, da bin ich etwas zuhause) einer von zwei Interrupts mit z.B. folgenden Eigenschaften:
    1) Sie sind sehr hoch priorisiert - wichtiger als jeder Timer! Beim mega168 kommen die beiden - extINT0 und extINT1 - gleich nach dem RESET-Vektor.
    2) Zitat aus dem m168-doc: The INT0 and INT1 interrupts can be triggered by a falling or rising edge or a low level. Ich kann also je nach meinen Wünschen auf eine der beiden Flanken triggern (0 geht auf 1 oder 1 geht auf 0) oder auf den low-Level. Letzteres dürfte mit Vorsicht zu geniessen sein, weil dieser hoch priorisierte Interrupt bei anstehendem low level möglicherweise ständigen Aufruf der ISR bedeutet = Koma für den Controller. Aber das habe ich noch nie ausprobiert.
    Der Interrupt kommt kann eben genau dann kommen, wenn eine Signaländerung am Pin ansteht - meiner Meinung nach genau das, was für eine Drehzahlmessung wünschenswert ist. (Beim m168 gibts noch auf praktisch allen Pins den PCI = pin change interrupt, der ähnliches macht).
    3) Die Interrupts können ohne Rücksicht auf die Portdefinition kommen (genaueres dazu steht im doc).
    4) Die Flankeninterrupts sind zwar an eine Systemclock gebunden, aber der Levelinterrupt nicht. Das heisst, dass der Controller "schlafen" kann - meist aus Energiespargründen und wenn ein Levelsignal erkannt wird, wacht er auf. Es gibt Einschränkungen dazu, steht wieder im doc.

    Langer Rede kurzer Sinn - ich finde diese beiden Interrupts für Drehzahlmessung ideal. Aktuell läuft das bei mir so: ein TimerInterrupt mit 50 µs zählt mir eine Variable bis auf 20000 = 1 sec. Der extINTx zählt seine Aufrufe und liest den aktuellen Zeitwert aus. Dieser Zeitwert wird dann im "normalen" Programm und insbesondere in der Regelung ausgewertet. Für mich war das hauptsächliche Entwicklungsziel: Messwert der Drehzeit für die Regelung und Zählwert für die Wegmessung. Wegmessung wird bei mir noch nicht ausgewertet, die Regelung läuft für meine Begriffe perfekt. Auf Wunsch kann ich Dir auch den aktuellen Code posten - wenn Du Dir das nicht lieber selber erarbeiten willst.
    Ciao sagt der JoeamBerg

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    Code ist immer interessant, obgleich deine Variablen etwas schwierig zu entziffern sind (teilweise).

    Mh - wenn es so einen Interrupt gibt (was mich gewundert hätte wenn es ihn nicht gegeben hätte) ist das ja schon was ich brauche.

    Interrupt kommt => ticker +1
    Wenn ticker = (zB) 20 erreicht hat => Umdrehung +1
    Jede Sekunde dann den Aktuellen Wert (Zeit + Umdrehung) übertragen
    fertig

    Wäre so die einfachste Variante

  10. #10
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Zur Zeitmessung ist der ICP Interrupts besser geeignet. Hier wird die eigentliche Zeitmessung per hardware erledigt und wird daher nicht eventuell doch durch einen anderen Interrrupt um ein paar µs verzögert. Ansosnten verhält sich der ICP Pin wietgehend wie an externer Interrrupt.
    Man muß die Zeit auch nicht von Hand weiterzählen, das kann man auch bei der Verwendung eines normalen externen Interrupts vom Timer erledigen lassen. Man braucht dann nur die Differenz der Zeiten vom Start und Stop zu bilden.
    @blackdevil:
    So war das Verfahren nicht gemeint. Da wurden wohl die beiden Verfahren ducheinander gebracht.

    Das Einfachste (und auch ziehmlich das beste) ist so:
    Beim externen Interrupt (oder besser ICP) die Zeit zum Interrupt auslessen. Von dieser Zeit die Zeit zum Interrupt davor abziehen. Die Zeit des Interrupts speichern für die nächste Messung. Bei den Zeitdifferenzen kann man mit unsigned ints rechnen und eventuelle Überläufe einfach ignorieren.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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