Ich habe ein kleines Problem mit meiner PWM-Steuerung, die ich gerade
versuche zu bauen.
Am L293D ist einmal die Spannung für die Logik (5V) und 12V für den
Motor angelegt (auch richtig herum).
Hiernach ( http://www.mcu.hk/GIF/L293D.gif ) ist an In1 H, In2 L,
Out1+Out2 am Motor, GND sind alle angeschlossen. En1 ist am
Microcontroller am PWM-Pin angeschlossen.
Wenn ich mit meinem Multimeter messe oder eine LED mit Vorwiderstand
direkt an den Pin anschliesse, kann ich das ganze regeln mit der
Software auf meinem M32 (relevante Codeausschnitte kommen gleich noch).
Jetzt habe ich eben den L293D daran angeschlossen und einen Motor dran.
Wenn der PWM-Pin aus ist, dann ist am Motorausgang auch alles aus, aber
EGAL was ich am PWM-Pin über 0V anliegen lasse, es kommen immer nur die
12V heraus, obwohl, wenn ich in der Schaltung nochmal messe, kommt
selbst mit dem Motortreiber noch eine Spannung heraus, die ich verändern
kann.
Der Mega32 läuft mit einem externen 8MHZ Quarz, die Fusebits stimmen,
der Quarz ist richtig angeschlossen mit den 22pF Kondensatoren. Ich
Programmiere mit dem avr-gcc unter Linux. Das Restliche Programm (u.a.
mit Display-Ansteuerung, Interrupt gesteuerter UART, ADC-Funktionen,
...) funktioniert einwandfrei.
Hier das relevante Stückchen Code:
1
DDRD=(1<<PD5);// pd5 ausgang
2
TCCR1A=(1<<COM1A1)|(1<<WGM11);
3
TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS10);
4
ICR1=0x6FFF;
5
6
OCR1A=0x3FFF;
Den Code habe ich aus eurem " AVR-GCC-Tutorial ", compiliert ohne Fehler
oder Warnungen.
Wenn ihr noch was wissen wollt/müsst, sagt bitte bescheid.
Ich danke hier auch gleich schon mal allen, die versuchen, mir zu
helfen.
Hallo,
ohne den Leistungstreiber genau zu kennen - man sollte normalerweise
keinen PWM auf einen enable Pin geben, der ist dazu da, die ganze
Anordnung abzuschalten. Der PWM muss normalerweise auf die In Pins, und
zwar so, dass die gewünschte Logikfunktion erreicht wird. Also z.B. In1
auf High und In2 auf PWM. Enable ist dabei immer High. Für eine
Richtungsumkehr dann einfach In1 auf Low legen und die Wirkungsrichtung
des PWM umdrehen.
Es kann sein, dass der Enablepin gegen hochfrequente Signale geschützt
ist und ein PWM-Signal als dauer high erkennt. Das ist aber nur eine
Vermutung.
Wenn du es so machst, sollte es auch funktionieren.
Grüße,
Peter
@ Peter Diener:
Tut mir leid, das ist Unsinn, was du da schreibst. Der Enable-Eingang
ist unter anderem auch dazu gedacht, einen Motor per PWM zu regeln.
@ Nils: Du schreibst:
> EGAL was ich am PWM-Pin über 0V anliegen lasse, es kommen immer nur die> 12V heraus,
Der PWM-Pin des Controllers kann keine Spannungen ausgeben, nur
Rechteckspannungen mit wechselndem Tastverhältnis. Wenn du hier eine
Gleichspannung mit einem normalen Billig-Multimeter messen willst, wirst
du keinen Erfolg haben.
> obwohl, wenn ich in der Schaltung nochmal messe, kommt> selbst mit dem Motortreiber noch eine Spannung heraus,> die ich verändern kann.
Das heisst doch, dass die Schaltung funktioniert.
Welche Spannung hast du in diesem Fall an welchem Punkt der Schaltung
womit gemessen? Hast du ein Oszilloskop, wo du dir die Signale ansehen
kannst?
@Kobaltchlorid:
Nils misst eben mit einem Multimeter die mittlere Spannung, die sich
durch die Pulsweitenmodulation ergibt. Die Tatsache, dass am MC-Pin die
Spannung verändert werden kann, auch mit angeschlossenem Treiber, zeigt,
dass die Software funktioniert. Wenn er am Ausgang des Treibers aber nur
immer 12 Volt misst, sobald irgendeine Pulsweite > 0 eingestellt ist,
deutet das auf eine Filterung des Enablesignals im Leistungsteil hin.
Und wie gesagt: Der enable ist zum Bereitschalten (enable) der Schaltung
da, nicht zur Modulation des Augangs. Es mag sein, dass das in manchen
Schaltungen funktioniert. Aus dem Datenblatt geht das aber nicht hervor
und es hängt mit sicherheit auch von der verwendeten Frequenz ab. Aber
nach der Fehlerbeschreibung von Nils ist es recht wahrscheinlich, dass
es deswegen nicht funktioniert. Und was spricht denn gegen die korrekte
Variante, einen der In Pins zu Modulieren?
@Kobaltchlorid:
Versuch auch mal niedrigere PWM-Frequenzen.
Grüße,
Peter
>> Und was spricht denn gegen die korrekte Variante, einen der In Pins zu
Modulieren?
Es geht dann kein Freilauf mehr und man kann nur noch zwischen Vollgas
und 'Vollbremse' umschalten.
Tassilo
Hallo Tassilo,
die Zwangskommutierung ist mit der Selbstkommutierung in diesem Fall
identisch. Stell dir vor Brücke 1 ist auf High und Brücke 2 auf Low.
Dann fließt Strom von Brücke 1 durch den Motor in Brücke 2. Der
Motorstrom integriert auf. Bestromt werden nur Transistoren, keine
Dioden.
Jetzt erfolgt eine Kommutierung: Brücke 1 ist immer noch High, Brücke 2
kommutiert von Low nach High um. Die Spannung über dem Motor ist jetzt
Null, der Strom integriert ab. Er fließt immer noch in die gleiche
Richtung (Motorinduktivität). Jetzt fließt der Stom in Brücke 1 immer
noch durch den oberen Transistor, in Brücke 2 aber durch die obere Diode
auf die positive rail zürück und dann wieder in den oberen Transistor
von Brücke 1. Die Tatsache, dass in diesem Zyklus auch der obere
Transistor von Brücke 2 eingeschaltet ist, ist irrelevant.
Wenn man enable wegnehmen würde, wären alle Brückentransistoren
nichtleitend und der Freilauf der Motorinduktivität erfolgt doppelt so
schnell gegen die negative Versorgungsspannung über die Dioden. Das
bedeutet doppelten Stromrippel am Motor. Daher ist der Betrieb wie ich
ihn vorschlage vorteilhaft.
Zudem ist damit ein Bremsbetrieb beim Richtungsumsteuern möglich, der
die Bremsleistung in die Batterie zurückspeist.
Peter