www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Welchen Microcontroller ?


Autor: Florian Reichelt (microflo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

für meine Drehbank möchte ich einen digitalen Drehzahlmesser mit Hilfe 
einer Platine und einem Microcontrollers bauen. Die Drehzahl soll dann 
auf 4 7-Segment Anzeigen ausgegeben werden.

Momentan bin ich in der 13. Klassen eines Technischen Gymnasiums und 
besitze ein bisschen Erfahrung in Microcontrollerprogrammierung sowohl 
mit Assembler als auch mit C. Auch in Elektrotechnik besitze ich ein 
bisschen Erfahrung.

Ich habe mir gedacht an die Scheibe, welche die Drehbank zum "Drehen" 
bringt,  bringe ich ein Magnetstück oder ein kleines Plätchen an und 
setze direkt daneben fest fixiert einen Magnetsensor oder eine 
Lichtschranke um so eine Umdrehung messen zu können.

Im Programm des Microcontrollers möchte ich dann die Zeit für eine 
Umdrehung messen und dann in U/min umrechnen. Jede vollendete Umdrehung 
soll einen Interrupt auslösen und in diesem soll dann die Zeitdifferenz 
zur letzten Umdrehung berechnet werden.

Das 1. Problem vor dem ich stehe ist die Wahl des Microcontrollers. Da 
wir in der Schule mit Atmel arbeiten und diese denke ich auch gut 
geeignet sind möchte ich auf jeden Fall einen solchen nehmen. Nun gibt 
es aber so viele verschiedene von jenen und ich weis nicht welchen ich 
nehmen soll. Er sollte nicht zu viel können, sodass er nicht allzu 
kompliziert aufgebaut ist, aber folgendes muss er besitzen:
* (externe) Interrupts
* Timer
* mehrere I/O Ports währen von Vorteil

Könnt ihr mir bei der Wahl des µControllers helfen, evtl. bei den 
einzelnen Modellen auch die Vor- und Nachteile nennen.

Danke schonmal im Vorraus.
MfG Flo

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dafür gibt es zwei Controllerfamilien von Atmel:

8051: z.B. 89S52
AVR:  z.B. ATmega 16

Beide lassen sich über die parallele oder serielle Schnittstelle eines
Rechners mit wenig Aufwand programmieren.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Flo,

so aus dem Bauch heraus würde ich meinen dass sich da etwas in der 
Größenordnung eines ATMega8 oder ATMega16 gut eignet.
Aber gleich vorweg: Bei jeder Umdrehung einen Interrupt zu schmeissen 
und anhand des Kehrwertes der verstrichenen Zeit die Drehzahl 
rauszubekommen ist keine gute Idee, das wird zu ungenau. Besser ist es 
eine Torzeit, z.B. 1 s oder 100 ms herzunehmen, und in dieser Zeit die 
Impulse zu zählen. Du kannst die Anzeige, möchtest du darauf noch was 
erkennen können, sowieso nur endlich oft aktualisieren. Den Zähler bitte 
nicht direkt per Hardware Pin von Deinem Magnetschalter ansteuern, 
sondern z.B. mit einem Timer "mustern" (mustern = vermeidung eines 
sinnlosen Anglizismus ;-))

Stefan

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Florian,

ich würde so wie du vorgeschlagen hast die Zeit für eine Umdrehung 
ausmessen und die Drehzahl daraus berechnen. Eine Torzeit-Messung wie 
von Stefan vorgeschlagen wird entweder zu ungenau oder die Messzeit muss 
sehr lang gewählt werden.
Die Spindeldrehzahlen bei einer Drehbank liegen gewöhnlich im Bereich 
zwischen 50 bis 3000 U/min. Das entspricht ca. 1 bis 50 U/s. Bei einer 
Torzeit von 1 Sekunde erreichst du damit nur eine Auflösung von 60 U/min 
was bei kleinen Drehzahlen zu ungenau sein dürfte.

Dirk

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Aus erfahrung kann ich sagen, das gerade die AVRs sich nicht zwingend 
für eine Zeitmessung eignen, da sie nicht Zeitstarr genug arbeiten. Dies 
ist allerdings abhängig von der Messmethode und der geforderten 
genauigkeit.

