Hallo Ikarus,

sorry, mit dem Motormodell habe ich mich bisher nicht befasst. Ich habe in meiner Anwendung Sensoren, d.h. ein Drehgeber und Hallsensoren, daher habe ich mir das gar nie überlegt.
Aber ich schaus mir nachher an, vielleicht kann ich dir trotzdem ein wenig weiter helfen.
Dafür kannst du mir auch was verraten

Oder besser gesagt 2 Dinge.

1. Mein Drehgeber liefert mir einen Wert zwischen 0 und 1024 für die Rotorposition. Ich habe mir eine Lookuptable gemacht für sin und cos, die grade die 1024 Werte aufnimmt. Zwar hat mein Mikrocontroller eine FPU, aber sin und cos möchte ich dann doch nicht in Echtzeit rechnen müssen So, also, die Clarke und Park Transformation sowie deren Inverse sind jetzt mit dieser Tabelle lauffähig. Ich rechne alles in floating point (weiss zwar nicht ob es nötig ist, Integer würde wohl auch reichen). So, ich messe ia, ib und ic, gehe damit über Clarke zu alpha und beta über, und mit Park erhalte ich d und q. Dann regle ich (das ist der einfachste Teil von allen ) und dann wird mit inverser Parktrafo nach alpha und beta transformiert, mit clarke erhalte ich wieder ia, ib, und ic. Jetzt ist die Frage: wie berechne ich nun aus diesen Werten den Duty cycle für meine PWM? Es ist eine Center aligned PWM mit 10 Bits Auflösung. Mit Hilfe der Hallsensoren kann ich ja den Sektor bestimmen, aber dann?

2. Wie soll ich die Ströme in den Phasen messen. Zwar kann ich meinen ADC mit den Timern synchronisieren, aber ich möchte zwei Motoren ansteuern, der ADC lässt sich aber nur von einem Timer triggern, was ein bisschen unschön ist..... Hast eine Idee? Ich habe bei jedem lowside FET einen Shunt mit Differenzverstärker. Ich habe mir überlegt, da ein kleines Tiefpassfilter einzubauen, damit der OpAmp die PWM nicht "sieht" und dann so auf den Mikrocontroller zu gehen und einfach "irgendwann" zu messen, durch das Tiefpass kriege ich ja dann so eine Art Mittelwert, der ja auch meinem Strom entspricht. Meinst du, das würde gehen?

Gruss