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?
Ich hab dir mal das BEMF Netzwerk einer Phase aus dem MC100 Motorcontrolboard angehängt, falls du dir die Unterlagen nicht selber geladen hast.
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.
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.