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