Ich muss zugeben, dass ich nicht allzu viel über analoge Elektronik weiß, aber ich würde gerne wissen, ob es möglich ist, einen äquivalenten Zeit-Sampler (ETS) mit den A/Ds auf einem Mikro zu konstruieren.
Ich hoffe diese Frage ist nicht zu vage. Grundsätzlich verstehe ich, dass ETS zum Abtasten sehr hochfrequenter Signale verwendet wird und ein Trick ist, der für digitale Oszilloskope verwendet wird.
Ich frage mich, ob jemand dies schon einmal versucht hat oder eine gute Referenz kennt.
Grüße,
Nathan
Equivalent Time Sampling (ETS) ist ein Trick, um Hochfrequenzsignale zu messen, wenn Sie eine Annahme über das gemessene Signal treffen können. Die Annahme ist, dass das Signal, das Sie abtasten, ein sich wiederholendes Signal ist (dh eine Sinuswelle oder ein anderes "zeitkonstantes" Signal).
Um dies auf Homebrew-Art zu tun, benötigen Sie ein Mittel, um genau und wiederholt an einem festen Ort (Ihrem Triggerpunkt) zu triggern, um eine variable Zeit zu verzögern und dann eine ADC-Erfassung in festen Intervallen zu starten.
Die Triggerung kann mit einem schnellen Komparator und einer genauen Referenz erfolgen. Wenn Ihre genaue Referenz ein gefilterter oder anderweitig stabiler DAC-Ausgang ist, haben Sie einen raffinierten (wenn auch vereinfachten) softwaregesteuerten Triggerpunkt. Führen Sie den Ausgang des Komparators in einen "Start-Timer" -Erfassungseingang Ihres Mikrocontrollers ein. Die Idee ist, dass der Timer Ihres Mikrocontrollers mit dem Zählen beginnt, sobald der Komparator ausgelöst wird. Wenn der Timer überläuft, startet er eine ADC-Erfassung und stoppt (bis Sie ihn anweisen, erneut auf das Ereignis zu achten).
Wenn Sie eine enge Schleife oder Interrupt-Routine (z. B. Software) verwenden, um zu erkennen, wann der Timer abläuft, um Ihre ADC-Erfassung zu starten, kann es zu einem gewissen Jitter kommen, da es unterschiedlich lange dauert, bis erkannt wird, dass der Timer abgelaufen ist. Wenn möglich, stellen Sie den Timer-Interrupt so ein, dass die ADC-Übertragung automatisch gestartet wird. Dies ist auf zahlreichen Mikrocontrollern möglich.
Wenn Sie es noch nicht erraten haben, werden Sie den Startwert des Timers anpassen, um Ihnen eine variable "Pause" zu geben, bevor Sie die Abtastschleife starten. Im Wesentlichen "laufen" Sie über die sich wiederholende Wellenform.
Nun zum ADC. Nehmen wir der Einfachheit halber an, dass Sie jederzeit so schnell wie möglich sampeln. (Ich werde weiter unten auf Alternativen eingehen.) Dies bedeutet, dass Sie, sobald der ADC fertig ist, ihm sagen, dass er erneut beginnen soll. Jetzt sind einige Mikrocontroller besser darin als andere; Wenn Sie Ihre ADC-Ergebnisse DMA und automatisch neu starten können, ist dies Ihre beste Option. Andernfalls haben Sie eine ANDERE Quelle von Jitter in Ihrer ETS: die Verzögerung zwischen einem vollständigen Interrupt des ADC (oder einer Abfrage, die den Abschluss erkennt), dem Speichern des Samples und dem Starten einer weiteren Erfassung.
Da ist Ihr Grundsystem. Pseudocode:
volatile int adc_count;
/* assumes you can't use DMA to drive the ADC */
void adc_interrupt(void)
{
store_value();
if(--adc_count) {
start_adc();
}
}
do {
int offset;
offset = 0; /* offset from trigger to first ADC sample */
do {
adc_count = 256; /* arbitrary, how many samples per trigger */
load_timer(offset); /* set timer value */
arm_timer(); /* timer will now start when the trigger occurs */
} while(adc_count);
offset += 10; /* arbitrary, how much to "move over" each trigger */
} while(offset < 100); /* arbitrary, how many triggers to use for an ETS capture */
Ziemlich unkompliziertes Zeug, aber wie ich bereits erwähnt habe, müssen Sie den Code entwerfen und einen Mikrocontroller auswählen, der Ihnen den geringstmöglichen Jitter ermöglicht. Dies bedeutet, dass Sie einen Mikrocontroller wünschen, der so eingerichtet werden kann, dass ein Timer-Interrupt starten und ADC erfassen kann und dass ein ADC-Abschlussereignis Ergebnisse DMA (und den ADC neu starten) kann. Wenn Ihr Mikrocontroller dies nicht kann, treten bei Ihrer Abtastung einige Jitter auf, und die erfasste Wellenform sieht möglicherweise etwas "aus" aus, da die Abtastpunkte nicht in gleichmäßigen Abständen liegen.
Was nun, wenn Sie nicht so schnell wie möglich probieren möchten? Sie möchten, dass der ADC-Interrupt einen zweiten Timer startet, der die gewünschte Zeit zwischen den Abtastungen wartet, und dass der Interrupt dieses zweiten Timers den ADC erneut startet. Wenn Sie dies tun, müssen Sie sich bewusst sein, dass dies eine weitere Quelle von Jitter ist, wenn Sie eine Interrupt-Routine oder eine Abfrage (dh Software) verwenden müssen, um die Peripheriegeräte zu erkennen und zu starten.
Kurz gesagt, das ist ETS.
Ich glaube, dass die Antwort ja ist, aber die Leistung wäre begrenzt. Soweit ich weiß, liegen die höchsten Abtastraten bei in Mikrocontrollern eingebauten A/Ds im Bereich von 10 bis 100 kHz. Sie sind auch durch die Einschwingzeit des A / D begrenzt. Mit einem dedizierten Hochgeschwindigkeits-Register-A/D mit sukzessiver Approximation können Sie über 1 MHz erreichen.
Bei sich wiederholenden Signalen könnten Sie sich schnelleren Signalen annähern, indem Sie mehrere Kanäle verwenden, aber ich vermute, dass Sie Probleme haben würden, selbst 1-MHz-Signale genau zu rekonstruieren, was schlimmer ist als selbst das billigste Oszilloskop auf dem Markt.
Könnte trotzdem Spaß machen, es zu versuchen.
Ich fand diese Beschreibung hilfreich: http://www2.tek.com/cmswpt/tidetails.lotr?ct=TI&cs=Application+Note&ci=14295&lc=EN
Kenne ich schon.
Lassen Sie ETS an einem 40-MHz-Mikrochip-dsPIC arbeiten, der über einen ~ 500-kHz-ADC verfügt und 40-MHz-TES mit 25-ns-Jitter ausführt.
Das S/H im ADC ist natürlich beschissen, sodass die Bandbreite des Signals dadurch begrenzt wird. Es ist hilfreich, den ADC-Eingang mit einem Operationsverstärkerausgang mit niedriger Impedanz anzusteuern, da der Eingang im Wesentlichen zum Abtasten in einen Kondensator geschaltet wird, und Sie möchten, dass dieser ziemlich schnell nachgeführt wird.
Der Trick, um dies zum Laufen zu bringen, war:
Ihre Erfassung besteht beispielsweise aus 80 dieser ADC-Läufe, wobei jeder Lauf Proben im Abstand von 2 usec sammelt. Jeder neue Lauf beginnt im Zyklus 25 ns später als der vorherige Lauf, sodass 80 Läufe am Ende eine Abtastung bei jeder möglichen Verzögerung in 25-ns-Schritten nehmen.
Nun, das war sehr Mikrochip-spezifisch; Das Setup auf einer anderen MCU kann sehr unterschiedlich sein.
Kevin Vermeer
Kohlschmied
Connor Wolf
Kohlschmied