Sinuskurve

fischertechnik in General
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
Benutzeravatar
ski7777
Beiträge: 870
Registriert: 22 Feb 2014, 14:18
Wohnort: Saarwellingen

Sinuskurve

Beitrag von ski7777 » 25 Jun 2015, 16:09

Hallo zusammen,

ich möchte eine Magnetschwebebahn mit echtem Magnetantrieb bauen.
Dazu möchte ich mit dem TX bxw. TXT eine 3-phasigen Drehstrom erzeugen.
Wie lautet die Formel, um auszurechnen, wie hoch die Spannung/512-Schritte-Stufe an eine Stelle x der Kurve sein muss???

Vielen Dank im Voraus
ski7777

Benutzeravatar
Getriebesand
Beiträge: 206
Registriert: 06 Okt 2012, 13:39

Re: Sinuskurve

Beitrag von Getriebesand » 25 Jun 2015, 17:57

Hallo ski7777
ich habs kaum geglaubt, als ich deinen Beitrag gelesen habe, ich arbeite auch gerade an einer Magnetschwebebahn (Scale-Modell des Transrapid, leider nicht aus ft).

Zur Formel kann ich dir leider nicht weiterhelfen, ich benötige sie auch, vielleicht kann man trotzdem Erfahrungen austauschen.

Grüße Getriebesand

Kosmas
Beiträge: 30
Registriert: 08 Feb 2015, 01:14

Re: Sinuskurve

Beitrag von Kosmas » 25 Jun 2015, 21:29

Hallo ski7777,

das dürfte eigentlich nicht so schwer sein. x soll also von 0 bis 511 laufen? Und in welchem Bereich soll der Funktionswert liegen? Erster Ansatz:
f(x)=sin(x*2*pi/512), dann gehen die Funktionswerte von -1 bis 1.

512 Schritte ist bei 3 Phasen nicht so praktisch, weil 512 nicht durch 3 teilbar ist. Mit 510 wäre es besser.

Hat der TX eine Sinusfunktion? Bin da nämlich nicht so bewandert. Eventuell lassen sich die 512 Funktionswerte mit einer Tabellenkalkulation berechnen und als Tabelle übernehmen.

Benutzeravatar
ski7777
Beiträge: 870
Registriert: 22 Feb 2014, 14:18
Wohnort: Saarwellingen

Re: Sinuskurve

Beitrag von ski7777 » 26 Jun 2015, 13:48

Erst ein Mal vielen Dank für die Formel.
Ich werde mal ein RoBoPro-Programm schreiben.
RoBoPro hat die verschiedensten Funktionen (sinus, cosinus, Tangens...), aber leider muss ich pi dann etwas ungenau wählen mit Hilfe einer Konstante.

Ski7777

Kosmas
Beiträge: 30
Registriert: 08 Feb 2015, 01:14

Re: Sinuskurve

Beitrag von Kosmas » 26 Jun 2015, 16:34

Hallo,

die Genauigkeit mit pi = 3.1415926 dürfte für Deine Anwendung mehr als ausreichend sein. Vielleicht gibt es die Konstante sogar schon.

Fragt sich nur noch, in welchem Bereich die Funktionswerte liegen sollen.

Ciao, Kosmas

Julian
Beiträge: 30
Registriert: 16 Jun 2014, 23:17

Re: Sinuskurve

Beitrag von Julian » 26 Jun 2015, 17:37

Hallo,
wenn ich ski richtig verstanden habe will er, dass die Funktionswerte von -512 bis 512 sind, um so die Magneten zu steuern. Demnach muss die Formel f(x) = 512 * sin (bx + c) heißen, dabei ist x ein Wert der laufend erhöht wird (z.B. die Zeit in 10 ms). b ist ein Faktor, der die Sinuskurve in x-Richtung streckt und somit die Frequenz der Magneten bzw. die Geschwindigkeit des Fahrzeuges ändert, b = 2pi/p, p ist die Periodendauer einer Schwingung. c ist die Verschiebung in x-Richtung, um einen 3-phasigen Drehstrom zu erzeugen, benötigt man 3 verschiedene Stromkreise, einmal mit c = 0, 2/3pi und 4/3pi.

Ich hoffe ich konnte helfen und kann bei Bedarf auch ein entsprechendes RoboPro-Programm hochladen.
Gruß Julian


