PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie funktioniert der IC L293 D



ThomasKopsch
28.04.2007, 21:05
Hallo,

ich durchplane gerade meinen ersten Roboter:
Er soll erst einmal nur durch das Zimmer fahren können und Hindernissen auf Berührung ausweichen können.
Ich habe noch zwei kleine Motoren mit einem Drehmoment von 1,2 N/cm hier liegen, die möchte ich benutzen.
Für die Ansteuerung der Motoren möchte ich den IC L293 D benutzen.
Kann ich einfach in Pin 8 von diesem IC die Versorgungsspannung von 9V leiten? Das hat mich etwas gewundert als ich zum ersten Mal einen Schaltplan von diesem IC gesehen habe. Hält der das aus?
Und die Motoren hänge ich dann einfach zwischen die Pins 3 und 6, bzw. 11 und 14. Da muss anscheinend auch kein Kondensator oder so was dazwischen, richtig?
Die Pins 1, 2, 7, 9, 10 und 15 verbinde ich dann einfach direkt mit Pins des Controllers, so weit richtig?
Die Controller-Pins, die zu den Pins 2, 7, 10 und 15 führen, lasse ich dann einfach zuerst in Ruhe und verändere gar nichts, im Programmcode, wenn ich die Richtung der Motoren nicht ändern möchte.
Aber was ist mit dem anderen beiden Pins 1, bzw. 9?
Was muss ich damit machen?
Ich habe versucht das im Roboternetz-wiki zu verstehen:
Demnach kann ich, wenn ich die einfach ständig auf 1 stelle, den Motor auf voller Leistung laufen lassen. Wenn ich z.B. im Programm reinschreiben, dass er jede Millisekunde den Zustand einmal wechselt, habe ich nur noch halbe Leistung. Usw.

So, ich hoffe ich habe euch mit meiner Zusammenfassung nicht genervt, aber ich möchte trotzdem wissen, ob das so wie ich meine, alles richtig ist, damit ich wenn ich das dann zusammenbaue nicht sofort der Controller kaputt geht.

Vielen Dank für eure Mühen.

Thomas

Hubert.G
28.04.2007, 21:56
Mit Pin 1 sagst du das der Motor in Betrieb gehen soll, wenn du dein Signal auf Pin 9 legst dreht der Motor in die andere Richtung. Schau dir das Datenblatt vom L293B da ist das etwas übersichtlicher, die Pin sind allerdings anders.
Hubert

ThomasKopsch
28.04.2007, 22:00
Ok, danke. Dann scheint das ja soweit richtig zu sein.

Aber wenn ich Pin 1 regelmäßig immer umschalte, dann müsste ich doch nur noch die halbe Leistung haben, oder?

Hubert.G
28.04.2007, 22:18
Wenn du PWM-Steuerung machst, legst du diese an Pin 1, auf Pin 2 und 9 gibst du die Drehrichtung vor.
Du hast theoretisch die halbe Leistung.
Hubert

ThomasKopsch
28.04.2007, 22:31
Äh, was ist denn jetzt PWM? Ich verstehe nichteinmal denArtikel im wiki komplett...

Könnte man das in Bascom nicht so in etwa lösen?



WaitMS 1
Porta.1 = 0
WaitMS 1
Porta.1 = 0


Wo ist das Problem, wenn man das einfach so macht?


Das mit der Drehrichtung ist klar. Ich frage mich nur, wie ich die Leistung richtig kontrollieren kann.

Lenox
28.04.2007, 22:51
wenn dann...

WaitMS 1
Porta.1 = 0
WaitMS 1
Porta.1 = 1

Aber das ist viel zu langsam, du brauchst da schon PWM.
Am besten über Hardware PWM, dass spart µC Performence wärend dein Bot durch die Gegend fährt ;)

ThomasKopsch
28.04.2007, 23:35
Aha, danke

Und wie geht das? Ich weiß noch nicht mal, wie das mit Software geht. Wie geht es dann mit Hardware? #-o

robocat
29.04.2007, 01:21
der atmega kann ein pwm erzeugen, ohne dass du dich darum kümmern musst. mit deiner methode ist der µC voll ausgelastet, und du kannst nichts anderes machen. schau dir im datenblatt die timer an.


ldi temp, (1<<WGM20)|(1<<COM21)|(1<<CS20)
out TCCR2, temp

ldi temp,127
out OCR2, temp

damit hast du ein 50% pwm an port OC2 (port B3 am atmega 8 ).

nover
29.04.2007, 01:37
Dazu müsste man wissen was du für nen µC (ich gehe mal dar von aus das du einen at hast).
Im Datenblatt steht mir Sicherheit 8Bit Timer/Connter dort stehen einige Register beschrieben.
Beim beim ATMega8 (ich habe schon ewig nichts mehr in Bascom gemacht )

Tccr1a = &B10000001 'Pin OC1A nicht invertiert, 8-Bit-
Tccr1b = &B00000010 'PWM phasenkorrekt, Timer1 1/8

Aber das must dir für deinen µC ansehen. Und das Programm vervollständigen.

nover
29.04.2007, 03:00
Ich habs Porbirt so gut wie möglich zu machen aber ich kann keine gewer geben



$regfile = "m8def.dat" 'ATmega8-Deklarationen
$crystal = 3686400 'Verwendeter Quarz: 3,6864 MHz

Ddrb.1 = 1 'Pin PB1/OC1A ist Ausgang

Ddrd.0 = 0 'Port D1 ist Eingang


Tccr1a = &B10000001 'Pin OC1A nicht invertiert, 8-Bit-
Tccr1b = &B00000010 'PWM phasenkorrekt, Timer1 1/8

Ocr1al = 127 'PWM = ca.50%

Dim Temp As Byte 'temp Register

