Mikrocontroller - Sind die Ausgangszustände konstant oder gemultiplext?


14

PWM erfordern offensichtlich Rechenressourcen (und können daher nicht gleichzeitig mit anderen Prozessen ausgeführt werden). Wenn ich jedoch einen Pin als Ausgang 5 V oder 0 V festlegen würde, bleiben diese Zustände konstant oder werden sie wiederholt "aktualisiert", wenn der Mikrocontroller mit anderen Prozessen arbeitet ?

Dies ist im Text schwer zu erklären, daher habe ich mir eine Analogie zu meiner Frage überlegt. Stellen Sie sich vor, ich habe ein Glas in der Hand und werde angewiesen, es auf den Tisch zu stellen. Dann werde ich angewiesen, mich auf einen Stuhl zu setzen.

Das Glas auf dem Tisch ist ein Zustand. Lasse ich das Glas auf dem Tisch oder hebe ich es wieder auf und setze mich und wiederhole es sehr schnell, damit Sie nicht bemerken, dass das Glas jemals vom Tisch entfernt wurde?


Oder vielleicht einfacher: "vergisst" der Mikrocontroller die Zustände seiner Stifte, wenn Sie nicht ausdrücklich eine Zustandsänderung programmieren?

Hoffentlich habe ich das so verwirrend wie möglich gemacht.


4
+1 Interessante Frage, obwohl Ihre erste Aussage falsch ist und die Idee von Hardware-PWM so ist, dass der Prozessor nicht die ganze Zeit involviert sein muss. Aber lass es so und ich bin sicher, dass jemand eine gute Erklärung dafür hat, wie das alles funktioniert.
PeterJ

Ich dachte, PWM ist so, dass der Prozessor die HIGH / LOW-Zykluszeit ändert. Auf diese Weise scheint der Prozessor direkt involviert zu sein - zumindest zu dem Zeitpunkt, zu dem sich der Zustand ändert.
Sherrellbc

1
Um das Tastverhältnis von beispielsweise 10% auf 20% zu ändern, muss die CPU einbezogen werden, jedoch nur für einige Zyklen, um ein Register zu ändern. Wenn die Hardware-PWM-Frequenz einmal auf 20% geändert wurde, hat dies keine Auswirkungen mehr auf den Prozessor.
PeterJ

Haben Sie gute Links zur Dokumentation, wie Mikrocontroller auf einer niedrigeren Ebene funktionieren? Ich verstehe Ihre Hinweise auf das Register nicht und kann diese Antworten daher nicht in vollem Umfang schätzen.
Sherrellbc

1
Nicht sehr verwirrend. Versuchen Sie es noch einmal!
Radagast

Antworten:


16

Die Art und Weise, wie ich die Frage interpretiere, hat nichts mit PWM zu tun. Tut mir leid, wenn ich weit von der Basis entfernt bin, aber es klingt, als hätten Sie es nur als Beispiel verwendet.

Nahezu alle Arten von Mikrocontrollern und Geräten mit E / A verwenden ein Latch / FF, um ihre Ausgangsschaltungen zu steuern. Wenn Sie einen Status festlegen, bleibt dieser in diesem Status. Es ist nicht wie bei DRAM, wo die Ausgabestatistiken ständig "aktualisiert" werden müssen, um in ihrem Zustand zu bleiben.

Bei Ihrem Glasbeispiel habe ich noch nie ein Gerät gesehen, das das Glas wiederholt auf den Tisch hebt und ablegt. Es würde immer nur das Glas auf den Tisch stellen und dort belassen, bis eine Zustandsänderung angefordert wird.

Zurück zu PWM (nur für den Fall, dass Sie tatsächlich nach PWM gefragt haben). Unabhängig davon, ob Sie es bitbangen oder Ihr Mikrocontroller über dedizierte Hardware verfügt, wird auf den E / A-Block nur zugegriffen und dieser geändert, wenn eine Statusänderung durch Ausführen von Code oder das PWM-Peripheriegerät angefordert wird.


Dies ist genau meine Frage, obwohl es bei Mikrocontrollern offenbar viel gibt, das ich nicht verstehe.
Sherrellbc

3
Behalten Sie einfach Ihre Nase in Datenblättern, experimentieren Sie und stellen Sie Fragen. Sie werden den Dreh raus bekommen.
Kris Bahnsen

11

