PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Motoransteuerung



Der Einsteiger
22.12.2012, 12:55
Hallo,
ich habe ein rp5-Chassis,eine RN-Control und Bascom. Nun wollte ich die Motoren mit dem integrierten L293D ansteuern.
Nachdem ich den Test-Code von der Anleitung erfolgreich ausprobiert habe, wollte ich mal selber einen schreiben.
Doch meiner funktioniert nicht.Das Fahrzeug soll kurz fahren und dann wieder aufhören(und dann wieder fahren ...usw.).
Wisst ihr vielleicht den Fehler ?

Der Einsteiger
22.12.2012, 20:23
Also, ich habe den Code noch mal ein bisschen abgeändert,doch bekomme ich den Motor nur an.
Mein Problem ist einfach ,dass ich den Motor dann nicht mehr aus bekomme.

Könntet ihr mir bitte bei dieser Anfängerfrage helfen??

Thomas E.
22.12.2012, 20:51
Könntet ihr mir bitte bei dieser Anfängerfrage helfen??
Aber sicher doch. :)

Zuerst: Die Idee ist genial, statt dem *.bas-File Screenshots aus der IDE erstellen, beschneiden und hochladen! Du hast dir damit eine Menge Arbeit gemacht. Im Ernst, lade das nächste mal einfach das File direkt hoch (ja, das geht hier im RN). Das hat auch den Vorteil, dass man ihn einfach selbst testen und debuggen kann. So müsste man den Code abtippen, was wohl kaum jemand machen wird.

Ich habe mir den Code jetzt nicht genau angesehen, aber eines ist mir sofort ins Auge gesprungen: Ausgänge werden als Portx.y deklariert, nur Eingänge mit Pinx.y. Lustigerweise hast du Portd.7 richtig als Ausgang deklariert, die restlichen Ausgänge nicht. Das solltest du als erstes mal ändern.

Wenn du den Code direkt als File hochlädst, könnte ich ihn selbst im Simulator ansehen.

Der Einsteiger
23.12.2012, 09:45
Hier mal der neue Code (Jetzt funktioniert er endlich).Ich habe statt Pwm = 0 jetzt einfach mal Pwm = 900 gesetzt.
Er summt zwar dann noch ,aber bleibt wie gewünscht stehen.
Vielleicht kannst du ja noch Verbesserungen vornehmen??

Thomas E.
23.12.2012, 18:07
Den Prescaler kannst du auch so setzen, was ich wesentlich übersichtlicher finde.

Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down, Prescaler = 8
Wenn du PWM = 1024 setzt wird auch das Summen aufhören. :)

Das es jetzt geht, ist die eine Sache - aber es wäre für dich auch wichtig zu wissen, warum.

Der Einsteiger
23.12.2012, 20:40
Danke für die Bestätigung.

Das es jetzt geht, ist die eine Sache - aber es wäre für dich auch wichtig zu wissen, warum.
Da haste recht.Kannst du mir die Antwort darauf geben??
Und :Warum funktioniert Pwm = 0 nicht ??

Thomas E.
23.12.2012, 20:57
Danke für die Bestätigung.

Da haste recht.Kannst du mir die Antwort darauf geben??
Und :Warum funktioniert Pwm = 0 nicht ??
Bei PWM = 0 wird der Motor voll aufgesteuert, beim Gegenstück dazu, also PWM = 1024 (=maximaler Wert, da 1024 die höchste erreichbare Zahl bei 10-bit darstellt) abgeschaltet.

Leon3770
24.12.2012, 07:29
Danke für die Bestätigung.

Da haste recht.Kannst du mir die Antwort darauf geben??
Und :Warum funktioniert Pwm = 0 nicht ??

Hallo,
vermutlich weil der L293D das Signal invertiert.Setze die Timer config so an:

Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up, Prescaler = 8

sollte dein Motor auch bei PWM = 0 zum stehen kommen und bei PWM = 1023 seine maximale Drehzahl haben.

viele Grüße

Rone
24.12.2012, 08:09
also PWM = 1024 (=maximaler Wert, da 1024 die höchste erreichbare Zahl bei 10-bit darstellt)

Das würde ich nochmal überdenken.:confused:

HeXPloreR
24.12.2012, 08:47
...und Frohe Weihnachten Alle zusammen.

Der Einsteiger
24.12.2012, 09:23
Hallo Leute,
Ich habe einmal den Code von Thomas E. und einmal von Leon3770 eingesetzt ,doch zeigt mir Bascom die Fehlermeldung:
Error : 12 Line: 15 Unknown Config parameter [PRESCALER] an.

P.s. schöne Weihnachten euch Allen. :)

