Forum: Analoge Elektronik und Schaltungstechnik Brushless DC Motorsteureung Dysfunktion AVR444


von Richard (Gast)



Lesenswert?

Hallo Leute,
Ich habe eine 3-Phasen Bürstenlose Motorsteuerung aufgebaut aber sie 
funktioniert nicht korrekt. Ich habe dazu die AVR444 Applikation Note 
verwendet: 
[[http://www.google.at/url?sa=t&rct=j&q=avr444&source=web&cd=1&ved=0CDEQFjAA&url=http%3A%2F%2Fwww.atmel.com%2Fimages%2Fdoc8012.pdf&ei=EGtVUeyRLcTFPM7OgNgK&usg=AFQjCNG02GeahoXBFtiZi-vWIuT36XhlQw&bvm=bv.44442042,d.d2k]]
In dieser Note wird erklärt wie man die Schaltung aufzubauen hat, der C 
Code ist gegeben: 
[[http://read.pudn.com/downloads192/sourcecode/embed/903064/main.c__.htm]]
Letztendlich will ich damit einen Festplattenmotor ansteuern. Wenn ich 
das ganze einschalte, schafft es das Programm nicht weiter als den 
blinden Startup. Beim Startup wird nämlich keine Back-EMF und 
Strommessung gemacht.
Da der Motor sensorlos ist kann die Drehzahl nur über diese back-EMF 
gemessen werden. Die Strommessung dient dazu um den Motor abzuschalten 
wenn eben der Strom zu hoch ist. Zu beginn wird der Motor in eine 
Position gezogen kurz gewartet bis er sich einpendelt und dann werden 
einfach für kurze Zeit die drei Phasen durchgeschallten mit Verzögerung 
dazwischen um den Motor anzuwerfen. Jetzt wo er sich dreht sollte die 
back-EMF Messung möglich sein, wenn sich eine unbestromte Spule an einem 
Magneten vorbeibewegt und eine Spannung induziert wird die der µC messen 
kann.
In meinem Fall bricht das Programm jedes mal nach dem Startup die 
Prozedur ab und beginnt von neu. Es scheint, als würde bei der Messung 
irgendwas nicht funktionieren. Habe schon echt viel probiert aber ich 
bekomme es nicht hin.
Habe alles auf einem Steckbrett aufgebaut, sogar ziemlich sauber. Habe 
die digitale Masse von der Leistungsmasse getrennt. Hat das Signal 
wesentlich sauberer gemacht. Habe zeitweiße beim µC Programmieren mit 
den Fuses die Frequenz durch 8 geteilt, dann sind alle Spannungen 
komplett ohne Spitzen (sauber). Wenn ich den Teiler nicht setzte sind 
einige Schaltspitzen auf allen Signalen. Diese kommen von der PWM, damit 
wird über mehrere Und-Gatter die Leistung variiert.
Am Steckbrett ist alle genau so aufgebaut wie am Plan, mehrmals 
gecheckt. Die Phasen werden auch alle richtig geschalten > nur über die 
1,5 Sekunden Hochfahrroutine geht es nicht hinaus. Ich denke es liegt 
irgendwie an der Rückführung. Die Geschwindigkeitsteuerung von 0-5V 
(0-100% Drehzahl) habe ich so auf 3 V gelegt auf PC4. Die Scheiben der 
Festplatte habe ich zeitweise entfernt um die Trägheit zu midern beim 
anfahren.

Vielleicht habe ich auch nur einen groben Logikfehler in der Schaltung.
Könnte mal jemand über den Schaltplan drüber schauen?
Ist ein Teil meiner HTL Diplomarbeit und es sollte so schnell wie 
möglich funktionieren, habe schon mächtig Zeitdruck.
Würde mich sehr freuen wenn mir jemand helfen könnte :)

Schaltung ist natürlich angehängt.
Datenblätter auch.

von Michael F. (startrekmichi)


Lesenswert?

vergleich deine Schaltung/Code mal mit der hier (basiert auf der 
gleichen Appnote):
http://www.ulrichradig.de/home/index.php/avr/brushless-motor-controller

Die Pullups für die P-FETs erscheinen mir etwas groß. Bei C29-31 sind 
die Werte nicht angegeben, ev ist dein Tiefpass zu tief ;) Das war 
nämlich bei meinem schnell drehenden Mikro-BLDC der Fall, da ist er auch 
häufig nicht angelaufen.

Allgemein kommt mir deine BACK-EMF Messung etwas komisch vor. Eigentlich 
willst du ja zur Kommutierung den "Null"-durchgang einer Phase erkennen. 
Deine aktuelle Beschaltung von Aref lässt das aber glaube ich gar nicht 
zu, beim Nulldurchgang liefert dir der ADC dann genau 1023, der 
"positive" Bereich ist nicht messbar. Im obigen Link ist die 
Durchgangserkennung deshalb per Komparator gemacht. Oder habe ich jetzt 
einen Denkfehler?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

Ich hab dir mal das BEMF Netzwerk einer Phase aus dem MC100 
Motorcontrolboard angehängt, falls du dir die Unterlagen nicht selber 
geladen hast.

von Richard L. (richard86)


Lesenswert?

Danke erst mal,
ok das mit dem Bild vom BEMF ist mir irgendwie nicht ganz klar... wie 
kann man das in die Schaltung integrieren?

Bei der Schaltung von ulrichradig.de is es eh ähnlich wie bei mir doch 
verwendet er den comparator.
So wie ich das verstanden habe muss man den nicht verwenden oder?

"2.4.7 Overcurrent detection/protection
The ADC current measurements are made once each PWM cycle, or 
approximately
every 50μs at 20kHz PWM base frequency. If faster reaction to a critical 
overcurrent situation is needed, the analog comparator can be used. The 
filtered shunt voltage is connected to one analog comparator input. A 
fixed voltage representing the shunt voltage at maximum current 
consumption is connected to the other input. It is thus possible to get 
an interrupt that cuts power if the current is critically high. Note 
that any running interrupt must finish before the analog comparator 
interrupt is run, so there can be a small latency before power is cut. 
An external circuit that disables the PWM signal can be used if it is 
critical that power to the motor is shut down very quickly."

von Michael F. (startrekmichi)


Lesenswert?

Richard Lunz schrieb:
> Bei der Schaltung von ulrichradig.de is es eh ähnlich wie bei mir doch
> verwendet er den comparator.
> So wie ich das verstanden habe muss man den nicht verwenden oder?
>
> "2.4.7 Overcurrent detection/protection

Er verwendet den AC für die Kommutierung, nicht für irgendwelche 
Strommessungen! Du willst die Spannung per ADC messen und dann digital 
mit dem Mittelwert vergleichen, um zu sehen ob du jetzt kommutieren 
musst. Er vergleicht die Spannungen einfach analog.
Ich habe mir deine Schaltung nochmal angesehen und glaube jetzt, dass 
die im Prinzip auch gehen sollte.

Das Einfachste wird jetzt sein, sich ein Oszi zu schnappen und mal die 
Back-EMF anzuschauen.


Richard schrieb:
> Am Steckbrett ist alle genau so aufgebaut wie am Plan, mehrmals
> gecheckt.
Ich kann dir von hier aus sagen, dass das Plan und dein Steckbrett nicht 
übereinstimmen. Aus dem einfachen Grund, dass im Plan ein ATmega8-*AI* 
eingezeichnet ist, sprich ein TQFP-Gehäuse (SMD). Und die Pinbelegungen 
sind nicht kompatibel zum PDIP. Aber nach dem Foto hast du's glaube ich 
trotzdem richtig verkabelt (also mit PDIP-Pinbelegung) ;-)

Wofür soll eigentlich die Messung an PC5 gut sein? Da liegt die gleiche 
Spannung an wie an Aref, sprich für den Kanal wird der ADC immer 1023 
liefern.

Richard Lunz schrieb:
> ok das mit dem Bild vom BEMF ist mir irgendwie nicht ganz klar... wie
> kann man das in die Schaltung integrieren?
Die Schaltung hast du schon, nur mit anderen Bauteilwerten. Nochmal die 
Frage: wie groß sind bei dir die Kondensatoren?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ich kann dir nur raten, wenn du die AVR444 nachbaust, dir auch die 
Unterlagen zum MC100 zu laden, da die meisten AVR Motorkontroll 
Applikation auf diesem Board aufbauen.
Dein Problem liegt, wie oben schon erwähnt, zum grossen Teil an der 
AREF.

Richard Lunz schrieb:
> Danke erst mal,
Da nich für...
> ok das mit dem Bild vom BEMF ist mir irgendwie nicht ganz klar... wie
> kann man das in die Schaltung integrieren?
Bei PH_C ist der Motor angeschlossen und bei BEMF_C der ADC. Die 470pF 
sind im Board optional bestückbar.

von Richard L. (richard86)


Lesenswert?

Michael Frangenberg schrieb:
> wie groß sind bei dir die Kondensatoren?
Nachgemessen: 1,3nF

Michael Frangenberg schrieb:
> Wofür soll eigentlich die Messung an PC5 gut sein? Da liegt die gleiche
> Spannung an wie an Aref, sprich für den Kanal wird der ADC immer 1023
> liefern.

ATmega48 pin       Connected to        Direction
PC5                VCC reference       In

denke, dass damit die 5V gemeint sind.

von Richard L. (richard86)


Lesenswert?

Hallo,

habe jetzt noch bischen durch die Aplikation gelesen und bin mir 
garnicht mehr sicher ob das mir den ADC Referenz Spannungen und so 
stimmt.
Die Unsicherheit betrifft AVCC, AREF, und PC5.
PC5 soll VCC-Reference sein laut Pin Tabelle.
Hier ein Ausschnitt aus der Apnote:


ADC reference voltage:
The zero-crossing happens when the floating phase crosses the average 
voltage of the two supply rails. In this application note, it is assumed 
that the negative supply is at ground level, which makes the zero-cross 
voltage half the motor supply voltage. This dependence on motor supply 
voltage makes it impractical to use a fixed zero
cross voltage threshold. Instead, the motor supply voltage (or scaled 
down version) is used as ADC reference voltage. The motor supply voltage 
needs to be low pass filtered before it is fed to the ADC. The VD/LPF of 
Figure 6 should be used for this 8 AVR444 8012A-AVR-10/05
purpose. The DC gain should be selected so that the voltage will be in 
the allowable range for the ADC, between 1.0V and AVCC.
Note that the DC gain of this circuit will be affected by the relatively 
low-impedant input on the AREF pin. This must either be compensated for 
in choice of component values or in software.


Fixed voltage reference:
Since the ADC reference voltage (AREF pin) is varying with motor supply 
voltage, a fixed, known voltage reference is needed in order to make 
accurate current measurements. The ATmega48 has an internal band gap 
voltage reference, which can be measured relative to AREF by the ADC, 
but stabilizes too slow for this purpose. Instead an external reference 
is used in this application note. Any source can be used for this 
voltage reference, as long as it is stable and the voltage level is
known at compile time. In this application note, the VCC voltage is fed 
through a VD/LPF to produce the known reference. The DC gain of the 
VD/LPF should in this case be selected such that the scaled fixed 
reference is never higher than the AREF voltage. The capacitor should be 
large enough, to remove any ripple on VCC.



Vielleicht habe ich da was falsch verstanden?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Richard Lunz schrieb:
> ADC reference voltage:
> ...und hier eine Menge weggelassen
Wenn der Motor also mit einer höheren Spannung als der Betriebsspannung 
des AVR läuft (was bei dir der Fall ist, er läuft ja mit mehr als 5 
Volt), legst du in alle 4 Leitungen, also der Motor Vcc und den drei 
Phasenleitungen, Spannungsteiler. Die sorgen dafür, das der AVR nicht 
mehr Spannung an den ADC Eingängen abbekommt, als er darf.
Alle 4 Spannungsteiler sind gleich dimensioniert, die absoluten Werte 
sind allerdings unkritisch, solange du die Grenzen der ADC Eingänge 
beachtest.
Der Einfachheit halber stellst du ARef auf Vcc (Aref ist also gleich der 
Betriebsspannung des AVR)
Da du 12 Volt für den Motor benutzt, bietet sich z.B. 3:1 Teiler an. 
Also oben z.B. 10k und unten 4k7 o.ä. Dann liegen bei 12V am Eingang 
noch ca. 4 Volt am Ausgang an, das reicht, um den ADC gut auszusteuern.
Wie gesagt, die absolute Höhe ist nicht wichtig, nur müssen alle 
Spannungsteiler gleich sein. Schau dir die Schaltung des MC100 bei Atmel 
einfach mal genau an.

von Richard L. (richard86)


Angehängte Dateien:

Lesenswert?

Hmm,
da hängt AREF über eine Kapazität an Ground und von Spannungsteilern ist 
nichts zu sehen.
Bin mir nicht sicher ob ich das als Referenz nehmen kann?

http://www.atmel.com/Images/doc7551.pdf

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Richard Lunz schrieb:
> da hängt AREF über eine Kapazität an Ground und von Spannungsteilern ist
> nichts zu sehen.

Ja, das ist ja richtig für die Einstellung AREF = AVcc. Das läuft intern 
im MC. Ich zitier mal kurz aus dem Datenblatt des AT90PWM3:
21.5.2       ADC Voltage Reference
The reference voltage for the ADC (VREF) indicates the conversion range 
for the ADC. Single ended channels that exceed VREF will result in codes 
close to 0x3FF. VREF can be selected as either AVCC, internal 2.56V 
reference, or external AREF pin.

Table 21-3.     ADC Voltage Reference Selection
REFS1 REFS0 Description
0 0 External Vref on AREF pin, Internal Vref is switched off
0 1 AVcc with external capacitor connected on the AREF pin
1 0 Reserved
1 1 Internal 2.56V Reference voltage with external capacitor connected 
on the AREF pin

von Richard L. (richard86)



Lesenswert?

Hmm ja, ok.
Das heißt aber nicht, dass bei dem AVR444 Aufbau etwas mit den 
Spannungen nicht stimmt oder?
Habe eigentlich schon alles ziemlich optimiert. Das einzige wo ich mir 
unsicher bin sind eben die Referenzspannungen. Habe einfach zu wenig 
Erfahrung mir ADC's.
Habe auch einige Messungen gemacht, hänge mal ein paar an.
Man sieht, dass das Programm immer nach dem Startup abbricht...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ich nehme mal an, das du nach wie vor den Mega48 benutzt, und keinen 
AT90PWM3, wie er als Option auf dem MC100 Board verbaut ist. AVR444 baut 
auf dem Leistungs- und Back EMF Teil des MC100 auf, der AT90PWM3 ist 
aber für AVR444 abgeklemmt. Das Prozessorteil des MC100 ist also 
uninteressant, der Leistungsteil ist der wichtige.

Nachdem wir das geklärt haben: Du entfernst die Schaltung an deinem AREF 
Eingang und hängst lediglich einen 100nF Kondensator gegen Masse ran. In 
der Software stellst du sicher, das AREF aus Vcc gewonnen wird.

Dann schliesst du an PC 5 genau den gleichen Spannungsteiler an, der 
auch für die Back EMF der drei Phasen da ist, und legst sein oberes Ende 
auf die Motorversorgungsspannung (das ist in deinem Schaltbild so schon 
drin). Das ist die eigentliche Referenz, aus der AVR444 die Back EMF 
Nulldurchgänge der drei Phasen erkennt, es nimmt dazu als Referenz den 
halben Wert der an PC5 liegenden Spannung.

von Marc v. (muckraker)


Lesenswert?

Moin Richard!

hast du den Motor zum Laufen bekommen? Ich arbeite auch gerade an einem 
Projekt basierend auf der App-Note von Atmel und der Controller bleibt 
immer in der ersten while Schleife vom ADC in Timer 0 hängen:

  // Wait for auto-triggered ADC sample to complete.
  while (!(ADCSRA & (1 << ADIF)))
  {
  }
  temp = ADCH;

Um zu erkennen, dass er an der Stelle nicht weiter kommt habe ich 
einfach eine LED angesteuert. Ich verstehe leider nicht wo das Problem 
ist, da die ISR erst beim zweiten Durchlauf zum Stoppen kommt.

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.