Donnerstag, 4. April 2019

Kurzschluss Junkies [0x09]: Pick and Platz

Neuigkeiten

Wer das STM32MP157C-DK2 Evaluastionboard gewinnen möchte, kann uns eine Email schreiben an: feedback@kurzschlussjunkies.de Wir melden uns dann bei dem Gewinner.


Aus Fehlern lernen

Basti hat beim Knöpfchenspiel im Schaltplan des Mikrocontroller Boards die Data+ und Data- Signale des differenziellen I2C Interfaces verdreht. Daher kam keine Kommunikation zustande. Chris hat das gefunden und jetzt geht es.

Chris hat ebenfalls lange nach einem Fehler gesucht. Schlussendlich lag es daran, dass die Software den falschen ADC Kanal aufgezeichnet hat.


Projekt Knöpfchenspiel

Der Endspurt hat begonnen. Das Knöpfchenspiel ist in den letzten Zügen und wird am Samstag verwendet. Alle Funktionen sind vorhanden, jetzt fehlt nur noch etwas Politur.


Projekt Schmartwatch

Die Flex-Leiterplatten sind unterwegs, Bauteile sind ebenfalls bestellt. 10 Muster wird es geben.
Zur Stabilisierung hast BAsti vor die Flex-Leiterplatte auf eine FR4 Leiterplatte zu kleben. So ist sie besser handhabbar und kann im Reflow-Ofen gelötet werden. Später wird eine Vorrichtung benötigt, die die Flex-Leiterplatte zuverlässig und reproduzierbar fixiert. Das ist für einen Pick-and-Place Vorgang zwingend notwendig.

Pick and Place

Chris und Basti haben sich einen Bestückautomaten gekauft. Der ist zwar ziemlich alt, aber nach einer kurzen Untersuchung und Reparatur auch wieder lauffähig. Ein Kondensator ist geplatzt und hat das interne 5V Netzteil zerstört. Der nächste Schritt ist dann die Modernisierung des Systems. Es geht quasi von 16-bit auf 32-bit.

Chip der Woche: LSM6DSOX

Der Chip der Woche ist ein smarter Bewegungssensor mit Gyro- und Beschleunigungssensor.
Mit einer dreistufigen Pipeline kann der Chip ermitteln, welche Art der Bewegung gerade stattfindet. Das macht er mit Hilfe eines Entscheidungsbaums. Basti hat den Chip zwar auf dem Tisch liegen, aber um den Entscheidungsbaum zu generieren, muss der Sensor in ein spezielles Evaluation Board um mit dem PC konfiguriert zu werden. Das ist ebenfalls bestellt, aber noch nicht da.
Für alle interessierten gibt es die Info hier bei ST: LSM6DSOX

Montag, 25. März 2019

Bandpass TTL Opamp und Rigol DS1054Z

Ich habe mir die Idee einen Mosfet als Verstärkereingang mal genauer angesehen und dieses System übernommen. Der Vorteil ist, dass ein Mosfet welcher nur kapazitiv angesteuert wird schon ein Hochpass ist. Mit dem Vorwiderstand für den Mosfet kann die Tiefpasskarakteristik beeinflusst werden. Wenn einem die Gatekapazität zu ungenau ist, kann auch ein zusätzlicher Kondensator verwendet werden um das Tiefpassverhalten genauer zu definieren. Die nachfolgende NPN-PNP-Verstärkerstufe ist da, um dieses Signal "belastbar" zu machen. Um den Mosfet im Analogmodus zu halten, kann entweder ein DAC eines µControlers verwendet werden oder wenn es "standalone" funktionieren soll einen Operationsverstärker verwenden. Die Gesamtschaltung verbraucht nicht mehr als 3mA bei 3,3V.

Durch das kapazitive Messen des Signals erfolgt eine Phasenverschiebung, welche nicht zu vernachlässigen ist, wenn Strom und Spannung Bezug zueinander haben sollen.

