PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Motorstrom an L298 trotz PWM messen



Cairol
01.10.2007, 00:32
Ich hab da ein Poblem:
Im Moment hab ich in meiner Schaltung einfach nur einen 0,27 Ohm-Shunt gegen Masse am "Sense A"-Pin vom L298 hängen und greife davor die abfallende Spannung zum ADC ab. Das rechne ich dann um in mA.
Normalerweise würde das ja auch funktionieren - wenn da nicht das PWM wäre...
Dadurch bekomme ich völlig wirre Werte am ADC.
Eine reine Mittelwertbildung hilft mir bei der aktuellen Schaltung auch nicht weiter.
Ich hab in dem Zusammenhang schon was von RC-Gliedern gelesen, aber ich weiß
1. nicht wie/wo genau ich das Glied anschließen soll und
2. wie das C und R dimensioniert sein sollte.
3. wie viele Messungen zur Mittelwertbildung sinvoll sind
4. wie schnell die Messungen hintereinander erfolgen sollten
Ich steuere das PWM von 0 bis etwa 60% aus.

Kann mir jemand bei diesem RC-Glied und dem Drumherum helfen?
Die Platine (Streifenraster) ist zwar schon fertig bestückt, aber ein RC-Glied könnte ich in der nähe des L298 schon noch unterbringen.
Ich verzichte dabei allerdings bewusst auf einen OP-Amp. Das was an Spannung ankommt muss reichen.

Außerdem wundert mich, wie man im Datenblatt vom L298 so eine Schaltung (nur mit Shunt) angeben kann, obwohl von vorneherein klar ist, dass es nicht funktionieren kann.

avion23
01.10.2007, 13:22
Ich kenn mich da auch nicht aus, aber was ich bis jetzt herausbkeommen habe:
Das Ding nennt sich Tiefpass, siehe wikipedia.

zu 1: auch wikipedia :) zwischen masse und shunt plus. ausgang an µC eingang.

zu 2: Bei einem RC-Glied ist die Grenzfrequenz fg die Frequenz, wo nur noch 70% des Signals ankommen. Deswegen sollte man immer fg immer sehr viel kleiner wählen, als das Signal, was man rausfiltern könnte. Oft findet man dafür << was nur "ganz ganz großer unterschied" heißt, konkret faktor 100. Zur Dimensionierung: Nicht zu hochohmig, aber auch nicht zu niederohmig. der ADC hat auch einen Innenwiderstand, der das meßergebnis verfälchen kann. das solltest du beachten.

zu 3. Das kommt darauf an - mit einem Tiefpass machst du das ganze künstlich langsam und kriegst auch eine Phasenverschiebung. Du kannst aber durch diese Mittellung die Genauigkeit erhöhen, bzw. die Auflösung. Dazu gibt es eine appnote von atmel. prinzip ist 4 meßwerte rein, eins nach rechts shiften oder so.

zu 4. Wie schnell die Meßungen hintereinander erfolgen sollten? Das kannst eigentlich nur du wissen. Möchtest du den Strom wissen? Wie oft soll dieser meßwert verwendet werden? oder möchtest du eine Überstromabschaltung realisieren. Dann würde der integrierte analogkomparator sich anbieten.


Zu dem datenblatt, was ich nicht gelesen habe: Ein tiefpass ist ein konzept, kein konkretes bauteil. Realiseren kannst du das z.b. mit rc-glied, lc, opamp, kombinationen um die steilheit zu erhöhen, aber auch mit digitaler filterung innerhalb der cpu oder mit einem fpga. Und vor allem was damit ausgewertet werden soll ist auch unklar. beim l298 wird's wohl eher eine überstromabschaltung sein.

Wirklich weiterhelfen kann ich dir nicht, weil ich es nie gemacht habe und auch nicht weiß was du machen möchtest :/ Aber vielleicht reicht das als Einstieg, damit andere es korrigieren können.

Yossarian
01.10.2007, 15:00
Hallo
Du mußt den Strom nur dann messen bzw. den ADC abfragen, wenn die Brücke eingeschaltet ist.
Einschalten, eine µs warten, messen.
Mit freundlichen Grüßen
Benno

Amiwerewolf
01.10.2007, 16:27
nein das funktioniert nicht!
das problem ist das er syncron mit der PWM messen müste!

