Forum: Mikrocontroller und Digitale Elektronik PWM-Signal mit 8051er erzeugen


von Scales O. (scales)


Lesenswert?

Ich möcht ein Ultraschallmodul an mein 8051er anschliesen,
das funktioniert per PWM-Signal, also Rechteck-Signal

nur wie erzeug ich sowas am besten?
selber ausrechnen und dann über nen ganz normalen Pin ausgeben?
oder gibts da nen Trick?

von Christian Rötzer (Gast)


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?

von Scales O. (scales)


Lesenswert?

also wenn ich das richtig vertanden hab, gibt es da kein speziellen
Trick bei 8051ern, sowas wie den UART bei serieller Übertragung

man macht das einfach mit nem Timer und nem ganz normalen I/O-Pin

von peter dannegger (Gast)


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

von Scales O. (scales)


Lesenswert?

ich dachte PWM ist ein Rechtecksignal, aber wenn nicht brauch ich ein
PWM-Signal

>>PWM geht mit PCA (5 * 8Bit)

was ist PCA?

von peter dannegger (Gast)


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

von Scales O. (scales)


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?

hat vielleicht jemand ein Beispielcode für ein einfaches PWM-Signal?

von Elektrikser (Gast)


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

von peter dannegger (Gast)


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

von Scales O. (scales)


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

von Scales O. (scales)


Lesenswert?

also kurz gesagt:

wie schaffe ich es genau genug zu erkennen, wann ein Zeitraum von nur
10 uS rum ist?

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.