Hi,
wenn ich 21 Servos ansteuern will (zufällig genau so viele wie der hat: http://www.shop.robotikhardware.de/shop/catalog/product_info.php?products_id=198) soll ich das Servo Board nehmen oder soll ich's selber Proggen. Hab das schon mal gemacht und mir ist vorgekommen das stresst den uC schon ziehmlich. Weil wenn ich jede uS die impulslänge checken muss dann belasted dass doch ziehmlich oder nicht?
(zz. verwende ich nen ATmega32)
Danke!
Freuntliche Grüße
Philipp
Hi,
Also jenachdem wie fit du imProgrammieren bist, kannst du des selber machen, jedoch würde ich dir Assembler empfehlen, da bekommst du so Zeitkritische aufgaben am besten hin.
Ich hab selber mal ein programm in Assembler geschrieben, bei dem ich immer 8 Servos (1 Port) auf einmal angesteuert habe. Mit deinem µC wären also 32 Servos abzüglich der zu übertragung notwendigen pins in 8ms möglich, die restlichen 12 ms kannst du dann zum Datenaustausch benutzen. Wobei die genauigkeit der Servos am Takt deines Controller liegt. hier gilt, je schneller, desto öfters kannst du eine Abfrage machen, aber das wiest du sicherlich.
Das ganze ist natürlich auch in weniger als 8 ms zu realisieren, wenn du mehrere Ports auf einmal ansteuerst, aber da ist wieder ein schnellerer Quarz verlangt.
Der aufbau der Abfrage sieht in etwa so aus:
- Als erstes den Port auf high
- Warte Ca. 1 ms, jenachdem was deine Servos wollen
- vergleiche alle 8 werte mit einem Counter Register, bei gleichheit, den entsprechenden Portpin auf low.
- erhöhe das register und solange noch nicht 2 ms erreicht sind und springe zum vorherigen schritt.
- wenn der erste port durch ist, wiederholst du das ganze mit dem nächsten, bis alle durch sind.
Also Theoretisch könntest du dir ein Servoboard selber bauen, vorrausgesetzt, du kannst entweder Assembler oder eine andere Programmiersprache so gut, dass du die Zeitkritischen Sachen hinbekommst.
Zu dem Board kann ich dir nichts sagen, da ich es nicht habe, aber mir gefallen so board sowieso nicht, da man sich an forgefertigte Maße halten muss, aber dass ist dir überlassen.
mfg robin
ps.: ich könnt dir noch ein Beispielcode in Assembler schicken, hab des aber noch nicht mit interrupts gelöst, sondern mit wait schleifen.
Allerdings wäre das ganze nicht dokumentiert und für einen Mega168 mit 8 Mhz, also vlt. nicht brauchbar....
Hi,
Danke für deine Antwort!
Ich hab mir mal das Servo Board mitbestellt mal sehn wie gut das dann Funtkioniert.
Assembler kann ich nur die Gundlegenden Sachen (vom Windows Apps Cracken ;P) hab damit noch keine µC's programmiert aber das sollte für µC's auch nicht wesentlich schieriger werden als C denk ich mal.
Ich hab so ne Servosteuerung schon mal in C mit Interupts geschreiben jedoch denken ich nicht dass ich es mit 21 Servos und einer Genauigkeit im µS bereich schaffe ohne dass mein uC dabei zu sehr ausgelasted ist.
Denn der µC sollte dann den restlichen Robo auch noch steuern. Wenn ich richtig gerechnet habe hat der µC bei 16 mhz 16 herz pro uS. Was folglich dann auch 16 Assembler Befehle pro uS währen (oder bin ich da flasch informiert?)
So scheint es für mich unmöglich die 21 servos in dieser zeit zu verwalten.
Freuntliche Grüße
Philipp Reitter
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.