Forum: Mikrocontroller und Digitale Elektronik ADC sauber auf PWm synchronisieren


von Ingo L. (corrtexx)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe einen ADC der sauber auf ein PWM Signal synchronisiert 
(TimerOverflow, wenn TCNT ~0) werden soll.

Das Sample&Hold soll also bei ~ der steigenden Flanke der PWM 
(non-invertig) erfolgen. Da die PWM mit 10kHz läuft und ich auch 
möglichst kleine Tastgrade samplen möchte (BEMF eines BLDC) ist also ein 
genaues Timing gefragt.

Laut DB, des Mega328, benötigt der ADC 2 ADC-Takte vom Start der 
Wandlung bis zum S&H. Somit muss ich die Wandlung 12,8µs vor dem 
Timeroverflow anstoßen damit die Wandlung synchron erfolgt, wenn der ADC 
mit 20MHz/128 läuft. Ist der Gedankengang richtig?



Ingo

von Martin S. (led_martin)


Lesenswert?

Grundsätzlich ist Deine Überlegung richtig, praktisch wirst Du aber 
Probleme bekommen. Bei solch einer Motor-Ansteuerung ist direkt nach 
jeder Schaltflanke, also auch nach der Fallenden des letzten PWM-Pulses, 
viel Unruhe im System (Habe die letzten Jahre damit zugebracht, solche 
Sachen zu entwickeln), da wird eine ADC-Messung nur Zufallszahlen 
liefern. Für die Messung sollte man sich also einen Zeitpunkt suchen, 
der genügend Abstand zur vorigen Schaltflanke hat. Bei Leerlauf mag das 
noch alles gehen, wenn dann aber Zig Ampere fließen ... Du startest die 
A/D-Wandlung per Auto-Trigger? Wenn ja, ist das gut, wenn nicht, hast Du 
das Problem, daß der Wandler das Startsignal erst beim nächsten ADC-Takt 
erkennt.

Mit freundlichen Grüßen - Martin

von Uups (Gast)


Lesenswert?

Solche Dinge kann man mit einem schnellen PIC (dsPIC) machen, der einen 
schnellen ADC (2us) hat und per hardware auf den PWM triggern kann. Die 
AVR haben zu langsame ADC fuer solche Konzepte..

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Uups schrieb:
> Solche Dinge kann man mit einem schnellen PIC (dsPIC) machen, der einen
> schnellen ADC (2us) hat und per hardware auf den PWM triggern kann. Die
> AVR haben zu langsame ADC fuer solche Konzepte..

Unsinn! Das kommt auf das Projekt an. Per Hardware triggern kann der AVR 
auch. Und der ADC des klassischen AVR liefert bei 500kHz ADC-Frequenz 
(38kHz Abtastung) bei 8Bit noch zuverlässige Werte. Damit wird 
10kHz-PWM-Abtastung kein Problem. Der Triggerzeitpunkt muss nur immer 
synchron zur PWM laufen, wie oben schon erwähnt, leicht hinter dem 
Umschalten.

Ingo L. schrieb:
> und ich auch
> möglichst kleine Tastgrade samplen möchte (BEMF eines BLDC)

Für BEMF eignet sich auch der Analog-Komparator. Bei den nicht ganz 
alten AVRs kann man diesen auf den ADC-Multiplexer legen und somit 
mehrere Punkte in der Hardware sukzessive abtasten.

: Bearbeitet durch User
von Ingo L. (corrtexx)


Lesenswert?

Also ich habe ich es jetzt mit dem ADC gut hinbekommen. Der Motor läuft 
sauber an, auch bei sehr niedrigen Drehazahlen. Leider fehlt mir jetzt 
noch eine entprechende Belastung der Welle, da sonst bei hohem Duty das 
Ding an zu kippeln fängt. Ma gucken was ich da mache.

Wenns fertig ist stelle ich es als Artikel rein.

von M. K. (sylaina)


Lesenswert?

Ingo L. schrieb:
> Wenns fertig ist stelle ich es als Artikel rein.

Das finde ich prima, das würde mich nämlich auch interessieren.

von Andreas T. (skycurve)


Lesenswert?

Bei sowas nimmt man Center aligned PWM und triggert den ADC genau in der 
Mitte des Dutycycles. Hier sind die PWM Schalteinflüsse am geringsten. 
Allerdings weiß ich nicht, ob AVR das auch kann. Mit ARM ist das aber 
kein Problem.

Gruß

: Bearbeitet durch User
von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Andreas True schrieb:
> Bei sowas nimmt man Center aligned PWM

Heißt beim AVR Dual Slope.

