- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Mehrere Servos parallel steuern ATMega8

  1. #11
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.687
    Anzeige

    E-Bike
    ... 2 Servos, die per Tastendruck ... von einem Anschlag zum anderen Anschlag ... beim 2ten Tastendruck dann wieder zurück ...
    Die Aufgabe ist eher so als Standard zu sehen, nicht wirklich sehr anspruchsvoll, also gerade richtig für den Einstieg.

    ... habe ich wohl einen zu hohen Stromfluss für das kleine Board erzeug ... Controller ... oder er sogar ganz abgestürzt ist ...
    Ein typischer Anfängerfehler ist es Servos mit der gleichen Stromquelle (genauer: dem gleichen Spannungsregler) zu versorgen wie den Controller. So ungefähr alle ein bis zwei Monate gibts dazu hier im Forum ähnliche Störungsmeldungen. Du wirst weiter Störungen haben, möglicherweise mit den kleineren Servos genauso (ausser Du prüfst wirklich deren Stromhunger, die Hersteller machen dazu äusserst selten Angaben !!) wenn nicht noch schlimmer.

    .... Auf dem Board sitzt ja ein Festspannungsregler, und der darf nicht zu warm werden, um korrekt zu funktionieren ...
    Du hast also an Board eine Energieversorgung die höher ist als die fünf (oder wieviel Volt) die Dein Controllerboard braucht. Wie hoch ist denn Deine Bordspannung - ohne Spannungsregler ???

    Fazit:
    a) für die Servos nen separaten Spannungswandler oder direkt von der Bordbatterie/-akku.
    b) UN BE DINGT die GND-Leitungen der Controllerplatine und der Servo-Versorgung miteinander verbinden (klick hier).
    c) Wenn Störungen anhalten, für die Servos ne separaten Akku nehmen und b) beachten.
    Ciao sagt der JoeamBerg

  2. #12
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    45
    Beiträge
    1.369
    Ich denke auch die Aufgabenstellung ist genau das richtige für den Einstieg - wenn auch schon etwas schwieriger, Bascom kann das auf jeden Fall umsetzen.

    Überlege doch nochmal ob du wirklich zweimal PWM Ausgänge für zwei Servos benötigst die vermutlich das gleiche tun sollen.
    Und ob nicht auch ein Taster ausreicht um dieses öffnen und schliessen zu erreichen.
    Also ich möchte Dir nicht deine Aufgabe kaputt reden, aber einfacher wäre es ja schon.

    Für die Beleuchtung wäre möglicherweise eine Tastfunktion für dich interessant.

    Viele Grüße Jörg
    Geändert von HeXPloreR (06.10.2014 um 16:14 Uhr)

  3. #13
    Ein ganz liebes "HALLO" an euch beide.

    @ oberallgeier:
    Korrekt. Die Spannungsversorgung erfolgt über ein 12V Netzteil mit 500mA Ausgangsstrom. Eigentlich ausreichend. Dennoch habe ich die 19g-Servos nun gegen 12g-Servos getauscht und der Stromhunger ist genau in dem Rahmen, in dem ich ihn haben will.
    Die GND-Leitungen von EVA-Board und Servos würde ich eh miteinander verbinden. Die Rechtecksignale kann der Controller schließlich nur im geschlossenen Stromkreis erkennen ^^.
    Danke dir trotzdem recht herzlich für den Tipp.


    @ Jörg:
    Habe das Programm nun zumindest einmal soweit, dass beide Servos problemlos dahin fahren, wohin ich sie haben möchte. Ganz unkonventionell und ohne großen Schnickschnack drum herum. Ging doch mit dem Servo-Konfigurationsbefehl, aber ohne Main-Sub. *freu*


    Hier das File:

    Code:
    $regfile = "m8def.dat"
    $crystal = 3686411
    
    
    Config Portb = Output
    Config Portc = Input
    
    Portb = &H03
    
    Taster1 Alias Pinc.0
    Taster2 Alias Pinc.1
    
    
    
    '*** Konfiguriere Servos ***
    
    Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10
    Enable Interrupts
    
    
    '*** Setze Servos für Startup auf Mittelstellung ***
    Dim Pos1 As Byte
    Pos1 = 124       ' 124 = Mittelstellung, 48 = rechter Anschlag, 210 = linker Anschlag, Servo 1
    Servo(1) = Pos1
    Dim Pos2 As Byte
    Pos2 = 130       ' 130 = Mittelstellung, 48 = rechter Anschlag, 215 = linker Anschlag, Servo 2
    Servo(2) = Pos2
    
    
    '*** Konfiguriere Variablen ***
    
    Dim M1 As Byte
    Dim M2 As Byte
    M1 = 0
    M2 = 0
    
    
    
    '  *****************************
    '    ***** Hauptprogramm *****
    '  *****************************
    
    Do
    
    Debounce Taster1 , 0 , Sub_taster1 , Sub
    Debounce Taster2 , 0 , Sub_taster2 , Sub
    
    
    Loop
    
    
    
    ' **********************
    '   * Unterprogramme *
    ' **********************
    
    'Wenn Taster 1 gedrückt, zählt Merker1 um Wert 1 hoch. Mit jedem neuen Wert von M1 erfolgt eine neue Positionsausgabe per PWM an Servo1.
    
    Sub_taster1:
    
       If Taster1 = 0 Then
          M1 = M1 + 1
       Waitms 20
       End If
       If M1 = 1 Then
          Pos1 = 48
       Elseif M1 = 2 Then
          Pos1 = 210
       End If
       If M1 = 2 Then       'Wenn M1 den Wert 2 erreicht, wird M1 auf Null zurück gesetzt
          M1 = 0
       End If
       Servo(1) = Pos1
    
    Return
    
    
    'Wenn Taster 2 gedrückt wird, zählt Merker2 um Wert 1 hoch. Mit jedem neuen Wert von M1 erfolgt neue Positionsausgabe an Servo2.
    
    Sub_taster2:
    
       If Taster2 = 0 Then
          M2 = M2 + 1
       Waitms 20
       End If
       If M2 = 1 Then
          Pos2 = 48
       Elseif M2 = 2 Then
          Pos2 = 215
       End If
       If M2 = 2 Then       ' Wenn M2 den Wert 2 erreicht, wird M2 auf Null zurück gesetzt
          M2 = 0
       End If
       Servo(2) = Pos2
    
    Return
    
    End
    Ich kann damit sogar beide Taster gleichzeitig drücken und der Controller gibt sofort das entsprechende PWM-Signal an den Ports aus.

    Morgen Abend werde ich dann mal versuchen, ob ich die Eingabe durch den Servotester (PulseIn) implementiert bekomme. Irgendwie muss das doch funktionieren - vielleicht diesmal ^^.

    Auf deine Frage bezogen:
    Nein, auch wenn es noch 2 Monate dauert - das muss ich hinbekommen. Und wenn nicht, dann muss ich umso mehr dafür büffeln. N bissl Platz ist in meinem Hirn dafür noch frei ^^.
    Die Klappen, die im Boot verbaut sind, sollen definitiv getrennt zu öffnen sein. Finde das einfach schicker. Man soll ja auch sehen, dass ich mir echt Gedanken für die Steuerung gemacht habe - und meine Frau freut sich sicher auch über ausgereiftere Konzepte als halbherzige Notlösungen (z.B. weil ich nicht weiter gekommen bin).

    Die Beleuchtung soll NICHT nur per Tastkanal zu schalten, sondern dauerhaft eingeschaltet sein wenn der entsprechende Schalter an der Fernsteuerung umgelegt wird. Und da habe ich dann einen 3-Stufen-Schalter, welcher dafür genutzt werden soll: Stufe unten - Licht aus, Stufe Mitte - Licht ein, Stufe oben - Licht und Zusatzscheinwerfer.


    MFG - Maik

  4. #14
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    45
    Beiträge
    1.369
    Ja, na endlich hat er es gesagt: Zwei Taster, zwei Klappen - jeweils ein Taster pro Klappe. Nicht das das wichtig wäre um ein Programm zu beurteilen

    ...interessanter Verlauf ....was ich nicht verstehe ist warum du Deine Hardware ständig änderst? Konkret die Frage: Hast du nun einen 8Mhz oder einen 3686411 Crystal, intern oder extern ?

    Ich hätte auch vermutet das wenn ein Taster auf 0 (GND) im Debounce eingestellt wird, nicht nochmal im Unterprogramm geprüft werden muss ob der 0 ist - weil sonst hätte man ja in dem Unterprogramm nichts verloren, oder? Der Merker wäre so oder so okay. Naja, wenn es nicht stört und funktioniert.

    Wäre es nicht auch möglich jeweils die letzte if m(x) abfrage in die da vor zu packen weil du löscht den Merker ja sowieso danach, dann kannst Du ihn auch gleich noch mit auf 0 setzen.

    Mir wäre es ja auch lieb gewwesen wenn du gleich gesagt hättest das Du für die Beleuchtung extra Schalt-Kanäle an der Funke hast. Aber sowas passiert jedem Mal

    Viele Grüße
    Jörg
    Geändert von HeXPloreR (07.10.2014 um 17:22 Uhr)

  5. #15
    Hallo Jörg

    ...und vielen lieben Dank für Antwort und Verständnis.

    Ja, korrekt. 2 Klappen, 2 Servos. Die letzte "If" kann ich jedoch nicht heraus nehmen - habe ich schon mehrfach probiert. Wenn ich diese voran setze, dann wird der Merker zeitgleich auf Null gesetzt und das Servo bleibt in der Position des davor stehenden Punktes (Anlaufpunkt nach ersten Tasten) stehen, da der Frequenzwechsel weitaus schneller von statten geht, als das Servo anlaufen kann (zu träge halt).
    So funktioniert es prima und bleibt es nun auch.

    Habe heute zudem die anderen Befehle für die PWM-Kanalabfrage und das Setzen von 3 zusätzlichen Ausgängen in das Programm implementiert.
    Es funktionierte prima, bis zu dem Punkt, an dem ein Ausgang durch 2 Bedingungen gesetzt wird:

    1.) Durch das Erfassen eines PWM-Eingangssignals und entsprechend festgelegter Schaltroutine

    2.) Durch einen Taster per Debounce-Befehl.

    Das Problem war, dass der Debounce den Ausgang setzte, dieser jedoch durch den PWM-Input (bei PWM 1ms, also im Grunde "aus") nach 1-2 Sekunden wieder ausgeschaltet wurde.
    Und das Problem kannte ich (nach ein wenig Ausprobieren) noch aus meiner Zeit als Lehrling, wo ich mit SPS-Steuerungen zu tun hatte: Signalüberschneidung am Ausgang.

    Also habe ich für beide Bedingungen statt des direkten Ausgangs einen Merker als Schaltkontakt gesetzt und später in der Hauptschleife als IF-(OR)-Then Bedingung definiert.


    Hier das File - ist allerdings nicht ganz so gut beschrieben.

    Code:
    $regfile = "m8def.dat"
    $crystal = 3686411
    
    
    Config Portb = Output
    Config Portc = Input
    Config Portd = Input
    
    
    '*** Konfiguriere Inputs ***
    
    Taster1 Alias Pinc.0
    Taster2 Alias Pinc.1
    Taster3 Alias Pinc.2
    Taster4 Alias Pinc.3
    
    
    
    ' *** Konfiguriere Outputs ***
    
    Pumpe Alias Portb.0
    Beleuchtung Alias Portb.1
    Scheinwerfer Alias Portb.2
    
    Pumpe = 1
    Beleuchtung = 1
    Scheinwerfer = 1
    
    
    '*** Konfiguriere Servos ***
    
    Config Servos = 2 , Servo1 = Portb.3 , Servo2 = Portb.4 , Reload = 10
    Enable Interrupts
    
    
    '*** Setze Servos für Startup auf Mittelstellung ***
    Dim Pos1 As Byte
    Pos1 = 124       ' 124 = Mittelstellung, 48 = rechter Anschlag, 210 = linker Anschlag, Servo 1
    Servo(1) = Pos1
    Dim Pos2 As Byte
    Pos2 = 130       ' 130 = Mittelstellung, 48 = rechter Anschlag, 215 = linker Anschlag, Servo 2
    Servo(2) = Pos2
    
    
    '*** Konfiguriere Variablen ***
    
    Dim Kanal5 As Byte
    Dim Kanal6 As Byte
    Dim M1 As Byte
    Dim M2 As Byte
    Dim M3 As Byte
    Dim M4 As Byte
    Dim Mbel1 As Bit
    Dim Mbel2 As Bit
    Dim Mschein1 As Bit
    Dim Mschein2 As Bit
    Dim Mpmp1 As Bit
    Dim Mpmp2 As Bit
    M1 = 0
    M2 = 0
    M3 = 0
    M4 = 0
    Mbel2 = 0
    Mschein2 = 0
    Mpmp2 = 0
    
    
    
    '  *****************************
    '    ***** Hauptprogramm *****
    '  *****************************
    
    Do
    
    
    Pulsein Kanal5 , Pind , 2 , 1
    Pulsein Kanal6 , Pind , 3 , 1
    
    
       If Kanal5 > 10 Then
          If Kanal5 >= 60 Then
             Mpmp1 = 1
          Else
             Mpmp1 = 0
          End If
          End If
    
       If Kanal6 > 10 Then
          If Kanal6 >= 50 Then
             Mbel1 = 1
          Else
             Mbel1 = 0
          End If
          If Kanal6 >= 70 Then
             Mschein1 = 1
          Else
             Mschein1 = 0
          End If
          End If
    
    
    
    Debounce Taster1 , 0 , Sub_taster1 , Sub
    Debounce Taster2 , 0 , Sub_taster2 , Sub
    Debounce Taster3 , 0 , Sub_taster3 , Sub
    Debounce Taster4 , 0 , Sub_taster4 , Sub
    
    
       If Mpmp1 = 1 Or Mpmp2 = 1 Then
          Pumpe = 0
       Else
          Pumpe = 1
       End If
    
    
       If Mbel1 = 1 Or Mbel2 = 1 Then
          Beleuchtung = 0
       Else
          Beleuchtung = 1
       End If
    
       If Mschein1 = 1 Or Mschein2 = 1 Then
          Scheinwerfer = 0
       Else
          Scheinwerfer = 1
       End If
    
    
    Loop
    
    
    
    ' *************************
    '   *** Unterprogramme ***
    ' *************************
    
    
    '  Klappensteuerung
    ' ******************
    
    Sub_taster1:
    
       If Taster1 = 0 Then
          M1 = M1 + 1       'Wenn Taster 1 gedrückt, zählt Merker1 um Wert 1 hoch. Mit jedem neuen Wert von M1 erfolgt eine neue Positionsausgabe per PWM an Servo1.
       Waitms 20
       End If
    
       If M1 = 1 Then
          Pos1 = 48
       Elseif M1 = 2 Then
          Pos1 = 210
       End If
       If M1 = 2 Then       'Wenn M1 den Wert 2 erreicht, wird M1 auf Null zurück gesetzt
          M1 = 0
       End If
       Servo(1) = Pos1
    
    Return
    
    
    'Wenn Taster 2 gedrückt wird, zählt Merker2 um Wert 1 hoch. Mit jedem neuen Wert von M1 erfolgt neue Positionsausgabe an Servo2.
    
    Sub_taster2:
    
       If Taster2 = 0 Then
          M2 = M2 + 1
       Waitms 20
       End If
    
       If M2 = 1 Then
          Pos2 = 48
       Elseif M2 = 2 Then
          Pos2 = 210
       End If
       If M2 = 2 Then       ' Wenn M2 den Wert 2 erreicht, wird M2 auf Null zurück gesetzt
          M2 = 0
       End If
       Servo(2) = Pos2
    
    Return
    
    
    
    
    ' Handbedienung Beleuchtung
    ' *************************
    
    Sub_taster3:
    
       If Taster3 = 0 And Mbel1 = 0 Then
          M3 = M3 + 1
       End If
    
       If M3 = 1 Then
          Mbel2 = 1
       Elseif M3 = 2 Then
          Mschein2 = 1
       End If
       If M3 = 3 Then
          Mbel2 = 0
          Mschein2 = 0
          M3 = 0
       End If
    
    Return
    
    
    
    ' Handbedienung Pumpe
    ' *******************
    
    Sub_taster4:
    
          If Taster4 = 0 And Mpmp1 = 0 Then
             M4 = M4 + 1
          End If
    
          If M4 = 1 Then
             Mpmp2 = 1
          End If
          If M4 = 2 Then
             Mpmp2 = 0
             M4 = 0
          End If
    
    Return
    
    End
    Mbel1 und Mbel2 stehen für die Merker des Ausgangs "Beleuchtung".
    Mschein1 und Mschein2 sind die Ausgangsmerker für den Scheinwerfer und
    Mpmp1 und Mpmp2 stehen für die Ausgangsmerker der Pumpe.


    Die Frequenz habe ich nun intern auf 3,2MHz festgelegt, weil so die Servos etwas besser arbeiten.

    Ich bin gespannt, ob das Programm auch in meinem Boot so gut funktioniert wie auf meinem STK-500 ^^.



    MFG - Maik

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Mehrere RC Signale einlesen und mehrere Servos ausgeben
    Von R2D2 Bastler im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 74
    Letzter Beitrag: 10.01.2022, 09:35
  2. Mehrere ATMEL parallel programmieren
    Von Realisator im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 09.05.2009, 17:54
  3. mehrere Ausgänge parallel regeln?
    Von marius86 im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 5
    Letzter Beitrag: 20.07.2008, 22:23
  4. Mehrere RS232 Rx/Tx parallel?
    Von Jaecko im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 24.03.2007, 10:24
  5. [ERLEDIGT] Mehrere LED´s Parallel geschaltet
    Von Gast A.M. im Forum Sensoren / Sensorik
    Antworten: 25
    Letzter Beitrag: 05.06.2005, 12:37

Berechtigungen

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

12V Akku bauen