Hallo, möchte die Stromaufnahme eines Digitalservos über einen Shunt messen. Ich experimentiere dazu gerade mit dem INA169 von TI. Mein Problem ist, dass der Motor im Servo ja mit einem Takt (~50Hz ??) läuft, der einzige Weg vernünftige Messergebnisse zu bekommen scheint mir ein Tiefpass am Ausgang des INA169 womit ich relativ lange Response-Zeiten hätte.. Gibt es da noch elegantere Lösungen???
Um was für eine Art Servo handelt es sich denn? Brushless-Regler arbeiten meist mit Frequenzen im kHz Bereich, gleiches gilt auch für viele PWM-geschichten bei anderen DC-Regelungen. Ggf. besteht die Möglichkeit, den Strom an einer anderen Stelle (z.B. vor'm Regler und dessen mittlere Aufnahme rausrechnen - sofern nicht vernachlssigbar). Oder die Spannung über den Shunt auskoppeln (Impedanzwandler oder einfach mit Dioden) und mit einer RC-Kombi glätten Oder je nachdem, wie weiterverarbeitet wird mit einem schnellen ADC arbeiten und softareseitig einen gleitenden Mittelwertfilter über eine Periode legen, ergibt bei gepulster Gleichspannung den Effektivwert.
:
Bearbeitet durch User
Hi, es handelt sich um den SA-1258TG von SAVÖX: http://www.savox.de/produkte/servos/standard/item/sa-1258tg?category_id=6 Leider finde ich auf der Seite keine Angaben zur Lauffrequenz. Wie funktioniert das mit dem auskoppeln? Könntest du da ein Beispiel machen?
Miss erst mal den Stromverlauf mit einem Oszi. Ich hab sowas für meinen BA gebraucht und die Stromaufnahme des Servos war nicht Konstant sondern Impulsförmig (je länger der Impuls umso höher die Stromaufnahme). Damit war es super easy, ich musste nicht mehr per ADC messen und Integrieren sondern konnte mit Komperator und Timer die Impulsdauer messen und damit dem Strom bestimmen. Gruß Matthias
Für die Softwarelösung mit dem gleitenden Mittelwert sollte die Abtastrate wohl um einiges höher sein als die Frequenz des Servo, oder?
Stone schrieb: > Miss erst mal den Stromverlauf mit einem Oszi. Ich hab sowas für > meinen > BA gebraucht und die Stromaufnahme des Servos war nicht Konstant sondern > Impulsförmig (je länger der Impuls umso höher die Stromaufnahme). Damit > war es super easy, ich musste nicht mehr per ADC messen und Integrieren > sondern konnte mit Komperator und Timer die Impulsdauer messen und damit > dem Strom bestimmen. > > Gruß Matthias Hey Matthias, das hört sich echt interessant an! Leider steht mir kein Oszi zur Verfügung :-( Deshalb werde ich mein Problem wohl auch nicht lösen können, ich sollte wohl zumindest die Frequenz des Servos kennen.. hmpf
Also mit Tiefpass und Mittelwertblidung per Software bekomme ich gute Ergebnisse, ich kann so zuverlässig auf einen Grenzwert prüfen.. Mich interessiert jetzt aber wie genau das mit dem gleitenden Mittelwert funktioniert.. hat da jemand ein Beispiel??
Du füllst ein Array mit Datenpunkten, wenn es voll ist (also ach einer oder mehreren Perioden), Mittelwert bilden. Dazu sollte natürlich die Frequenz und (höhere) Abtastrate bekannt sein und entsprechend die Feldgröße angepasst. Die kommenden Werte werden dann einfach von vorne an überschrieben und mit jedem neuen Wert gibt es einen neuen Mittelwert. Du schiebst quasi ein Fenster mit immer der gleichen Anzahl an Werten vor dir her. Oder in Pseudocode:
1 | schleife start |
2 | werte{i] = neuerWert |
3 | bildeMittelwert( werte ) |
4 | i = i+1 |
5 | wenn i = max: |
6 | i = 0 |
7 | schleife ende |
Bei unbekannten Frequenzen kann man auch dynamisch mit Flankenerkennung (oder Nulldurchgang bei Wechselsignalen) arbeiten und entsprechend die Anzahl der Samples dynamisch festlegen... Wenn Abtastrate und Frequenz kein vielfaches sind, halt mehre Perioden nehmen, eine Verzögerung entsteht ja nur beim ersten Zyklus, danach kommen die Werte quasi in Echezeit.
:
Bearbeitet durch User
Die oben angesprochene Alternative von Matthias wäre bei Rechtecksignalen auch relativ leicht umsetzbar: Flankenerkennung steigend/fallend/steigend. Zeiten dazwischen bestimmen (über PCINT und Timer mit jedem µC schnell realisierbar), dann hat man Periode und Tastverhältnis. Maximalstrom ist entweder bekannt oder müsste pro Periode 1x bestimmt weden (unmittelbar nach der steigenden Flanke), entsprechend hat man einen Effektivwert Tastverhältnis*MaxStrom, der sich 1x pro Periode aktualisiert. Käme in Betracht, falls der ADC zu langsam ist und nicht genügend Datenpunkte liefert. Wenn man den MaxStrom vorgibt (bei konstantem Widerstand/Spannung) käme man sogar ohne ADC aus. Etwa so:
1 | Timer-Interupt: |
2 | Zähler +1 |
3 | |
4 | Interrupt steigende Flanke: |
5 | Periode = Zähler |
6 | Strom = MaxStrom * Impulsbreite / Periode |
7 | Zähler = 0 |
8 | |
9 | Inerrupt fallende Flanke: |
10 | Impulsbreite = Zähler |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.