Schoonmaken van digitale signalen

Introductie

De protocol-analyse-modules in de Multi Channel oscilloscoop-software verwachten digitale signalen: het niveau van het signaal is "hoog" danwel "laag" en de overgang van een niveau naar het andere gebeurt in een keer, in zo min mogelijk tijd. De exacte waarden voor "hoog" en "laag" hangen af van het systeem dat onderzocht wordt.

In de echte wereld komen mooie, schone signalen niet altijd voor, de niveaus voor "hoog" en "laag" kunnen afwijken van wat verwacht wordt en ze kunnen variëren in waarde in plaats van stabiel zijn. Ook kunnen er verstoringen als ruis en pieken op het signaal aanwezig zijn.

Hoewel de analyzers in de Multi Channel oscilloscoop-software ontworpen zijn om ook minder mooie signalen te kunnen verwerken, kan het zijn dat in sommige situaties de signalen te slecht zijn om de informatie in het signaal automatisch te kunnen decoderen.

De meting hieronder toont de SCL- en SDA-signalen van een I²C-communicatie. Het signaal vertoont veel ruis en ook vele stoorpieken. Ook de niveaus voor "hoog" en "laag" zijn niet helemaal juist.

Smerige I²C-signalen

Hierdoor is de I2C-decoder-sink niet in staat de verstuurde informatie juist te decoderen, wat gezien kan worden aan de Herstart en de vele No ack-indicaties.

Verkeerd gedecodeerde I²C-signalen

De signalen schoonmaken

Om de I2C-decoder de signalen wel juist te laten decoderen, zullen de signalen schoongemaakt moeten worden, waarbij de ruis en de stoorpieken verwijderd worden. Zowel het klok- als het data-signaal moeten beide afzonderlijk schoongemaakt worden. De eenvoudigste manier om dit te doen is om de methode voor een signaal in te stellen en zodra die helemaal juist ingesteld is, het gebruikte object te klonen voor het tweede signaal.

Eerste poging: filteren

Low pass filter

Een logische oplossing voor het probleem lijkt het signaal door een Filter-I/O in Laagdoorlaat-modus te sturen, waardoor de ongewenste ruis en stoorpieken weggefilterd worden. Echter, het laagdoorlaatfilter is een eerste-orde filter, wat niet een steile karakteristiek heeft. Een goed digitaal signaal heeft erg steile flanken. Een digitaal signaal filteren met een eerste-orde filter zal de flanken van het signaal langzamer maken, als hieronder te zien is. Door de minder steile flanken is het voor de I2C-decoder lastiger de flanken in het signaal juist te detecteren. In ons voorbeeld is de I2C-decoder nog steeds niet in staat het signaal juist te decoderen.

Gefilterde I²C-signalen

Tweede poging: begrenzen

Limiter

Een andere manier om ongewenste delen van een signaal te verwijderen is door een Begrenzer-I/O te gebruiken. Deze gebruikt twee door de gebruiker in te stellen limieten (grensbereik) en alle delen van het ingangssignaal die buiten dit grensbereik komen worden afgekapt op het grensbereik.

Om de Begrenzer-I/O te gebruiken om dit signaal schoon te maken, moet het grensbereik zo worden ingesteld dat:

  • alle delen van het signaal die "hoog" moeten zijn afgekapt worden op de hoge limiet van het grensbereik
  • alle delen van het signaal die "laag" moeten zijn afgekapt worden op de lage limiet van het grensbereik

In onze signalen komen de "hoge" delen van het signaal nooit onder 2.2 V en komen de "lage" delen van het signaal nooit boven 1.5 V. Voor de veiligheid stellen we de limieten in binnen deze grenzen: de onderlimiet op 1.9 V en de bovenlimiet op 2.1 V. We verbinden de Begrenzer met ons ingangskanaal. Zoals hieronder te zien is, levert de Begrenzer ons mooie, schone digitale signalen op.

Afgekapte I²C-signalen

De niveaus corrigeren

Gain/Offset

Hoewel de signalen nu schoon zijn, alle ruis en stoorpieken zijn verwijderd, hebben de signalen nog niet de juiste niveaus. I2C-signalen liggen tussen 0 en 3.3 V of tussen 0 en 5 V en onze signalen liggen tussen 1.9 en 2.1 V. De I2C-decoder herkent ze nu niet.

Voor het corrigeren van de niveaus wordt een Versterking/Offset-I/O aangemaakt en met de Begrenzer-I/O verbonden. De Versterking/Offset-I/O kan een signaal verschuiven en van grootte veranderen.

Corrigeer de offset

Het signaal uit de Begrenzer-I/O loopt van 1.9 V tot 2.1 V, terwijl de laagste waarde 0 V zou moeten zijn. Om daarvoor de te compenseren moet de Ingangsoffset van de Versterking/Offset-I/O op -1.9 V gezet worden. Het uitgangssignaal van de Versterking/Offset-I/O loopt nu van 0 tot 0.2 V.

Corrigeer de grootte

Om ons signaal van 0 tot 5 V te laten lopen, in plaats van 0 tot 0.2 V, moet het 25 keer versterkt worden. De Versterking van de Versterking/Offset-I/O op 25 zetten zorgt daarvoor.

Decoderen gelukt

We hebben nu een perfect I2C-signaal, zonder ruis of stoorpieken en met de juiste niveaus.

Juiste I²C-signalen

De I2C-decoder-sink is nu in staat deze signalen zonder problemen te decoderen, wat hieronder te zien is.

Juiste I²C-signalen - gedecodeerd