Zur Hardwaretechnischen Seite zwecks Signalerzeugung würde ich Dir 
empfehlen zwei Signalgeber (oder Sensoren) im definierten Abstand 
zueinander anzuordnen, so kanst du bei jeder Umdrehung die 
Winkelgeschwindigkeit ermittel. Bei einem Sensor besteht das Problem 
eben, das er mindestens zweimal ansprechen muss um eine Aussage zu 
erlaben. Ich denke dass die Drehbank sich auch mal mit wenigen U/min 
drehen muss z.B. Gewindeschneiden, wo eine 1 Puls Lösung zu ungenau 
wird. Bei sehr hohen Drehzahlen, kann man dann entweder einen Sensor 
abschalten, oder nur einen Puls auswerten.

Ich würde es sehr wohl über die Pinchange Interrupts realisieren, da man 
(bei manchen uC's) damit den Timer direkt starten stoppen kann. Aber da 
gibt es natürlich mehrere Möglichkeiten der Realisierung.

T.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:
Ich schlage eine Zeitauflösung von 20µs vor. Bei einem 16 Bit-Timer 
kanst du dann Periodenzeiten bis 1,3 Sekunden messen (entspricht einer 
Drehzahl von ca. 45 U/min). Bei 3000 U/min --> 50 U/s hast du eine 
Periodenzeit von 20ms und noch eine Genauigkeit von 1 Promille

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die Genauigkeit und Auflösung bei langsamen Drehzahlen kann man auch 
leicht verbessern indem mehrere Pulse pro Umdrehung erzeugt. Eine 
einfache Lösung wäre z.b. ein Paperstreifen mit schwarz/weiss Muster auf 
eine Welle geklebt und dann eine Reflexlichtschranke als Sensor (gibts 
als Fertigteil bei deinem Namensvetter als Lieferanten :-))
Oder ein Hall-Sensor an einem Zahnrad müsste auch gehen. Ganz bequem 
sind natürlich fertige Dreh-Encoder. Mit zwei 90° Phasenverschobenen 
Signalen lässt sich auch die Drehrichtung ermitteln.
Als Controller würde ich auch einen Mega8/16/32 vorschlagen, einfache 
Exp. Boards gibts damit jede Menge, z.B. hier im Shop, Pollin u.v.a.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aus erfahrung kann ich sagen, das gerade die AVRs sich nicht zwingend
>für eine Zeitmessung eignen, da sie nicht Zeitstarr genug arbeiten.

Hä? Das hängt ja wohl von der Programmierung ab und von der Anbindung an 
die Hardware!

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Travel Rec.:

Nein. Der ATmegaX8 hat einen Jitter auf dem internen Oszillator. Somit 
bleibt die Zeit, die benötigt wird um in eine ISR zu springen auch bei 
freigabe des Global Interrupts innerhalb nur eines Cycles nicht 
konstannt.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tommy wrote:

> Aus erfahrung kann ich sagen, das gerade die AVRs sich nicht zwingend
> für eine Zeitmessung eignen, da sie nicht Zeitstarr genug arbeiten. Dies


Wenn Dir eine Genauigkeit von 50ns (Input Capture at 20MHz) immer noch 
nicht ausreicht, hast Du recht.

Für alle Arten mechanischer Vorgänge sollten 50ns allerdings über 
1000-fach genau genug sein.


Peter

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tommy wrote:

> Nein. Der ATmegaX8 hat einen Jitter auf dem internen Oszillator.

Für Drehzahlmessung sollte man schon nen Quarz ranpappen.


Ich hab auch schon für nen 2-stelligen Durchflußmesser den internen RC 
des ATtiny26 verwendet, für 2 Digits reicht der aus.


Peter

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Peda:

