Misc

Verwendung von ADCs in dspic30f und dspic33f

Autor: Peter Berry
Erstelldatum: 15 Juli 2021
Aktualisierungsdatum: 13 September 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.

Die dsPic-Geräte bieten ein leistungsstarkes ADC-Modul (Analog-Digital-Wandler), das mit einer Geschwindigkeit von bis zu 1 Msps abtasten kann. Es kann auf verschiedene Arten und Modi verwendet werden, um den Anforderungen Ihres Projekts zu entsprechen.

Dieses Tutorial soll all jenen die Grundlagen der A / D-Konvertierungsmodule vermitteln, die ihre Projekte mit den dsPics beginnen.

So geben Sie dem ADC eine Eingabe

Der erste Schritt besteht darin, die erforderliche Hardware für die Eingabe in den ADC einzurichten.

Abtasten eines Gleichstromsignals

Für den ersten Test können Sie ein Potentiometer verwenden, das an eine 5-V-Versorgung angeschlossen ist, und die ADC-Analogstifte direkt eingeben.


Abtasten eines Wechselstromsignals mit ADC

Um ein Wechselstromsignal (Netzspannungen oder -ströme) abzutasten, müssen Sie:

  1. Stellen Sie das Signal mit Hilfe von Transformatoren auf den erforderlichen Spannungspegel herunter.
  2. Pegelverschiebung des Signals, so dass negative Werte unter Null nach oben verschoben werden. Die ADCs in Pics können keine negativen Signale abtasten.

Dieses Referenzschaltungsdesign kann Ihnen bei den Pegelverschiebungsschaltungen helfen:

Testen des ADC

Nach dem Einrichten des erforderlichen Codes und der erforderlichen Hardware muss eine Möglichkeit vorhanden sein, zu testen, ob der ADC tatsächlich auf die erforderliche Weise korrekt abtastet oder nicht. Da Sie nicht in die MCU schauen können, um zu sehen, ob alles richtig läuft, schlage ich zwei Möglichkeiten vor:

  1. Sie können einen Debugger wie oben abgebildet mit dem Bild verbinden. Im Debug-Modus können Sie den Wert in den Registern ADCBUF0 bis 10 überprüfen, um festzustellen, ob sie mit korrekt abgetasteten Werten geladen werden.
  2. Sie können die Werte des ADCBUF-Registers gründlich über UART senden und mithilfe eines seriellen Monitors auf einem PC überwachen.

ADC-Beispielcode für dsPic

