PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Antrieb und Drehzahlmessung



IRQ
15.07.2007, 21:45
Hi,

für die Zeit nach den Klausuren plane ich ein kleines Roboterprojekt (mein erster Eigenbau). Es soll ein kleiner Roboter werden und als Antrieb werde ich wohl das Twin-Motorset aus dem Shop hier verwenden.

Dazu habe ich noch zwei Fragen:

1) Welche Geschwindigkeiten (Min/Max) kann ich damit fahren?

Die LL-Drehzahl der Motoren liegt bei etwa 10.000/min (?), daraus lässt sich ja pi mal Daumen bei einer Übersetzung von 200 die Geschwindigkeit errechnen (Raddurchmesser etc). Doch wo liegt die Unter/Obergrenze im Belastungsfall? Kann ich damit sowohl langsam, als auch etwas schneller fahren?

2) Sind 360 Impulse pro Radumdrehung nicht ein bisschen viel?

Zur Positionsbestimmung müssen natürlich auch irgendwelche Sensoren her, möglicherweise werde ich ebenfalls die aus dem Shop nehmen (mit der Encoderscheibe). Allerdings würden doch 12 oder 24 Impulse pro Radumdrehung auch reichen, genauer wird man seinen Roboter eh nicht positionieren können?! Wozu dann den Controller stressen? Bei Conrad gibts die Sharp Sensoren beispielsweise ohne die Encoderscheibe für die Hälfte - die Frage ist, wo kriege ich eine Scheibe mit weniger Strichen her?

Könnt ihr mir was empfehlen? Die Elektronik sollte kein Ding sein, nur von der Mechanik habe ich leider noch keine Ahnung...

Vielen Dank schonmal!

zumgwadrad
16.07.2007, 09:21
Hi,
des sind doch normale Gleichstrommotoren! Ja damit kannst du jede Geschwindigkeit fahren! Ganz die max von 10.000 kriegst du nicht hin weil die Geschwindigkeit durch das anliegende Moment etwas runter geht!
Die Geschwindigkeit kannst du dann über die Ankerspannung einstellen, also mittels PWM!
Theoretisch kannst du durch anlegen einer höheren Spannung auch über die 10000 rausgehen weiß aber nicht wie lange die Lager des mitmachen!
Zur Positionsbestimmung hat sich die Encoderscheibe bewährt! Du kannst dir dir Scheibe doch auch selber bauen! Mach die Auswertung mittels Auflichtverfahren dann kannst du dir die Scheibe selber ausdtucken. Oder nehm ne Plexiglasscheibe und mal die an!
Viel Erfolg

IRQ
19.07.2007, 12:25
Ok, vielen Dank für die Tipps.

Dass man auch sehr langsam fahren kann ist prima, schnell muss der Roboter nicht sein. Ich hab vor, da eine Art Tempomat zu realisieren, der mir unabhängig von Akkustand/Untergrund die Geschwindigkeit hält, dafür die Sensoren.

Ich denke ich werde ein Auflichtverfahren verwenden, wie du empfohlen hast, das ist mechanisch etwas einfacher bei den kleinen Rädern (einfach von der Seite dranleuchten). Denke da so an CNY-70, die habe ich vor Kurzem für einen Linienfolger verwendet und war ziemlich begeistert.

Hat jemand Erfahrung wie viele Schwarz-Weiß-Übergänge so auf die Encoderscheibe (Durchmesser ca. 4cm) können, dass man das Signal noch ordentlich auswerten kann? Nicht dass bei schnellem Drehen alles zu Grau wird...

ranke
19.07.2007, 13:41
Nicht dass bei schnellem Drehen alles zu Grau wird...


Das mit dem "Grauwerden" ist eher eine Eigenschaft des menschlichen Auges, die Elektronik ist da deutlich überlegen.

Der Sensor kann wohl ein paar Millionen Hell - Dunkelwechsel in der Sekunde, so fein kannst Du die Striche gar nicht auf die Scheibe malen.

Die maximale Frequenz wird eher von der Auswertung des Signals (Mikrokontroller?) bestimmt.

IRQ
19.07.2007, 14:03
Gut, das habe ich schon erwartet. Ich habe mir auch schon ein paar Gedanken über das Auswertungsverfahren gemacht. Es gibt ja prinzipiell zwei Möglichkeiten die Geschwindigkeit zu bestimmen:

I) Man misst die Anzahl der Flanken in einem bestimmten Zeitraum
II) Man misst den zeitlichen Abstand zweier Flanken

Tendenziell würde ich letztere verwenden, da man wohl nicht so lange "warten" muss, bis die "Geschwindigkeit" ermittelt ist: Nur einen Puls statt mehrerer - was speziell bei wenigen Umdrehungen/Minute vorteilhaft sein kann (liege ich da richtig?).

Ich würde also alle X Millisekunden einen Sensorwert nehmen (Timer-Interrupt) und in einem Array speichern. Sobald ich zwei Peaks rauslesen kann rechne ich aus, wieviele Sensorwerte dazwischen liegen.