also entweder die PWM selbst Programmieren
oder die PWM auf einen interrupt eingang legen,
und bei einem interrupt den ADC auslesen und regeln.

es kommt aber noch dazu wenn du eine PWM von 60% mehr spannung mist als bei 30%.

für was für einen motor möchtest du den den strom regeln?

ich befasse mich auch grad mit der thematik, und möchte den strom für einen schrittmotor regeln!

lg Amiwerewolf


wer Mist mist, mist Mist!

Yossarian
01.10.2007, 16:57
Hallo
Wenn er einschaltet und dann mißt, so ist das synchron.
Außerdem soll nicht die Spannung gemessen werden, sondern der Strom.
Da vorher bekannt ist, wie lang der Impuls sein wird, kann die Messung auch besser in die Mitte des Impulses gelegt werden.
Ist eine Frage der Pulsfrequenz und der Rechengeschwindigkeit.

Mit freundlichen Grüßen
Benno

Yossarian
01.10.2007, 17:09
Hallo

Das was an Spannung ankommt muss reichen
Bei 0,27ohm und 2A hast Du gerade ein halbes Volt und damit bekommt der ADC 10% von seinem Auflösungsbereich angeboten.
Mit freundlichen Grüßen
Benno

Cairol
01.10.2007, 17:32
Also ich möchte in erster Linie eine Überstrom-Abschaltung für den Antriebsmotor realisieren. (Normaler DC-Motor mit externem Getriebe)

Außerdem lassen ich den uC alle 2 Sekunden ein Paket mit Telemetriedaten zusammenstellen (Batteriespannung, Temperatur von einem NTC, Helligkeit von einem LDR ect) und sende es an den PC um es in der Programmoberfläche anzeigen zu lassen.
Der gemessene Motorstrom wird auch in das Paket gepackt.
Aber im uC müsste natürlich öfters gemessen werden als nur alle 2 Sekunden.
Der Motor zieht im Leerlauf ca. 450 mA und im Normalbetrieb 500 - 1000 mA. Bei Blockade allerdings 2,6 A. (alles bei 5 V Nominalspannung)
Ich denke das macht der L298 schon ein paar Hundert Millisekunden mit. (das passiert ja nicht ständig)
Die Messung sollte wenn möglich alle 200 ms oder schneller erfolgen.

Ich erzeuge das PWM mit "Timer1" und dem "PWM"-Befehl von BASCOM - genau so wie im RN-Control-Demo-Programm.
Ich glaub nicht das ich da rausbekomme wann gerade die Mitte eines On-Pulses kommt.

zu 2: Bei einem RC-Glied ist die Grenzfrequenz fg die Frequenz, wo nur noch 70% des Signals ankommen. Deswegen sollte man immer fg immer sehr viel kleiner wählen, als das Signal, was man rausfiltern könnte. Oft findet man dafür << was nur "ganz ganz großer unterschied" heißt, konkret faktor 100. Zur Dimensionierung: Nicht zu hochohmig, aber auch nicht zu niederohmig. der ADC hat auch einen Innenwiderstand, der das meßergebnis verfälchen kann. das solltest du beachten.

Das setzt aber vorraus das ich die PWM-Frequenz ect. kenne.
Nur, woher nehmen ohne zu stehlen?


Bei 0,27ohm und 2A hast Du gerade ein halbes Volt und damit bekommt der ADC 10% von seinem Auflösungsbereich angeboten.
Das ist mir bewusst. Aber ich hab in der Planung nunmal keinen OpAmp vorgesehen. Beim nächstenmal dann... :-b
Wie gesagt, ein RC-GLied bekomm ich noch naträglich unter, aber n OpAmp wird vom Platz her schwierig.
Das sind halt so die Kleinigkeiten die man beim ersten mal nicht bedenkt.
Aber ich gelobe Besserung. :wink:

avion23
01.10.2007, 19:07
Die PWM-Frequenz??? Diese gibst du doch vor, oder woher soll diese sonst kommen?

Bei einer Überstromabschaltung ist die PWM egal. Du möchtest bei einer Stromüberschreitung abschalten, unabhängig vom Duty Cycle. WIe wäre es, mittels des ADC Komparators die shunt+ Spannung mit einer Referenzspannung (Spannungsteiler?) zu vergleichen? Bei einem Wechsel kannst du dann einen Interrupt auslösen und alles ausschalten.

recycle
01.10.2007, 23:26
Hallo
Du musst den Strom nur dann messen bzw. den ADC abfragen, wenn die Brücke eingeschaltet ist.
Einschalten, eine µs warten, messen.

Die Stromkurve des Motors wird vermutlich nicht parallel zur PWM-Spannungskurve laufen. Daher kann ich mir ehrlich gesagt nicht vorstellen, dass es viel bringt die Messung auf den Anfang der PWM-Periode zu synchronisieren.

Soweit ich weiss kann der Strom in einer Spule nicht "springen". D.h. wenn der Motorstrom mit derselben Frequenz pulsiert wie die Spannung wird der Strom am Anfang der PWM-Periode noch ansteigen und man misst eher dessen Minimum als sein Maximum.

Die Pulsweite der PWM dürfte auch keinen ganz unerheblichen Einfluss auf den Motorstrom haben und die kann man am Anfang der PWM-Periode auch noch nicht erahnen.
Daher kann es eigentlich nicht viel bringen eine einzelne Messung auf einen bestimmten Zeitpunkt während der PWM-Periode zu synchronisieren.

Mehrere Messungen pro PWM-Periode dürften aber auch schwierig sein, bei einer PWM-Frequenz im khz-Bereich hätte der Controller da reichlich zu tun.


Ich vermute ein erster Schritt zum Erfolg ist, die PWM-Frequenz abgestimmt auf den Motor so hoch zu wählen, dass sich die PWM-Funktion aufgrund der Trägheit des Motorstroms nicht mehr im Strom wiederfindet.

Inwiefern das möglich ist, weiss ich allerdings nicht, ich suche selber noch eine Lösung für genau dasselbe Problem.

recycle
01.10.2007, 23:32
Bei einer Überstromabschaltung ist die PWM egal. Du möchtest bei einer Stromüberschreitung abschalten, unabhängig vom Duty Cycle. WIe wäre es, mittels des ADC Komparators die shunt+ Spannung mit einer Referenzspannung (Spannungsteiler?) zu vergleichen? Bei einem Wechsel kannst du dann einen Interrupt auslösen und alles ausschalten.

Ich weiss zwar nicht wie der ADC-Komparator genau funktioniert, ich kann mir aber nicht vorstellen, dass der das Problem der welligen Stromkurve löst.
Wenn die Stromkurve "hüpft" wir der Komperator den Saft vermutlich auch schon bei Stromspitzen abdrehen, die für eine Überlastung des Motortreibers noch nicht ausschlaggebend sind.
Wenn die Schutzschaltung schon beim Einschaltstrom abschaltet ist der Motortreiber zwar effektiv geschützt, die Lösung an sich aber noch nicht ganz befriedigend ;-)

avion23
02.10.2007, 20:19
@recycle
Ich weiß auch nicht wie der Komparator funktioniert :P
Der Trick ist, dass er keine PWM ausfiltern muss oder Stromspitzen oder oder... Es ist unnötig, den Effektivwert zu bekommen, der Maximalwert ist für eine Überstromabschaltung interessant.

Ein Beispiel: Mein Scheibenwischermotor hat ungefähr 4A Leerlaufstrom. Blockierstrom ist 85A. Das ist doch ein deutlicher Unterschied, die beiden Zustände sind also klar voneinander zu unterscheiden. Wenn man das Limit auf 20A legt, dann ist gut Luft nach oben und nach unten - sollte funktionieren.

http://www.mikrocontroller.net/topic/22766

recycle
02.10.2007, 22:12
Ein Beispiel: Mein Scheibenwischermotor hat ungefähr 4A Leerlaufstrom. Blockierstrom ist 85A. Das ist doch ein deutlicher Unterschied, die beiden Zustände sind also klar voneinander zu unterscheiden. Wenn man das Limit auf 20A legt, dann ist gut Luft nach oben und nach unten - sollte funktionieren.

"Sollte funktionieren" ist - zumindest in meinem Umfeld - die Umschreibung für "keine Ahnung ob's funktioniert" ;-)

Funktioniert es denn auch? ;-)



Wenn man das Limit auf 20A legt, dann ist gut Luft nach oben und nach unten

Wenn Motortreiber und Motor leistungsmässig ein bischen aufeinander abgestimmt sind, wird man oft nicht ganz so viel Luft nach oben und unten haben.
In kleineren Dimensionen verwendet man ja gerne mal den L298 für Motoren die im Normalbereich 1-2A bei starker Belastung aber auch mal mehr ziehen.
Der L298 verträgt auch mal kurze Stromspitzen von 3A bei einem Dauerstrom von 2,5A wird er aber sich aber irgendwann verabschieden.

In diesem Beispiel finde ich leider nicht so viel Luft nach oben und unten ;-)



Es ist unnötig, den Effektivwert zu bekommen, der Maximalwert ist für eine Überstromabschaltung interessant.
Sicher? Ich würde vermute eher, dass das frequenzabhängig ist.

recycle
02.10.2007, 22:20
Ein Beispiel: Mein Scheibenwischermotor hat ungefähr 4A Leerlaufstrom. Blockierstrom ist 85A. Das ist doch ein deutlicher Unterschied, die beiden Zustände sind also klar voneinander zu unterscheiden. Wenn man das Limit auf 20A legt, dann ist gut Luft nach oben und nach unten - sollte funktionieren.


Funktioniert es denn auch?
"Sollte funktionieren" ist in meinem Umfeld die Umschreibung für "keine Ahnung ob's funktioniert" ;-)




Wenn man das Limit auf 20A legt, dann ist gut Luft nach oben und nach unten

Wenn Motortreiber und Motor leistungsmässig ein bischen aufeinander abgestimmt sind, wird man oft nicht ganz so viel Luft nach oben und unten haben.

Wenn dein Motortreiber viel mehr als 20A könnte man ihn als überdimensioniert bezeichnen.
Wenn er weniger als 20A verträgt, würde ich nicht allzuviel drauf setzen, dass er nicht doch irgendwann abraucht.

Cairol
04.10.2007, 23:16
WIe wäre es, mittels des ADC Komparators die shunt+ Spannung mit einer Referenzspannung (Spannungsteiler?) zu vergleichen?

Das ändert leider nichts an der PWM-Problematik.
Ich vergleiche ja auch jetzt schon die Shunt-Spannung mit einer Referenz - nur halt ohne den hardware-Komparator.

Wie lange braucht denn eigentlich der Mega8 mit 16MHz für eine ADC-Messung?
Im Datenblatt steht nur was von "13 ADC-Zyklen".
Wenn der ADC schnell genug ist, könnte man vielleicht auch am Ende des normalen Programmablaufs (der Hauptschleife) einen "Burst" von 100 oder 1000 Messungen laufen lassen, den Maximalwert raussuchen und den dann verwenden.
Dann ist die Chance ja recht hoch das eine Messung dabei ist die den tatsächlichen Maximalwert abbildet.

Wenn das aussichtslos ist, wäre ich froh wenn mir jemand ne "Hausnummer"nennen könnte für die Grenzfrequenz eines RC-Glieds. Die Wertebestimmung der beiden Bauteile bekomm ich dann selbst hin.
Ich hab halt leider keine Infos über das PWM außer das ich folgenden BASCOM-Befehl verwende um es zu erzeugen:

Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Tccr1b = Tccr1b Or &H02 'Prescaler = 8

Das ist, wie gesagt, aus der RN-Control-Demo und ich habs einfach unverändert übernommen.
Woher nehm ich jetzt da die verwendete PWM-Frequenz?

Skragan
05.10.2007, 09:57
Willst Du den Mittelwert haben oder den Peakwert (z.B. als Überstromschutz) ? Hast Du ein Oszi zur Hand, um Dir später das gefilterte Signal anzusehen und vorher die PWM Frequenz festzustellen ? Ein Filter einfach so auszulegen passt meist nicht sehr gut, wobei Du natürlich auch schätzen kannst. Da Du den Motor aber mit PWM steuerst, findest Du die Frequenz sicher noch heraus.
Generell empfehlenswert ist der Einsatz eines kleinen OP´s, damit Du den Maximalwert auf Deinen ADC anpassen mittels des Verstärkungsfaktors kannst, ich nehme da einfach einen OP284 oder so...

Den Strom der PWM direkt messen kannst Du vergessen, das packt Dein ADC nie - da müsstest Du schon einen echt guten DSP haben, um das Signal korrekt auszuwerten.

Versuch einfach mal einen Tiefpass mit 4,7kOhm und 100nF - also Widerstand von Shunt nach Eingang ADC und den Kondensator vom ADC Eingang nach Masse. Wenn der Wert immernoch zu stark schwankt, 1µF einsetzen. Wenn das auch nicht geht, kommst Du ohne Skop nicht weiter, glaube ich ...

Cairol
05.10.2007, 22:43
Es geht um die Maximalwerte für eine Überstrom-Abschaltung.
Deine genannten Werte werd ich mal ausprobieren.

Da ich noch an der FH bin, hab ich auch Zugriff auf die tollen Speicher-Oszis im Labor.
Ist zwar schon 2 Jahre her das ich damit geabeitet hab, aber die sind ja nicht so kompliziert zu bedienen wie mein altes (aber hochwertiges) analoges Gerät zu Hause. (Ein haufen Dreh-, Drück- und Kippschalter und keine Bedienungsanleitung...)

Wenn das mit den Schätzwerten nicht klappt, geh ich mit dem Oszi ran.

EDIT:
Hab gerade eine Seite gefunden auf der die Formel:
"f(PWM) = Taktfrequenz / 510 (bei 8 Bit) / 1022 (bei 9 Bit) / 2046 (bei 10 Bit)" angegeben wird.
Mein PWM läuft mit 10 Bit, also wären das, wenn die Formel stimmt, etwa 7,820 kHz.
Allerdings berücksichtigt das nicht meinen eingestellten Prescaler von 8.
Kann das richitg sein?
Und wenn ja, wie kann ich dann das RC-Glied dimensionieren?

avion23
06.10.2007, 12:33
Ich komme mir gerade etwas verarscht vor. Ich habe mir soviel Mühe mit meinen Beiträgen gegeben und du schaffst es nicht mal, die von dir erzeugte PWM-Frequenz herauszubekommen? Und die genaue Auslegung für den Tiefpass habe ich dir auch genannt! Skragan ebenfalls!

@recycle

"Sollte funktionieren" ist in meinem Umfeld die Umschreibung für "keine Ahnung ob's funktioniert" Zwinkern
Ich habe in jedem Beitrag geschrieben, dass ich nicht weiß, wie es praktisch aussieht. Das war ein Diskussionsvorschlag und ein Versuch zu helfen.





Wenn Motortreiber und Motor leistungsmässig ein bischen aufeinander abgestimmt sind, wird man oft nicht ganz so viel Luft nach oben und unten haben.

Wenn dein Motortreiber viel mehr als 20A könnte man ihn als überdimensioniert bezeichnen.
Wenn er weniger als 20A verträgt, würde ich nicht allzuviel drauf setzen, dass er nicht doch irgendwann abraucht.
Bevor ich mich hier ausklinke: Der Motortreiber MUSS IMHO überdimensioniert sein!
- Der Anlaufstrom entspricht dem Kurzschlussstrom.
- Im Betrieb soll soviel Leistung wie möglich am Motor ankommen. Auch thermisch soll die Belastung so niedrig wie möglich sein.



Die Pulsweite der PWM dürfte auch keinen ganz unerheblichen Einfluss auf den Motorstrom haben und die kann man am Anfang der PWM-Periode auch noch nicht erahnen.
Daher kann es eigentlich nicht viel bringen eine einzelne Messung auf einen bestimmten Zeitpunkt während der PWM-Periode zu synchronisieren.

Ich vermute ein erster Schritt zum Erfolg ist, die PWM-Frequenz abgestimmt auf den Motor so hoch zu wählen, dass sich die PWM-Funktion aufgrund der Trägheit des Motorstroms nicht mehr im Strom wiederfindet.
Die Motorwicklung bildet zusamen mit dem Stator/Rotor eine Induktivität. Diese kann man meßen. Bis zum Sättingungsstrom ist diese sogar recht groß. Zum berechnen der optimalen PWM-Frequenz kann man die Motorwicklungen wie Spulen behandeln und die Formeln für einen step-down wandler im nicht-lückenden Betrieb verwenden. Der Strom (!) ist dann annähernd konstant. Es tritt dabei keine zusätzliche Verlustleistung durch die PWM auf!
Siehe auch
http://www.4qdtec.com/pwm-01.html
https://www.roboternetz.de/phpBB2/viewtopic.php?t=18915&start=0
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=101756
Mehr links habe ich in meinen bookmarks nicht gefunden. Ich habe meine Informationen von einer Seite, auf der die Entwicklung von Brushless Controllern genau erklärt wird. Der Stromfluss wird dabei mit schönen bunten Bildern erklärt. Vielleicht mal googlen.


@Alle
Das Problem des Anlaufstroms hat man immer, ob geglättete PWM oder nicht. Man kann es aber softwaretechnisch lösen :) Im Betrieb kann man zwei Zustände unterscheiden.
1. DC = 100%. Dann ist keine Glättung notwendig.
2. DC < 100%. Wenn man den Peakwert verwendet und als Effektivwert benutzt hat man immer noch genug Spielraum, weil der Motortreiber auf den DC=100% Fall ausgelegt sein muss. Es wird vielleicht etwas zu früh abgeschaltet. Dafür aber rechtzeitig, weil man keine Verzögerund durch das RC-Glied hat. Meine Lösung ist schnell, sicher, braucht keine zusätzlichen Bauteile und einfach zu lösen.

Cairol
06.10.2007, 23:15
@avion23:
Ich glaube wir haben uns nicht richtig verstanden:
Ich zitier mich mal selbst:



Ich hab halt leider keine Infos über das PWM außer das ich folgenden BASCOM-Befehl verwende um es zu erzeugen:


Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Tccr1b = Tccr1b Or &H02 'Prescaler = 8

Das ist, wie gesagt, aus der RN-Control-Demo und ich habs einfach unverändert übernommen.


Damit dürfte wohl klar sein, dass ich keine Ahnung habe welche Frequenz das so erzeugte PWM-Signal hat.
Zu Beginn meines Projekts (also noch völlig ohne Vorkenntnisse über Mikrokontroller, BASCOM, ect.) hab ich das RN-Control-Board gekauft und das mitgelieferte Funktionstest-Programm, das in BASCOM geschrieben wurde, als Grundlage für mein eigenes Steuerprogramm genommen.
Sieh mir also bitte nach, wenn ich aus dem o.g. BASCOM-Befehl nicht die PWM-Frequenz herauslesen kann.

@All:
Ich hab im Datenblatt vom ATMega8 die Komparator-Geschichte mal angeschaut.
Wenn er die Peak-Werte trotz PWM zuverlässig erfassen kann, wäre das wirklich eine clevere Lösung.
Morgen ändere ich die Schaltung entsprechend und probier das aus.
Bis hierher schonmal Danke an alle.

Skragan
08.10.2007, 08:12
Hallo Cairol,

wenn Du nur den Peak als Überstromschutz auswerten möchtest, dann mach das doch lieber mit angehängter Schaltung. Die funktioniert auch ohne µC ! Wenn wir Schaltungen entwickeln, sorgen wir immer dafür, das die Hardware auch bei Softwarefehlern "ganz" bleibt, das ist IMHO eine der wichtigsten Regeln. Der Controller DARF nicht in der Lage sein, die Hardware zu zerstören. Diese Schaltung ist in Grenzen (Tiefpass)unabhängig von der PWM Frequenz, geht auch bei 100% und benötigt nur wenige günstige Teile.

Beschreibung:
Der PWM Ausgang des µC wird über ein FlipFlop mit dem Ausgang eines Komparators, welcher den Überstrom misst, verknüpft. Solange kein Überstrom auftritt, kommt die PWM zum Treiber durch. Im Überstromfall wird die PWM sofort hardwareveriegelt, ohne das der Controller etwas dafür tun muss: Die Endstufe bleibt heil. Gleichzeitig bekommt der µC eine Rückkopplung über /Q, welche man auf einen Interrupt legen kann. Dann weiß der Controller auch, das die Endstufe leidet. Funktioniert einwandfrei, man muss lediglich den Komparator richtig einstellen durch korrekts Auswahl von R7, R12, R13.
Anbei auch nochmal zur Erklärung die Wahrheitstabelle, dort ist nochmal erklärt, wie die Signale aussehen müssen. Mein wahrhaftig genialer Kollege hat übrigens diese Schaltung entworfen, ich möchte mich ja nicht mit fremden Federn schmücken. :)