#include "xc.h" #define FCY 20000000 #define FPWM 3600 #include xc.h> #include stdio.h> #include delay.h> #include libpic30.h> #include dsp.h> #include math.h > _FOSC (CSW_FSCM_OFF & XT_PLL8); // Externer Oszillator, PLLx8 _FWDT (WDT_OFF); // Watchdog-Timer aus _FBORPOR (MCLR_DIS); // Reset deaktivieren int ADCValue; void init_ADC (void) {TRISB = 0xFFFF; // Als Eingangsport setzen ADPCFG = 0x0000; // Auswahl aller analogen Pins in den analogen Modus ADCHSbits.CH0SA = 1; ADCHSbits.CH0NA = 0; //ADCHSbits.CH123SA = 0; //ADCHSbits.CH123NA = 0; IEC0bits.ADIE = 1; // ADC Interrupt IPC2bits aktivieren.ADIP = 1; // setze Interrupt priorty-6 ADCSSLbits.CSSL0 = 0; // Eingangsscan für Analoge-Pin AN0, AN1, AN2 überspringen ADCSSLbits.CSSL1 = 0; ADCSSLbits.CSSL2 = 0; ADCON3bits.SAMC = 0; // Automatische Abtastzeit 6TAD // maximale Abtastzeit ADCON3bits.ADRC = 0; // Auswahl der vom Systemtakt abgeleiteten Konvertierungstaktquelle ADCON3bits.ADCS = 9; // Konvertierungstakt auswählen 6Tcy ADCON1bits.ADSIDL = 0; // Auswahl des Weiterbetriebs im Leerlaufmodus ADCON1bits.FORM = 1; // Datenausgabe im vorzeichenbehafteten Ganzzahlformat auswählen ADCON1bits.SSRC = 0; // Auswahl des Motorsteuerungs-PWM-Intervalls beendet die Abtastung und startet die Konvertierung ADCON1bits.SIMSAM = 0; // Proben CH0, CH1, CH2, CH3 gleichzeitig ADCON1bits.ASAM = 0; // Die Auswahl von Sampling beginnt unmittelbar nach Abschluss der letzten Konvertierung. Das SAMP-Bit wird automatisch gesetzt. ADCON1bits.SAMP = 0; // Mindestens ein A / D-Sample / Hold-Verstärker tastet ADCON2bits ab. VCFG = 0; // Spannungsreferenz Konfigurationsbits ADCON2bits.CSCNA = 0; // Eingangsscan deaktivieren ADCON2bits.CHPS = 0; // Konvertierungskanal auswählen CH0 ADCON2bits.SMPI = 0; // Auswahl von 1 Konvertierungsbeispiel pro Interrupt ADCON2bits.ALTS = 0; // Verwendet die Einstellungen des MUX A-Eingangsmultiplexers ADCON2bits.BUFM = 0; // Puffer konfiguriert als ein 16-Wort-Puffer ADCBUF (15 ... 0) ADCON1bits.ADON = 1; // A / D-Wandler ist eingeschaltet} void readADC () {//ADCON1bits.SAMP = 1; // Sampling starten, automatische Konvertierung folgt // __ delay_ms (100); ADCON1bits.SAMP = 0; // Sampling starten, automatische Konvertierung folgt while (! ADCON1bits.DONE); // warte bis die Konvertierung abgeschlossen ist ADCValue = ADCBUF0; // Konvertierungsergebnis lesen} void main (void) {init_ADC (); int data; während (1) {readADC (); data = ADCValue; }}

ADC-Modul konfigurieren

Das ADC-Modul kann mit Hilfe des oben angegebenen Codes initialisiert und konfiguriert werden. Es folgt eine Schritt-für-Schritt-Anleitung.


Die Schritte 1 bis 7 sind wichtig. Nach 7 können einige oder alle von ihnen übersprungen werden.

1. Stellen Sie den Port als Eingang und im analogen Modus ein

  1. Port B, an dem die ADC-Eingangspins vorhanden sind, muss als Eingangsport eingestellt werden. (Zeile - 21).
  2. Sie müssen vom ADPCFG-Register auf den analogen Eingangsmodus eingestellt werden. (Zeile - 22).

2. Wählen Sie Analogeingänge für die Abtastung

Analoge Eingänge müssen zur Abtastung an einen 'ADC-Kanal' angeschlossen werden. Es gibt normalerweise mehr analoge Eingänge als Kanäle. Zum Beispiel hat dsPic30f4011 09 analoge Eingänge, aber nur 04 ADC-Kanäle. Daher müssen Sie jetzt auswählen, welcher Analogeingangspin mit welchem ​​ADC-Kanal verbunden ist. Dies geschieht mit Hilfe des ADCHS-Registers.

  • Hier wird AN1 als analoger Pin-Eingang für Kanal 0 ausgewählt (Leitung - 2).
  • Die Anzahl der Kanäle bestimmt die Anzahl der gleichzeitig möglichen Abtastungen.
  • Der Controller kann abwechselnd zwischen Mux A und Mux B abtasten.

Auswahl verschiedener Kombinationen von ADC-Analogeingängen und -Kanälen für dspic30f-Geräte.
(dspic33f-Geräte verfügen möglicherweise über mehr Kanäle und Eingänge.)


Mögliche Konfigurationen von ADCHSResultierende analoge Eingangspin-KonfigurationCodezeile

Kanal 0 -> Mux A.

Jeder Anlouge-Pin von AN0 - AN8 kann ausgewählt werden, um Kanal 0 über Mux A einen Eingang zu geben.

