Misc

So generieren Sie PWM auf dspic30f und dspic33f

Autor: Peter Berry
Erstelldatum: 16 Juli 2021
Aktualisierungsdatum: 14 November 2024
Anonim
MPLAB X - PICKit3 - Erste schritte
Video: MPLAB X - PICKit3 - Erste schritte

Inhalt

Der Autor schloss sein letztes Ingenieurjahrsprojekt mit den dsPic-Mikrocontrollern ab und erhielt umfassende Einblicke in diese Geräte.

Was sind dspic30f und dspic33f?

Die Mikrocontroller der Serien dspic30f und dspic33f sind fortschrittliche 16-Bit-Prozessoren von microchip, die für eine Vielzahl von PWM-Anwendungen verwendet werden können. In dieser exemplarischen Vorgehensweise erfahren Sie, wie Sie die PWM-Module im dspic konfigurieren, um die gewünschte PWM-Ausgabe zu erhalten.

Dieser Beispielcode kann verwendet werden, um alle Register und Konfigurationsbits zu initialisieren, die erforderlich sind, um die gewünschte PWM-Ausgabe zu erhalten.

PWM-Codebeispiel für dspic30f und dspic33f

void PWM_Init (void) {TRISE = 0x00; // Stellen Sie sicher, dass die PWM-Pins als Ausgänge eingestellt sind. PORTE = 0x00; // lösche die Ausgänge PTCONbits.PTOPS = 1; // PWM-Timer nach der Skalierung PTCONbits.PTCKPS = 0; // PWM-Timer vorskalieren PTCONbits.PTMOD = 2; // PWM arbeitet kontinuierlich im Auf-Ab-Modus PTMR = 0; // PWM-Zählerwert, Start bei 0 PTPER = 19999; // PWM-Zeitbasisperiode PWMCON1bits.PMOD3 = 0; // PWM im kostenlosen Modus PWMCON1bits.PMOD2 = 0; // PWM im kostenlosen Modus PWMCON1bits.PMOD1 = 0; // PWM im kostenlosen Modus PWMCON1bits.PEN3H = 1; // PWM High Pin ist aktiviert PWMCON1bits.PEN2H = 1; // PWM High Pin ist aktiviert PWMCON1bits.PEN1H = 1; // PWM High Pin ist aktiviert PWMCON1bits.PEN3L = 1; // PWM Low Pin aktiviert (Richtungssteuerung später?) PWMCON1bits.PEN2L = 1; // PWM Low Pin aktiviert (Richtungssteuerung später?) PWMCON1bits.PEN1L = 1; // PWM Low Pin aktiviert (Richtungssteuerung später?) // PWMCON2 = 0x0000; // PWM-Update-Informationen DTCON1bits.DTAPS = 0; // DeadTime Pre-Scaler DTCON1bits.DTA = 59; // DeadTime-Wert für 4 us. // FLTACON = 0x0000; // Fehler A Steuerung // OVDCON = 0x0000; // Steuerinformationen überschreiben // Der Arbeitszyklus hat einen Maximalwert von 2xPeriod, da sich der Ausgang // bei steigender oder fallender Flanke von Tcy ändern kann. PDC1 = 19999; // PWM # 1 Arbeitszyklusregister (11 Bit) PDC2 = 19999; // PWM # 2 Arbeitszyklusregister (11 Bit) PDC3 = 19999; // PWM # 3 Arbeitszyklusregister (11 Bit) PTCONbits.PTEN = 1; // PWM Timerbase aktivieren! }}

Wichtige Register für die PWM-Initialisierung in dspic

RegistrierenFunktion

PTPER


Das PWM-Zeitperiodenregister enthält den Zeitbasiswert.

PDC

Das PWM-Arbeitszyklusregister enthält den Arbeitszykluswert.

PTCON

PWM-Konfigurationsregister haben Konfigurationsbits.

PTCON1

PWM-Konfigurationsregister haben Konfigurationsbits.

DTCON1

Totzeit-Konfigurationsregister.

PTMR

Dies wird normalerweise auf Null gesetzt.

1: Wählen Sie den PWM-Betriebsmodus

Dies erfolgt mit Hilfe von PTMOD-Konfigurationsbits im PTCON-Register, wie in Zeile 8 unseres Codes gezeigt.

PTMODModus

11

Kontinuierlicher Up / Down-Modus mit Interrupts für doppeltes PWM-Update

10

Kontinuierlicher Aufwärts- / Abwärtszählmodus

01

Einzelereignismodus

00


Freilaufmodus

2: Berechnen Sie die PWM-Zeitbasisperiode

Die PWM-Zeitbasisperiode kann mit Hilfe der folgenden Formel berechnet werden:

Wo:

1 / Tcy = 4 / (Oszillatorfrequenz * PLLx)

Berechnen wir dies für eine Zeitbasisperiode von 1 ms. Die Oszillatorfrequenz beträgt 10 MHz und PLL ist auf x8 eingestellt.

Das Auflösen nach PTPER ergibt einen Wert von 19.999, der dann in das PTPER-Register in Zeile 12 geladen wird.

  • PTPER kann mit einem Maximalwert von 32.768 geladen werden.
  • Wenn der berechnete Wert größer als dieser Wert ist, sollte der Vorteiler angepasst werden.

3: Berechnen Sie den Arbeitszykluswert

Der Arbeitszykluswert wird unter Verwendung derselben Formel berechnet, die für die Berechnung des Zeitbasiswerts (PTPER) verwendet wird, außer dass anstelle der Zeitbasisperiode die erforderliche hohe Zeit des Impulses beibehalten wird. Nach dem Auflösen nach PTPER lautet die Antwort:


  1. Multipliziert mit 2 und
  2. Wird in das PDC-Register geladen, wie in Zeile 35 gezeigt.

In diesem Beispiel werden für 50% Einschaltdauer 0,5 ms anstelle von 1 ms in der oben angegebenen Formel gehalten. Das Auflösen nach PTPER ergibt 9.999. Der in das PDC-Register geladene Wert beträgt 19.999.

Der mit dieser Konfiguration erhaltene PWM-Ausgang ist unten dargestellt:

PWM im Auf-Ab-Zählmodus

Der Auf-Ab-Zählmodus ergibt eine PWM, die zur Mitte ausgerichtet ist. Dies ist besonders nützlich bei Vektorsteuerungsanwendungen.

  • In diesem Modus ist die PWM-Zeitbasis doppelt so hoch wie die für den Freilaufmodus berechnete. Zum Beispiel ergibt PTPER = 19.999 eine Periode von 2 ms anstatt 1 ms.
  • Gleiches gilt für die Tastverhältniswerte in PDC-Registern.

PWM im kostenlosen Modus

Der kostenlose Modus ist eine einzigartige Funktion der Serien dspic30f und dspic33f. Es ermöglicht uns, zwei PWM-Kanäle im komplementären Modus so zu konfigurieren, dass der Ausgang eines Kanals genau dem anderen Kanal entgegengesetzt ist.

Um dies zu konfigurieren,

  • Das PMOD-Bit im PTCON1-Register muss mit einer Null geschrieben werden, wie in Zeile 14–16 erwähnt.
PMODModus

0

Kostenloser Modus

1

Unabhängiger Modus

  • Das PWM-High-Enable-Bit oder PENxH und das entsprechende PWM-Low-Enable-Bit PENxL müssen mit einer Eins geschrieben werden, wie in den Zeilen 17–22 erwähnt.

Dead Time Insertion in dspic

Wenn die PWM im komplementären Modus konfiguriert ist, kann durch Konfigurieren des DTCON1-Registers leicht eine Totzeit zwischen den beiden komplementären Kanälen eingefügt werden.

  • Das DTAPS-Bit wird verwendet, um den Totzeit-Vorteiler auszuwählen.
  • DTA wird mit einem 6-Bit-Integer-Wert geladen, um die Zeitdauer der einzufügenden Totzeit zu bestimmen. Sie kann aus derselben Formel der oben angegebenen PTPER-Wertberechnung berechnet werden.
  • Da dies nur ein 6-Bit-Wert ist, kann er nicht größer als 64 sein. Wenn nach der Berechnung ein größerer Wert auftritt, muss der Vorteiler angepasst werden.
  • Zeile 27 zeigt einen Wert von 59, berechnet für 4 Mikrosekunden, wobei der Vorteiler auf Null gehalten wird.

Der PWM-Interrupt in dspic30f und dspic33f

In dspic30f und dspic33f ist ein PWM-Interrupt verfügbar, der während des PWM-Zyklus an verschiedenen Stellen ausgelöst werden kann.

ModusPunkt, an dem der Interrupt ausgelöst wird

Kontinuierlicher Auf-Ab-Zählmodus mit Interrupts für doppelte Aktualisierung

Zu Beginn und am Ende jedes PWM-Zyklus. Postscaler hat in diesem Modus keine Auswirkung.

Kontinuierlicher Auf-Ab-Zählmodus

Zu Beginn jedes PWM-Zyklus.

Einzelereignismodus

Am Ende jedes PWM-Zyklus. (Wenn eine Vergleichsübereinstimmung zwischen PTPER und PTMR auftritt.) Der Post-Scaler hat in diesem Modus keine Auswirkung.

Freilaufmodus

Am Ende jedes PWM-Zyklus. (Wenn eine Vergleichsübereinstimmung zwischen PTPER und PTMR auftritt)

Um einen PWM-Interrupt zu aktivieren, muss das PWMIE-Bit im IEC2-Register auf 1 gesetzt werden.

void Interrupt_Init (void) {IEC2bits.PWMIE = 1; }}

