Forum: Mikrocontroller und Digitale Elektronik Berechnung einer nötigen Abtastfrequenz


von AB.C. (Gast)


Lesenswert?

Wie groß muss die nötige Abtastfrequenz sein, um ein serielles Signal 
mit 300 baud richtig zu messen?

Ich habe von NI eine Messerfassungskarte im Rechner drinnen und möchte 
damit aus Lernzwecken Daten aus einer seriellen Leitung lesen.

Ich habe folgende Modellrechnung gemacht:

RS232, 8bit, 1 Stopp-Bit.
1 Baud = 1 Zeichen pro Sekunde
300 Baud = 300 Zeichen pro Sekunde
Bit pro Zeichen mit Sopp-Bit 9 (machen wir 10, damit es einfacher zu 
rechnen ist).
Bei 300 Baud und 10 Bit = 3000 Bit/s, also Signalfrequenz 3kHz.
Shannon-Theorem: Abtastfrequenz > 2x Signalfrequenz

Also sollte die Abtastfrequenz mindestens 6,1 kHz betragen.

Ist das vom Ansatz her richtig?

von Christian (Gast)


Lesenswert?

Wenn ich mich nicht irre, bedeutet bei der Baudrate ein Zeichen nicht 
ein ASCII Zeichen sondern ein Bit (bei uart). Somit kann man bei UART 
sagen, dass Baudrate = Bitrate ist, wobei du natürlich noch Bits für 
Start,Stop und ggf. Parität abziehen musst.

von dommy (Gast)


Lesenswert?

Ein digitales serielles Signal analog abtasten? Digitale Signale haben 
hochfrequente Anteile (idealer Sprung von 0 auf 1 wäre theoretisch die 
Summe ALLER auf der Welt erdenklichen Frequenzen) - im Normalfall 
solltest du - bevor du analog abtastest - einen Tiefpass davor setzen, 
um diese Frequenzen zu begrenzen. Nimm also die höchstmögliche Frequenz, 
und bau dir einen Tiefpass, der möglichst gut reinpasst (shannon).

Oder versteh ich da was falsch?

von Dietrich L. (dietrichl)


Lesenswert?

AB.C. schrieb:
> RS232, 8bit, 1 Stopp-Bit.
> 1 Baud = 1 Zeichen pro Sekunde
> 300 Baud = 300 Zeichen pro Sekunde

Soweit OK.

> Bit pro Zeichen mit Sopp-Bit 9 (machen wir 10, damit es einfacher zu
> rechnen ist).

