- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 22

Thema: Pan & Tilt Videoschiene. Mein erstes Projekt. Wie fange ich an?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    26.12.2013
    Beiträge
    38
    Danke für deinen tollen Bereicht/Anleitung.
    Ich hätte vielleicht erwähnen sollen, das ich schon Hardware habe.

    Roboternetz RNFRA-Board mit Mega32 Bausatz
    RN-Stepp297 Schrittmotoransteuerung

    Programieren wollte ich mit BASECOM, erst mal die gratis Variante, wenn alles klappen sollte, die Pro Version. 2Kb Code ist nicht so riesig viel.

    Dann werde ich mir jetzt erst mal eine grobe Übersicht aufschreiben, und die ganzen Ports ect von dem Board raus suchen.

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    26.12.2013
    Beiträge
    38
    Irgendwie fehlt mir der Faden.
    Ich möchte nun mit dem ersten Schritt beginnen.
    Mir fehlen aber Programmschnipsel und Beispiele, wie ich das machen kann.

    Ich möchte auf dem Roboternetz RNFRA-Board mit Mega32 die beiden Schrittmotoren, Analog über einen Joystick "2 Achsen über 10kOhm Poti" in der Geschwindigkeit und Richtung steuern.
    Wenn ich jetzt davon ausgehe, das das Joypad in Mittelstellung ca. 2,5 Volt hat, möchte ich gern das als Nullpunkt haben.
    Nun rechne ich die Werte A/D um.

    Volt=Bit
    0=0
    0,5=113
    1,0=226
    1,5=339
    2,5=452
    3,0=565
    3,5=678
    4,0=791
    4,5=904
    5,0=1017

    Ich möchte also zwischen ca. Bit 340-560 Null Impulse auf den Schrittmotor
    Rechtslauf:
    Bit=Impulse/Sek
    1=1000
    2=998
    3=996
    ..
    339=1
    340-560= Stop
    Linkslauf
    561=1
    ....
    1023=1000

    Ich hoffe das ist verständlich. Wie kann ich das umsetzten?
    Ich habe jetzt schon über 10h das Forum hier durchsucht, aber nichts in der Art gefunden.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    16.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    Da würde ich mit einer if-Verzweigung rangehen.
    Kannst sie ja mit elseif aufteilen, dann die Bereiche ADC-Wert<340, ADC-Wert>560 und alles andere (also der Bereich dazwischen)
    Die Umwandlung von ADC-Wert in Pulsfrequenz in eine Formel verpacken und in den Teilen, wo der Motor laufen soll, jeweils ein anderes Richtungs-Bit setzen. Die Formeln kannst dir selber aufstellen, wahrscheinlich soll die Frequenz von 1 linear ansteigen, je weiter der ADC-Wert vom Mittelbereich abweicht. Also wirds dann irgendwas sein in der Form Pulsfrequenz=1018-3*ADC_Wert (würde in diesem Fall an den beiden Enden die Frequenzen 1018 und 1 ergeben). Im anderen Bereich dann sowas wie Pulsfrequenz=1018-3*(1023-ADC-Wert) oder so. Wie gesgt, ist eher als Skizze zu verstehen und müsste noch überprüft werden. Wär wahrscheinlich sinnvoll, den mittleren Bereich symmetrisch zu machen, so wie es jetzt ist hast du auf einer seite 23 Werte mehr als auf der anderen (so ein ADC-Wert kann Werte bis 1023 annehmen, eben volle 10 Bit). Um die Formeln in Bascom zu realisieren musst du wahrscheinlich ein paar Hilfsvariablen einführen, da du immer nur eine Rechenoperation pro Zeile ausführen kannst. Würde dann so aussehen:
    Code:
    Dim ADC_Wert as Integer
    Dim Pulsfrequenz as Integer
    Dim Temp as Integer
    
    Temp = 3*ADC_Wert
    Pulsfrequenz = 1018-Temp
    Ist jetzt auch nur ein Codeschnipsel als Beispiel, hoffe es hilft dir.
    AI - Artificial Idiocy

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    26.12.2013
    Beiträge
    38
    Danke. Ja den Grundgedanken habe ich verstanden, die Werte die ich erhalten mit if und elseif .. zu filtern.
    Mir fehlt gerade der komplette Einstieg in das Ganze.
    Wie frage ich die Eingänge ab? Ich nutze die Eingänge 1/2 und sind nach Standard 7E/7F gejumpert.
    Ich sollte vielleicht erst mal anfangen, einfach nur einen Taster zu nehmen, der bei "1" den Motor mit Takt xy laufen lässt und mit "0" wieder stoppt.
    Mir fehlen irgendwie Quellcodes die ich zum verstehen und begreifen an das RNFRA-Board anwenden kann.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    16.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    Mit dem Board kenn ich mich leider auch nicht aus, aber mit ATmega32 und Bascom hab ich schon ein bisschen was gemacht. Eingänge abfragen geht eigentlich recht einfach:
    Erstmal den entsprechenden Pin als Eingang definieren mit beispielsweise
    Config PinA.0=Input
    und zum Abfragen einfach den Bezeichner wie eine Variable verwenden.
    Die digitalen Eingänge können dabei aber eben nur 0 oder 1 annehmen.
    Zum Abfragen eines Tasters wäre zB. so ein Konstrukt möglich:
    Code:
    if PinA.0=0 then
       <Anweisungen für gedrückten Taster>
    else
       <Anweisungen für Loslassen des Tasters>
    end if
    Wobei da die jeweilige Aktion immer auslöst, wenn die Hauptschleife ausgeführt wird. Besser ist es da, noch eine Variable für den Tasterstatus zu definieren, zB. so:

    Code:
    Dim status as boolean
    status=0      '0=nicht gedrückt, 1=gedrückt
    
    if PinA.0=0 and status=0 then
       <Anweisungen für gedrückten Taster>
       status=1
    elseif PinA.0=1 and status=1 then
       <Anweisungen für Loslassen des Tasters>
       status=0
    end if
    Somit geht das Ganze beim Drücken nur einmal in den oberen Teil und beim Loslassen einmal in den unteren Teil. In den Malen dazwischen geht das Programm zwar auch in die Verzweigung, allerdings sind dann beide Bedingungen nicht erfüllt, wodurch dann eben gar nix passiert. Das Else kann in dem Fall einfach weggelassen werden. Sowas ist dann wichtig, wenn bei einem Tastendruck eine Variable nur einmal hochgezählt werden soll und nicht konstant hochzählt solange man drückt (da kann in wenigen ms schon einiges zusammenkommen). Braucht man häufiger mal sowas. Oder einfach, um einen Ausgang umzuschalten. Würde man das nicht so machen, würde der Ausgang dauernd umschalten und welchen Zustand der Ausgang beim Loslassen dann hat ist eher zufällig.

    Ansonsten würde ich mich an deiner Stelle mal ein bisschen nach Grundkursen für Bascom umsehen. Ist an sich kein großes Hexenwerk, wenn man erstmal ein bisschen drin ist. Ich kann das hier empfehlen:
    http://halvar.at/elektronik/kleiner_bascom_avr_kurs/
    AI - Artificial Idiocy

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    26.12.2013
    Beiträge
    38

    Unglücklich

    Nun wollte ich gerade ein Testprogramm übertragen und bekomme immer die Fehlermeldung:
    Detected Micro ATMEGA32 does not match the selected Micro AT90CAN32

    Was habe ich denn jetzt schon wieder kaputt gemacht. ?

    EDIT: Sorry, habs gefunden, habe den Falschen Chip ausgewählt.

    - - - Aktualisiert - - -

    Ok, danke schön. Dann werde ich mal damit die Nacht verbringen.
    Vielleicht habe ich ja morgen schon, mein erstes Programm. ( Motor An / Motor Aus)

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    26.12.2013
    Beiträge
    38
    So, nun bin ich ne ecke schlauer geworden.
    Habe über den Joystick die Richtung des Schrittmotors ändern können und einen 2 Stufen Filter gebaut.

    Joystick in Mittelstellung: Stop
    Stufe 1 vorwärts : linkslauf
    Stufe 2 vorwärts: Stop
    Stufe 1 rückwärts: rechtslauf
    Stufe 2 rückwärts: Stop

    Das Funktioniert auch soweit, jetzt weis ich nur nicht, wie ich da noch einen Tacktgeber/Timer rein bekomme.
    Der Timer ist schon drinn, aber kann ich den Timer verändern mit meinem ADC oder muss ich mehrer Timer nehmen?


    Code:
    '###################################################
    'Testprogramm
    'für
    'RoboterNetz Standard-Roboter Board RBNFRA 1.2
    '
    'Aufgabe:
    '###################################################
    Const Writepowerport_adr = &H72                             'I2C Adr PCF 2
    Const Readpowerport_adr = &H73                              'I2C Adr PCF 2
    Const Writeeingabeport_adr = &H7E
    Const Readeingabeport_adr = &H7F
    Dim I2cdaten As Byte                                        'Datenbyte aus PCF8574
    Dim I As Word
    $crystal = 8000000                                          'Quarzfrequenz
    Config Scl = Portc.0                                        'Ports fuer IIC-Bus
    Config Sda = Portc.1
    I2cinit
    I2cstart
    I2cwbyte &H74                                               'Schreibbefehl an PCF3 schicken
    I2cwbyte &B00000010                                         'Datenbyte an PCF3
    I2cstop
    '*********
    Config Pind.6 = Output                                      'Schrittmotoren Ein/Aus
    Config Pinc.5 = Output                                      'Schrittmotor Links Richtung
    Config Pinc.3 = Output                                      'Schrittmotor Links Step
    Config Pinc.4 = Output                                      'Schrittmotor Rechts Richtung
    Config Pinc.2 = Output                                      'Schrittmotor Rechts Step
    
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    'Config Adc.1 = Single , Prescaler = Auto , Reference = Internal
    Start Adc
    Dim W1 As Word , Channel As Byte
    
    'Ocr1a = 10000
    'Config Timer1 = Timer , Prescale = 64 , Clear Timer = 1 , Compare A = Disconnect
    'On Oc1a Timer1serv
    'Enable Oc1a
    'Enable Interrupts
    Do
    
    '############ Linker Schrittmotor
    
    W1 = Getadc(2)
      Print "Channel 0 " ; " value " ; W1
      'Incr Channel
    
       If W1 = 0 Then
         Portd.6 = 1                                            'Schritmotor Ein
       End If
        If W1 => 1 Then
         Portd.6 = 0                                            'Schrittmotor aus
    
       End If
    
    
    
       W1 = Getadc(1)
      Print "Channel 0 " ; " value " ; W1
      'Incr Channel
       If W1 =< 1 Or W1 => 100 Then                             'schnell
         Portc.5 = 0                                            'Rechtslauf
         Portc.3 = 0
    
       End If
       If W1 =< 101 Or W1 => 480 Then                           'langsam
         Portc.5 = 0                                            'Rechtslauf
         Portc.3 = 1
    
       End If
    
    
      If W1 => 481 Or W1 =< 539 Then                            'Stop
         Portc.3 = 0
         Else
         End If
    
    
       If W1 =< 540 Or W1 => 950 Then                           'langsam
         Portc.5 = 1                                            'linkslauf
         Portc.3 = 1
    
    
        End If
      If W1 =< 951 Or W1 => 1022 Then                           'schnell
         Portc.5 = 1                                            'linkslauf
         Portc.3 = 0
    
       End If
    
     Loop
    End
    'Timer1serv:
    'Statt Eine Led Zum Blinken Zu Bringen Kann Hier
    'Regelmässig Etwas Wichtiges Getan Werden
    'Toggle Portc.3
    
    
    
       'Return

Ähnliche Themen

  1. Pan Tilt Head
    Von SmokeT im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 8
    Letzter Beitrag: 23.05.2014, 23:30
  2. Verkaufe Pan & Tilt - Kopf mit Servos
    Von kellerkind im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 1
    Letzter Beitrag: 14.11.2013, 19:04
  3. Verkaufe Räumung:US-Sensor, IR-Sensor,Displays,MTreiber,Servorboard, Pan&Tilt Köpfe
    Von kellerkind im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 3
    Letzter Beitrag: 18.06.2012, 18:42
  4. Projekt - wie fange ich am besten an :)
    Von Tobias Vonau im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 8
    Letzter Beitrag: 05.03.2012, 18:55
  5. Wie erstelle ich mein erstes Programm?
    Von Fabian1992 im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 08.03.2009, 16:35

Berechtigungen

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

12V Akku bauen