Pulsweitenmodulation mit dem SAM4S Xplained Pro

SAM4S Xplained Pro - OLED Demo (March 2019).

Anonim

Pulsweitenmodulation mit dem SAM4S Xplained Pro


Dieser Artikel enthält alles, was Sie wissen müssen, um pulsweitenmodulierte Signale mit Atmels SAM4S Xplained Pro-Entwicklungsboard zu erzeugen.

zusätzliche Informationen

  • Einführung in die Projektentwicklung mit dem Atmel SAM4S Xplained Pro
  • Verwandeln Sie Ihre PWM in einen DAC
  • Tiefpassfilter Ein PWM-Signal in eine analoge Spannung filtern

Benötigte Hardware / Software

  • SAM4S Xplained Pro Evaluierungskit
  • Atmel Studio

Vor einem PWM-DAC benötigen wir PWM

Dieser Artikel soll auf einer kürzlichen Zwei-Artikel-Reihe aufbauen, die die Technik untersucht, mit der die Digital-Analog-Umwandlung durch Tiefpassfilterung eines pulsweitenmodulierten Signals erreicht wird. (Klicken Sie hier für Teil 1 und hier für Teil 2.) Die allgemeine Schlussfolgerung aus diesen Artikeln ist, dass ein PWM-DAC eine Überlegung wert ist, wenn

  1. Sie können oder wollen keinen externen DAC oder einen Mikrocontroller mit integriertem DAC verwenden,
  2. Die PWM-Hardware bietet eine DAC-Auflösung, die für Ihre Anwendung geeignet ist.
  3. Ihre digitale Versorgungsspannung ist genau und vorhersehbar, und
  4. Sie können eine akzeptable Ausgangswelligkeit und Einschwingzeit mit nur einem einfachen RC-Tiefpassfilter erreichen.

Wir haben die theoretische Seite dieses Themas behandelt, und jetzt ist es an der Zeit, die Theorie in die Praxis umzusetzen und dann einige Ergebnisse aus der Praxis zu betrachten. Dazu verwenden wir das SAM4S Xplained Pro "Evaluierungskit", mit dem Atmel etwas bezeichnet, das ich als "Entwicklungsboard" bezeichnen würde. Wir werden auch die Erweiterungskarten PROTO1 und I / O1 verwenden, die beide im Starterkit SAM4S Xplained Pro enthalten sind. Tatsächlich sind die Erweiterungskarten für dieses Projekt jedoch eine Bequemlichkeit, keine Notwendigkeit; Wenn Sie nur die SAM4S-Karte haben, können Sie die Tiefpassschaltung mit einem Steckbrett oder etwas anderem aufbauen.

Bevor wir ein PWM-Signal in eine digital gesteuerte analoge Spannung umwandeln können, müssen wir ein PWM-Signal erzeugen, und das ist meiner Meinung nach nicht so einfach, wie man es erwarten könnte. Es scheint mir, dass der PWM-Teil des Atmel Software Frameworks (ASF) etwas schlecht dokumentiert ist, und es gibt verschiedene kleine Details, die Sie richtig machen müssen, bevor Sie tatsächlich die erwartete PWM-Wellenform auf dem erwarteten Pin sehen. Daher werden wir den Rest dieses Artikels der Beherrschung der PWM-Schnittstelle widmen, und im nächsten Artikel werden wir die DAC-Funktionalität integrieren.

Und vergessen Sie übrigens nicht, das PWM ASF-Modul zu dem Projekt hinzuzufügen, bevor Sie versuchen, die PWM-Funktionalität des ASF zu verwenden. Das Verfahren zum Hinzufügen eines ASF-Moduls wird im Abschnitt "Schritt für Schritt" von Intro zur Projektentwicklung mit Atmel SAM4S Xplained Pro erläutert.

Signal an Pin anschließen

Der Mikrocontroller auf der SAM4S-Karte unterstützt vier separate PWM-Kanäle; Jeder Kanal hat komplementäre Ausgänge. Insgesamt haben wir also bis zu acht PWM-Signale. Das SAM4S Xplained Pro Benutzerhandbuch sagt uns, dass zwei dieser Signale in der Standard-Extension Header Pinbelegung enthalten sind:

Wenn wir uns die Pinbelegung für EXT1 ansehen, sehen wir, dass Pin 7 uns das positive (dh nicht invertierte) Signal vom PWM-Kanal 0 gibt, und der Port-Pin, der dieses Signal antreibt, ist PA23:

Wenn wir alles gleich halten, aber auf Polarität = PWM_LOW umschalten, bekommen wir folgendes:

Wenn wir zu PWM_HIGH zurückkehren und dann zu alignment = PWM_ALIGN_CENTER wechseln, sehen wir Folgendes:

Die nächste Wellenform ist wieder linksbündig, und ich habe ul_duty auf 10 erhöht:

Und hier habe ich ul_period auf 30 erhöht:

Und schließlich, hier ist die Wellenform, wenn ich alles gleich (ul_duty = 10, ul_period = 30) behalte aber die Taktfrequenz A auf 10 MHz erhöhe.

Sie können den folgenden Link verwenden, um die Quell- und Projektdateien herunterzuladen, und der gesamte "main.c" -Code wird nach dem Link angegeben. Im nächsten Artikel werden wir unser neu gewonnenes PWM-Know-how nutzen, um die PWM-Digital-Analog-Wandlung zu untersuchen.

Quell- und Projektdateien

 #include#define PWM_DAC IOPORT_CREATE_PIN(PIOA, 23) pwm_channel_t pwm_channel_instance; int main (void) { //clock configuration and initialization sysclk_init(); /*Disable the watchdog timer and configure/initialize port pins connected to various components incorporated into the SAM4S Xplained development platform, eg, the NAND flash, the OLED interface, the LEDs, the SW0 pushbutton.*/ board_init(); //connect peripheral B to pin A23 pio_configure_pin(PWM_DAC, PIO_TYPE_PIO_PERIPH_B); //enable the peripheral clock for the PWM hardware pmc_enable_periph_clk(ID_PWM); //disable the channel until it is properly configured pwm_channel_disable(PWM, PWM_CHANNEL_0); //PWM clock configuration pwm_clock_t PWMDAC_clock_config = { .ul_clka = 1000000, .ul_clkb = 0, .ul_mck = sysclk_get_cpu_hz() }; //apply the clock configuration pwm_init(PWM, &PWMDAC_clock_config); //see the article for details pwm_channel_instance.channel = PWM_CHANNEL_0; pwm_channel_instance.ul_prescaler = PWM_CMR_CPRE_CLKA; pwm_channel_instance.polarity = PWM_HIGH; pwm_channel_instance.alignment = PWM_ALIGN_LEFT; pwm_channel_instance.ul_period = 20; pwm_channel_instance.ul_duty = 5; //apply the channel configuration pwm_channel_init(PWM, &pwm_channel_instance); //configuration is complete, so enable the channel pwm_channel_enable(PWM, PWM_CHANNEL_0); while(1); } 

Nächster Artikel in der Serie: PWM Digital-zu-Analog-Konvertierung mit dem SAM4S Xplained Pro

Gib diesem Projekt einen Versuch für dich selbst! Holen Sie sich die Stückliste.