Falsch. Baud = Zeichen/Sekunde, aber ein Zeichen ist beim UART ein Bit.
Hintergrund: beim UART gibt es keine zusätzlich Kodierung/Modulation, 
Stichwort 'NRZ' (http://de.wikipedia.org/wiki/Non_Return_to_Zero).

> Bei 300 Baud und 10 Bit = 3000 Bit/s, also Signalfrequenz 3kHz.

Nein, es sind also: 300 Bit/s. Die max. Frequenz (ohne Oberwellen des 
Rechtecksignals) ist dann 150Hz (bei Bitfolge 101010..).

> Shannon-Theorem: Abtastfrequenz > 2x Signalfrequenz
>
> Also sollte die Abtastfrequenz mindestens 6,1 kHz betragen.

Nein: 300,x Hz.

Allerdings ist dann keine Synchronisierung auf das Startzeichen + 
Toleranz von Zeichenverzerrung möglich. Ein UART tastet deswegen häufig 
mit 16x Baudrate ab.

Gruß Dietrich

von Stefan (Gast)


Lesenswert?

Für analoge Signale kann man dies tun. Wenn du aber digitale Signale so 
Interpretieren magst, dann solltest du die 10-20 fache Abtastfrequenz 
nehmen.

von Helmut L. (helmi1)


Lesenswert?

AB.C. schrieb:
> RS232, 8bit, 1 Stopp-Bit.
> 1 Baud = 1 Zeichen pro Sekunde
> 300 Baud = 300 Zeichen pro Sekunde
> Bit pro Zeichen mit Sopp-Bit 9 (machen wir 10, damit es einfacher zu
> rechnen ist).
> Bei 300 Baud und 10 Bit = 3000 Bit/s, also Signalfrequenz 3kHz.
> Shannon-Theorem: Abtastfrequenz > 2x Signalfrequenz
>
> Also sollte die Abtastfrequenz mindestens 6,1 kHz betragen.

Noe, Baud ist die Anazahl der Bits/s auf der Leitung also der 0 / 1 
Pegel.

-----------
|    1     |     0     |
           -------------

   Bit         Bit

Wenn jetzt alle Bits abwechselnd 0 oder 1 haben entsteht die hoechste 
Signalfrequenz (Grundschwingung).

Und die ist f = Baud / 2.  Also die halbe Baudrate. Im Fall von 300Baud 
sind das 150Hz. Das reicht im Prinzip um das Signal zu uebertragen. Da 
aber dann die Flanken zu sehr verschliffen sind erhoeht man die 
zuverfuehgung stehende Bandbreite etwas.

von Georg G. (df2au)


Lesenswert?

300 Baud sind 300 Symbole pro Sekunde, in deinem Fall 300 Bit pro 
Sekunde. Nach Shannon reichen dann 600Hz Abtastfrequenz aus. Wie von 
dommy gesagt, brauchst du ein Anti-Aliasing Filter. Sonst misst du Mist.

Das Ganze ist aber vom Ansatz her Overkill. Du kennst das Signal recht 
gut. Also nutze diese Kenntnisse. Sinnvoller ist es, auf die erste 
Flanke des Startbit zu warten (notfalls mit etwas Entprellung). Dann 
wartest du eine halbe Bit Periode (1.66ms) und von da an tastest du alle 
3.3ms das Signal ab und generierst daraus dein Byte. Nachdem das Stopbit 
gekommen ist, gehst du zurück auf Anfang und wartest auf das nächste 
Startbit.

von Udo S. (urschmitt)


Lesenswert?

Dietrich L. schrieb:
> AB.C. schrieb:
>> RS232, 8bit, 1 Stopp-Bit.
>> 1 Baud = 1 Zeichen pro Sekunde
>> 300 Baud = 300 Zeichen pro Sekunde
>
> Soweit OK.

Nein FALSCH. Baud ist die Rate von symbolen pro Sekunde. Bei binären 
Symbolen ist das dann identisch mit der Bitrate.
Siehe auch:
http://de.wikipedia.org/wiki/Baud
Für serielle Übertragung braucht 1 Byte dann incl. Start/Stoppbits etwas 
mehr als 10Baud.
Deine Abtastrate ist exakt die Baudrate, du erkennst die Flanke des 
Startbits, wartest die Hälfte der Bitlänge und tastest von dort die 
bekannte Anzahl von Bits in genau der Baudrate ab.
Bessere Empfängerchips machen wenn ich mich recht erinnere eine 
Überabtastung von z.B. 3, aber da müsste man noch mal genauer in den 
Datasheets nachschauen.

von Helmut L. (helmi1)


Lesenswert?

Georg G. schrieb:
> 300 Baud sind 300 Symbole pro Sekunde, in deinem Fall 300 Bit pro
> Sekunde. Nach Shannon reichen dann 600Hz Abtastfrequenz aus.

Noe, siehe oben. 300Hz reicht aus.

von Dietrich L. (dietrichl)


Lesenswert?

Udo Schmitt schrieb:
> Nein FALSCH. Baud ist die Rate von symbolen pro Sekunde.

Akzeptiert ;-)

> Für serielle Übertragung braucht 1 Byte dann incl. Start/Stoppbits etwas
> mehr als 10Baud.

