Hallo, Wie kann ich zwei um 90 Grad vershobenen Sinussignaale mit Micropython implementieren ? Ich habe mir das gedacht: pi = 3.14159 stuetzWerte = 128 for i in range (0,stuetzWerte,1): Sine_1[i] = ((math.sin(((pi*2)/stuetzWerte)*i))) Sine_2[i] = ((sin((((pi*2)/stuetzWerte)*i)+((1/2)*pi)))) Danke im Voraus
Beitrag #7387542 wurde vom Autor gelöscht.
Hallo, ich würde den Sinus und Cosinus berechnen. Wobei man den Einheitskreis mit Winkelwerten berechnet. 128 Stützwerte ist demzufolge ein krummer Wert von 360. Nimm 90, 120 oder 180 Stützwerte. Man kann auch eine Tabelle anlegen und mit dem Index durchgehen. Für den Winkelversatz dann entsprechend den Index vorverlegen.
Wenn du die Werte sowieso in Listen haben möchtest, dann direkt so etwas:
1 | #!/usr/bin/python
|
2 | import math |
3 | stuetzwerte = 128 |
4 | sine1 = [math.sin((math.pi * 2) / stuetzwerte * x) for x in range(stuetzwerte + 1)] |
Die zweite Listenberechnung dementsprechend anpassen. Als genereller Tipp, wenn es nichts mit MicroPython zu tun hat, dann kann man solche Dinge auch direkt mit python3 auf dem PC probieren.
Linda schrieb: > Sine_1[i] = ((math.sin(((pi*2)/stuetzWerte)*i))) > > Sine_2[i] = ((sin((((pi*2)/stuetzWerte)*i)+((1/2)*pi)))) Das ist so ziemlich die schlechteste Lösung, bessere wurden ja bereits gezeigt. Der um 90° verschobene Sinus heisst übrigens Cosinus, und mit diesem Wissen kannst du in deine Formelsammlung schauen und dort findest du: sin(a+b) = sin(a) * cos(b) + cos(a) * sin(b) Wenn du nun als Anfangswert a=0 wählst, und deine äquidistanten Stützwerte z.B. alle 10° voneinander entfernt sind, brauchst du nur ein einziges Mal die rechenintensiven Reihenentwicklungen für sin(b=10°) und cos(b=10°) durchführen, da man die Anfangswerte für sin(0) = 0 und cos(0) = 1 gleich hinschreiben kann. Alle weiteren Stützwerte erhält man dann durch zwei simple Multiplikationen und eine Addition. Das dürfte 100 Mal schneller gehen, als jedesmal die Sinusfunktion zu quälen! Für den Cosinus gilt entsprechendes: cos(a+b) = cos(a) * cos(b) - sin(a) * sin(b) Pass auf die Winkelangaben auf: Die meisten Programmiersprachen erwarten Winkelangaben nicht in Grad, sondern im Bogenmaß (360°=2*pi)!
Vielen Dank für ihre Antworten. Ich möchte die zwei um 90 Grad verlegte Sinusignale in zwei Rechtecksignale mit Schmitt Trigger umwandeln. Ich habe das folgende gedacht : (Gibt es bessere Lösungen) #Schmitt trigger um die Sinussignale in Rechtecke umzuwandeln on=1 off=0 status=off PinRect1 = machine.Pin(26) PinRect2 = machine.Pin(28) pwm12V = machine.PWM(PinRect1) pwm12V2 = machine.PWM(PinRect2) def SchalteAn1() : pwm12V = machine.PWM(PinRect1) pwm12V.freq(3000000) #Duty Cycle von 100% pwm12V.duty_u16(65.535) def SchalteAus1() : pwm12V = machine.PWM(PinRect1) pwm12V.freq(3000000) #Duty Cycle von 0% pwm12V.duty_u16(0) def SchalteAn2() : pwm12V2 = machine.PWM(PinRect2) pwm12V2.freq(3000000) #Duty Cycle von 100% pwm12V2.duty_u16(65.535) def SchalteAus2() : pwm12V2 = machine.PWM(PinRect2) pwm12V2.freq(3000000) #Duty Cycle von 0% pwm12V2.duty_u16(0) if sine1 > 0 : if status == off: status=on SchalteAn1() if sine1 < 0 : if status == on: status=off SchalteAus1() if sine2 > 0 : if status == off: status=on SchalteAn2() if sine2 < 0 : if status == on: status=off SchalteAus2()
Weisst du überhaupt, was ein Schmitt Trigger ist ?
Linda schrieb: > Vielen Dank für ihre Antworten. Ich möchte die zwei um 90 Grad verlegte > Sinusignale in zwei Rechtecksignale mit Schmitt Trigger umwandeln. Die gleiche "Linda", die auch schon phasenverschobene PWM-Signale erzeugen wollte? Beitrag "Wie kann man ein PWM Signal um 90 Grad vershieben softwaremäßig (Micropython )" Was soll denn das Ganze werden? Und vor allem, warum meinst du, das so tun zu müssen? Ein Schmitt-Trigger hat im Normalfall nix mit Software zu tun.
Falk B. schrieb: > Ein Schmitt-Trigger hat im Normalfall nix mit Software zu tun. Stimmt, in der Software kommt davon nur die Hysterese an. Beitrag "Re: Hysterese per Software"
Ich glaube, Linda will uns nur mit unsinnigen Fragen beschäftigen, die sie selbst gar nicht ernst meint. Inzwischen wurde ihr Account gelöscht. Ihr verschwendet hier eure Zeit.
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.