Forum: Mikrocontroller und Digitale Elektronik Hexapod mit PIC18F45K22 machbar?


von loois (Gast)


Lesenswert?

Hi, kann man mit einem PIC18F45K22 einen Hexapod Roboter bauen der 6 
Beine hat? Jedes Bein hat 2 Servomotoren.

Man braucht genügend Timer würde ich sagen oder? Meiner Meinung nach 
geht das mit dem genannten uC nicht. Aber was sagen die Profis?

von Axel H. (axhieb)


Lesenswert?

Ich glaub nicht, dass das mit dem PIC (ordentlich) geht. Die Timer 
anzahl (min 1) ist eigentlich egal (weil man nur eine Timebase braucht) 
ABER es gibt nicht genug CCP-Einheiten (capture compare pwm)

http://ww1.microchip.com/downloads/en/AppNotes/00696a.pdf - AP-Note über 
Servos von microchip

von dünnwandiger Trog (Gast)


Lesenswert?

Was spricht denn gegen einen Richtigen. Mit 12 oder mehr timern, wie zB 
einem dsPIC33FJ64GS606, nicht immer dieses spielzeug..

von Axel H. (axhieb)


Lesenswert?

dünnwandiger Trog schrieb:
> Was spricht denn gegen einen Richtigen. Mit 12 oder mehr timern, wie zB
> einem dsPIC33FJ64GS606, nicht immer dieses spielzeug..

stimme dir voll zu ein DsPic ist besser geeignet (bzw. glaub mit einem 
8-bit PIC wirds eh schwirig...) aber der dsPIC33FJ64GS606 hat nicht 
genug Output-Compare-Einheiten... Bin mir nicht sicher, aber ich glaube 
die Motorcontrol-PWM's sind dafür nicht geeignet.

mit dem dsPIC33EP512MU814 sollts gehen. Würde aber eher einen STM32 oder 
so nehmen dafür...

von loois (Gast)


Lesenswert?

Was wenn ich mehrere kleine PICs parallel nutze und dadurch die Anzahl 
erhöhe? Wo würdet ihr da Probleme sehen?

von Axel H. (axhieb)


Lesenswert?

Würd ich eher nicht machen - gehen wirds sicher, ist aber aufwendiger.
Die dsPic's sind sehr ähnlich wie die 8-bit PICs bzw. man merkt beim 
programmieren keinen wirklichen unterschied (Die Initialisierung ist ein 
bisschen aufwendiger).

vielleicht hilft dir das weiter
Beitrag "PWM Servo Schieberegister"

von Klaus (Gast)


Lesenswert?

Axel H. schrieb:
> Ich glaub nicht, dass das mit dem PIC (ordentlich) geht. Die Timer
> anzahl (min 1) ist eigentlich egal (weil man nur eine Timebase braucht)
> ABER es gibt nicht genug CCP-Einheiten (capture compare pwm)

Erschwerend kommt noch hinzu, daß man für 6 Beine eine inverse Kinematik 
rechnen muß.

Axel H. schrieb:
> Bin mir nicht sicher, aber ich glaube
> die Motorcontrol-PWM's sind dafür nicht geeignet.

Sind sie schon. Der größte Aufwand ist, alle nicht benötigten Features 
abzuschalten.

MfG Klaus

von loois (Gast)


Lesenswert?

Wäre es nicht möglich einfach die I/O Ports per Timer ein/auszuschalten, 
wäre man dann nicht unabhängig von der  PWM Hardware? Ich würde 
sozusagen die PWM per Software basteln. Kam mir nur so der Gedanke

von Axel H. (axhieb)


Lesenswert?

Ich hab's mir das gerade angeschaut, ja es sollte gehen. Ob in C ist die 
Frage weil du da schon an die Grenzen gehst. In ASM sollte es gehn...

Ich nehm mal an das ist ein HTL Projekt oder so ?



Wenn du die "PWM Daten" im vorhinein berechnest/vorbereitest und ins 
SRAM speicherst dann:

Hab mir ausgerecht du braust ca. 7+ Instructions mit 1-2 Zyklen pro 
Inst. sind 10 Zyklen. Weil der Pic pro Zyklus 4 Taktzyklen braucht => 
4*10=40

für 1° Auflösung => (0,001s)/(360°)=360kHz

360kHz*40 = 14Mhz Oszilator Frequenz

bei Fmax=64Mhz (vom Pic) hättest du sogar 40 Instriuctons Zeit... Könnt 
sogar in C gehn

dann hättest du noch 9/10 von der Rechenzeit übrig für Berechnungen (bei 
20ms Periode der "PWM").


Aber ein DsPic ist eindeutig die bessere Lösung...

: Bearbeitet durch User
von loois (Gast)


Lesenswert?

Axel H. schrieb:
> Ich hab's mir das gerade angeschaut, ja es sollte gehen.

Danke für die ausführliche Analyse des Problems, schön zu wissen dass es 
hart ander Grenze ist aber zu gehen scheint. Das wäre übrigens ein 
reines Spaßprojekt. Welchen ARM Prozessor könntet ihr mir empfehlen für 
dieses Vorhaben (ich bevorzuge STM)?

von loois (Gast)


Lesenswert?

loois schrieb:
> Welchen ARM Prozessor könntet ihr mir empfehlen für
> dieses Vorhaben (ich bevorzuge STM)?

Also idealerweise dann einen mit 12 PWM Ausgängen???

von Martin S. (led_martin)


Lesenswert?

Es könnte hilfreich sein, zu wissen daß die Impulse für die Servos 
deutlich kürzer sind, als die Periodendauer. Das kann man ausnutzen, 
indem man die Impulse für die Servos nacheinender erzeugt. Mit etwas 
zusätzlicher Logik kann ein Hardware-PWM-Ausgang locker 6-8 Servos 
ansteuern. Auch eine Software-PWM Lösung wird deutlich einfacher, wenn 
die Signale nicht alle gleichzeitig erzeugt werden müssen. Gängig sind 
z.B. 50Hz Rate -> 20ms, Impulslänge üblicherweise 1ms .. 2ms (Manchmal 
auch 0,5ms .. 2,5ms), 1,5ms ist Mittelstellung.

Mit freundlichen Grüßen - Martin

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.