Hier ist die Schaltung. Diese kann man Easy in Spice nachbauen und mit experimentieren. Wichtig ist, dass man reelle Bauteile verwendet und nicht die idealen Modelle von Spice.


Das ist die gelötete Schaltung in Nahaufnahme auf einer eigens dafür angefertigten Leiterplatte. 



Ich habe ein paar Aufnahmen mit meinem neuen DS1054Z gemacht. Alle Messwerte welche angezeigt werden, sind mit einem Druck auf den "MessMalAlles" Button erledigt. Auch die angezeigten Werte habe ich nicht extra im Offset oder Amplitude angepasst. Diese sind mit dem AUTO Button gleich richtig skaliert worden. Echt top wie gut das Funktioniert.

Hier einmal die Phase gemessen bei 1KHz Eingangssignal.

Dann einmal auf den magischen "MessMalAlles" Button gedrückt ohne Offset.

Dann einmal die gleiche Messung mit einem Offset von ca. 3V.

Jetzt mal das Tiefpassverhalten im Detail. Hier 20KHz vs. 40KHz.



Mittwoch, 20. März 2019

Knöpfchenspiel 2 - Bus-Interface auf Raspberry Pi

Das Differenzielle I²C Interface für den Komminikations-Bus im Knöpfchenspiel ist für den Raspberry Pi ein Hat mit dem PCA9615 Treiber Chip. Die Knöpfcheninterfaces haben den Treiber selbst on Board. Dieser Treiber Baustein konvertiert die normalen I²C Signale in differenzielle Signale um sie stabiler gegen elektromagnetische Störung zu machen. Auf der Empfängerseite werden die Signale dann wieder zurück konvertiert in 3,3V Open-Drain.

I²C Bus

Dieser Bus wurde bereits 1982 von Phillips Semiconductor (heute NXP) entwickelt und dient zur seriellen Datenübertragung zwischen integrierten Schaltungen. Daher auch der Name: Inter Integrated Circuit oder IIC. Der Bus besteht aus zwei Signalleitungen: Serial-Clock (SCL) und Serial-Data (SDA). Am Bus können mehrere Teilnehmer gleichzeitig hängen, aber immer nur einer ist der Master. Die Signalleitungen sind mit einem Widerstand auf eine Spannung voreingestellt. Meistens 5V, manchmal auch 3,3V je nach Interface Spannung. Daten werden auf diesem Bus übertragen, indem die Signalleitungen mit einem Transistor auf Masse Potential geschaltet werden, also auf 0V. Das SDA Signal nach Masse schalten können sowohl Master als auch die Slave Geräte am Bus. Der Master gibt den Takt vor indem er die SCL Leitung auf Masse zieht, oder los lässt und der Widerstand das Signal wieder auf Betriebsspannung ziehen kann. Die Datenleitung wird entweder vom Master, oder von den Slaves auf Masse gezogen, je nachdem wer gerade mit einer Datenübertragung beschäftigt ist. Dieses Prinzip sorgt dafür, dass bei einem Kurzschluss gegen Masse die Signale lediglich ungültig werden, der Chip aber nicht kaputt geht.

Die Adressierung auf dem I²C Bus ist 7-bit lang, kann also 127 Geräte bedienen. Das 8te Bit dient der Lese/Schreib Aktivierung. Dabei sind allerdings einige Adressen reserviert unter Anderem um eine Adressraum-Erweiterung auf 10-bit zuzulassen. Effektiv können also 112 Adressen angesprochen werden.
Adresse Funktion
00000000 General Call Adresse
00000001 Start Byte
0000001X CBUS Adresse*
0000010X Reserviert für ein weiteres Busformat
0000011X Reserviert für zukünftige Erweiterungen
00001XXX Reserviert für zukünftige Erweiterungen
11111XXX Reserviert für zukünftige Erweiterungen
11110XXX 10-Bit Adressierung
*CBUS ist ein veraltetes System.

Signalform

Aus den I2C Spezifikationen Rev.6 April 2014 Fig.9
Die Signale SCL und SDA sind so genannte Single-Ended Signale. Sie haben ein Spannugnspotential gegen Masse (0V). Dabei können Störungen durch die Schaltflanken in die angrenzenden Leitungen übersprechen. Beispielsweise kann die konstanten Änderungen der Taktleitung (SCL) einen Spannungspuls in der Datenleitung erzeugen, die zwar vom Slave auf Masse gehalten wird, aber über den Leitungswiderstand und die Kapazität der Leitung gegen umliegende Masse trotzdem als Spannung (digitale 1) am Master Eingang erkannt wird. Dies wird zum Beispiel als Bitfehler in den Empfangenen Daten sichtbar. Je länger die Leitungen sind, desto stärker kann das Problem auftreten. Daher muss für eine länger Verbindung Vorsorge getroffen werden. Eine der Vorkehrungen ist zum Beispiel das Konvertieren in differenzielle Signale.

Dabei werden die oben gezeigten Signale von zwei auf 4 Drähte erweitert. Die zusätzliche Leitung ist das Komplementär der Signalleitung und dient als Referenz.

Hardware

Rasperry Pi 3B mit DIIC Hat
Das DIIC Hat ist die Hardware, mit der der Raspberry Pi I²C Signale auf die Differenzielle Leitung bringen kann. Es besteht aus mehreren Teilen: Dem 40-poligen Interface Stecker zum Pi, dem I²C EEPROM, das den Devicetree Patch mitbringt, die 12V Spannungsversorgung für die Bus Leitung und der Differenzielle I2C Transmitter.
Raspberry Pi 40-poliger Verbindungsstecker
Auf dem 40-poligen Verbindungsstecker liegen neben den 26 GPIO Signalen ebenfalls die beiden Signale ID_SC und ID_SD. Diese gehören zum Konfigurationsinterface des Hats. An diese beiden Signale wird das I2C EEPROM mit Adresse 0x50 angeschlossen. Im SPeicher des EEPROMS liegen Informationen zu dem Hat. In diesen Daten wird dem Linux auf dem Raspberry mitgeteilt, welches Hat aufgesteckt ist, welche Version, welcher Hersteller und welche Hardwarekonfiguration notwendig ist um das Hat zu betreiben. In unserem Fall ist das das Aktivieren des I2C Interfaces an GPIO02 und GPIO03, sowie das Resetsignal an GPIO5. Ohne dieses EEPROM ist die Hardware nicht konform mit der Anforderung an ein Raspberry Pi Hat und darf sich so auch nicht nennen.
EEPROM für das Hat. Angeschlossen an ID_SC und ID_SD
Das Hat stellt neben der Information zur Konfiguration des I2C Interfaces auch noch die Übertragungshardware zur Verfügung. Der PCA9615 ist der Transceiver und hat zwei Spannungsdomänen. Die klassische I2C Seite wird mit 3,3V betrieben und die differenzielle Seite mit 5V. Zum Starten der differenzielen Strecke, muss der Chip mindestens 11ms im Reset (low) gehalten werden, damit der Bus idle/stop Detektor ordnungsgemäß funktioniert. So lange ist die READY LED aus. Wenn der Resetimpuls beendet ist, geht die Leitung GPIO05 auf high und die LED leuchtet.
Beschaltung des differenziellen I²C Buffers PCA9615
Die LED wird vom Linux beim Booten angesteuert, so ist sicher gestellt, dass der Treiberbaustein ordentlich starten kann. Wenn das Linux gebootet ist, kann über die internen Tools wie i2cdetect oder i2cget/set der Bus verwendet werden. Als Gegenstelle steht der STM32 als I2C Slave zur Verfügung. dieser wartet auf den Adressen 0x30 und 0x31/0x32 auf Kommunikation mit dem Master.
Diese Software ist zur Zeit leider noch nicht funktionsfähig. Aber das sollte sich in den nächsten Tagen ändern.