Das Folgende ist der Standardcode der PWM-Interrupt-Funktion, der aufgerufen wird, wenn der Interrupt ausgelöst wird.

void __attribute __ ((Interrupt, auto_psv)) _PWMInterrupt (void) {// dein Code hier IFS2bits.PWMIF = 0; }}

Weitere Informationen zu Interrupts finden Sie in diesem ausführlichen Tutorial: Verwendung von Interrupts in Pic MicroControllern.

PWM Interrupt Postscaler

Ein Postscaler kann verwendet werden, um die Häufigkeit der Interrupt-Auslösung zu verringern. Beispielsweise kann es so konfiguriert werden, dass es nach jeweils 1, 2, 4 oder 8 PWM-Zyklen ausgelöst wird, abhängig von den PTOPS-Bits im PTCON-Register, wie in Zeile 6 unseres Referenzcodes gezeigt.

Dieser Artikel ist genau und nach bestem Wissen des Autors. Der Inhalt dient nur zu Informations- oder Unterhaltungszwecken und ersetzt nicht die persönliche Beratung oder professionelle Beratung in geschäftlichen, finanziellen, rechtlichen oder technischen Angelegenheiten.

Fragen & Antworten

Frage: Ich versuche, mit dem Referenzprogramm dspic30f4011 und Pickit 3 einen kostenlosen Modus für einen PWM-Ausgang zu erhalten. Das einzige, was ich aufgenommen habe, sind die Konfigurationsbits für die interne Frequenzauswahl und den c-Compiler, kann aber keinen Ausgang am PWM1 erhalten Stifte?

Antworten: Wenn Sie die Konfigurationsbits ändern, funktioniert der Mikrocontroller manchmal nicht mehr. Damit meine ich, dass der Code nicht ausgeführt wird, wenn der Oszillator nicht richtig funktioniert.

Um zu bestätigen, dass Ihr Controller die richtige Oszillatorkonfiguration ausgewählt hat, sollten Sie in alle Codes einen LED-Blinkcode einfügen, um zu bestätigen, dass der Controller eingeschaltet ist und funktioniert.

Faszinierende Publikationen.

Seitenwahl

Grundlegende Konzepte in geografischen Informationssystemen (GIS)
Computers

Grundlegende Konzepte in geografischen Informationssystemen (GIS)

CWanamaker lie t, chreibt und lernt gerne über die Welt um un herum. Weitere Informationen darüber, wie GI -Anwendungen ge chäftlich einge etzt werden können, finden ie in meinem A...
Warum sollte ich Unity verwenden: Top 8 Gründe
Misc

Warum sollte ich Unity verwenden: Top 8 Gründe

John i t ein erfahrener freiberuflicher Inhalt chreiber mit einer viel eitigen Be chäftigung ge chichte.Die Ent cheidung, welche piel-Engine für Ihr näch te Projekt verwendet werden oll...