ADCHSbits.CH0SA = 1; oder eine andere Nummer je nach Pin

Kanal 1, 2 und 3 -> Mux A.

Kanal 1 Eingang ist AN3, Kanal 2 -> AN4, Kanal 3 -> AN5

ADCHSbits.CH123SA = 1;

Kanal 0 -> Mux B.

Jeder Anlouge-Pin von AN0 - AN8 kann ausgewählt werden, um Kanal 0 über Mux B einen Eingang zu geben

ADCHSbits.CH0SB = 1; oder eine andere Nummer je nach Pin

Kanal 1, 2 und 3 -> Mux B.

Kanal 1 Eingang ist AN3, Kanal 2 -> AN4, Kanal 3 -> AN5

ADCHSbits.CH123SB = 1;

3. Wählen Sie die Spannungsreferenz

Es muss eine Spannungsreferenz ausgewählt werden, die dem Eingangsbereich der Analogeingänge entspricht. Hierfür gibt es zwei Möglichkeiten:

  1. Vcc und Gnd können zu oberen und unteren Referenzgrenzen gemacht werden.
  2. An den AVref-Pin kann eine externe Referenzspannung angelegt werden.

Dies erfolgt mit Hilfe des VCFG-Bits im ADCON2-Register. (Zeile - 47)

VCFGVref (höher)Vref (unten)

0

AVdd

AVss

1

Externe Vref +

AVss

2

AVdd

Externe Vref -

3

Externe Vref +

Externe Vref -

4. Wählen Sie das Ausgabeformat der Daten

Das Ausgabeformat der über ADC abgetasteten Daten kann auch mit Hilfe des FORM-Bits im ADCON1-Register gemäß der folgenden Tabelle angegeben werden:

BILDENDatenausgabeformat

0

ganze Zahl

1

Ganzzahl mit Vorzeichen

2

fraktioniert

3

fraktioniert signiert

5. Wählen Sie die Conversion-Triggerquelle aus

Die Analog-Digital-Wandlung innerhalb des ADC-Moduls kann durch eine Anzahl von Triggerquellen ausgelöst werden, die durch die SSRC-Bits im ADCON1-Register gemäß der folgenden Tabelle bestimmt werden:

SSRCConversion-Trigger-Quelle

0

Das manuelle Löschen des SAMP-Bits beendet die Abtastung und startet die Konvertierung.

1

Der aktive Übergang am INT0-Pin beendet die Abtastung und startet die Konvertierung.

2

Timer 3 vergleicht das Match, beendet die Abtastung und startet die Konvertierung.

3

Das Ende des PWM-Zyklus beendet die Abtastung und startet die Konvertierung.

7

Automatische Konvertierung durch internen Zähler ausgelöst.

6. Wählen Sie den Sampling-Modus

Die Abtastung auf ADC-Kanälen kann mit einer der folgenden Methoden eingeleitet werden:

  1. Manuelles Setzen des SAMP-Bits im Code.
  2. Automatisch nach dem Ende der letzten Konvertierung.

Dies wird durch das ASAM-Bit im ADCON1-Register entschieden.

ASAMModus

0

Die Abtastung beginnt, wenn das SAMP-Bit gesetzt ist

1

Die Probenahme beginnt unmittelbar nach dem Ende der letzten Konvertierung.

7. Wählen Sie die Konvertierungsuhr

Jede Analog-Digital-Wandlung mit dem A / D-Modul erfordert 12 Taktperioden. Die Periode eines einzelnen Taktzyklus kann mit Hilfe von ADCS-Bits im ADCON3-Register konfiguriert werden. Der in ADCS platzierte Wert ist ein Sechs-Bit-Wert. Dies kann aus den folgenden Formeln berechnet werden:

Der minimale Wert von Tad, der verwendet werden kann, beträgt 154 Nanosekunden.

8. Entscheiden Sie, ob eine gleichzeitige Probenahme erforderlich ist oder nicht (optional)

Die gleichzeitige Abtastung kann durch das SIMSAM-Bit im ADCON1-Register aktiviert werden. Durch gleichzeitiges Abtasten werden die Abtastwerte aller Eingangskanäle genau zum gleichen Zeitpunkt erfasst. Wenn die gleichzeitige Abtastung deaktiviert ist, werden die Kanäle nacheinander abgetastet.

9. Wählen Sie die Conversion Clock Source (optional).

In den meisten Fällen wird die Konvertierungstaktquelle als Systemtakt ausgewählt, indem das ADRC-Bit im ADCON3-Register auf 0 gesetzt wird.

10. Stellen Sie fest, ob ein Eingabescan erforderlich ist (optional).

  • Dieser Schritt kann in den meisten Anwendungen übersprungen werden.
  • Das Scannen von Eingängen kann über das CSNA-Bit im ADCON2-Register aktiviert werden.

Kanal 0 des ADC-Moduls kann so konfiguriert werden, dass mehrere analoge Eingänge abgetastet werden. Dies kann verwendet werden, wenn es sich um mehrere Eingabequellen handelt und nicht alle gleichzeitig aktiv sind.

Der ADC-Interrupt in dspic30f und dspic33f

Anstatt die Funktion readADC () im Hauptteil zum Lesen der Werte aus dem ADC-Modul zu verwenden, wird ein Interrupt verwendet, um dieselbe Funktion in den meisten fortgeschrittenen Anwendungen auszuführen.

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

Interrupt-basierter Code für ADCs in dspic30f und dspic33f

#define FCY 30000000 #include xc.h> #include stdio.h> #include delay.h> #include libpic30.h> #include math.h> #include p30F4011.h> _FOSC (CSW_FSCM_OFF & FRC_PLL16); // Fosc = 16 × 7,5 MHz, d. H. 30 MIPS _FWDT (WDT_OFF); // Watchdog-Timer aus _FBORPOR (MCLR_DIS); void Interrupt_Init (void) {IEC0bits.ADIE = 1; // ADC Interrupt IPC2bits aktivieren.ADIP = 6; // setze Interrupt-Priorität = 6} void __attribute __ ((Interrupt, auto_psv)) _ ADCInterrupt (void) {while (! ADCON1bits.DONE); // warte, bis das Konvertierungsbeispiel abgeschlossen ist.Va = ADCBUF0; sample.Vb = ADCBUF1; IFS0bits.ADIF = 0; } int main (void) {// RD0 zu einem digitalen Ausgang machen _TRISD0 = 0; Interrupt_Init (); ADC_Init (); während (1) {_LATD0 = 1; __delay32 (15000000); _LATD0 = 0; __delay32 (15000000); }}

  • Es sollte eine Konvertierungs-Triggerquelle ausgewählt werden, damit der ADC-Interrupt ordnungsgemäß funktioniert, wie in Schritt 5 beschrieben.
  • Die Probenahme sollte im automatischen Modus erfolgen. (ASAM-Bit)
  • Die Häufigkeit des Auslösens eines ADC-Interrupts kann mit Hilfe von SMPI-Bits im ADCON2-Register gesteuert werden. (Zeile 50).

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.

Wir Empfehlen Ihnen, Zu Lesen

Artikel Des Portals

So verwenden Sie den Kennwortschutz in der OneNote iOS-App
Telefone

So verwenden Sie den Kennwortschutz in der OneNote iOS-App

Max hat einen B. . in Ma enkommunikation von IU, einen M.A. in Kommunikation von U of I, und trebt einen MBA von der Web ter Univer ity an.Micro oft OneNote i t ein lei tung tarke Notiz- und Organi at...
So konvertieren Sie Word-Dokumente in Bilder (jpg, png, gif, tiff)
Computers

So konvertieren Sie Word-Dokumente in Bilder (jpg, png, gif, tiff)

Der Autor i t ein wider tand fähiger Ab olvent der Elektrotechnik und ein auf trebender Fachmann auf die em Gebiet.Mü en ie Ihr Word-Dokument (oder einen Teil davon) in ein Bild konvertieren...