von Ingo L. (corrtexx)


Lesenswert?

Ich werde es mal ausprobieren und berichten. Bisher läuft es auch so 
schon ordentlich, aber Verbesserungen schaden ja nicht ;)

von Ingo (Gast)


Lesenswert?

Aber wenn es 12us dauert bis das S&H erfolgt, dann müsste der Duty ja 
min. >24% sein. Also nicht so gut...

von True Crypt (Gast)


Lesenswert?

Andreas True schrieb:
> Bei sowas nimmt man Center aligned PWM und triggert den ADC genau in der
> Mitte des Dutycycles. Hier sind die PWM Schalteinflüsse am geringsten.

Wie soll die Schaltung in die Zukunft gucken. Unmittelbar vor der 
nächsten Schaltflanke sind die zeitlichen Einflüsse der vorhergehenden 
Umschaltung maximal abgeklungen.

von Ingo (Gast)


Lesenswert?

True Crypt schrieb:
> Andreas True schrieb:
> Bei sowas nimmt man Center aligned PWM und triggert den ADC genau in der
> Mitte des Dutycycles. Hier sind die PWM Schalteinflüsse am geringsten.
>
> Wie soll die Schaltung in die Zukunft gucken. Unmittelbar vor der
> nächsten Schaltflanke sind die zeitlichen Einflüsse der vorhergehenden
> Umschaltung maximal abgeklungen.

Ich versteh nur Bahnhof!?

von Andreas T. (skycurve)


Lesenswert?

True Crypt schrieb:
> Wie soll die Schaltung in die Zukunft gucken.

Versehe auch nicht, wie du das meinst.

True Crypt schrieb:
> Unmittelbar vor der
> nächsten Schaltflanke sind die zeitlichen Einflüsse der vorhergehenden
> Umschaltung maximal abgeklungen

Du musst bedenken, dass der TE vermutlich nicht mit konstanter PWM Duty 
fahren wird und dass der Motor mit 3 Anschlüssen an drei verschiedenen 
PWMs hängt. Deshalb geht man bei einer Motorsteuerung davon aus, dass 
die Störeinflüsse in der Mitte des Dutys oder der Lowzeit am geringsten 
sind.

: Bearbeitet durch User
von Ingo L. (corrtexx)


Lesenswert?

Sensorlose BLDC Ansteuerung


Viel Spaß damit ;)



P.S.:
Kritik erwünscht

: Bearbeitet durch User
von Andreas T. (skycurve)


Lesenswert?

Hallo corrtexx,

hast du deinen ADC so eingestellt, dass der Hardwaremäßig als Komparator 
arbeitet und du deine Kommutierung im Komparator Interrupt durchführst?
Wird ja normalerweise bei den ModellbauESCs mit kleinen AVRs so gemacht.
"Manuell", also softwareseitig die Spannung zu vergleichen kostet doch 
viel zu viel Zeit.

: Bearbeitet durch User
von Ingo (Gast)


Lesenswert?

Ich benutze den ADC, weil die Komparatorlösung gab/gibt es ja schon 
ausreichend beschrieben in dem anderen Artikel. Wie gesagt, mehr als 
10kHz PWM und ADC Samplefrequenz packt der ADC nicht.
Es wird also zyklische jede PWM Periode gemessen, allerdings nur mit 
5KHz die PWM abgetastet, leider

von Andreas T. (skycurve)


Lesenswert?

Achso, das ist schon doof dass der ADC/S&H so lange braucht. Dann kannst 
ja wie oben schon geschrieben, nicht unter 24% Duty gehen oder?
Macht es denn bei dir überhaupt Sinn, den ADC mit der PWM zu koppeln? 
Wenn ich es deinem Schaltplan richtig entnehme, vergleichst du die 
Floatende Phase (BEMF) mit der mittleren Spannung der 3 Phasen und bei 
über- oder unterschreiten kommutierst du oder?
Ist der ADC als Komparator konfiguriert auch so langsam?

von Ingo L. (corrtexx)


Lesenswert?

Wie ich es mache ist in dem Artikel von TI auf Youtube beschrieben bzw. 
Danach habe ich mich gerichtet.

Der Komparator ist schneller denke ich mal. Die Spannung bzw. das Label 
"Star" ist ungenutzt. Ich habe mir aber die Option der Komparatorlösung 
layoutmäßig offen gelassen.

Ich triggere jetzt die Messung etwa 10us vor der nächsten Periode an, 
damit das S&H kurz nach der neuen Periode beginnt. Damit kann ich Dutys 
unter 5% noch sauber erfassen.

: Bearbeitet durch User
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.