- Labornetzteil AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: Gibt's hier auch VB 5 Xor 6 user?

  1. #11
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.08.2004
    Ort
    Stuttgart
    Alter
    49
    Beiträge
    851
    Anzeige

    Powerstation Test
    Hallo K Z!

    Diese Schaltung (L297) ist die Ansteuerschaltung zur Schrittmotor-Endstufe (L29. Dieses RC-Glied ist wie du schon gemerkt hast für eine Frequenz zuständig. Das ist für die quasi-PWM-Ansteuerung. Bei der Schaltung kommt kein PWM von extern sondern der L297 erzeugt sich über Schaltschwellen ein optimales dem Motorstrom angepasstes PWM in enstprechender Pulsbreite. Dafür braucht er die beiden 0,5R-Widerstände. Das sind die Stromsensoren oder auch Shunts genannt. Den Stromsollwert stellst du über R1 (10k) ein. Das einzigste was du tun musst ist Enable (Motor wird "bestromt") auf High zu legen und dann deine Richtung vorzugeben. High ist die einer Richtung und Low die andere. Mit Clock machst du nun jeweils einen Schritt in die angegebene Richtung. Du kannst auch den Halbschritt oder Vollschrittmodus auswählen. Dazu ist der Jumper VOLL/HALB gedacht. Normal reicht es wenn du auf Fullstep gehst. Mit Halfstep hast du doppelte Schrittzahl je Umdrehung am Motor und auch damit halbe Geschwindigkeit. Wenn du einen genauen Motor brauchst schaltest du also auf Halfstep und wenn du einen schnellen Motor brauchst auf Fullstep. Ich hoffe das war verständlich geschrieben.

    Grüsse Wolfgang

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    04.12.2004
    Ort
    Prague
    Beiträge
    22
    Hallo Wolfgang!

    Danke für die Ergänzung. Irgendwie so habe ich es mir gedacht, nachdem ich all mögliche Beiträge hier im Forum gelesen habe (sicher aber nicht alle). Damit ist die PWM über Software also gegessen (Halleluja! brauche ich mich mit PWM Software nicht beschäftigen). Kannst Du mir vieleicht sagen, wie ich jetzt meinen Bipolar zur maximal 400 Schritte pro Sekunde bringe?

    Ich habe mir folgende "Routine" gedacht:
    1. ENABLE ON 'starte die Schaltung
    2. CW/CCW 'setze die Direction = entweder / oder
    3. CLOCK 'mache ich gewünschte anzahl der Schritte
    4. ENABLE OFF 'schalte die Schaltung aus

    Dazwischen gibt's natürlich ein Haufen If...Then...Else und so ein Zeug

    Ein Detail das mich bissl beunruhigt is die 3. Phase "CLOCK". Da ich wegen den maximalen 400 Schritte nicht sicher bin, ob ich es so tuen kann:

    For bla bla bla
    Pin 18 High
    Pin 18 Low
    TIMEREAD oder so ein Zeug 'warte 2,5ms
    Next until die gewünschte anzahl der Schritte eintritt
    bla bla bla

    Ist das so einfach, dass ich nur High Signal zu dem Pin sende und gleich einen Low Signal? Muss der High Signal nicht eine Weile dauern? In meinem Fall 2,5 ms (2,5=1000/400) da ich die lästigen 400 Schritte pro Sekunde brauche. Oder einfach so hinhauen High und gleich danach Low und erst dann die Wartezeit? Und wenn ich den Wave Drive benutzen will, muss ich irgendwie (aber wie???) die ungeraden Nummern betätigen (Siehe den Bild unten). Hat das was mit der Bite-länge zu tun?

    Mit freundlichen Grüssen

    KZ

    PS
    musste den Beitrag editieren, da ich ein Haufen Fehler reingetippt habe. Ich habe nähmlich festgestellt, dass mir der Verkäufer statt 10k nur 1k Widerstände verkauft hat Grrrrrr @&&#@}{}{ wo soll ich jetzt am Samstag neue kaufen?
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken anl297detail.jpg  

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    04.12.2004
    Ort
    Prague
    Beiträge
    22
    Hallo Forum,

    wie das so aussieht, so einfach ist es mit bla bla Pin High, Pin Low bla bla auch wieder nicht. Mommentan bin ich auf dem Warteinterval stehengeblieben. Da ich vor habe nur bestimmte anzahl der Schritte durchzuführen wollte ich es über For...Next machen. Da ich aber den Pin nicht lange offen haben will wollte ich TIMEREAD dazugeben, damit ich Pin High setze und dann wieder Low, dann warte ich ne Weile ca 3ms und dann wieder von vorne. Tja ich kriege es halt einfach nicht rein . Bis jetzt habe ich das so geschrieben:

    Private Sub Command1_Click()
    For i = 0 To (Text1.Text) Step 1
    Picture1.BackColor = RGB(255, 255, 255)
    Picture1.BackColor = RGB(255, 0, 0)
    TIMEINIT
    While TIMEREAD = Val(Text2.Text)
    DoEvents
    Wend
    If i = (Text1.Text) Then Exit For
    Next i
    End Sub


    Wo: Text1 ist anzahl der Schritte und Text2 soll die Wartezeit festlegen. Kann mir da vielleicht jemand weiterhelfen?

    MfG

    KZ

  4. #14
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.08.2004
    Ort
    Stuttgart
    Alter
    49
    Beiträge
    851
    Private Sub Command1_Click()
    For i = 0 To (Text1.Text) Step 1
    Picture1.BackColor = RGB(255, 255, 255)
    Picture1.BackColor = RGB(255, 0, 0) <== unsinnig, da doppelt
    TIMEINIT
    While TIMEREAD = Val(Text2.Text) <== ">=" verwenden!
    DoEvents
    <== hier passiert kein Output!!!
    Wend
    If i = (Text1.Text) Then Exit For <== ebenfalls ">=" verwenden!
    Anstatt Exit For auch evtl Exit Sub?
    Next i
    End Sub

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    04.12.2004
    Ort
    Prague
    Beiträge
    22
    Hallo BlueNature!

    Danke für die Hilfe.

    Zitat Zitat von BlueNature
    Private Sub Command1_Click()
    For i = 0 To (Text1.Text) Step 1
    Picture1.BackColor = RGB(255, 255, 255)
    Picture1.BackColor = RGB(255, 0, 0) <== unsinnig, da doppelt
    TIMEINIT
    While TIMEREAD = Val(Text2.Text) <== ">=" verwenden!
    DoEvents
    <== hier passiert kein Output!!!
    Wend
    If i = (Text1.Text) Then Exit For <== ebenfalls ">=" verwenden!
    Anstatt Exit For auch evtl Exit Sub?
    Next i
    End Sub
    Die Farben habe ich anstatt dem DTR Zustand genommen. Vorerst aufm Trockenen schwimmen lernen . Deswegen sind die Farben zwei - einmal für DTR 0 und einmal DTR 1.
    Zu der Angelegenheit ">=" man lernt immer.
    Und was DoEvents betrifft, was für ein Output? Ich dachte, das ich damit halt die Verzögerung "reinkriege". Nachedem sich die Farben gewechselt haben, wird bestimmte Zeit verlaufen und dann geht es wieder los .... oder nicht?
    Exit Sub und CloseComm habe ich mit dem Command2 gelöst. Ich habe es nicht mitkopiert.

    MfG

    KZ

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    04.12.2004
    Ort
    Prague
    Beiträge
    22
    Tja, ich glaube, ich habe es. Nur meine Hoffnung, dass die Intervalle gleichmässig werden wenn ich DELAY und Timer1.Interval vermeide, ist geplatzt. Diese REALTIME Angelegenheit unter Win ist halt Pech.

    Hier ist mal die Routine:

    Private Sub Command1_Click()
    For i = 1 To Val(Text1.Text) Step 1
    DTR 1
    TIMEINIT
    While TIMEREAD() < Val(Text2.Text)
    DoEvents
    DTR 0
    Wend
    If i >= Val(Text1.Text) Then Exit For
    Next i
    End Sub
    Ja und doch noch eine Sache. Wenn jemand einen Tip haben würde, wie ich die Routine auch während der Ausführung stoppen könnte, wäre das hilfreich. Mommentan muss ich halt warten, bis die eingestellten Zeiten abgelaufen sind.

    MfG

    KZ

  7. #17
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.08.2004
    Ort
    Stuttgart
    Alter
    49
    Beiträge
    851
    Hallo K Z!

    Du kanst dir mehr von der Zeischeibe deines Windows krallen mit einer API. Dann geht alles auf Prio 1, deine Maus läuft nicht mehr und alles geht sehr schnell in deinem Programm. Ist aber sicher nicht die feine Art.

    Ich weis eigentlich nicht warum du deine Zeitintervalle in einer anderen Sub machst. Ich würde an deiner Stelle die Impulse im Haupt-Sub erzeugen. Da mit Zeitschelifen arbeiten die mit DoEvent bestücken und dann deine anderen Aktionen die du überwacht haben willst wie z.B. Tastatur, Objekte zum klicken etc. mit DoEvents ausführen lassen das die nicht blocken zur Laufzeit deiner Haupt-Sub.

    Zudem würde ich an dener Stelle ein Ist-Wert und einen Soll-Wert anlegen als Variable und diese vergleichen. Wenn ein Impuls rausgeht für Increment je nach Richtungsanwahl deinen Ist-Wert incrementieren oder decrementieren. Dann eine Schleife für die Zeitkonstante und die Impulse und das auf Soll / Ist auswerten. Dann kanst du per Soll-Wert eine Position anfahren und dein Ist-Wert läuft synchron mit bis die Soll-Position erreicht ist.

    Grüsse Wolfgang

  8. #18
    Gast
    Hallo Wolfgang!

    Danke für Deine Hilfe.

    Diese Soll - Ist Angelegenheit habe ich mir auch schon überlegt. Ich wollte es mit Start, Finish, TotalTime abwickeln (siehe Code).

    Code:
    Private Sub Command1_Click()
    Start = Timer
    'a-----------------------------------------
        TIMEINIT
        While TIMEREAD() < Val(Text2.Text) / 10
            DoEvents
                'DTR 0
                Picture1.BackColor = RGB(255, 255, 255)
        Wend
    'b-----------------------------------------
            TIMEINIT
            While TIMEREAD() < Val(Text2.Text) / 10
                DoEvents
                    'DTR 1
                    Picture1.BackColor = RGB(255, 0, 0)
            Wend
    'c-----------------------------------------
            TIMEINIT
            While TIMEREAD() < Val(Text2.Text) / 10
                DoEvents
                    ' If CHKBOX1.true Then
                    '    RTS 0
                    ' Else
                    '    RTS 1
                    ' End If
                    Picture1.BackColor = RGB(0, 0, 255)
            Wend
    'd-----------------------------------------
        For i = 1 To Val(Text1.Text) Step 1
            TIMEINIT
            While TIMEREAD() < 2
                DoEvents
                    'TXD 1
                    Picture1.BackColor = RGB(0, 100, 100)
            Wend
            TIMEINIT
            While TIMEREAD() < 5
                DoEvents
                    'TXD 0
                    Picture1.BackColor = RGB(100, 100, 100)
            Wend
        If i >= Val(Text1.Text) Then Exit For
        Next i
    'e----------------------------------------
            TIMEINIT
            While TIMEREAD() < Val(Text2.Text) / 10
                DoEvents
                    'DTR 0
                    Picture1.BackColor = RGB(255, 255, 0)
            Wend
    'f-----------------------------------------
    Finish = Timer
    TotalTime = Finish - Start
            TIMEINIT
            While TIMEREAD() < Val(Text2.Text) - TotalTime
                DoEvents
                    'DTR 0
                    Picture1.BackColor = RGB(0, 0, 0)
            Wend
    Print "TotalTime"; TotalTime
    End Sub
    Tja, das was Du weiter geschrieben hast, verstehe ich aber nicht so ganz:
    Ich weis eigentlich nicht warum du deine Zeitintervalle in einer anderen Sub machst. Ich würde an deiner Stelle die Impulse im Haupt-Sub erzeugen. Da mit Zeitschelifen arbeiten die mit DoEvent bestücken und dann deine anderen Aktionen die du überwacht haben willst wie z.B. Tastatur, Objekte zum klicken etc. mit DoEvents ausführen lassen das die nicht blocken zur Laufzeit deiner Haupt-Sub.
    Soll das heissen, ich soll das nicht unter Command abwickeln, sonder unter Form?
    Und das mit DoEvents geht leider bei mir total daneben.

    MfG

    KZ

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    04.12.2004
    Ort
    Prague
    Beiträge
    22
    Ups, I did it again...

    war nicht eingeloggt, sorry

    KZ

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad