PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servos mit Bascom, internes



linux_80
25.06.2006, 02:46
Hallo,

ich hab jetzt (wieder)mal mit Bascom und einem Servo rumprobiert,
ich hab die Demo 1.11.8.1, auf dem RN-MiniCtrl, und RN-M8.

Dabei ist mir aufgefallen, dass ein Servo, zwischendurch immer mal kurz Aussetzer hatte, man konnte ihn per Hand verdrehen, nur ganz kurz (da hab ich wohl auch einen Servo erwischt, der das etwas genauer nahm, denn nicht bei allen die ich hier hab war das so),
deshalb hab mir mal angeschaut, was Bascom so macht mit dem PWM-Signal.

Beim messen mit dem Oszi, ist mir aufgefallen, das das mit den 20ms nicht so ganz hinhaut, denn die Periodendauer ist länger als 20 ms. Das ist auch abhängig vom Takt des AVR, bei 16MHz war die Periode ca. 25ms, bei 7,3MHz schon mind. 30ms.

Als nächstes hab ich mir den Code angeguckt, bei 16MHz wird der 8-Bit Timer0 mit 97 vorgeladen, was ca. 10µs entspricht.
In der Timer-Overflow-ISR wird dieser Wert aber erst ganz zum Schluss wieder geladen, bevor die ISR beendet wird.

Da ich schon mal davon gelesen habe das es zu Problemen kommt, wenn man mehrere Servos betreibt (ab 8, glaub ich), kann das doch etwas damit zu tun haben :-k

Vielleicht kann das mal jemand nachvollziehen !?

Auf die Seite von MCS (http://www.mcselec.com/) komme ich grad nicht drauf, denn dann hätte ich versucht herauszufinden ob sich seit 11.8.1 was in der Richtung getan hat.

pebisoft
25.06.2006, 10:35
bascom ist zu ungenau für die genaue servosteuerung.
nimm winavr-c , dann geht es.

Hanni
25.06.2006, 12:18
bascom ist zu ungenau für die genaue servosteuerung.
nimm winavr-c , dann geht es.

Bascom ist dafür schon genau genug, wenn man gewisse Dinge beachtet.
Der Wechsel der Sprache ist defakto keine Lösung, da dieses in diesem Fall den Code nur unnötig verkomplizieren würde.
Wie wäre es im übrigen, wenn du anstatt diverser "sinnfreier" Kommentare einfach die entsprechende Lösung liefern würdest ... wegen mir auch in C

@linux_80:
Es ist scheinbar alles eine Sache der richtigen Parameter.
Schau dir mal den folgenden Post an, vielleicht hilft dir das ja.

guggst du (https://www.roboternetz.de/phpBB2/viewtopic.php?p=180921#180921)

linux_80
25.06.2006, 13:28
@pebisoft (only)
soll das heissen, wenn ich Winavr-c verwende, dann funktioniert das auf einmal mit Bascom ?
Dann zeig mal wie ?! Ich starte Bascom, und dann ... :-k

@all
Das man den Reload-parameter anpassen muss, hab ich schon herausgefunden, ich sehe das aber nur als Workaround, denn wenn man den Timer am Anfang der ISR lädt (so wie es sich gehört), sollte es grundsätzlich mal passen.
Die wenigsten Bastler werden das mit dem Oszi überprüfen, um die 20ms hinzubekommen.
Man merkt den unterschied nur, wenn man auf verschiedene AVRs (und MHz) unterschiedliche Werte angeben muss um die gleiche Position zu erhalten.

Es ist ja nicht das erstemal, das ich mit Bascom einen Servo ansteuere, hatte auch noch keine Probleme bis jetzt, hab jetzt nur geforscht, weil der eine Servo gestottert hat.

Bluesmash
25.06.2006, 13:53
hast du die mini servos von conrad? ich hatte auch mal ein problem mit einem.. und als ich es aufschraubte sah ich das sich der eine kondensator gelöst hatte... wieder anlöten, fertig :) könnte sein das es bei dir ein ähnliches problem ist... ist die versorgung stabil genug um deine servos zu speisen? servos ziehen ja recht viel strom unter belastung...

gruss bluesmash

linux_80
25.06.2006, 14:07
Die Servos sind von robotikhardware, und davon auch nur bei einem der damit ein Problem hat, ich hab auch noch kleine Servos von 'nem Kollegen bekommen, die stören sich auch nicht dran.

Aber jetzt unabhängig von dem, das hat doch nur aufgedeckt, das da etwas mit Bascom nicht ganz OK ist.
Müssen wir mal bei MCS nachfragen ob das einen bestimmten Grund hat das so zu machen.

E-Fan
26.06.2006, 14:15
@pebisoft:
Deine Aussage ist schlichtweg falsch und basiert auf Unwissenheit!
Ich hab die Servoanteuerung unter Bascom selber geschrieben, und bin mit einer Abweichung von ca 30 bis 50ppm (Quarz) auf einen Impulsabstand von 19,9972ms gekommen.

@linux:
Die Abstände der Impulszeiten müssen sich verändern wenn Du verschiedene Freuquenzen zum betreiben des Controllers nutzt und die Prescaler der Timer nicht entsprechend anpasst.
Du könntest aber auch die Hardware-PWM bestimmter Controller nutzen die einen passenden Prescaler besitzen. Wirf einfach mal einen Blick in die Datenblätter.

PicNick
26.06.2006, 16:26
So'n Zufall. Wenn es wem interessiert, oder zum daran basteln
https://www.roboternetz.de/wissen/index.php/Bascom_Inside-Code#SERVO