PS: Pi lässt sich in RoboPro relativ leicht selbst herführen, man nimmt einfach ein Funktionen-Element mit der Einstellung Arcus-Sinus Radiant und sendet an seinen Eingang 1, am Ausgang kommt dann 1/2pi raus, nach dem multiplizieren mit 2 erhält man pi.

jona2004
Beiträge: 149
Registriert: 10 Jun 2011, 22:30

Re: Sinuskurve

Beitrag von jona2004 » 26 Jun 2015, 21:13

Hallo Ski777,
Julian hat es schon in etwa richtiggestellt.
Es gibt aber m.E: noch viel größere Probleme.
1 - Die rate mit der ROboTX überhaupt das Taktverhältnis der Pulsweitenmodulation (PWM) verändern kann. Leider kommuniziert der Controller nur über eine langsame SPI mit dem Treiberbaustein. Es sind i.ue auch 2 treiber für jeweils 4 Ausgänge. Zudem habe ich bisher keine Angaben über die Frequenz des pulsweitenmodulierten Signals gesehen.
Julian´s Angabe von 10ms als Update-Rate ist wahrscheinlich eher am optimistischen Ende angesiedelt . Wenn am also eine Sinus in 16 Stufen zerlegt (4 pro Quadrant ist wahrlich nicht viel) dann schafft man eine Sinusfrequenz von on 1/160ms or 6.25Hz
2 - Es ist nicht sichergestellt, dass alle drei PWMs gleichzeitig von TX auf ihre neuen Werte gesetzt werden. D.h. man muss u.U mit einem Versatz um eine Update-Rate rechnen.

Auf jeden Fall sollte man sich ein Oscilloscope besorgen um sich das Ergebnis ansehen zu können.

Falls jemand schon Information über PWM frequenzen und update-Raten hat wäre das sehr interessant.



Grüße Joachim

hamlet
Beiträge: 332
Registriert: 12 Jan 2011, 21:41

Re: Sinuskurve

Beitrag von hamlet » 27 Jun 2015, 09:43

Hallo,
die PWM-Frequenz der TX-Ausgänge liegt bei etwa 200Hz und der DutyCycle ändert sich nicht linear mit dem 512-Sollwert: http://stefanbrunner.com/fischertechnik-tx-outputs/
Ich habe ebenfalls vor einiger Zeit die TX-Ausgänge vermessen und meine dabei, andere Ergebnisse für die Sollwert-DutyCycle-Abhängigkeit erhalten zu haben, ebenfalls nicht linear. Beim Einschalten sah das PWM-Signal für die ersten paar Zyklen sehr unsauber aus. Evtl. auch bei Sollwertänderungen? Weiß ich nicht mehr.
Das Verhalten könnte von der Fimwareversion abhängen. Wer weiß, wie das beim TXT aussieht?

Bei den Frequenzen könnte sogar ein Soundkarten-Scope weiterhelfen, z.B. http://www.zeitnitz.eu/scope_de
Hierbei auf jeden Fall folgenden Hinweis beachten:
Die Eingänge der Soundkarte sind für einen Spannungsbereich von ca. ±0.7V ausgelegt !! Wenn Signale mit größerer Amplitude verarbeitet werden sollen, muss ein entsprechender Spannungsteiler verwendet werden. Zusätzliche Schutzdioden sind in jedem Fall sinnvoll, um die Soundkarte und den Computer vor Beschädigung zu schützen.
Die 9V des TX/TXT Motorausgangs würden dem PC-Audioeingang schlecht bekommen.
Beste Grüße,
Helmut

Benutzeravatar
Transistorfips
Beiträge: 6
Registriert: 04 Jul 2015, 11:48

Re: Sinuskurve

Beitrag von Transistorfips » 05 Jul 2015, 10:16

