RPi-Pico Sweep-Generator                 

              

Elektronik-Labor  Projekte  Mikrocontroller  Raspberry        


Aus RPi Pico Schaltungen und Projekte Kap. 28

Zur Aufnahme von Frequenzgängen eignet sich ein Sweep-Generator, der die Frequenz linear bis zu einem definierten Endwert hochfährt. Diese Aufgabe ist mit geringen Änderungen am DDS-Sinusgenerator lösbar. Die eingegebene Frequenz f ist nun die Endfrequenz und wird beim Start auf 10 kHz festgelegt. Die entscheidende Änderung liegt in der Interrupt-Funktion. Bei jedem Start einer Messung wird die aktuelle Frequenz neu berechnet.

//Pico_SweepDDS  
#include "pico/stdlib.h"
#include "hardware/adc.h"
#include "hardware/pwm.h"
#include "pico/multicore.h"

unsigned int scope[1000];
unsigned int dds[1024];
uint16_t akku, i;
unsigned int f, dp;

void setup() {
  f=10000;
  dp=f*64/200;
  Serial.begin(115200);
  for (int j = 0; j < 1024; j++){
    dds[j]=312+300* sin(2*PI*j/1024.0);
  }
  while(true){
    if (Serial.available()){
      f = Serial.parseInt();
      if( f>0) dp=f*64/200;
    }
    i=0;
    sleep_ms(1000);
      for (int j = 0; j < 500; j++){
      Serial.println ((int) scope[j]*3300/4095);
      }
  }
}

void loop() {} 
 
void setup1() {
  adc_init();
  adc_gpio_init(26);
  adc_select_input(0); 
 
  gpio_set_function(0, GPIO_FUNC_PWM);
  pwm_set_wrap(0, 624);  //PWM 200 kHz
  pwm_set_gpio_level(0, 312);
  pwm_set_enabled(0, true);
  pwm_set_irq_enabled(0, true);
  irq_set_exclusive_handler(PWM_IRQ_WRAP, pwm_int);
  irq_set_enabled(PWM_IRQ_WRAP, true);
  while (true);


void pwm_int() {
  pwm_clear_irq(0);
  pwm_set_gpio_level(0, dds[akku>>6]);
  if (i>499) akku=0;   //312<<6;
  if (i<500){
    akku+=dp*i/500;
    scope[i]=adc_read();
    i++;
  }
}


Das Oszillogramm oben zeigt die Reaktion des Tiefpassfilters mit 10 kΩ und 2,2 nF im Bereich 0 bis 10 kHz. Die Skalenteile markieren die Frequenzen 2 kHz, 4 kHz, 6 kHz 8 kHz und 10 kHz. Bei der Grenzfrequenz von ca. 7 kHz sollte die Signalamplitude um 3 dB abgesunken sein, also auf den Faktor 0,71. Das Ergebnis bestätigt die Theorie im Rahmen der Ablesegenauigkeit.

Bei einer Messung bis 50 kHz wird der Einfluss des Tiefpassfilters noch  deutlicher. Zugleich sieht man im Bereich über 30 kHz gewisse Schwächen der Darstellung, weil die Signalfrequenz zu nahe an der Abtastfrequenz liegt. Wenn eine Schwingung aus zu wenigen Abtastpunkten besteht, kommt es zu erkennbaren Unregelmäßigkeiten.

Der Sweep-Generator eignet sich auch zur Untersuchung von Bandpassfiltern. Hier wird ein Schwingkreis durchgemessen. Die Spule hat 22 mH und der Kondensator 10 nF. Daraus ergibt sich eine  Resonanzfrequenz von 10,7 kHz.

Der Generator wurde auf eine Endfrequenz von 21,4 kHz eingestellt. Damit sollte die Resonanz in der Mitte der Zeitachse liegen. Tatsächlich liegt sie aber deutlich höher, was auf hohe Toleranzen der Bauteile hinzuweisen scheint.

Ein Versuch mit dem DDS-Sinusgenerator zeigte, dass die Amplitude am Schwingkreis bei 12 kHz maximal wird. Mit dem Sweep-Generator scheint die Resonanz noch etwas höher zu liegen. Man muss aber bedenken, dass ein Schwingkreis immer eine gewisse Zeit braucht, um voll einzuschwingen. Dadurch erscheint das Maximum der Amplitude etwas verspätet. Für die Messung wäre es besser, die Frequenz langsamer hochzufahren. Allerdings spricht die begrenzte Breite des Ausgabefensters dagegen, weil dann nicht mehr jede Schwingung genau genug dargestellt werden könnte.

Das Verhalten des Schwingkreises ändert sich deutlich, wenn ein kleiner Magnet an den Ferritkern gehalten wird. Die Induktivität verringert sich, sodass die Resonanzfrequenz steigt. Außerdem werden Verzerrungen im Bereich kleiner Frequenzen erkennbar, die auf eine magnetische Sättigung des Kerns hinweisen.


Elektronik-Labor  Projekte  Mikrocontroller  Raspberry