Sensorwerte * X Millisekunden = Zeit die vergangen ist

Denke das ist ganz praktisch, da bin ich dann auch unabhängig von irgendwelchen äußeren Einflüssen (Bauteilschwankungen/Störlicht etc.)

Oder würdet ihr das anders machen? Ich könnte evtl. auch einen Schmitt-Trigger zwischen Sensor und µC hängen, dann müsste ich einfach gucken, ob high oder low anliegt. Lohnt sich der Schaltungstechnische Aufwand?

Sorry, dass ich euch mit Fragen so löcher, aber ich plane es immer gut durch, wenn's geht!

ranke
19.07.2007, 15:15
Gut, das habe ich schon erwartet. Ich habe mir auch schon ein paar Gedanken über das Auswertungsverfahren gemacht. Es gibt ja prinzipiell zwei Möglichkeiten die Geschwindigkeit zu bestimmen:

I) Man misst die Anzahl der Flanken in einem bestimmten Zeitraum
II) Man misst den zeitlichen Abstand zweier Flanken

Tendenziell würde ich letztere verwenden, da man wohl nicht so lange "warten" muss, bis die "Geschwindigkeit" ermittelt ist: Nur einen Puls statt mehrerer - was speziell bei wenigen Umdrehungen/Minute vorteilhaft sein kann (liege ich da richtig?).


Ja und nein.
Das Verfahren II geht gut, wenn die Abstände zweier Peaks auch recht genau einem bestimmten Drehwinkel entsprechen. Bei Bastleraufbauten ist das mit der Präzision immer so eine Sache, die selbstgebaute Dekoderscheibe ist vielleicht nicht ganz zentrisch zur Achse oder hat einen leichten Schlag.
In so einem Fall kommen die Peaks jedesmal mit einer etwas anderen Zeitdifferenz, obwohl die Geschwindigkeit konstant ist.
Verfahren I ist da robuster, weil es solche Fehler über mehrere Impulse mittelt. Man kann diese Mittelung bei Verfahren II über Software machen, verliert dabei aber den Vorteil der kürzeren Totzeit.



Ich würde also alle X Millisekunden einen Sensorwert nehmen (Timer-Interrupt) und in einem Array speichern. Sobald ich zwei Peaks rauslesen kann rechne ich aus, wieviele Sensorwerte dazwischen liegen.


Das klingt so, als ob Du über den Analogeingang einlesen willst. Scheint mir eher aufwendig zu sein.

Mein Vorschlag:

Lege das Signal an einen Digitaleingang an. Das hat den Vorteil, daß man einen flankengetriggerten Interrupt auslösen kann. Bei jedem Interrupt liest man ein Zählerregister aus und bildet die Differenz zum Zählerregisterwert des letzten Interrupts. Die Differenz ist dann proportional zur Zeit zwischen 2 Impulsen. Nur für sehr lange Zeitdifferenzen (Robo steht) muß man sich etwas einfallen lassen, weil es dann zum Timerüberlauf kommt. (entspricht Verfahren II)

Falls Du nach Verfahren I auswerten willst, wird pro Interrupt nur ein Register inkrementiert. Bei Zählerüberlauf wird der Registerinhalt in eine Variable "Geschwindigkeit" geschrieben. Hier stellt sich das Problem der Mindestgeschwindigkeit nicht.

zumgwadrad
19.07.2007, 16:06
Hi,
des beste ist wenn du dir so ein Schwarz-weisses Kuchendiagramm in Excel Bastelst! Des ist dann eben schon genau und einfach zu realisieren_!!

IRQ
20.07.2007, 17:41
Jo, ich werde das mit Sicherheit am PC entwerfen und mit nem Laser ausdrucken (wichtig wegen Toner; Tinte reflektiert IR-Strahlung ja...).

Lege das Signal an einen Digitaleingang an. Das hat den Vorteil, daß man einen flankengetriggerten Interrupt auslösen kann. Bei jedem Interrupt liest man ein Zählerregister aus und bildet die Differenz zum Zählerregisterwert des letzten Interrupts.
Das wäre natürlich deutlich einfacher, weil einem die ganze Auswerterei erspart würde. Ich bin jedoch skeptisch, dass das funktioniert, da ich mit dem Reflexkoppler wohl nicht ganz an die Versorgungsspannung des µC rankommen werde (erfahrungsgemäß). Außerdem kriege ich da ja keine Pulse sondern wohl eher so ne art Sinus-Signal, da der Reflexkoppler ja etwa 0,5-1mm Abstand von der Encoderscheibe hat.

Weiß jemand, wie sich die AVR atmega8 verhalten? Ab welcher Spannung wird ein auf Flanke getriggerter Interrupt ausgelöst? Macht es was, dass es kein Puls ist?

Im Handbuch steht nur:

"If edge or toggle interrupt is selected, pulses that last longer than one clock period will generate an interrupt. Shorter pulses are not guaran-
teed to generate an interrupt."

Weiß jemand Rat? Notfalls müsste ich das halt vorher mal auf dem Steckbrett testen.