[Klugscheißer ein]
Dann aber nicht 10 Baud, sondern 10 Symbole oder 10 Baud*Sekunde ;-)
[Klugscheißer aus]

Gruß Dietrich

von 6A66 (Gast)


Lesenswert?

Helmut Lenzen schrieb:
> Georg G. schrieb:
>> 300 Baud sind 300 Symbole pro Sekunde, in deinem Fall 300 Bit pro
>> Sekunde. Nach Shannon reichen dann 600Hz Abtastfrequenz aus.
>
> Noe, siehe oben. 300Hz reicht aus.

Bei den früheren USARTs (8251 oder ähnlich) konnte man die 16/64fache 
Überabtastung einstellen (BAUD RATE Factor) der dann in Folge die Mitte 
des Signals abtastete.

Da wir hier von 300bit/s reden denke ich könnet man bequem mit 1200 oder 
2400 Abtastungen/s arbeiten und muss nicht auf unterste Grenze gehen.

rgds

von Marian (phiarc) Benutzerseite


Lesenswert?

6A66 schrieb:
> Da wir hier von 300bit/s reden denke ich könnet man bequem mit 1200 oder
> 2400 Abtastungen/s arbeiten und muss nicht auf unterste Grenze gehen.

Der TO fragt im Titel nach der nötigen (ich interpretiere das mal als 
hinreichende ) fs, nicht nach einer guten oder optimalen fs :)

von AB.C. (Gast)


Lesenswert?

Vielen Dank für die Vielzahl Eurer Erklärungen.

Ich hatte in dem Wiki-Artikel gedacht, dass mit der Definition Baud = 1 
Symbol/Sek ein ASCII-Zeichen gedacht gewesen wäre, also falsch 
interpretiert.

Also müsste nach dem Shannontheorem die Abtastrate bei 300 Baud 
mindestens 601 Herz betragen, also besser 1000 Herz. Können dann dennoch 
Alias-Effekte auftreten, wenn man ganz knapp über der 
Mindestabtastfrequenz liegt (also sagen wir mal 601 Herz), weil mit 601 
Herz wäre ja die Bedingung von Shannon größer als zweimal Signalfrequenz 
erfüllt.

von Udo S. (urschmitt)


Lesenswert?

AB.C. schrieb:
> Vielen Dank für die Vielzahl Eurer Erklärungen.
Schön, keine Ursache

AB.C. schrieb:
> Also müsste nach dem Shannontheorem die Abtastrate bei 300 Baud
> mindestens 601 Herz betragen, also besser 1000 Herz.
Du solltest die Erklärungen bitte auch lesen und verstehen.
NIX Shannon, nix Analog abtasten!
Shannon brauchst du hier nur, wenn du die minimale Bandbreite für ein 
Übertragungskanal berechnen willst.

von Helmut L. (helmi1)


Lesenswert?

AB.C. schrieb:
> Also müsste nach dem Shannontheorem die Abtastrate bei 300 Baud
> mindestens 601 Herz betragen, also besser 1000 Herz.

Nein, 300Baud sind maximal 150Hz. Der Extremfall ist die Bitfolge 
01010101.

Liest du auch mal was man dir schreibt?

von Falk B. (falk)


Lesenswert?

Zum digitalen Abtasten von 300 Bau per UART reichen rein theoretisch 300 
Hz. Praktisch nutzt man ehe die 8fach oder 16 fache Frequenz, damit wird 
das alles deutlich stabiler und einfacher. USB nutzt bei 12 Mbit/s eine 
Statemachine, die mit 48 MHz den Datenstrom abtastet, also Faktor 4, und 
das reicht auch.

von Uwe (Gast)


Lesenswert?

>Nein, 300Baud sind maximal 150Hz. Der Extremfall ist die Bitfolge
>01010101.

Naja die frequnz ist zwar 150Hz aber die Symboldauer die er 
rekonstruieren will ist ja nur 1/300s also muß er mindesten mit 
doppelter Symbolrate samplen.

von Uwe (Gast)