Temp = Ocr1al 'kopire timer in temp

Do 'Hauptschleife
'ist pin D1 = 1 dann
If Pind.1 = 1 Then 'temp + 2
Temp = Temp + 2 'warten wegen prellen (taster
Waitms 20
End If

Ocr1al = Temp 'kopire trmp in timer

loop

ich hoffe das man das erkenen kann!!!
(auch die kometare)

MFG
Das Novj

@ robocat mir wär asm auch lieber :-s

ThomasKopsch
29.04.2007, 09:38
Ich benutze einen atMega32.

Es tut mir wirklich leid, aber alle Codes, die ihr gepostet habt, verstehe ich so gut wie gar nicht.

Ich habe gerade noch diesen Code gefunden:



Config Pinb.1 = Output
Config Pinb.2 = Output

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

Do
Compare1a = 205
Compare1b = 51
Loop

End


Könnte ich den auch benutzen, oder habe ich dabei das gleiche Problem wie bei dem Code, den ich zuerst gepostet habe?

Was meint ihr mit Datenblatt? Das Datenblatt, dass man sich hier unter Download -> Datenblätter -> atmega32 runterladen kann? Das habe ich mir mal angeguckt, wo steht da was über Timer? Ich finde das ist so unübersichtlich...

Vielen Dank, nocheinmal

Thomas

nover
29.04.2007, 12:35
Ja das meine ich dort steht Links unter der Rubrik Inhalte (Timer/Conter0 with PWM)
Ich habe mal ein pdf gemach aber nur zusammen gefast was dort steht. Ich kann dir nur Endfehlen ein Bacom Buch zu kaufen ( ich finde das http://www.rowalt.de/ recht gut ) oder schau mal nach ob es in INet was gibt.
[-o<

darwin.nuernberg
29.04.2007, 13:18
Also das mit dem PWM lernt man einfachten wenn man es ausprobiert.

Das Beispiel von robocat ist in der Programmiersprache "C" oder "Assembler" geschrieben (?),

Deine Beispiele sind in BASCOM.

Daher schon mal der Unterschied, im Quelltext, am Ende kommt verm.
das gleiche raus (mit C bin ich im Bereich AVR auch nicht so grün).

Ein PWM ist eine Pulsweitenmodulation.
Da gibt es die Begriffe Ti und Tp
Ti = Tast-impuls
Tp = Tast-Pause
natürlich hat der PWM auch noch eine best. Frequenz (Periodendauer).

So mit der PWM wird erst mal die Frequenz (Periode) und das Verhältniss zwische Impuls und Pause definiert:


https://www.roboternetz.de/wiki/uploads/Main/pwm.gif

So jetzt stell Dir das so vor:
der Motor kriegt nur Strom bei einem Hi-Signal,
Also wird der Motor immer nur kurzzeitig angesprochen,
je länger diese Seit ist, desto mehr kann der Motor "hochdrehen" (der Mot hat ja auch noch eine gew. Trägheit)

Je länger nun dieser Impuls (Ti) ist desto schneller und mehr Leistung bekommt dieser und "fährt" dann auch schneller.
Umgekehrt natürlich dementsprechend langsamer.


Der AVR kann so einen PWM Hardwareseitig (nur an bestimmten Ausgängen des AVR möglich)
und programmtechnisch (Soft-PWM) erzeugen (welches nahezu an beliebigen Pins des AVR ausgegeben werden kann)

und das Verhältniss von Ti zu Tp deren Frequenz ist natürlich paramterierbar.


So nun viel Spass beim ausprobieren.

Die Kunst ist es passend für deinen Bot dir richtige Frequenz und das richtige Verhältniss zwischen Ti und Tp zu finden um nicht nur die richtige geschwindigkeit bei gleichzeitig optimaler Leistung zu finden.

Jehöher die Frequenz, desto feiner kann die Drehzahl eingerichtet werden, aber auch umso kleiner ist die Leistung am Motor.

Niedrigere Frequenzen erzeugen zwar hohe Motorleistungen (Drehmoment) sind aber dann nicht mehr so fein zu regulieren.

Je nachdem was Dir wichtiger ist musst du dementsprechend parametrieren.


Wie du einen PWM ezeugst und programmierst ist hier im RN schon sehr oft beschrieben worden:
z.B. im WiKi:
https://www.roboternetz.de/wissen/index.php/PWM
https://www.roboternetz.de/wissen/index.php/Bascom_und_PWM
Da ist die Grafik auch nochmal drin.

PS LED's können auf diese Weise auch heller und dunkler eingestellt werden, die Trägheit ist dann allerdings im Auge des Betrachters und nicht in der LED zu finden.

nover
29.04.2007, 13:41
@ Darwin
ich meine das in asm geschrieben hat oder nicht ??
Und ich bin auch der Meinung das ThomasKopsch ein Tutorial von LED an bis vollen zugreif auf alle Register machen sollte nur so Lernt man was die einzelnen Register machen ( ich weiß das bis Heut noch nicht XD )

darwin.nuernberg
29.04.2007, 13:47
@ Darwin
ich meine das in asm geschrieben hat oder nicht ??

"Wurschd" auf jeden Fall nicht in Bascom ;-)

nover
29.04.2007, 13:54
Sry es sollte heißen :
ich meine das robocat in asm geschrieben hat oder nicht ??

nover
29.04.2007, 14:13
@ Darwin



So mit der PWM wird erst mal die Frequenz (Periode) und das Verhältniss zwische Impuls und Pause definiert:


Nein das ist so nicht ganz richtig die Frequenz einer PWM ist immer gleich man richtet sie einmal ein (beim AVR 1/1, 1/8, 1/64, 1/256 und 1/1024 AVR Takt ) und Ender nur noch das Tastverhältnis nicht die Frequenz