Forum: Analoge Elektronik und Schaltungstechnik Zwei um 90 Grad vershobenen Sinussignaale mit Micropython


von Linda (Gast)


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 vom Autor gelöscht.
von Veit D. (devil-elec)


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.

von Norbert (der_norbert)


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.

von Hp M. (nachtmix)


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

von Linda (Gast)


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:

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

von Hp M. (nachtmix)


Lesenswert?

Weisst du überhaupt, was ein Schmitt Trigger ist ?

von Falk B. (falk)


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.

von Rainer W. (rawi)


Lesenswert?

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"

von Stefan F. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.