- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 9 von 9

Thema: Motorgeschwindigkeit mit 2 Taster ändern

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    18.12.2006
    Ort
    Oderberg
    Alter
    32
    Beiträge
    870

    Motorgeschwindigkeit mit 2 Taster ändern

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi,
    ich möchte mit 2 Taster die Geschwindigkeit von 2 Motoren (die an einemL298 hängen) verändern. Also beim 1 Taster schneller bis zum Maximum und beim anderen halt langsamer bis zum stillstand.
    Irgendwie klappt das nicht und ich finde keinen Fehler, wäre schön wenn mir jemand helfen könnte
    Code:
    $regfile = "m16def.dat"
    $crystal = 16000000
    $baud = 9600
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 64
    Config Pina.0 = Output                                      'Input 1
    Config Pina.1 = Output                                      'Input 2
    Config Pina.2 = Output                                      'Input 3
    Config Pina.3 = Output                                      'Input 4
    Config Pind.4 = Output
    Config Pind.5 = Output
    Config Pind.6 = Input
    Portd.6 = 1
    Config Pind.7 = Input
    Portd.7 = 1
    Compare1a = 5
    Compare1b = 5
    Do
    Porta.0 = 1
    Porta.1 = 0
    Porta.2 = 1
    Porta.3 = 0
    If Pind.6 = 0 Then
    Compare1a = Compare1a + 1
    Compare1b = Compare1b + 1
    End If
    If Pind.7 = 0 Then
    Compare1a = Compare1a - 1
    Compare1b = Compare1b - 1
    End If
    If Compare1a < 0 Then
    Compare1a = 0
    End If
    If Compare1b < 0 Then
    Compare1b = 0
    End If
    If Compare1a > 255 Then
    Compare1a = 255
    End If
    If Compare1b < 255 Then
    Compare1b = 255
    End If
    MfG Christopher \/


  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Was genau funktioniert denn nicht?
    Was für Mototren hast du da dran? Ich nehme an normale DC-Motoren, Schrittmotoren kann man ja nur einzeln anklemmen.
    Wo ist was mit wem verbunden?
    Und wieso verwendest du ne PWM? Der L298 hat doch nur Enable und die Inputs - lt. Datenblatt legt man da nen TTL-Pegel an und der L298 macht den Rest.
    http://www.st.com/stonline/products/...re/ds/1773.pdf
    In "Figure 6" sthen die Pin-Zustände und ihre Wirkung - Enable auf High, C auf Low und D auf High sollte schonmal funktionieren....

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    18.12.2006
    Ort
    Oderberg
    Alter
    32
    Beiträge
    870
    Ja ich verwende normale DC-Motoren.
    Die L298 ist wie im Wiki angeschlossen und funktionier auch,
    mit pina.0 und pina.1 wird die richtung für den ersten und mit pina.2 und pina.3 die Richtung von dem 2ten Motor gesteuert. Pind.4 ist enable_a und pina.5 Enable_b.
    Nja und an Pind4 und Pind.5 (die mit den enablea/b von des l298 verbunden sind) soll ein PWM erzeugt werden welches die Geschwindigkeit bestimmt die durch die beiden Taster verändert werden soll.
    MfG Christopher \/


  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Hmm ich glaube so geht das nicht... Der erwartet eindeutige Befehle, keine PWM. Die Ansprechzeiten der Motorparameter im Datenblatt liegen allesamt im µS Bereich - da hilft selbst PREESCALER = 1024 nix.
    Vielleicht kannst du mit ner lahmen PWM-zu-Fuß (mit Interrupt + Zähler) was reißen.
    Oder versuch die Motoren doch über den Strom zu regeln - also über R_sense - wobei sie da stark an Drehmoment verlieren dürften - aber teste es mal... Die PWM an den passenden Pin uns schauen, was passiert (vielleicht noch nen Glätt-Elko dazu).
    Um DC-Motoren zu regeln, kannst du bestimmt auch was einfaches mit Mosis oder Transis aufbauen, oder?

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    18.12.2006
    Ort
    Oderberg
    Alter
    32
    Beiträge
    870
    Irre ich mich da das man an den Enable ein PWM anschließen kann ??
    MfG Christopher \/


  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    18.12.2006
    Ort
    Oderberg
    Alter
    32
    Beiträge
    870
    Ich habe jetzt statt den Motoren mal eine LED angeschlossen.
    Die LED lässt sich wie gewollt über die Taster dimmer, aber wenn ich den Taster so lange drücke bis die LED nur noch wenig leuchtet und dann den Taster loslasse geht noch 1-2 sek die LED komplett aus und dann wieder an danach dimmt sich die LED praktisch selbst warum ist das so ?
    Wenn ich den Taster drücke der dafür da ist das er die LED heller macht lange genug drücke geht die LED aus und wird dann wieder heller
    Aber eigentlich sollte das nicht so sein:
    Code:
    If Compare1a < 0 Then
    Compare1a = 0
    End If
    If Compare1b < 0 Then
    Compare1b = 0
    End If
    If Compare1a > 255 Then
    Compare1a = 255
    End If
    If Compare1b > 255 Then
    Compare1b = 255
    End If
    sollte ja verhindern, dass das passiert oder ?
    Hier der komplette Code:
    Code:
    $regfile = "m16def.dat"
    $crystal = 16000000
    $baud = 9600
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 64
    Config Pina.0 = Output                                      'Input 1
    Config Pina.1 = Output                                      'Input 2
    Config Pina.2 = Output                                      'Input 3
    Config Pina.3 = Output                                      'Input 4
    Config Pind.4 = Output
    Config Pind.5 = Output
    Config Pind.6 = Input
    Portd.6 = 1
    Config Pind.7 = Input
    Portd.7 = 1
    Compare1a = 5
    Compare1b = 5
    Do
    Porta.0 = 1
    Porta.1 = 0
    Porta.2 = 1
    Porta.3 = 0
    If Pind.6 = 0 Then
    Waitms 20
    Compare1a = Compare1a + 1
    Compare1b = Compare1b + 1
    End If
    If Pind.7 = 0 Then
    Waitms 20
    Compare1a = Compare1a - 1
    Compare1b = Compare1b - 1
    End If
    If Compare1a < 0 Then
    Compare1a = 0
    End If
    If Compare1b < 0 Then
    Compare1b = 0
    End If
    If Compare1a > 255 Then
    Compare1a = 255
    End If
    If Compare1b > 255 Then
    Compare1b = 255
    End If
    Loop
    End
    MfG Christopher \/


  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    18.12.2006
    Ort
    Oderberg
    Alter
    32
    Beiträge
    870
    Ich hab den Fehler gefunden (finden lassen danke MartinFunk )
    Der Compare1x-Wert darf ja nicht über 255 bzw. unter 0 sein jetzt klappt alles wie gewollt.
    MfG Christopher \/


  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Ja, die PWM-Register laufen über! 254+1 ergibt wieder 0 und 0-1 wird zu 254! (NICHT 255, denn die 0 ist der erste Wert!)

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    18.12.2006
    Ort
    Oderberg
    Alter
    32
    Beiträge
    870
    Ja ok das war auch nur ein Tippfehler im Programm hab ichs richtig geschrieben
    Naja jetzt klapt wie gesagt alles so wie es sein soll
    MfG Christopher \/


Berechtigungen

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

LiFePO4 Speicher Test