Der Mikrocontroller muss die Ausgänge nicht aktualisieren. Sobald sie eingestellt sind, behalten sie ihren Zustand auf unbestimmte Zeit bei (bis die Stromversorgung unterbrochen wird). Während bei älteren Prozessoren die Taktung erforderlich war, um den Prozessorstatus beizubehalten, werden die heutigen Prozessoren als vollständig statisch bezeichnet. Das bedeutet, dass die Uhr tatsächlich gestoppt werden kann und alles in seinem aktuellen Zustand bleibt. Dies liegt daran, dass alle Register (einschließlich E / A) mit Flip-Flops erstellt werden.


Und wir machen Fortschritte! Dank macht jetzt mehr Sinn. Vielen Dank!
Sherrellbc

10

Die meisten modernen Mikrocontroller verfügen über ein dediziertes Hardware-PWM-Peripheriegerät, das sich um das PWM kümmert. Eine sehr grobe Analogie könnte sein:

Der Prozessorkern weist das Peripheriegerät an, "diesen Pin bei 10 kHz und 50% Tastverhältnis umzuschalten, bis ich Ihnen etwas anderes sage". Dann ist der Kern frei, um andere Sachen zu machen. Es kann einen Interrupt auslösen, dh das Peripheriegerät auffordern, ihm mitzuteilen, wenn etwas Interessantes passiert.
Sie können sich den Kern vielleicht als "Chef" und die Peripherie als Facharbeiter vorstellen. Der Kern verwaltet das gesamte Programm (liest jeden Befehl und handelt danach) und "bittet" die Peripheriegeräte, verschiedene Aufgaben auszuführen und ihn zu benachrichtigen, wenn sie diese abgeschlossen haben.

In Ihrer Analogie wäre es, als würde eine andere Person das Glas halten und sie anweisen, es auf den Tisch zu stellen, während Sie sich auf den Stuhl setzen können.

Wenn das Mikro kein dediziertes Peripheriegerät hätte, müsste es dies "manuell" (dh selbst) tun und den Zustand der Stifte und das Timing zwischen den Umschaltungen verfolgen. Dies würde eine Menge Zyklen bedeuten, die hübschen Kleinigkeiten gewidmet sind, die leicht von einem einfachen Peripheriegerät gehandhabt werden können.

Hier ist ein Diagramm des Aufbaus eines beliebten 8-Bit-Mikrocontrollers, des PIC16F690 . Beachten Sie die unten angeordneten Peripheriegeräte:

Bildbeschreibung hier eingeben


Ich wusste nicht, dass solche peripheren Komponenten existieren. Sind diese Komponenten also eher kleine Prozessoren? Es macht großen Sinn, dass solche Dinge existieren.
Sherrellbc

Keine Prozessoren, nein - die Peripheriegeräte ähneln eher dedizierten Hardware-Blöcken, die speziell für eine bestimmte Aufgabe entwickelt wurden. Zum Beispiel hat ein typisches Mikro Peripheriegeräte wie ADC, PWM, Timer, UART, SPI usw. an Bord.
Oli Glaser

Ich werde auf jeden Fall tiefer in dieses Thema eintauchen, obwohl mein Verständnis dieser Systeme sicherlich voreingenommen ist. Ich hatte den eindruck, dass die uC die gesamte verarbeitung übernehmen würde. Die den Peripheriegeräten gegebenen "Anweisungen" müssen interpretiert werden. Ich nehme an, dass ich dies nicht vollständig verstehe.
Sherrellbc

2
Ich habe ein Diagramm eines typischen Mikros hinzugefügt - ein guter Ort zum Lesen ist das Datenblatt, mit dem ich auch verlinkt habe.
Oli Glaser

@sherrellbc, hier unterscheiden sich Prozessor und Mikroprozessor. In einem µC können Sie sehen, dass z. B. RAM, ROM, ALU, serielle Schnittstelle usw. alle in demselben Chip integriert sind. In einem PC wissen Sie, dass der Prozessor extern an solche Schaltkreise angeschlossen ist.
Chwi

5

Sie machen einige Annahmen, die nicht genau gültig sind. Ja, Sie haben die Frage so verwirrend wie möglich gemacht. Ernsthaft.

PWM kann gleichzeitig mit anderen Prozessen durchgeführt werden. Wenn dies in der Software erfolgt ist, verwenden Sie Timer-Interrupts, um das PWM-Signal auf einem GPIO-Pin zu generieren. Andere Interrupts können ausgeführt werden, und der Hauptprozess besteht darin, nicht verwandte Dinge zu tun. Außerdem können viele MCUs die PWM direkt in der Timer-Peripherie ausführen, sodass die MCU andere Aufgaben ausführen kann.

