Sinusgenerator mit µC

Hallo,

ich versuche gerade einen Sinuswechselrichter zu bauen, z.Z. funktioniert dieser mit einem CMOS-Inverter und einer H-Brücke wunderbar, jedoch mit einem Rechtecksignal am Ausgang (nur so nebenbei).

Was ich jetzt brauche, ist ein PWM-Signal, welches „effektiv“ ein Sinussignal ausgibt, bzw. eine halbe Periode (bis Pi) davon. Dabei sollte nach jeder halben Periode das PWM-Signal an einem anderen Pin ausgegeben werden, um den anderen Teil der H-Brücke anzusteuern.
Pin1:stuck_out_tongue:WM-off-PWM-off-…
Pin2:off-PWM-off-PWM-…

Jetzt weiss ich nicht so richtig, wie ich das in BASCOM programmieren soll. Die Sinusberechnung ist vermutlich zu langsam, deshalb will ich eine Sinustabelle verwenden, welche die Duty-Zeit entsprechend steuert. Bei Pwm=8 (=8Bit PWM?!) sollte der Wert ja zwischen 0 und 255 liegen, oder?
Das Problem ist, ich finde keine entsprechende Sinustabelle und das andere ist, wie komme ich auf die 20ms pro Periode bzw. auf die „effektiv“ 50Hz?

Laufen soll das Programm dann auf einem Mega8 oder falls möglich auf einem Tiny2313.
Vielleicht hat ja jemand soetwas schon programmiert und kann mir evtl. ein paar Code-Schnipsel zur Verfügung stellen?

Mfg,
Eric

Hallo Eric,

du brauchst nur eine Tabelle für 90 Grad - der zweite Quadrant hat die gleichen Werte nur rückwärts, und Quadrant 3 und 4 wiederholen die Werte von 1 und 2 bei umgekehrter Stromrichtung. Im Speicher kannst du aber trotzdem der Einfachkeit der Programmierung halber alle 4 Quadranten unterbringen, die Zahlen wiederholen sich dann halt. Ich habe für einen Schrittmotor sogar 5 Quadranten gespeichert, damit ich Sinus und Cosinus einfach auslesen kann.

Bei 50 Hz dauert 1 Quadrant 5 ms, jetzt musst du dich entscheiden, in wieviele Schritte (s) du den Quadranten unterteilst, ich würde 8 bis 64 nehmen je nach Leistung des Prozessors. Muss keine 2er-Potenz sein, du kannst auch 50 verwenden, dann ist ein Schritt = 100 µs. Der zugehörige Winkel x zu Schritt n ist dann 90 * n / s, Minimum ist 0, Maximum ist 255, also ist der PWM-Wert dazu sin (x) * 255.

Wenn dein Assembler die Sinus-Funktion beherrscht, kannst du die Tabelle mit Makros aufbauen, lohnt sich aber nicht unbedingt. Ich habe einen programmierbaren Taschenrechner verwendet und die Werte von Hand gerundet und eingetragen.

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]