Hallo ski7777,
das Thema das angeschnitten hast ist seeehr interessant!
Ich fürchte aber, daß du da noch in ein paar Probleme laufen wirst.
Was du vorhast, ist im grunde genommen einen 3-Phasen Drehstrommotor - denn nichts weiter ist so ein flachgedrückter Linearantrieb, zu bestromen (die Fachleute sagen auch "kommutieren" dazu.


Aber der Reihe nach:

Erstmal als grobes und einfaches Denkmodell:
U(t) = 1/2 * sin (PI(t)) *512 //besser 511, wenn's je nach Registerbreite dumm kommt ist 512 = 2x8bit = 0...
mit t als Winkel in Abhängigkeit deiner Frequenz. Die Werte kannste dir vorab mal mit nem Basic-Programm oder mit Python zur Kontrolle ausgeben lassen. die zehn Zeilen Code sollten in ein paar Minuten zu erschlagen sein.
512 Werte bei realistischen 50Hz und drei Phasen macht zusammen = 50 x 3 x 512 = 76800 Berechnungen. Fließpunkt-Berechnungen wohlgemerkt.
Weniger rechenintensiv (und somit schneller) wäre, anstatt mit einem Fließpunkt-PI mit Integern zu rechnen: PI = 314 / 100.

Hinzu kommt das Updaten der Ausgangsregister und vielleicht noch das Reagieren auf die Schnittstelle um Werte vom PC zu empfangen. Und die notwendige Zeit für diverse interne Interrupts hab ich noch nicht mal in Betracht gezogen. Good Luck!

Für eine Spannung die mit Hilfe eines echten DAC, einem Digital-Analog-Wandler der ein sauberes Gleichspannungssignal variabler Höhe auf einem schnellen Controller ausgegeben wird (Arduino Due, STM32F4 Discovery Board), könnte man nun anfangen in die Praxis überzugehen. Apropos Praxis: Zu überlegen wäre ob die Leistung die die Ausgänge des Controllers zur Verfügung stellen ausreichen um z.B. - realistisch - 100g um 2 mm anheben können. Andernfalls müßte man mit nem Transistorverstärker nachhelfen. Vorschlag : Transistor in Emitterschaltung. Google ist dein Freund.


Jetzt aber kommen wir zum interessanten Teil:
Wenn ich das richtig sehe hat der Controller PWM-Ausgänge - mit all den damit verbundenen Problemen. Sprich: was für eine LED oder ein Glühbirnchen gelten mag und funktioniert gilt noch lange nicht für einen Motor.
In diesem Thread ist eine PWM-Frequenz von 200Hz genannt worden. Wenn das als maximale Grenzfrequenz zutrifft ist die ganze Sache eigentlich schon zum Scheitern verurteilt bevor es überhaupt losgeht.
Warum? Schauen wir uns die Sache mal genauer an: Ein Sinus-Signal aus Rechtecken zu erzeugen bedeutet, die Rechtecke im Bruchteil der Frequenz zu modulieren, hier also die Breite zu variieren. Man nennt das Frequenz-Synthese, kurz: DDS.

Bei f_max = 200Hz könntest du bei 50Hz nur vier variable Rechtecke erzeugen - aber da du alleine schon vier Quadranten in einem Sinus hast ist die Sache jetzt schon tot. Du bräuchtest stattdessen (zwei) schnelle Timer die alle paar Mikrosekunden einen neuen Wert in die Register des PWM-Moduls laden und auf diese Weise einen Sinus mathematisch abbilden.

Auf dieser Webseite hier:
Arduino DDS Sinewave Generator
http://interface.khm.de/index.php/lab/i ... generator/
lässt sich Hilfreiches für Einsteiger finden. Auch wenn dir der Arduino fremd sein sollte (einen Arduino sollte man immer in der Hosentasche haben) - lies das mal durch und versuche im Groben zu verstehen was der Autor macht. Die Aufgabenstellung ist von der Hardware erstmal unabhängig, was für einen Arduino gilt, gilt auch für jedes andere Mikroprozessor-System.

Ich habe vor einiger Zeit die Software auf einen STM32 angepasst und den beschriebenen Filter nachgeschaltet. Voilá, das kam bei einem Test mit 1020Hz dabei heraus:
http://www.bilder-upload.eu/show.php?fi ... 078362.jpg
Bild
Der Sinus ist bereits in der Mitte des Filters (lastfrei) sauber detektierbar, das PWM-Gezuckel habe ich am Eingang gemessen.
Könnte sein, daß es auch ohne Filter geht, die induktive Wirkung einer Spule (deines Magnetantriebs) wirkt manchmal Wunder.

Viel Glück bei deinem Vorhaben!

Antworten