Die E / A-Pins werden gemultiplext. Aber Sie haben die Kontrolle darüber, wie sie gemultiplext werden. Das ist also kein wirkliches Problem.


Ich verstehe Ihren Kommentar zu den PWM-Timer-Interrupts - das macht Sinn. Auf diese Weise ist der Prozessor nur zu dem Zeitpunkt beteiligt, zu dem er den Ausgangszustand ändert. Obwohl Sie sagen, dass die E / A-Pins gemultiplext sind - das heißt, wenn ich die Steuerung so programmiere, dass sie einen Pin HIGH ausgibt und dann eine andere, unabhängige Berechnung durchführt, wird der Pin vorübergehend auf LOW gesetzt, während solche Prozesse ausgeführt werden?
Sherrellbc

@sherrellbc Sie haben die Kontrolle darüber, wie die Pins gemultiplext werden. Normalerweise konfigurieren Sie sie beim Booten und ändern sie danach nicht mehr. Es wäre also nicht "momentan niedrig", es sei denn, Sie weisen es ausdrücklich an, dies zu tun.

Ich entschuldige mich, dass ich durch das Hinzufügen des PWM-Beispiels die Leser verwirrt habe. Mit dieser Frage sollte festgestellt werden, ob ein auf HIGH eingestellter befohlener E / A-Pin vom Controller gemultiplext wird (dh, er muss die Pin-Zustände ständig "aktualisieren" und jeweils nur eine Aktion ausführen). Jetzt stelle ich jedoch fest, dass es bei Mikrocontrollern viel gibt, was ich nicht verstehe (Peripheriegeräte). Daher scheint mir die Antwort "Nein" zu sein. Die Ausgangsanschlüsse sind auf einen Zustand eingestellt und bleiben in diesem Zustand, bis sie geändert werden.
Sherrellbc

1

Die meisten I / O-Pins von Mikrocontrollern sind multifunktional, aber ich würde sie nicht als Multiplex-Pins bezeichnen.

Beispielsweise können mehrere Stifte eines AVR als digitaler Eingang, digitaler Ausgang oder analoger Eingang verwendet werden. Normalerweise würden Sie die gewünschte Funktion als Teil der Programminitialisierung auswählen und später nicht ändern (obwohl ich möglicherweise einen Grund sehe, einen analogen Eingang in einen digitalen Eingang zu ändern, um dasselbe Signal anzuzeigen.)

Bei digitalen Ausgängen wird, sobald die Pins als Ausgänge festgelegt sind, der letzte Wert gespeichert, den der Prozessor an sie geschrieben hat. Sie müssen nicht regelmäßig "aktualisiert" werden.


Sie würden gemultiplext, wenn der Prozessor den Wert einstellt, diesen Wert entfernt, andere Anweisungen ausführt und dann eine Schleife durchführt und den ursprünglichen Wert erneut einstellt. Das ist der Kern meiner Frage. Aus den obigen Antworten ergeben sich jedoch verschiedene Perioden für diese Funktionen, und der Prozessor hat nichts damit zu tun, bis er angewiesen wird, etwas anderes zu tun. Ich hatte keine Ahnung davon. Viel zu lernen. Danke für die Antwort.
Sherrellbc

1

In einem einfachen Beispiel eines Mikrocontroller-Hardware-PWM-Peripheriegeräts könnte ein 8-Bit-Zähler mit einem 8-Bit-Digitalkomparator verbunden sein. Der Mikrocontroller würde eine Zahl in den Komparator laden und den Zähler mit der Systemuhr oder einer vorskalierten geteilten Version davon inkrementieren. Der Zähler würde dann frei laufen und wiederholt von 0 bis 255 und zurück auf Null zählen. Der Komparator würde einen Ausgang haben, der anzeigt, ob der Zählerwert größer oder kleiner als der Komparatorwert ist. Dies würde der PWM-Ausgang werden. Die Periode der PWM wäre, wie lange es dauert, bis der Zähler einen Zählzyklus abgeschlossen hat, und der Arbeitszyklus wäre, welcher Bruchteil der Gesamtzählung durch den Komparatorwert dargestellt wird. Der Mikrocontroller-Code hätte nichts zu tun, außer die Hardware zunächst einzurichten und die Komparatordaten zu ändern, wenn eine PWM-Änderung gewünscht wird. Die PWM würde einen kontinuierlichen Strom von PWM-Impulsen ohne die Aufmerksamkeit des Prozessors ausgeben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.