PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Motorgeschwindigkeit mit 2 Taster ändern



Christopher1
26.08.2007, 00:24
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 O:)



$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

stefan_Z
26.08.2007, 02:08
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/literature/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....

Christopher1
26.08.2007, 02:20
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.

stefan_Z
26.08.2007, 02:31
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?

Christopher1
26.08.2007, 02:46
Irre ich mich da das man an den Enable ein PWM anschließen kann ??

Christopher1
26.08.2007, 12:55
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:

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:


$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

Christopher1
26.08.2007, 20:05
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.

stefan_Z
26.08.2007, 22:08
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!)

Christopher1
26.08.2007, 22:33
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