PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmfehler in Motoransteuerung?



ThomasKopsch
19.08.2007, 15:39
Hallo,

ich möchte einen Motor mit dem IC l293 D ansteuern.

Um den IC zu testen habe ich folgendes Programm geschrieben und auf einen atmega32 übertragen:



$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1600000


Config Portd.7 = Output
Config Portd.6 = Output
Config Portd.5 = Output
Config Pina.0 = Input

Porta.0 = 1


Portd.7 = 1
Portd.6 = 1
Portd.5 = 0


Do
If Pina.0 = 0 Then
Portd.6 = 1
Portd.5 = 0

Else
Portd.6 = 0
Portd.5 = 1

End If

Loop


End


Dabei ist Pina.7 ein angeschlossener Taster, Portd.7 die Enable-Leitung des ICs und Portd.6 und Pord.5 die Anschlüsse, die dafür zuständig sind, in welche Richtung sich der Motor drehen soll.
Der Sinn von diesem Programm ist es also, dass sich die Drehrichtung auf Knopfdruck ändern soll.
Aber leider tut der Motor nicht das was er tun soll! Woran kann das liegen? Ist ein Fehler in dem Programm?


VielenDank für eure Antworten,
Thomas

stefan_Z
19.08.2007, 23:29
Also ich würde mal drauf tippen, dass er die Richtung nur kurz ändert, wenn du kurz drückst. Denn er rast ja ständig durch die Schleife und stellts sofort wieder um, wenn der Taster losgelassen wird.

Ansonsten würde ich nen Fehler in der (Be-)Schaltung des IC vermuten.
Mach doch einfach mal
Do
Toggle Portd.6
Toggle Portd.5
Wait 2
Loop

Dann müsste er ja automatisch umschalten - reicht ja für den Funktionstest...

ThomasKopsch
20.08.2007, 14:28
Hallo,

Aber selbst wenn ich den Taster gedrückt halte, ändert der Mototr nicht seine Richtung.
Dann wird es wohl ein Fehler in der Beschaltung sein. mh. Wie finde ich das denn jetzt raus... :-k :-k

Aber trotzdem danke,

Thomas

for_ro
20.08.2007, 16:12
Mach es do so, wie Stefan_Z es vorgeschlagen hat. Falls der IC oder die Motoren nicht funktionieren, geht es dann immer noch nicht. Ist dagegen dein Taster an PinA.0 nicht richtig angeschlossen ist (was ich vermute), wird es dann funktionieren.

Gruß Rolf

Sauerbruch
20.08.2007, 20:47
Dabei ist Pina.7 ein angeschlossener Taster

In Deinem Code fragst Du den Taster aber über Pina.0 ab. Ist das nur ein Schreibfehler?

Und noch ´ne Idee: Verbindet Dein Taster den Eingangspin auch mit Masse (und nicht mit +5V)?

stefan_Z
21.08.2007, 00:02
...und noch eine Frage: Hast du nen Pullup/down dran?

Jon
21.08.2007, 13:25
Laut Programm hängt der Taster am Pina.0, der Pull-Up Widerstand ist aktiviert.
Ich würde mal kontrollieren, ob die den Taster jetzt an Pina.7 oder Pina.0 angeschlossen hast.
Der Rest vom Programm stimmt.

jon

ThomasKopsch
21.08.2007, 16:52
Hallo,

danke für eure Antworten.
Also ich habe die Idee von Stefan mit diesem Code umgesetzt.



Do
Toggle Portd.6
Toggle Portd.5
Wait 2
Loop


Das hat leider auch nicht funktioniert. Ich habe den Motortreiber einmal ausgetauscht und nocheinmal die Verdrahtung überprüft. Es geht immer noch nicht!!

Es ist doch richtig, dass die entsprechenden Pins der Motortreibers direkt an dem Motor ohne Zwischenschaltung angeschlossen werden, oder?

Thomas

Jon
21.08.2007, 18:24
Es ist doch richtig, dass die entsprechenden Pins der Motortreibers direkt an dem Motor ohne Zwischenschaltung angeschlossen werden, oder?
Japs. Ist richtig.

Versuche mal den Portd.7 auf Null zu setzen. Also: "Portd.7=0"
Vielleicht stimmt das ja nicht, weiß ich gerade nicht, und ich bin zu faul das nach zu lesen.

jon

ThomasKopsch
21.08.2007, 18:36
Mh, das habe ich auch schon probiert:
Auch ergebnislos....

Thomas

Tido
21.08.2007, 22:46
Hallo, ist wahrscheinlich nicht wichtig, aber hat der Quarz nur 1,6MHz?

stefan_Z
22.08.2007, 00:43
1,6 Mhz sollten eigentlich reichen - der µC macht ja nicht viel mehr als warten ;-)
Schließ mal testweise LEDs an - geht es dann?

Sauerbruch
22.08.2007, 03:38
...und der Motor ganz alleine - geht der auch??

ThomasKopsch
22.08.2007, 06:26
Hallo,

Ja, auch der Quarz (1,6 Mhz) funktioniert:
Ich habe nämlich eine LED angeschlossen und die hat, wie sei sollte geblinkt.

Und ich habe natürlich auch getestet, ob der Motor funktioniert, winfach indem ich 10V so auf den Motor gelegt habe.
Auch das ging.

Thomas

ThomasKopsch
22.08.2007, 15:53
So, mir ist jetzt noch etwas an dem Motor aufgefallen:

Wenn ich da eine Spannung von 10V durchschicke, fällt die Spannung nach Angabe des Netzgerätes für eine ganz kurze Zeit auf nur noch 5V, um dann sofort wieder auf 10 V zu steigen.

Kann das Problem daran liegen?

Ich meine ich habe ja einen Spannungsregler zwischen Netzteil und Controller. Das müsste ja eigentlich trotzdem funkitionieren, oder?

Thomas

PS: Stimmt es eigentlich, dass Motortreiber warm werden, wenn sie benutzt werden?

Jon
22.08.2007, 17:07
Wenn ich da eine Spannung von 10V durchschicke, fällt die Spannung nach Angabe des Netzgerätes für eine ganz kurze Zeit auf nur noch 5V, um dann sofort wieder auf 10 V zu steigen.

Kann das Problem daran liegen?

Ich meine ich habe ja einen Spannungsregler zwischen Netzteil und Controller. Das müsste ja eigentlich trotzdem funkitionieren, oder?
Wäre jetzt interessant, was nach dem 5Volt Spannungsregler passiert. Fällt da die Spannung auch kurz ein, oder bleibt die konstant? Wenn ide Spannung des µCs zu stark einfällt, dann kommt es zu einem Reset, und das Programm fängt von vorne an, was dazu führt, dass deine Motoren nie losdrehen werden.


PS: Stimmt es eigentlich, dass Motortreiber warm werden, wenn sie benutzt werden?
Das liegt immer daran, wie hoch der Strom ist, den die Motoren ziehen.

jon