Vollkommen richtig. Nur wenn du viele Vorgänge hast summiert sich der 
Fehler, und der uC soll ja auch noch andere Dinge erledigen. Aber wie 
gesagt: im Spezialfall! Sonst AVR Top!!!

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich find´s schon lustig, daß wenn´s um hohe Genauigkeit geht, der 
interne RC zum Vergleich oder besser zum Miesmachen herangezogen wird. 
Jeder Anfänger, der ein wenig recherchiert hat, wird wissen, daß es zu 
genauen Messungen oder Datenübertragungen einen Quarz braucht. Dann kann 
man nicht behaupten, daß der ganze Controller ungenau ist...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tommy wrote:
> @ Peda:
>
> Vollkommen richtig. Nur wenn du viele Vorgänge hast summiert sich der
> Fehler, und der uC soll ja auch noch andere Dinge erledigen.


Da summiert sich überhaupt nichts, das Hardware-Capture arbeitet immer 
auf den Zyklus genau.

Nur, wenn Du so schnell drehst, daß Dir ein Capture durch die Lappen 
geht, hast Du nen Fehler.

Angenommen worst case 100 Zyklen bis zur Bearbeitung, mußt Du also 
schneller drehen als 12 Millionen U/min, das schafft nicht mal ne 
Concorde.


Peter

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau da ist der Irtumm! Das Capture arbeitet nicht auf den Cyclus 
genau, sondern auf 2 bis 3.5 cycles (siehe Datenblatt)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tommy wrote:
> Genau da ist der Irtumm! Das Capture arbeitet nicht auf den Cyclus
> genau, sondern auf 2 bis 3.5 cycles (siehe Datenblatt)


Das ist mir neu.

Welches Datenblatt, welche Seite ?

Ich wüßte jetzt keinen Grund, warum die Hardware Fehler machen sollte.

Allerdings sind 3,5 * 50nS = 175ns für mechanische Messungen auch kein 
Beinbruch.
Die Reaktionszeit eines billigen Optokopplers ist z.B. 100-fach höher.


Peter

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
siehe Interrupt response time

Ein Quarz kost geld!

Spezialfall!

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versucht mal folgendes:

Legt einen Ext. Takt auf den T0clk Pin zählt mit einem Timer die Zeit 
bis 1000  flanken eingelaufen sind. Bleibt der Zählerstand Konstant?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tommy wrote:
> siehe Interrupt response time

Quark !

Die kann sogar bis 100 Zyklen betragen, wenn Du langsamer als 12 
Millionen U/min drehst.

Das ist doch gerade der Witz an dem HW-Capture, daß die keine Rolle 
spielt.
Wozu hätte Atmel es denn sonst extra einbauen sollen ?


> Ein Quarz kost geld!

Dann nenne mir bitte irgend einen anderen MC, der mit dem internem RC 
auf 4 Digits (0,01%) genau ist.

Wenn Du 4 Digits brauchst, geht eben kein interner RC, basta !


Peter

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genau.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tommy wrote:
> Versucht mal folgendes:
>
> Legt einen Ext. Takt auf den T0clk Pin zählt mit einem Timer die Zeit
> bis 1000  flanken eingelaufen sind. Bleibt der Zählerstand Konstant?


Davon war doch nirgends nicht die Rede.

Leg den Impuls auf ICP und lese das ICR aus, dann hast Du max einen 
Count (50ns at 20MHz) Fehler.


Peter


P.S.:
Es spricht natürlich überhaupt nichts dagegen, wenn man über mehrere 
Pulse messen will, deren Anzahl mit T0 zählen zu lassen, also ICP mit an 
T0.

Autor: Florian Reichelt (microflo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Danke für die vielen Antworten.

Da der ATmega hier oft genannt wurde, werde ich mir diesen mal genauer 
anschauen und ihn evtl. verwenden.

Nun habe ich aber noch ein paar Fragen zum Messen.

Ich denke das einfachste wäre einen Magnetfeldsensor zu nehmen. Aber wie 
ist das wenn sich nun die scheibe dreht. Fängt der Sensor dann an zu 
prellen und verfälscht so evtl. die Ergebnisse?

Wenn ich so einen Sensor verwende, worauf muss ich besonders achten?

Oder gibt es eine noch einfachere Lösung?


Danke schonmal im Vorraus

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.