-         
+ Antworten
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 31

Thema: Alternativer Servo-Treiber für RNFBRA-CoController RNS1

  1. #1
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1

    Alternativer Servo-Treiber für RNFBRA-CoController RNS1

    Hallo,

    mal ein paar Dinge zu der Servo-Ansteuerung über das RNBFRA-Board. Ursprünglich war angedacht das der CoController diese Aufgabe übernimmt und dieser über den I2C Bus angesteuert wird.

    Leider ist dies in der Praxis nicht so ganz einfach, daher hat auch Kjion´s Entwicklung ein bischen länger gedauert als gedacht. Das Problem ist das Timing. Der softwaremäßige I2C-Port und das genaue Servo-Timing läßt sich äußerst schwer kombinieren.
    Kjion hat das Problem weitgehend gelöst indem er die I2C-Bus Geschwindigkeit herabgesetzt hat. Leider hat diese Methode den Nachteil das alle Bausteine mit herabgesetzter Geschwindigkeit angesteuert werden müssten. Zudem würden dann die normalen Bascom Befehle nicht mehr funktionieren.
    Leider gab es aber auch da momentan noch einige Harken bei bestimmten I2C-Bausteinen.
    Da wir bislang dafür keine optimale Lösung gefunden haben, hab ich nochmal eine etwas andere Variante des Servo Treibers bereitgestellt.

    RNS1.

    Servotreiber und Doku findet man hier:
    http://www.roboternetz.de/phpBB2/dlo...le&file_id=128

    Er verzichtet vollständig auf den I2C-Bus, so das dieser nach wie vor mit Bascom-Befehlen und voller Geschwindigkeit genutzt werden kann.
    Die Ansteuerung erfolgt über eine einzige Leitung der RS232. Durch einfache 4 Byte Befehle (ich hab mich da an den von Kjion´s orintiert) können 255 Positionen bei allen 10 Servos einfach und schnell per Print-Befehl übertragen werden.
    Das ganze hab ich auch noch als Beispiel in einer Subroutine gekapselt, so ist es auch für Einsteiger übersichtlich.

    Nicht immer möchte man jedoch die Servo-Befehle ständig auf der normalen RS232 übertragen, schließlich braucht man diese Schnittstelle eventuell auch für andere Dinge. Auch dafür gibt es eine Lösung. Beim RNBFRA-Board gibt es einen Pin auf dem Roboternetz-Bus der als Reserve deklariert ist. Wenn dieser Pin mit einem Pin von JP16 verbunden wird (kann man über steckbares Kabel erreichen), dann kann man dafür eine unabhängige zweite RS232 nutzen. Klingt kompliziert ist aber kinderleicht.

    So wüde in diesem Fall die Brücke aussehen. Die Ansteuerung erfolgt dann ganz einfach mit der Subfunktion ServoB




    Braucht man die normale RS232 nicht, dann kann man einen normalen Jumper schräg aufstecken. In diesem Fall nimmt man einfach die Subfunktion Servo (ohne b) zur Ansteuerung.



    Diese Methode scheint mir derzeit am besten, da so die komplette Performance des Boards und des I2C-Bus besser genutzt wird.

    Hier noch das Beispielprogramm:

    Code:
    '###################################################
    'servotreibertestrns1.bas
    'für
    'RoboterNetz Standard-Roboter Board RBNFRA ab V1.1
    'Achtung, dieses Demo ist nur für Servotreiber RNS1 (siehe Download) gedacht
    '
    'Aufgabe:
    '10 Servos über CoController ansteueren
    'Für die Ansteuerung muss ein RS232 Jumper oder eine
    'Brücke gesteckt werden, siehe Tips im Roboternetz Projektforum
    'Das Demo dreht erst langsam Servo 1 von Pos 1 zu 255 und
    'danach wechselt es schnell 4 mal die Seite. Danach beginnt es von vorn
    'Natürlich kann man auch 10 Servos gleichzeitig ansteuern, der
    'Übersicht wegen hier nur das Beispiel mit einem Servo
    '
    'Autor: Frank
    'Weitere Beispiele und Beschreibung zur rnbfra
    'unter http://www.Roboternetz.de + robotikhardware.de
    '###################################################
    
    
    $regfile = "m16def.dat"
    
    
    Declare Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
    Declare Sub Rnb_servob(byval Servonummer As Byte , Byval Position As Byte)
    
    
    Dim I As Byte
    Dim Pos As Byte
    
    $crystal = 8000000                                          'Quarzfrequenz
    $baud = 9600
    
    
    Wiederhole:
    
       For I = 1 To 255
          Call Rnb_servo(1 , I)
          Waitms 50
       Next I
    
       For I = 1 To 4
          Pos = 1
          Call Rnb_servo(1 , Pos)
          Wait 2                                                'Warte 2 Sekundne
          Pos = 255
          Call Rnb_servo(1 , Pos)
          Wait 2
       Next I
    
    Goto Wiederhole
    
    
    
    
    Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
       Print "#s" ; Chr(servonummer) ; Chr(position)
    End Sub
    
    Sub Rnb_servob(byval Servonummer As Byte , Byval Position As Byte)
       Open "comd.7:9600,8,n,1" For Output As #2
       Print #2 , "#s" ; Chr(servonummer) ; Chr(position)
       Close #2
    End Sub
    End
    Der Servobaustein bzw. das Servoprogramm RNS1 kann natürlich auch mit anderen Schaltungen oder Boards (z.B. RN-Control, C-Control) genutzt werden.

    Somit haben wir erst mal eine gute Lösung gefunden!

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    24.05.2004
    Ort
    Schönaich
    Alter
    40
    Beiträge
    315
    d.h. für Laien erklärt:

    Pin D7 am Mega16 wird momentan nicht benutzt ist aber am RNB-Bus an PIN 47 rausgeführt (der als Reserve deklariert ist).
    Dieser wird dann an den Rx Eingang des CoControllers angeschlossen.

    Mit Bascom kann man jeden beliebigen Pin als Tx deklarieren, was wir mit
    Open "comd.7:9600,8,n,1" For Output As #2
    für den Mega16 tun, und so die Befehle an den CoController schicken können.

    Ist das so richtig ?
    Spinoza sagt (epist.62), daß der durch einen Stoß in die Luft fliegende Stein, wenn er Bewußtseyn hätte, meinen würde, aus seinem eigenen Willen zu fliegen. Schopenhauer

  3. #3
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1
    So ist es perfekt erklärt. Man kann so sehr einfach mehrere RS232 Schnittstellen verwenden - feine Sache in Bascom.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.05.2004
    Ort
    Detmold
    Alter
    28
    Beiträge
    557
    Kurze Frage: Muss auf dem CoController nicht noch eine passende Software drauf? Also die, die die Signale (boah, 3 mal die...) an die Servos schickt?

  5. #5
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1
    Ja! Dazu hab ich ja den Link oben gepostet.
    http://www.roboternetz.de/phpBB2/dlo...le&file_id=128

    Da ist das Programm als HEX-File mit in der ZIP-Datei. Das kann man mit Pony oder Bascom einfach auf CoController übertragen. Wer Intresse hat kann das IC auch fertig programmiert für 4 Euro über robotikhardware.de bekommen. Wird demnächst dort aufgelistet

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.05.2004
    Ort
    Detmold
    Alter
    28
    Beiträge
    557
    Und gibt es irgendwo eine Anleitung, wie man dieses Programm mit Bascom überträgt?

  7. #7
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1
    Das geht im Prinzip wie mit allen anderen Programmen auch. Wie das generell geht steht ja in der Doku zu RNBFRA oder RN-Control. Oder halt dem Bascom Buch von Kühnel.
    Im Dialog, zum Übertragen, gibt es bei Bascom auch eine Ladefunktion wo man ein HEX-File anwählen kann. Das läd man und dann überträgt man es per ISP an den Controller.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.05.2004
    Ort
    Detmold
    Alter
    28
    Beiträge
    557
    Ach so, gefunden. Danke!
    "Der Mensch wächst am Widerstand" (Werner Kieser)

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    20.03.2004
    Ort
    Oberried
    Beiträge
    10
    Gibt es das Programm für den CoController auch als Source-Code? In der Zip-Datei ist nur das Hex-Format enthalten.

    Man will ja auch was lernen und verstehen, wie das gemacht wurde.


  10. #10
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1
    Hi VictoriaOnSnow,

    leider kann ich hier Source nicht veröffentlichen. Das liegt zum einen daran das das eine Co-Produktion ist und zum anderen auch daran das ich bei diesen CoController-Programmen ein spezielles Programmgrundgerüst verwende das auch kostenpflichtigen Lizenzcode vom MCS enthält, auch wenn dieser zum Teil im letzten Treiber noch nicht zum tragen kommt.

    Aber was das lernen betrifft, so sind eigentlich alle wissenswerten Bestandteile eines solchen Programmes hier im Forum schon erläutert worden. Im Bascom Forum findest du schon Codeauszüge die sich zum ansteuern von Servos eignen. Das ist eigentlich nicht so sehr kompliziert. Den COd emuss man nur etwas ausbauen.
    Und auch die Ansteuerung über RS232 ist keine schwierige Sache mit bascom. Also Stück für Stück ran gehen.
    Bei normalen Beispielprogrammen veröffentliche ich natürlich in Zukunft weiterhin den Sourcecode, wenn es irgendwie machbar ist.

    Gruß Frank

+ Antworten
Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •