Motorstrom an L298 trotz PWM messen
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.
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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? ;-)
Zitat:
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 ;-)
Zitat:
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.
Liste der Anhänge anzeigen (Anzahl: 2)
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.
Liste der Anhänge anzeigen (Anzahl: 2)
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:
Code:
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.