Noch etwas zur Dimensionierung: Ja, der Treiber (Endstufe) sollte ordentlich überdimensioniert sein. Bei meiner Schaltung (die steuert den Antrieb eines Unterwasserscooters) kann die Endstufe locker den 5fachen Nennstrom des Motors. Ebenso sollte die Freilaufdiode dimensioniert sein.

Cairol
08.10.2007, 15:11
Große Güte! :shock:
Also ich werd die Schaltung auf jeden fall speichern und bei Bedarf verwenden wenn genügend Platz vorhanden ist. (bzw. ich den Platz dafür eingeplant habe...)
Für mein jetziges Projekt kann ich das aber vergessen, denn die Platine ist ja schon fertig gelötet.
Mehrere OpAmps, RSFF, Dioden ect. bekomm ich da nicht mehr unter.

Aber jetzt ist die Platine sowieso schon für die Verwendung des Komparators umgelötet, das wird jetzt auch so versucht.
Als Referenzspannung vom Komparator sind ca. 500 mV angelegt. Das entspricht einem Strom von rund 1,8 A. Da soll dann abgeschaltet werden.
Das ist dann auch deutlich unter den 2A bzw. 2,5 A die der L298 lang- bzw. kurzfristig mitmacht.
Die Freilaufdioden sind auf 3A Dauerstrom ausgelegt.

Ich muss aber noch im Software-Bereich vom Forum um Hilfe bei der Programmierung des AC's bitten, denn die BASCOM-Hilfe und Google geben da leider nicht viel brauchbares her.
Wenn ich das Software-Problem gelöst habe, melde ich mich wieder.

Gruß, Cairol.

Skragan
08.10.2007, 16:29
Na gut :)

Was genau ist der AC ? Vielleicht kann ich ja helfen ?

Cairol
10.10.2007, 11:06
Der "Analog Comparator".

Ich hab da keine genauen Infos über die Software-Ansteuerung.
Beispiele in BASCOM sind leider ziemlich rar gesät.

Der AC soll permanent messen und den Ausgabewert im "ACO"-Register jederzeit auslesbar sein.
Vielleicht verwende ich auch stattdessen den ACO-Interrupt - je nach dem was sinvoller ist.

Ich hab zwar schon was zusammengestellt, aber so richtig tuts noch nicht.
Darum kann ich mich aber leider erst am Wochenende kümmern.
Meinen Code gibt's dann auch.

Skragan
10.10.2007, 11:38
Vielleicht habe ich es überlesen, aber welchen Proz nimmst Du eigentlich ?

Cairol
10.10.2007, 20:32
Einen ATMega8 mit 16 MHz-Quarz.

Skragan
11.10.2007, 08:19
Hi,

ich hab´s gerade mal im Datenblatt überflogen. Sinnvoller wäre es doch, wenn Du das Bit ACO nicht abfragen musst, sondern einen Interrupt bekommst, wenn Überstrom kommt. Sonst könnte es ja sein, daß Du den Überstrom übersiehst. Um das einzustellen, musst Du doch nur ein paar Register setzen, das mache ich immer direkt, weil in Bascom oft kleine Fehler drin sind. So z.B. das ACME Bit in SFIOR:

Set SFIOR.ACME 'AC Mux enable
ACSR =&B01011110

Und so weiter. Das sollte eigentlich funktionieren. Also das Datenblatt ab Seite 190 genauestens durchlesen und die Register entsprechend setzen. An dieser Stelle einfach mal kein Bascom. Das nimmst Du dann nur für die ISR und zum Interrupt löschen.

avion23
11.10.2007, 15:55
Ich habe gerade noch einen Thread unter mikrocontroller.net gefunden. In diesem wird die genaue auslegung des rc-glieds behandelt, voraussetzungen ähnlich wie hier.
http://www.mikrocontroller.net/topic/80643

Nur falls mal jemand über diesen Thread stolpert :)

Cairol
14.10.2007, 14:56
Also ich hab jetzt mal probiert das mit Skragans Befehlen zu machen, aber es funktioniert genausoweinig wie mit den BASCOM-Befehlen.

Das Problem ist, dass die Aci_Isr ständig gefeuert wird, obwohl ich mit dem Multimeter am Pin AIN0 = 0V und an AIN1 = 500 mV messe.
Referenz ist also im Moment 500 mV.
Solange der Motor abgeschaltet ist, liegt die Spannung an AIN0 also natürlich unter AIN1.
Trotzdem startet die ISR ständig.

Hier mal die relevanten Code-Stücke:


Set SFIOR.ACME 'AC Mux enable
ACSR = &B01011011 'sollte ISR=Ein, Timer1-Verbindung=Aus und Flanke=Rising sein...

On Aci Aci_isr 'Interrupt Vektor
'Start Ac 'Comparator-Überwachung starten
'Enable Aci 'ACI-Interrupt aktivieren

Config Pind.6 = Input 'Analog-Comparator: Motorstrom-Messung (Spannung über Shunt)
Config Pind.7 = Input 'Analog-Comparator: Referenz für Motorstrom (500 mV, was ca. 1,85 A entspricht.

'Für ANTRIEB (Buchse A)
Config Pind.4 = Output 'Antrieb Kanal 1
Config Pind.5 = Output 'Antrieb Kanal 2
Config Pinb.1 = Output 'Antrieb PWM

AntriebPWM Alias Pwm1a 'Antrieb-Einstellung (PWM)

'MOTOR-ÜBERSTROM-SCHUTZ
Aci_isr: 'ISR-Routine für Motor-Überstrom
AntriebPWM = 0
print "MOTOR_OVERLOAD"
waitms 500


Ich weis nicht ob ich den Bit-Code für das ACSR-Register richtig gesetzt habe.
Ich möchte den Interrupt für den AC verwenden, bei steigender Flanke auslösen und keine Verbindung mit Timer1 haben.

Den Schaltplan und den kompletten Programm-Code hab ich angehängt.

the_muck
28.03.2010, 15:21
Moin,
ich hol das einfach noch mal hoch, selbes Problem ;).

Ich Steuere 2 DC Mototen über den L298, als Messwiderstand habe ich wie gewohnt einen 0,47 ohm 5W Widerstand verbaut... Das signal ist aber derbe verrauscht und eine Idee wie man an das geschickt auswertet habe ich auch noch nicht... wie macht das denn der L297 mit der Strombegrenzung?

http://img651.imageshack.us/img651/665/ds0001ibk.th.png (http://img651.imageshack.us/i/ds0001ibk.png/)

Gelb ist das PWM vom µC am L298, Blau die Spannung am Messwiderstand... der Motor sollte eigentlich nach Datenblatt intern Entstört sein...

Habe irgend wo was von einem RC Filter gehört mit 0,1uF und 10K Ohm wäre ein fg = 159.15 Hz, da ich ja mit 250Hz PWM den Motor betreibe habe ich ihn mit 4,7K ohm ausgelegt macht ein fg = 338.63Hz... macht aber irgendwie keinen unterschied ob mit oder ohne RC Filter. Wirklich brauchen tu ich das nicht aber wäre fein wenn es Funktionieren würde ;)

lg

Besserwessi
28.03.2010, 15:59
Wenn ein DC Motor Entstört ist, heißte dass vor allem das es nicht mehr so viele HF Störungen bei Frequenzn im MHz bereich und darüber gibt. Die Störungen bei niedreigeren Frequenzen hat man weiter, und kann sie auch kaum vermeiden.

Bei der Schaltung mit dem L297 hat man in der Regel Schrittmotoren und daher kaum Störungen. Sonst ggf. auch einen RC Filter.

Der RC Filter soll die Störungen nur vom AD Wandler fernhalten und dem ein schon geglättetes Signal geben. Ein Tiefpass mit run 300 Hz sollte da schon was dran ändern. Das letzte Bischen muß dann der µC durch mitteln erreichen.

the_muck
28.03.2010, 19:52
mmm ok danke erst mal,
da mein ~330 Hz Filter keine Änderung bringt... mmm ja wie kann man dem breiten Signal noch entgegen wirken? Oder besser warum ist das so breit?

lg