Zwei um 90 Grad vershobenen Sinussignaale mit Micropython

Gast #7387538
Lesenswert?

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 von einem Moderator gelöscht.
#7387546
Lesenswert?

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.

#7387551
Lesenswert?

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.

#7387730
Lesenswert?

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)!

Gast #7387732
Lesenswert?

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:

1
    status=on
2
    SchalteAn1()

if sine1 < 0 : if status == on:

1
    status=off
2
    SchalteAus1()

if sine2 > 0 : if status == off:

1
    status=on
2
    SchalteAn2()

if sine2 < 0 : if status == on:

1
    status=off 
2
    SchalteAus2()
#7387801
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren