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.