PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage: INT0/1 für Motor-Drehzahl verwenden



mausi_mick
12.10.2008, 07:51
hi,

ist es eigentlich möglich, beim ASURO die Motorgeschwindigkeit links/rechts über die Interrupt-Eingänge 0/1 (8-Bit-Timer) zu steuern?

An INT0 (PD2/PIN4) hängt ja nur die rote Status-Led, auf die ich verzichten kann, an INT1 (PD3/PIN5) die Switches, die ich z.Zt. auch nicht nutze.

Anstelle der Reflexsensor/Led Mimik/(T11/T12,D13/14) würde ich Gabellichtschranken verwenden, die (relativ) sauberes Low/High-Signal liefern (Ich brauch dann nicht die AD-Wandlung für die Encoder und kann dann wohl auch hohe Drehzahlen direkt (an der Motorwelle) messen).

Hat da bereits jemand Erfahrung oder geht es prinzipiell nicht, die Motordrehzahl über die 8-Bit-Interrupts zu ermitteln ?


Gruß

mausi-mick

oberallgeier
12.10.2008, 09:39
Hallo mausi_mick,


... ist es eigentlich möglich, beim ASURO die Motorgeschwindigkeit links/rechts über die Interrupt-Eingänge 0/1 (8-Bit-Timer) zu steuern? ...Das überlege ich auch seit einiger Zeit.


... Hat da bereits jemand Erfahrung oder geht es prinzipiell nicht, die Motordrehzahl über die 8-Bit-Interrupts zu ermitteln ? ...Ich habe das an meinem Dottie (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=388755#388755) gemacht mit gehackten Servos, bei denen die Elektronik total entfernt und durch Gabellichtschranken (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=344432#344432) ersetzt worden war. Es geht also, und noch dazu sehr gut.

Beim Dottie funktioniert das so gut, dass ich ein entsprechendes Vorhaben auf meine asuro-Arbeitsplan-Warteliste geschrieben habe. Deshalb hatte ich Dich vor Kurzem nach der Montage von Deinem Encoder am Motorritzel (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=401376#401376) gefragt.

Ich habe mit dem Timer 2, das ist beim m168 ein 8-bittiger Timer, einen 50µs-Interrupt im CTC-Modus programmiert; 20 MHz, kein prescaler, OCR2A = 124. In der zugehörigen ISR wird ein Zeitzähler bis 20000 hochgezählt (=1 sec) und dann wieder auf Null gesetzt. Diese Zeitmarke wird bei jedem extINT0/~1 abgefragt bzw. ausgewertet, um die Zeit für den letzten Encoderabschnitt zu bestimmen. Der Zeitbedarf wird in der Regelung (Integer, 100 Hz, etwas tricky bei den Parametern, siehe Dottie-Link oben) ausgewertet. Der Geradeauslauf ist bei Dottie besser als +/- 1 mm auf 1m Laufstrecke. Blos Kurvenfahren habe ich mit Dottie noch nicht geübt *schnief*.

mausi_mick
12.10.2008, 17:41
Hallo oberallgeier,
danke für die Info,
will aber erstmal beim ASURO bleiben und den TIMER2 möglichst nicht verwenden, da für IR-Schnittstelle bzw. den Abstandssensor benötigt.

Ich hab aber noch keine genaue Vorstellung, wie das mit Timer0 und 1 geht (Timer0 8-Bit , Timer1 16-Bit), und weiss nicht, ob das mit dem PWM
für die Motoren (OCR1A/OCR1B) Probleme gibt.

Ich hab nur den Eindruck, dass das mit den ENCODER-Scheiben auf dem Ritzel mit den 8-Bit-ADC-Wandlern bei hoher Geschwindigkeit Probleme
macht (ca 100 Motorumdrehungen / s)(ca 400 ADC-Wandlungen/ s) (x 2 für links/rechts).

Mit dem abgefeilten Zahnrad auf der Welle hab ich schon mal bei Drehzahl nahe Null (Handantrieb) und einer provisorisch angebrachten Gabel-LS gemessen ( An/in dem Zahnrad sind in 90° Abstand bereits vier Bohrungen mit ca 2 mm Durchmesser). Bei den vorhandenen Gabellichtschranken (OPB...) schaltete der Transistor bei ca 15mA Diodenstrom zwischen ca 100mV und Versorgungsspannung bei 4,7kOhm Collector-Widerstand. Über die Gabel-LS (von Optek) gibt's wohl keine Unterlagen, die Anschlüsse sind aber - zumindest bei der IR- Diode - (1,1V Flussspannung) leicht zu ermitteln, nur sollte man mit der Messspannung unter 5V und dem Strom unter 10mA bleiben, da die Transistoren oft nicht sehr spannungsfest sind.

Gruß

mausi_mick