PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 12 Servos mit PIC steuern



m0
16.03.2005, 06:35
Hi!

Wie gesagt bin neu und habe keine ahnung was so ein PIC so leisten kann deswegen wollte ich mal fragen ob es möglich währe, einen Roboter, der 4 Beine hat, wobei jedes Bein mit 3 servos betrieben wird, mit einem PIC zu steuern. ich wollte in den PIC also eine PWM procedure schreiben, die die signale macht, einfach mit delay da der PIC ja ansonsten keine aufgaben erledigen muss und dann noch proceduren für geradeaus laufen linksdrehung rechtsdrehung usw... reicht die Leistung des PIC16F877 dafür aus? oder sollte ich besser einen anderen benuzen?
der steuer PIC soll dann einfach von einem 2. der tastatur und LCD steuert ein paralleles signal bekommen, welche Bewegung ausgeführt werden soll (falls ich irgendwie doch mal vertehe wie ich in einer solchen Anwendung serielle verbindungen einbaue dann besser seriell als parallel) es wäre schön wenn ihr mir noch einige verbesserungsvorschläge machen würdet und mir sagen köntet was für PICs ich am besten verwenden sollte.

vielen Dank ihr seid echt ne spizen kommunity!

MfG
m0

PicNick
16.03.2005, 08:49
Das Problem liegt in der Zeit. Ein Servo braucht einen Impuls bis max. ~2 ms.
Wenn du sie Servos eins nach dem anderen arbeitest (wenn!), brauchst du für 10 Servos etwa 20 mS (worst case), und das ist die Zeit, wo du mit dem ersten eigentlich wieder anfangen mußt.
d.h bei 12 Servos kann die Zeit knapp werden, egal, welcher Prozessor.
Deine Programmiertechnik wäre also gefragt, das Verfahren zu optimieren.
Da du bei 12 Servos und 4 Haxen genug zu tun hast, WAS die Servos tun sollen, würd' ich dir raten, für Servos einen spez. Servokontroller mit fix und foxi software zu verwenden. du findest Info im Downloadbereich.
Is aber nur ein rat.

m0
16.03.2005, 19:07
Hi!
Ok den IC hab ich mir angeschaut des scheint echt spize zu sein nur habe ich noch keine ahnung wie ich dem die Daten per I2C übergebe, ich hab mich schon etwas eingelesen aber bin mir noch nicht ganz sicher wie ein I2C protokoll in assembler aussehen müsste allerdings habe ich rausgefunden, dass der PIC16F877 schon eine Hardwareseitige I2C unterstüzung hat, kann mir vielleicht jemand erklären wie ich die mit assembler am einfachsten benuze? in verbindung mit dem Servocontrollerchip in der downloadrubrik https://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=34

vielen dank schonmal da wäre ich sauber auf die nase gefallen daran habe ich garnicht gedacht :(

MfG
m0

PicNick
17.03.2005, 06:24
Also, für Pic gehst du am besten nach www.sprut.de
da findest zu bei "interfaces" massen von Besipielen, die du 1:1
versuchen kannst.
Wenn Problem, dann schreib'. 877 hab ich auch.

m0
17.03.2005, 18:39
ok soweit sogut aber wie ist das sind dann automatisch die ersten 8 bit für servo 1 die 2. für servo 2 usw. oder wie muss ich das übertragen?
Das datenblatt von dem IC is ja arg mager dafür dass er über 10 Euro kostet

m0
17.03.2005, 18:46
ohh sorry da hab ich nowas gefunden.. also kann das sein dass man vor dem datenbyte 2 bytes mit der adresse senden muss?
wenn ja wie sind diese adressen im datenblatt steht nur "register 1-20" wie ist die adresse dieser register oder finde ich die im Datenblatt des PICs ich hab sie noch nicht gefunden :(?
tschuldigung für die vielen saublöden fragen ich hoffe ich gehe euch nicht auf die Nerven!

MfG
m0

PicNick
18.03.2005, 09:01
Jetzt mußt du konkret werden.
um welche IC's geht's jetzt konkret ?
welches Datasheet kostet 10 Euro ?

m0
18.03.2005, 12:28
Hi!

Also: es geht um den SD20 ein über I2C bus zu betreibender Servocontroller der 20 servos ansteuern kann und des PIC fertig programmiert kostet 10 Euro aber es gibt nirgends ein gescheites datenblatt wo beschrieben wird welche daten der PIC über den I2C braucht das ist das problem.

Vielen Dank
m0

PicNick
18.03.2005, 12:52
Ah so. Na ja, den Preis macht die Software + Pic aus. Das I2C Zeugs ist halt so einfach, daß nicht viel drin steht:
Register schreiben (=Servo stellen)
I2cstart
I2cwbyte &HC2
I2cwbyte Register-# lt doku
I2cwbyte position
I2cstop

m0
18.03.2005, 15:51
achsoo so einfach einfach ein byte mit der zahl des registers und danach die position? is ja super!! die posi geht von 0-255 oder? und kann ich auch gleich alle servos in einem aufwasch setzen oder muss ich da jedesmal die übertragung stoppen und wieder den port neu übernehmen?

Danke nochmal dann werd ich des wohl mit dem IC machn wenn des so easy is genial

MfG
m0

PicNick
18.03.2005, 18:29
Da hast du recht, ab dem angegeben Register kannst du gleich weiterschreiben (zumindest normalerweise).
Beim LESEN mußt du aber absetzen.
I2cstart
I2cwbyte &HC2
I2cwbyte Register-# lt doku
I2cstop
I2cstart
I2cwbyte &HC3 !!!!!! Lese adresse (+1 )
I2crbyte wert, ack
...
I2crbyte wert, noack
I2cstop

logo ?

m0
18.03.2005, 18:31
Hi!

Supergenial spize vielen dank euch allen und vorallem dir PicNick dachte nicht dass sogar ich des versteh
MfG
m0

18.03.2005, 18:32
Hallo Leute,

ich bin zwar kein Robo-Experte, aber ich kenne mich mit Mdellbau und Servos aus.

Ich würde alle Funktionen in einen PIC packen (zB. 18F452) der läuft mit 10Mhz und wenn man alle Servos gleichzeitig steuert, dann hat man zwischen den einzelnene Zyklen 18 mSec. Zeit. Das sind bei o.g Frequenz "Lichtjahre" da kann man eine ganze Menge erledigen. Um den Strom klein zu halten, würde ich vieleicht immer nur 4 Servos auf einmal bedienen. Dann brauts 3 Zyklen, die sind aber auh nach 6 mSec. erledigt.
Und das Beste zum Schluss, der PIC lässt sich in C prgrammieren.

GRUSS
INGO

m0
18.03.2005, 22:11
Hi Gast!
also mittlerweile bin ich mir ziehmlich sicher dass ich den servocontroller nehme, da ich bei 14 servos echt genug arbeit hab dem ding s laufen beizubringen! und was C angeht naja ich bin nur n armer realschüler und will mir keinen sündteuren compiler kaufen ausserdem habe ich mir in der letzten woche assembler beigebracht mithilfer von www.sprut.de und das gefällt mir unheimlich gut dieses assembler muss ich sagen was will man mehr ;) aber trozdem vielen Dank nochmal für deine tipps!

MfG
m0