PWM-Signal mit 8051er erzeugen

Gast #337212
Lesenswert?

Wir sprechen von der softwaremäßigen Erzeugung einer PWM, richtig?

Dann nimmst Du einen Timer, lässt den schön schnell laufen und
überlegst Dir währenddessen, wie viele Stufen Deine PWM haben soll.
Dann noch zwei Variablen - ein PWM-Zähler, ein PWM-Wert: Wenn der
PWM-Zähler > PWM-Wert ist, dann Port auf high sonst low. Und wenn der
Zähler das Maximum erreicht wieder auf null stellen.

Nun zum Trick:

Du hast einen PWM-Summierer und einen PWM-Wert. Auf den Summierer
addierst Du immer den PWM-Wert und wenn es einen Überlauf gibt, setzt
Du Dein Pin auf aktiv, ansonsten auf inaktiv.

Wenn ich mich recht erinnere, kann man beim 8051 das Carry auf einen
Port/Bit umkopieren, womit das Ganze sehr kompakt wird.

Achtung: Das Signal ist damit keine PWM mehr, repräsentiert aber
weiterhin einen digitalisierten Analogwert. Wie ist da nur der
Fachbegriff?
Gast #337214
Lesenswert?

Was willst Du denn nun ?

Ne PWM oder ein Rechtecksignal ?

Rechteck geht mit T2.
PWM geht mit PCA (5 * 8Bit).

Je nach Frequenz geht natürlich auch ein Timerinterrupt mit T0 oder
T1.
Da der 8051 ja Prioritäten hat, gibts kein Jitter durch andere
Interrupts, wenn man dem Timer die höchste Priorität gibt.


Peter
Gast #337216
Lesenswert?

Eine PWM ist am Ausgang des MC wirklich rechteckig, dient aber dazu ein
Analogausgang zu realisieren.
Hinter dem RC-Tiefpaß wird dann aus dem Rechteck eine Spannung
entsprechend dem Tastverhältnis.
Bei einer PWM läßt sich also das Tastverhältnis einstellen, nicht aber
die Frequenz.

Der Rechteckausgang des T2 liefert dagegen immer ein Tastverhältnis
1:1, dafür läßt sich aber die Frequenz einstellen.

Die Frage ist also, kommt es Dir auf das Tastverhältnis (PWM) oder die
Frequenz (Rechteckausgang) an.


Ein "Programmierbares Counter Array" haben die meisten 8051 mit
Bootloader, z.B. Atmel AT89C51RD2, Philips P89C51RD2.


Peter
Gast #337218
Lesenswert?

Wie fein soll deine PWM sein? Bei welcher Frequenz?
Am einfachsten nimmst du Timer 0/1 im Mode 1 oder 2.
Dann suchst du dir die Puls-/Pausenverhältnisse aus, die du brauchst.
Timer laden und wenn er abgelaufen ist, ladest den mit dem nächsten
Wert nach. Und das schön abwechselnd, beim ersten die Pulsbreite und
beim nächsten Mal die Pausenbreite.

Gruß Elektrikser
Gast #337219
Lesenswert?

"das versteh ich nicht, wenn ich PWM über einen normalen Pin mache,
wer hält mich dann davon ab die Frequenz ein zu stellen wie ich
will?"


Dich will niemand abhalten, sondern ich wollte Dir nur die Begriffe
erklären.

PWM heißt Pulsweitenmodulation, d.h. die Pulsweite wird verändert, aber
die Frequenz bleibt konstant.

Wenn Du die Frequenz ändern willst, dann sage doch FM und nicht PWM.

Und wenn Du eine Hardware-PWM verwendest, dann kannst Du eben nicht die
Frequenz ändern, die ist durch die Auflösung der PWM (8 Bit) fest
vorgegeben.


In Software kannst Du es halten wie ein Dachdecker, wobei es natürlich
sinnvoll ist, die richtigen Begriffe zu verwenden.


Peter
OP #337220
Lesenswert?

achso, ich dachte du meintest, es ist nicht möglich eine PWM mit
wechselnder Frequenz zu machen, weil der Mikrocontroller das nicht
unterstützt

ich möchte ein SRF04 (ein Ultraschall-Distanzsensor) ansteuern

im Datenblatt
(http://info.hobbyengineering.com/specs/devantech-srf04-tech.pdf)
steht, man muss 10uS auf high schalten, um das Ganze zu starten, 10uS
ist die kleinste Einheit die ich brauche, also stell ich den Timer so
ein, dass immer nach 10uS ein Überlauf kommt

bei einem 11059 Mhz Quarz hätte ich dann 11059000 / 12 ~ 921583 Machine
Cycles pro Sekunde
das heist der Timer wird in einer Sekunde 921583 mal erhöht werden

dann kann man auch ausrechnen, wie oft das in 10 uS wäre
921583 / 100000 = 9,21583

aber ist das nicht irgendwie zu ungenau?
wenn ich jetzt 100 uS lang auf high stellen will würde ich 10 mal auf
einen Überlauf warten, von einem Timer der immer von 247 los zählt(also
9x bis zum Überlauf)
dann hätte ich aber bei 100uS schon eine relativ große Abweichung

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