Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie Servo ansteuern??
Hallo alle zusammen,
habe mir das RN-Control Board ausgesucht, um einen Roboter zu steuern. Leider bekomme ich es nicht hin, einServo das machen zu lassen, was ich will.
Habe schon den Code für Bascom aus dem entspr. Kapitel versucht, geht nicht. Habe den Artikel mit 2000 Schritten versucht, geht auch nicht.
Habe das Servo am Portb.0.
Kann mir jemand einen Code senden, mit dem ich die Funktion des Servos testen kann??
Z.b. Taste 1 = ganz links
Taste 2 = Mitte
Taste 3 = ganz rechts
Ich bin ein totaler Neueinsteiger auf dem Gebiet und komme hier irgendwie nicht weiter.
Vielen Dank,
Micha
oberallgeier
05.09.2011, 23:41
Hi Micha
willkommen im Forum.
... Code für Bascom ... versucht, geht nicht ... mit 2000 Schritten versucht, geht auch nicht ...So ne Fehlerbeschreibung "geht nicht ... geht auch nicht..." ist etwas trübe. Damit kann man nix anfangen. WAS geht denn und was geht nicht?
Mal ein Tip: im Wiki ist der Anschluss eines Servos beschrieben (klick hier). (http://www.rn-wissen.de/index.php/Servo#Ansteuerung:_Signalform_und_Schaltung) DENN, viel geübte Anfängerfehler sind: zu wenig Strom von einer gemeinsamen Versorgung heisst meist zuwenig für den Servo, dann gibts oft einen RESET beim Controller wegen Spannungseinbruch - oder, noch häufiger: GND vom Servo ist mit GND von der Ansteuerung nicht verbunden. Dann "schwimmt" das Signal und der Servo ist konfus . . . .
Ich bin ein totaler Neueinsteiger auf dem Gebiet und komme hier irgendwie nicht weiter.
Hallo Micha,
ein Servo erwartet innerhalb eines 20ms "Fensters" eine Fallende Flanke. Diese wird in eine Winkelinformation umgesetzt.
Stell dir also z.B. eine Sekunde unterteilt in 20ms Intervalle vor.
Zu Anfang jedes Intervalles wird dein Servosignal auf High gesetzt.
Je nachdem wo (1ms-2ms) du in dem Intervall die fallende Flanke erzeugst, bewegt sich dann dein Servohorn in die entsprechende Position.
Am leichtesten zu Beginn ist meines Erachtens der Einstieg die Programmierung in ASM, da du dort die Zeiten, die durch den Code verursacht werden leichter abschätzen kannst.
Wenn du das Prinzip verstanden hast, kannst du dir leicht C-Routinen schreiben, die dir z.B. einen Timer mit der gewünschten Pulsbreite initialisieren.
Nach dem Ablauf dieser Zeit lässt du den Timer einfach mit 20ms-(Pulsbreite) bis zum nächsten Interrupt laufen. Das führst du dann einfach immer wieder hintereinander aus.
Weitere Fragen werden sicher hier http://www.rn-wissen.de/index.php/Servos beantwortet.
Ansonsten muss ich oberallgeier zustimmen, ein bisschen mehr Infos zu "Es geht nicht" sind sicher nützlich ;-)
Grüße
Michael
Hallo und vielen Dank für die Infos.
Ich habe als Testaufbau folgendes gemacht:
Auf einer Lochrasterplatte habe ich einen Anschluß für einen 7,2 V Fahrakku, einen Servoanschluß und ein Kabel zur Spannungsversorgung der RN-Control.
Alles ist per Masse untereinander verbunden. die Plus-Leitungen gehen an die verschiedenen Verbraucher. Das Signal vom/fürs Servo Conrad-Standartservo) habe ich per extra Kabel an den PortB.0 geführt.
Die Batteriespannung vom Testprogramm zeigt 7,4... V.
Ich habe dann zum testen das Demo/Testprogramm unter Motoren/Servo benutzt, mit dem Befehl "Servo(1)=100 für Mittelstellung. (Entspr. 50 für links und 150 für rechts).
Resultat: keine Bewegung am Servo.
Danach habe ich das etwas längere Progamm benutzt (Unter Servoansteuerung mit 2000 Schritten).
Resultat: Wildes Zucken, Kreischen, Brummen, Endanschlag links, mal rechts. Das Ganze mal mehr, mal weniger. Dann nichts mehr. Das Servo funktioniert am Empfänger jedoch weiterhin problemlos.
Irgendwo hab ich da einen Fehler. Ich denke, es liegt an der Programmierung. Irgendwo hab ich da nen Hänger aus Mangel an Bascom-Kenntnissen, ich bin halt bisher nur Delphi gewöhnt.
Ich hoffe, das ich das Ganze besser beschreiben konnte.
Grüße,
Micha
radbruch
06.09.2011, 08:54
Hallo
Ein einfaches Servoprogramm könnte auch etwa so aussehen:
$regfile "M32def.dat"
$crystal = 16000000
Config Pinb.0 = Output
Dim X As Byte
Do
For X = 0 To 100
Portb.0 = 1
Waitms 1
Portb.0 = 0
Waitms 19
Next
For X = 0 To 100
Portb.0 = 1
Waitus 1500
Portb.0 = 0
Waitms 18
Next
For X = 0 To 100
Portb.0 = 1
Waitus 500
Portb.0 = 0
Waitms 19
Next
Loop
End
Gruß
mic
Super, Danke.
Werde ich heute gleich ausprobieren.
Ist es eigentlich ein unterschied, ob ich config pinb.0 = Output oder portb = Output schreibe??
Oder ist pinb nur ein einzelner von 8ten und portb gleich der ganze Port, den man auf Output setzt. Kann das schon ein Fehler sein??
Grüße,
Micha
radbruch
06.09.2011, 09:48
Immer gerne, allerdings ist mein Miniprogramm ungetestet (bisher).
Pinx.y setzt die Datenrichtung für einen einzelnen Pin, mit Portx setzt man die Datenrichtungen mehrerer Pins an einem Port gleichzeitig.
btw. kann ich dir die Hilfe von Bascom sehr empfehlen. Sehr umfangreich und fast immer mit kleinen Beispielprogrammen zum jeweiligen Thema.
Gruß
mic
Oder das Bascom Beispiel Programm......
$regfile = "m32def.dat" ' specify the used micro
$crystal = 16000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
Config Portb = Output
Enable Interrupts
Do
Loop
Dim I As Byte
Do
For I = 0 To 100
Servo(1) = I
Waitms 1000
Next
For I = 100 To 0 Step -1
' Servo(1) = I
Waitms 1000
Next
Loop
End
Damit sollte das Servo hin und her fahren, hat bei mir auf Anhieb geklappt. "I" darf hier nicht größer als 256 werden, wenn das größer gehen soll muss vorher als Word Variable Deklariert werden. Servo + an +, Servo - an GND und Servo Signal an Portb.x wobei in diesem Beispiel porb.0 gemeint ist.
Gruß Richard
Hallo Alle zusammen,
vielen Dank für die vielen Anregungen und Hilfen. Langsam habe ich das Gefühl, irgendwas stimmt mit dem Board oder dem Servo nicht.
Besorge mir Morgen ein neues Servo.
Habe das Ganze jetzt mit portb.1 getestet. nichts.
Schönen Abend noch und bis dahin,
Micha
radbruch
06.09.2011, 21:25
Läuft dein Board wirklich mit 16MHz? Stimmt der Servoanschluß am Board? Zuckt das Servo beim Einschalten? Wenn ja, zuckt es, wenn du selbst einen Impuls "morst"?
Läuft dein Board wirklich mit 16MHz? Stimmt der Servoanschluß am Board? Zuckt das Servo beim Einschalten? Wenn ja, zuckt es, wenn du selbst einen Impuls "morst"?
Ein Servo hann wenn man es warum auch im mer falsch anschließest "Sterben"!
Gruß Richard
https://www.roboternetz.de/community/images/misc/quote_icon.png Zitat von radbruch https://www.roboternetz.de/community/images/buttons/viewpost-right.png (https://www.roboternetz.de/community/showthread.php?p=524226#post524226)
Läuft dein Board wirklich mit 16MHz? Stimmt der Servoanschluß am Board? Zuckt das Servo beim Einschalten? Wenn ja, zuckt es, wenn du selbst einen Impuls "morst"?
Ich sag mal ja. Also den 16 MHz Quarz hab ich eingelötet und $crystal=16000000 Anweisung steht auch im Quelltext. Der Anschluß stimmt. Das Servo zuckt nimmer. Lässt sich am Empfänger auch nicht mehr zum bewegen per Fernsteuerung bewegen. Ich denke, die 7,2 Volt haben das Servo zum scheigen gebracht. Aber, ich hol mir heute ein Neues. Dann sehen wir weiter. Ich nehme jetzt aber die Spannung vom Board. Mal sehen, wies dann weiter geht.
Micha
Ein Servo hann wenn man es warum auch im mer falsch anschließest "Sterben"!
Gruß Richard
Ich denke, die 7,2 Volt vom Fahrakku haben ihr übriges getan. Nehme jetzt beim Nächsten die 5V vom Board.
Micha
Ich denke, die 7,2 Volt haben das Servo zum scheigen gebracht
Hi Micha,
wie hast du denn den Servo angeschlossen? Hat Servo und µC eine gemeinsame Masse?
Grüße
Michael
Hi Micha,
wie hast du denn den Servo angeschlossen? Hat Servo und µC eine gemeinsame Masse?
Grüße
Michael
Hallo,
habe mir aus einer Lochrasterplatte eine Anschlussplatte gebaut. Anschluß für Fahrakku+Anschluß zum Board + Servoanschluß. Auf der Platte (die mit den Kontaktstreifen) ist alles miteinander verbunden. Strom kommt vom Fahrakku geht aufs Servo+Board und der Signaldraht an Portb.0.
Micha
Hallo,
habe mir aus einer Lochrasterplatte eine Anschlussplatte gebaut. Anschluß für Fahrakku+Anschluß zum Board + Servoanschluß. Auf der Platte (die mit den Kontaktstreifen) ist alles miteinander verbunden. Strom kommt vom Fahrakku geht aufs Servo+Board und der Signaldraht an Portb.0.
Micha
Wichtig ist das GND vom Fahrakku UND GND vom Board verbunden sind, sonst hängt das Signal in der "Luft", kann keinen Stromkreis bilden!
Gruß Richard
Wichtig ist das GND vom Fahrakku UND GND vom Board verbunden sind, sonst hängt das Signal in der "Luft", kann keinen Stromkreis bilden!
Gruß Richard
Ja, deshalb die Platte. War so am günstigsten. Konnte + und GND daher gleich "durchschleifen" und alles miteinander mit Spannung versorgen. Daher auch der Verdacht, dass ich das Servo letztenendes mit den 7,2V tot gemacht habe.
Gruß,
Micha
Ja, deshalb die Platte. War so am günstigsten. Konnte + und GND daher gleich "durchschleifen" und alles miteinander mit Spannung versorgen. Daher auch der Verdacht, dass ich das Servo letztenendes mit den 7,2V tot gemacht habe.
Gruß,
Micha
Wenn Du die 7,5 V auch mit der 5V µC Versorgung verbunden hast, dürfte noch einiges mehr "abgefackelt" sein.:-)
Gruß Richard
Wenn Du die 7,5 V auch mit der 5V µC Versorgung verbunden hast, dürfte noch einiges mehr "abgefackelt" sein.:-)
Gruß Richard
Hallo,
ne, die Versorgung geht übers Board. Da ist alles noch ok. Habe nun ein neues Servo angeschlossen. Spannungsversorgung über Board. Signal über Portb.0.
Und siehe da, mit folgendem Programm gehts. Aber nur so, wies da steht.
Grüße,
Micha
Hallo,
ne, die Versorgung geht übers Board. Da ist alles noch ok. Habe nun ein neues Servo angeschlossen. Spannungsversorgung über Board. Signal über Portb.0.
Und siehe da, mit folgendem Programm gehts. Aber nur so, wies da steht.
Grüße,
Micha
Glückwunsch. :-), Richard
Glückwunsch. :-), Richard
Danke,
bin schon wieder einen Schritt weiter. Kann das Servo nach links und rechts bis zum Endanschlag bewegen. Auf Knopfdruck.
Melde mich,
Micha
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.