Forum: Mikrocontroller und Digitale Elektronik Stromaufnahme von Digitaleservo mit ADC messen


von KeinExperte (Gast)


Angehängte Dateien:

Lesenswert?

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???

von Stefan K. (stkl)


Lesenswert?

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
von KeinExperte (Gast)


Lesenswert?

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?

von Stone (Gast)


Lesenswert?

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

von KeinExperte (Gast)


Lesenswert?

Für die Softwarelösung mit dem gleitenden Mittelwert sollte die 
Abtastrate wohl um einiges höher sein als die Frequenz des Servo, oder?

von KeinExperte (Gast)


Lesenswert?

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

von KeinExperte (Gast)


Lesenswert?

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??

von Stefan K. (stkl)


Lesenswert?

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
von KeinExperte (Gast)


Lesenswert?

Vielen Dank!

von Stefan K. (stkl)


Lesenswert?

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
Noch kein Account? Hier anmelden.