Forum: Mikrocontroller und Digitale Elektronik application note bldc


von Peter (Gast)


Lesenswert?

Hallo ich wollte mal fragen ob einer schonmal den application note 
AVR447
( Sinusoidal driving of three-phase permanent magnet motor using 
ATmega48/88/168 )  von Atmel ausprobiert hat und mir helfen könnte. Ich 
versuche das jetzt schon eine Ewigkeit. Ich benutze IAR Embedded 
Workbench IDE und gehe dort auf "release" und dann "Rebuild all" 
Natürlich mache ich auch die in Doxigen aufgelisteten nötigen 
Einstellungen in den options. Dann erhalte ich eine Datei mit .a90 am 
Ende. Dann wechsel ich zu AVR Studio und speichere damit diese Datei im 
Atmega48. Ist das soweit sconmal richtig oder darf ich vielleicht nicht 
avr-Studio verwenden? Es läuft überhaupt nicht.

von ... .. (docean) Benutzerseite


Lesenswert?

du brauchst eher eine .hex ...

Was hat Doxygen damit zu tun?

von Peter (Gast)


Lesenswert?

Das habe ich mir nämlich auch gedacht mit der .hex Datei.
Das ganze Programm ist ziemlich gut mit Doxigen dokumentiert und da 
stehen unter anderem auch einige vorzunehmende Einstellungen für IAR 
Embedded
Workbench drin. Welches Programm dehme ich dann am besten um den code in 
den Controller zu kriegen. So wie ich das sehe, kann IAR Embedded
Workbench das nämlich nicht.

von Peter (Gast)


Lesenswert?

oder weiß jemand zufällig woher man noch ein Beispielprogramm zur
BDLDC-Sinuskommutierung bekommen kann. Am besten für ATmega Controller

von Peter (Gast)


Lesenswert?

Hat jemand denn überhaupt schonmal ne Sinuskommutierung mit BLDC-Motoren 
hinbekommen? Egal wie.

von Michael L. (hasimaus)


Lesenswert?

Ja, ich

von Peter (Gast)


Lesenswert?

Aber irgendjemand hat es doch bestimmt auch schonmal geschafft den 
application note AVR447 umzusetzen oder? Der code ist ja schon da und 
die Schaltung ist auch in den Unterlagen. Der code muss ja im Grunde nur 
noch in den Controller gebracht werden. Es will einfach nicht funzen.

von Andreas K. (lowrider)


Lesenswert?

Bin da auch gerade bei, AVR447 umzusetzen. Allerdings versuche ich, den 
ganzen code in AVR-GCC zu portieren. Es scheint mir eine uferlose Story 
zu werden. Prinzipiell funktioniert das ganze bei mir schon soweit, 
Interrupts sind OK. Allerdings kommt aus den Phasen-Ausgängen nichts 
raus. Ich vermute mal, dass da irgendwie der Wurm drin ist.
Bräuchte da jemanden, der mir mal die Unterschiede zwischen IAR und 
AVR-GCC erklärt. Hier nur ein Beispiel aus dem AVR447, dass so nicht 
funktionieren kann:
1
// #pragma inline=forced
2
inline static void MotorSynchronizedUpdate(void)
3
{
4
static uint8_t synchCount = 0;
5
6
  PMSMflags_t tempFlags;
7
8
  tempFlags = fastFlags;
9
10
  if ((tempFlags.desiredDirection == tempFlags.actualDirection) &&
11
      (tempFlags.motorStopped == FALSE) && (tempFlags.motorSynchronized == FALSE))
12
  {
13
    synchCount++;
14
    if (synchCount >= SYNCHRONIZATION_COUNT)
15
    {
16
      fastFlags.motorSynchronized = TRUE;
17
    }
18
  }
19
  else
20
  {
21
    fastFlags.motorSynchronized = FALSE;
22
    synchCount = 0;
23
  }
24
}

In der ersten Zeile wird die Variable synchCount auf Null gesetzt. Wird 
die erste IF-Anweisung erfüllt, wird sie um eins erhöht, hat dann den 
Wert=1. Die Funktion wird danach verlassen.
SYNCHRONIZATION_COUNT wird durch PMSM.h auf 2 gesetzt. Dieser Wert wird 
allerdings nie erreicht, da beim nächsten Aufruf der Funktion der Wert 
von synchCount wieder auf Null gestzt wird?!?!
Wundert euch bitte nicht über das auskommentierte #pragma... Ich habe 
nur versucht diese Zeile in AVR-GCC umzusetzen.

Wäre nett, wenn irgendwer darauf eine Antwort hat.

Gruß Andreas

von Werner P. (Gast)


Lesenswert?

> da beim nächsten Aufruf der Funktion der Wert
> von synchCount wieder auf Null gestzt wird?!?!

Falsch. synchCount ist static.

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.