PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C-Controlpro MEGA32 Servo Steuerung



Humpelbein
15.05.2010, 22:57
Hallo ,

Ich bin seid einiger Zeit "stolzer" Besitzer einer C-Controlpro 32 und konnte bis heute auch schon etwas Programmiererfahrung sammeln (Basic). Doch jetzt stoß ich doch an meine Grenzen.

Ich möchte mit meinem Mircrocontroller einen Servo bewegen.

Und bei diesen Gerätschaften ist es ja so das das Steuersignal eine länge von min. 1ms und max. 2ms haben muss und dazwischen 20ms pause sein muss. Jetzt hab ich das ganze versucht so zu realisieren:

Sub main()

Do While True
Port_WriteBit(SERVO,1)
AbsDelay(1)
Port_WriteBit(SERVO,0)
AbsDelay(20)
End While
End Sub

Hat aber nicht richtig funktioniert das Servo war wie wahnsinnig am brummen und hat auch keine Endlage erreicht.
Dann stieß ich auf die PWM-Kanäle diese anzusteuern ist mir aber immer noch ein Rätsel.
In einem Buch fand ich ein Beispielprogramm zur Tonerzeugung und dachte das man das doch sicher auch zum Servosteuern Ge/Missbrauchen:

Sub BEEP(Tone As Word,Periode As Word)
Timer_T0FRQ(Tone,PS_64)
AbsDelay(Periode)
Timer_T0Stop()
End Sub

Zu diesem Programm hab ich auch noch zwei Fragen:

1. Was bedeutet PS_64? (Im Buch steht was von Zeitbasis 4,34µs)
2. Wiso musste ich vorher keinen Port für den Ausgang dieses Programms festlegen? Bei mir ist der auf Port B.3

Ich hoffe ich konnte euch mein Problem verständlich machen und freue mich auf viele Antworten

Mfg Humpelbein

syn_error
16.05.2010, 14:51
Hat aber nicht richtig funktioniert das Servo war wie wahnsinnig am brummen
ist aber schon richtig verkabelt?
die kabel farbe kann von hersteller zu hersteller unterschiedlich sein.

stromversorgung zu schwach?


fand ich ein Beispielprogramm zur Tonerzeugung und dachte das man das doch sicher auch zum Servosteuern Ge/Missbrauchen:
ne ne lass mal.


Sub main()

Do While True
Port_WriteBit(SERVO,1)
AbsDelay(1)
Port_WriteBit(SERVO,0)
AbsDelay(20)
End While
End Sub
da ich diese sprache nicht beherrsche, kann ich dir nur sagen wie der ablauf sein sollte:

1. servo steuereingang auf high.
2. 1 ms warten.
3. servo steuereingang auf low.
4. 20 ms warten.
5. wieder von vorn.

somit sollte der servo in eine endposition fahren und dort ohne großes brummen verweilen.

Humpelbein
16.05.2010, 16:03
Ja der verlauf den du beschrieben hast halte ich ja eigendlich auch ein:

Port_WriteBit(SERVO,1) = Servoeingang auf high
AbsDelay(1) = 1ms Warten
Port_WriteBit(SERVO,0) = Servoeingang auf low
AbsDelay(20) = 20ms Warten

Und das ganze in einer Endloschleife

Stromversorgung hab ich über nen 7805 Festspannungsregler mit 1,5A maxbelastung.

Das Servo ist überigens ein MS-X6 von Multiplex (wenn das hilft)

Ich hab dann aber auch noch ein Problem wenn ich das mit dem oben beschriebenen Programmcode mache dann kann ich nur ne pause von 1ms oder 2ms machen also nur in die endlagen fahren.

Und wegen der verkabelung ich hab Orange,Braun und rot zur verfügung,
Hab + auf rot, - auf Braun und das Signal auf Orange gelegt.


gruß Humpelbein

Dirk
16.05.2010, 16:38
@Humpelbein:

Ich möchte mit meinem Mircrocontroller einen Servo bewegen.

Mit CCBasic ist das eigentlich ab der CCPRO-IDE V2.0 mit den eingebauten Befehlen (Servo_Init, Servo_Set) möglich! Man braucht da nichts eigenes zu konstruieren.

Hier die Demos für den RP6 (mit M128):
https://www.roboternetz.de/phpBB2/viewtopic.php?t=48534

Gruß Dirk

Humpelbein
16.05.2010, 18:18
Danke erst mal für die schnelle Hilfe,

nur die Demoprogramme laufen bei mir nicht und ich bin im Moment noch zu "Dumm/Unerfahren" das umzuschreiben könnte mir einer das mit dem Servobefehl kurz erklären also was ich definieren muss, wie ich dem servo sage welche position er einehmen muss etc. Das wär mir echt ne Hilfe.

Die Demos sind zwar auch hilfreich aber da ist noch soviel drin was ich nicht brauche wie die LCD anseuerung und ich kann nicht einfach was wegschneiden wenn ich nicht weiß wofür das genau ist und ob es zur eigendlichen steuerung beiträgt.

Gruß Humpelbein

Dirk
16.05.2010, 19:50
könnte mir einer das mit dem Servobefehl kurz erklären also was ich definieren muss, wie ich dem servo sage welche position er einehmen muss etc. Das wär mir echt ne Hilfe.
In der CCPRO Anleitung wird das erklärt.
Ein einfaches Demo-Programm gibt es auch: servo_test.cbas

Gruß Dirk

Humpelbein
16.05.2010, 21:38
Ich mir jetzt mal das demoProgramm runtergeladen aber das ist auf das application Board zugeschnitten und hab nur das Projectboard und damit weder tastertur noch LCD Display und in dem Programm verwenden die nicht mal servo_init() ich komm da nich weiter.

Humpelbein
16.05.2010, 22:36
So hab es doch hinbekommen Ich danke für die antworten

gruß humpelbein