Lesenswert?

Also mehr als 600Hz

von 6A66 (Gast)


Lesenswert?

Falk Brunner schrieb:
> Zum digitalen Abtasten von 300 Bau per UART reichen rein theoretisch 300
> Hz. Praktisch nutzt man ehe die 8fach oder 16 fache Frequenz, damit wird
> das alles deutlich stabiler und einfacher. USB nutzt bei 12 Mbit/s eine
> Statemachine, die mit 48 MHz den Datenstrom abtastet, also Faktor 4, und
> das reicht auch.

Danke :)

von 6A66 (Gast)


Lesenswert?

AB.C. schrieb:
> serielles Signal
> mit 300 baud richtig zu messen?

Da Signal und Messung asynchron sind würde ich mal mindestens die 
doppelte Frequenz vorsehen. Es besteht die Gefahr dass Sampling genau 
auf dem Bitwechsel stattfindet und dann ist die Messung für den Popo.

rgds

von Svenska (Gast)


Lesenswert?

Und wenn schon analog, dann mit Tiefpass davor.

von Udo S. (urschmitt)


Lesenswert?

6A66 schrieb:
> Da Signal und Messung asynchron sind würde ich mal mindestens die
> doppelte Frequenz vorsehen. Es besteht die Gefahr dass Sampling genau
> auf dem Bitwechsel stattfindet und dann ist die Messung für den Popo.

Nein! Ein digitaler serieller Empfänger synchronisiert auf die erste 
Flanke des Startbits, und ab dann immer möglichst auf Mitte der 
nachfolgenden Bits.
Das Ganze ist wie Falk schon gesagt hat normalerweise als 
Zustandsautomat (state machine) implementiert.
Und ja, die inneren Timer müssen natürlich dann mindestens die halbe 
Zeit eines Bouds als minimale Zeitauflösung haben.

: Bearbeitet durch User
von Udo S. (urschmitt)


Lesenswert?

Im deutschen Wikipedia ist das leider nicht sauber erklärt (manchmal 
habe ich das Gefühl das deutsche Wikipedia wird immer schlechter), im 
englischen ist es besser beschrieben:
http://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter

von 6A66 (Gast)


Lesenswert?

Udo Schmitt schrieb:
> Nein! Ein digitaler serieller Empfänger synchronisiert auf die erste
> Flanke des Startbits, und ab dann immer möglichst auf Mitte der
> nachfolgenden Bits.

Das ist völlig korrekt.
Das aber erfordert oversampling, das war schon beim 8251 so (siehe oben 
und Datenblatt dort).
Wir reden aber nicht vom UART intern sondern:

AB.C. schrieb:
> Ich habe von NI eine Messerfassungskarte im Rechner drinnen und möchte
> damit aus Lernzwecken Daten aus einer seriellen Leitung lesen.

Also von extern.
Also entweder einsynchronisiert durch oversampling beim Startbit - wie 
der Name schon sagt oversampled. Oder dann einfach irgendwann gestartet, 
völlig asynchron. Dann eben mit mindestens doppelter Frequenz wie man 
das immer beim aufsynchronisieren zweier völlig unterschiedlicher 
Systeme macht (BTW: Der erste Prozessor der das meine Wissens gemacht 
hat war der erste frei verfügbare ARM (3 ?), das Businterface extern 
lief völlig asynchron zum Kern).

rgds

von 6A66 (Gast)


Lesenswert?

6A66 schrieb:
> Udo Schmitt schrieb:
>> Nein! Ein digitaler serieller Empfänger synchronisiert auf die erste
>> Flanke des Startbits, und ab dann immer möglichst auf Mitte der
>> nachfolgenden Bits.
>
> Das ist völlig korrekt.
> Das aber erfordert oversampling, das war schon beim 8251 so (siehe oben

In wikipedia:
[reciever] runs at a multiple of the data rate, typically 8 times the 
bit rate.

rgds

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.