HeXPloreR
24.12.2012, 09:54
Steht der ", Prescaler = 8" möglicherweise jetzt alleine und ist damit nicht gültig? Kommatas prüfen.
Der maximale 10-Bit Wert für's PWM ist übrigens 1023. Bei 1024 gibt es einen Überlauf zu 0, was den PWM in der Einstellung sofort wieder auf maximum hochfährt.
Das summen bei PWM = 900 kommt daher , das die mittlere Spannung unter die Spannung gesunken ist bei der der Motor anlaufen kann. Bei 1023 sollte er mit dem summen auch aufhören, weil kein Puls stattfindet.

Searcher
24.12.2012, 10:38
Hallo,

Error : 12 Line: 15 Unknown Config parameter [PRESCALER] an
Es muß PRESCALE statt PRESCALER heißen.

Gruß
Searcher

HeXPloreR
24.12.2012, 10:54
Hallo,

Es muß PRESCALE statt PRESCALER heißen.

Gruß
Searcher

...na doch nicht im ernst?

"Prescaler" muß einen Teilerwert zugewiesen bekommen...z.b. = 8. Vergessen?

Leon3770
24.12.2012, 11:54
...na doch nicht im ernst?

"Prescaler" muß einen Teilerwert zugewiesen bekommen...z.b. = 8. Vergessen?

Doch im Ernst es muß Prescale heißen.Das kommt davon wenn man nur schnell mal abkopiert ;-)

so ists richtig:

Config Timer1 = Pwm , Pwm = 10 , Prescale = 8 , Compare A Pwm = Clear Up , Compare B PWM = Clear Up

viele Grüße

HeXPloreR
24.12.2012, 12:10
Unglaublich-jetzt habe ich sogar nach diesem Wort mit +r hier gesucht... und es auch gefunden in BascomCode.

Meine Bascom Hilfe wollte ich da es ja so "offensichtlich nicht falsch" geschrieben war, nicht bemühen... nächstes mal aber-ich schwöre. Steht in der Hilfe z.B. unter "CONFIG TIMER0" .

Ah...ich sehen "PrescaleR" wird gerne im Kommentar so benutzt... sehr schön ;)

Der Einsteiger
24.12.2012, 13:35
Leute,
regt euch doch nicht über so etwas auf! ](*,)
Um jetzt mal die Sache aufzuklären : Prescaler habe ich geschrieben ,da es genau so bei dem Fehlerfenster unter Bascom stand.
Im Bascom Code wird es aber Prescale geschrieben!

Ich wünsch euch nochmals schöne Weihnachten. :Weihnacht


24100

Leon3770
24.12.2012, 13:37
Ok,und läuft denn nun der Motor wie gewünscht?

viele Grüße

Der Einsteiger
24.12.2012, 13:58
Ja ,jetzt läuft der Motor wie gewünscht.Doch habe ich zu etwas ähnlichem noch eine Frage:
Kann ich nur an den Pins für den Timer dieses Pwm erzeugen??
Warum könnte ich trotzdem überall einen Servo theoretisch anschließen??

Mfg Der Einsteiger

Thomas E.
26.12.2012, 22:24
Ja ,jetzt läuft der Motor wie gewünscht.Doch habe ich zu etwas ähnlichem noch eine Frage:
Kann ich nur an den Pins für den Timer dieses Pwm erzeugen??
Warum könnte ich trotzdem überall einen Servo theoretisch anschließen??

Ja, diese Art von PWM kannst du nur an diesen Pins anschließen. Alternativ kannst du auch einen anderen Timer für die Erzeugung der PWM verwenden, dann wären eben die Output Compares des jeweiligen anderen Timers dafür zuständig. Die nächste Stufe wäre die Implementierung einer Software-PWM, was jedoch etwas kompliziert ist. Damit würde dann jeder Pin "Servo-fähig" gemacht werden. Zum Schluss gibt es noch den direkten Befehl "Servo", der allerdings das Programm anhält und die denkbar schlechteste Variante ist, einen Servo anzuschließen.

Searcher
27.12.2012, 08:39
Zum Schluss gibt es noch den direkten Befehl "Servo", der allerdings das Programm anhält und die denkbar schlechteste Variante ist, einen Servo anzuschließen.

Hallo Thomas,
wie kommst Du darauf, das "Servo" das Programm anhält? Ich komme auch nicht besonders gut mit dem Config Servo Befehl klar, aber der benutzt auch Interrupts und anhalten tut er das Programm nicht. Würde ihn aber auch nicht empfehlen.

Gruß
Searcher

Der Einsteiger
27.12.2012, 23:36
Gut ,dann weiß ich jetzt ja bescheid. :)

Zu dem ,dass der Config Servo Befehl schlecht sei: Er ist zwar nicht für Motoransteuerungen geeignet usw. ,aber wie man in Zukunft auf meiner Seite (Thema :Roboterarm mit Schrittmotoren )sehen kann ist er sehr wohl für Servo-Greifer ausreichend.

MfG Der Einsteiger