Oszilloskopanzeige nicht das, was ich erwarte

Ich hatte heute meinen ersten sehr spannenden und erfolgreichen Versuch an einem Oszilloskop. Die Frage, die am Ende meiner ersten Erfahrung aufkam, hat mit der von mir erwarteten Genauigkeit zu tun. Mein Mikrocontroller war so programmiert, dass er Signale wie ein HIGH-Signal für 80 us, LOW für 50 us, HIGH für 25 ms usw. ausgab. Ich habe einen 16-MHz-Quarz mit meinem ATMega8 verwendet.

Als ich die Ausgabe mit dem Oszilloskop aufzeichnete, bemerkte ich, dass die Messungen nicht genau waren. Wenn ich zum Beispiel ein 80 us HIGH-Signal auf dem Oszilloskop erwarten würde, würde es ungefähr so ​​​​aussehen wie 77 us. Die Signale, die länger dauerten (dh 25 ms), schienen genauer zu sein .

Meine Frage ist einfach: ist das, was ich erwarten sollte? Ich meine, das Gerät, das ich an meinen Mikrocontroller angeschlossen habe, benötigt für eine bestimmte Zeit bestimmte Signale, und ich habe meinen Mikrocontroller so programmiert, dass er ihm diese Signale für die erforderliche Zeitdauer liefert. Alles funktioniert super, ich kann einfach nicht verstehen, warum diese Diskrepanz besteht. Als Referenz ist der Sensor der Temperatursensor DHT-11 . Wenn der Mikrocontroller tatsächlich nicht die genauen Signale liefert, warum reagiert mein Sensor richtig?

Hier sind einige meiner Vermutungen:

  1. Der Sensor kann einige Fehler tolerieren, weshalb er funktioniert. Ich kann diesen Fehler anscheinend nicht identifizieren und anhand des Datenblatts relativieren.
  2. Der Kristall ist nicht ganz genau. Wir haben es hier mit Mikrosekundenauflösung zu tun, also ist es möglich.
  3. Andere Komponenten wie Widerstände und Kondensatoren führen zu Fehlern.
  4. Die Uhr auf dem Oszilloskop ist auch nicht perfekt - wenn auch viel besser als der Quarz, der für meinen Mikrocontroller verwendet wird

Vielleicht gibt es noch etwas anderes, was mir nicht bewusst ist.

Beachten Sie, dass die oben verwendeten Timings nur Beispiele sind und vom Datenblatt und dem, was ich tatsächlich in meinem Code verwendet habe, abweichen können.

Antworten (2)

Es ist schwer, genau zu sein, ohne Ihren Code zu sehen, aber ich werde es versuchen.

Ihre Vermutung Nr. 1 ist definitiv wahr; Jedes Eindraht-Busprotokoll muss viel Toleranz für Zeitschwankungen haben, da es teilweise vom resistiven Pullup eines Drahtes mit unvorhersehbarer Kapazität abhängt.

Ihre Vermutungen Nr. 2 - Nr. 4 sind unwahrscheinlich; Die Kristalle sowohl auf dem Mikrocontroller als auch auf dem Oszilloskop sind in Ordnung.

Was wahrscheinlich passiert, ist, dass die Impulse, die Sie mit Ihrer Firmware erzeugen, nicht genau die Breite haben, die Sie beabsichtigt haben. Ein Versatz von wenigen Befehlszyklen könnte leicht 3 µs betragen. Und dieser Fehler würde nicht mit dem Timing-Intervall skalieren, so dass längere Intervalle genauer erscheinen, wie Sie beobachtet haben.

Wenn Sie den Code posten, den Sie zum Generieren der Impulse verwenden, könnten wir spezifischere Ratschläge geben.

Sie können auch erwähnen, welchen Prozentsatz des Fehlers Ihr Oszilloskop behauptet, wie hoch die angegebene Bandbreite ist, ob es seit 1973 kalibriert wurde usw. usw. Dies kann so gut sein, wie es nur geht.

Bitte geben Sie Informationen (oder Bilder!) Ihres Umfangs an. Viele Oszilloskope haben die Option, in einen "unkalibrierten" Modus zu wechseln, in dem Sie das Timing der X-Achse beliebig anpassen können (dies kann für bestimmte Messungen sehr nützlich sein). Möglicherweise haben Sie Ihr Oszilloskop versehentlich in diesen Modus versetzt. Wenn dies ein neues Zielfernrohr für Sie ist (insbesondere wenn es sich um ein älteres Zielfernrohr handelt), muss es möglicherweise tatsächlich kalibriert werden.

Außerdem, wie leiten Sie Ihr Timing ab? Verwenden Sie eine vorgefertigte Verzögerungsfunktion? Bist du sicher, dass du nicht am Rand seiner Reichweite bist? Ich weiß, dass sich die Arduino- DelayUS()Funktion seltsam verhält, wenn die an sie übergebenen Werte < ~ 5 sind. Hier könnte etwas Ähnliches passieren.

Der Grund, warum Sie gültige Daten von Ihrem Sensor sehen, ist schließlich einfach, dass der Sensor ein Busprotokoll verwendet, das extrem tolerant gegenüber Zeitabweichungen ist, und Sie sich innerhalb des Bereichs von Zeitfehlern befinden, den er aufnehmen kann.


Wie auch immer, wenn Sie weitere Informationen posten (entweder Ihren Code, Bilder / Beschreibung Ihres Setups), können wir versuchen, Ihnen mehr zu helfen.