PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm funktioniert nicht, Servo ansteuerung mit MSP430G2553



alex91
09.12.2012, 14:03
Hallo

Ich möchte 8 Servos mit meinem MSP430 ansteuern.
Ich könnte es zwar mittels Polling und __dalay_cycles machen (hab ich auch schon und funktioniert), aber ich möchte auch noch andere dinge machen...
Desshalb will ich einen Timer verwenden der mir mittels Interrupts das Signale für die Servos generiert.

am Ausgang ist ein Transistor (bc549) als Schalter (Signal wird Invertiert).

Das Signal soll an Port1 ausgegeben werden. Signal: BIT0:1,5ms low->high 1ms pause; ->BIT1:1,5ms low->high 1ms pause;->...

:confused:Problem: Servos fahren in irgend eine Position, Zucken und haben keine Kraft...

Ich hoffe mir kann jemand helfen

MfG Alex

oberallgeier
09.12.2012, 14:16
... 8 Servos ... ansteuern ... Servos ... Zucken und haben keine Kraft
...Schon mal hier nachgelesen? (http://www.rn-wissen.de/index.php/Servo) Da sind Fehlerbeschreibungen und ihre Abhilfe (kein gemeinsamer GND, Servosversorgung mit Controllerausgang füttern - das bringt eh nie genug Saft ... etc.


... am Ausgang ist ein Transistor ... Signal wird Invertiert ...Die Servos sind nicht froh, wenn sie statt ner Rampe von 1 ms alle 20 ms eine Rampe von 19 ms alle 20 ms bekommen . . .

alex91
09.12.2012, 14:34
Danke für die Antwort

GND müsste bei beiden gleich sein, da ich den servo mit 5V (USB) betreibe und den µC auch über USB.

Mit der Funktion __dalay_cycles funktioniert es ja...

oberallgeier
09.12.2012, 14:48
... GND müsste bei beiden gleich sein, da ich den servo mit 5V (USB) betreibe ...Hast Du mal die USB-Spezifikation(en) nachgesehen? Liefert Dein USB-Port genug Saft? Übrigens würde ich mich bei diesem Experiment schon mal nach nem neuen Rechner umsehen, zumindest überlegen, was ich mit nem defekten USB-Port anstelle . . .

Anmerkung: USB - ohne "Anmeldung" liefert 100 mA, mit Anmeldung bis zu 500 mA - wenn der Port ordentlich ausgelegt ist. Darüber droht Rauchgefahr.

alex91
09.12.2012, 15:02
Danke für den hinweis, dann werd ich gleich mal das netzteil nehmen...

alex91
10.12.2012, 15:41
Funktioniert leider trotzdem nicht

radbruch
10.12.2012, 17:00
/* Servo0 */
if (i == 1)
{
i++;
}
if (i == 2)
{
i++;
}
/* Servo1 */
if (i == 3)
{
i++;
}
Das war doch so sicher nicht gedacht. Deine ISR flutscht in einem Rutsch durch. Besser wäre vielleicht ein select..case-Ansatz

alex91
10.12.2012, 20:15
Danke!
Warum ist mir das nicht selbst aufgefallen/eingefallen