Die USB Datenerfassungskarte vereinigt 16 analoge
Eingangskanäle, 8 analoge Ausgänge und 10 digitale Ports auf einer kleinen
Platine. Es ist galvanisch isoliert; d.h. alle Messein- und Ausgänge sind
potentialfrei.
Es wird ein Maxim MAX1258 "Datenerfassungssystem auf einem
Chip" verwendet. Der ADC hat einen Messbereich von 4V, der über einen
Spannungsteiler erweitert werden kann.
Als USB Schnittstelle ist ein FTDI FT2232D eingebaut. Er
arbeitet als USB - SPI Wandler. Der MAX Chip ist über SPI mit 6MHz angebunden.
Zwischen dem MAX und dem FTDI Chip arbeitet ein NVE 712 Isolator, der die
Potentiale trennt. Der MAX Chip und die eine Hälfte des NVE Isolators werden
über einen DC/DC Wandler versorgt. NVE Isolator und DC/DC Wandler haben
mindestens 2500V Isolationsspannung laut Datenblatt.
Wird zum Beispiel versehentlich ein
analoger Eingang auf die Phase des 220V Netzes gelegt, dann sollte nichts
passieren. Ohne die
galvanische Trennung wären Karte, USB Schnittstellen und PC mit Sicherheit
defekt.
In Tests (die nicht am Stromnetz, sondern mit einem
Spannungsvervielfacher in Villard Schaltung gemacht wurden) hielt die Karte Spannungen von 1200V gegenüber der "PC
Masse" über 1 Minute aus, während sie arbeitete!
Das Besondere an der
Karte ist, dass sie keinen Mikrocontroller hat, sondern der MAX1258 selbsttätig
(nach Empfang eines Kommandos über den SPI Bus) alle Kanäle abtastet und die
Messwerte im Fifo ablegt. Der Handshake mit dem FT2232D erfolgt über das EOC
Signal des MAX. Ist die Abtastung komplett, signalisiert er, dass die Daten
abgeholt werden können. Nach dem Abholen geht das Ganze von vorne los; der MAX
startet die Abtastung und wandelt, bis alle Kanäle komplett sind.
Aufgabe
der Software ist es, dafür zu sorgen, dass dieser Prozess kontinuierlich
läuft.Wir haben es hier mit einem Echtzeitsystem zu tun, dass synchron läuft.
Der PC, der das ganze steuert, ist kein Echtzeitsystem, sondern arbeitet mit
Prozessen, die unterbrochen werden können.
Wie soll nun die Software es
schaffen, einen kontinuierlichen Datenstrom zu gewährleisten?
Jetzt
kommen mehrere Fifos in's Spiel. Im USB Treiber sind (Software-) Fifos
vorhanden, damit Daten blockweise übertragen werden können. Der FT2232D hat
einen 384Byte Fifo in Hardware, der Max1258 hat Platz für 16 12bit Werte.
Wenn dafür gesorgt wird, dass in den Sende-Fifos, die die Abtastung im
MAX1258 anstossen, immer genügend Werte stehen, sie
also nie leer werden, während die Abtastung läuft, dann kann der
Wandlungsprozess ununterbrochen laufen.
Um das zu gewährleisten, sieht
der Treiber periodisch nach, ob noch genügend Kommandos im Sende -Fifo (der zum
MAX geschickt wird) stehen. Wenn nicht, wird nachgelegt. Am besten so, dass der
Fifo immer mehr als halb voll ist.
Die Software (der unter Window
laufende Prozess) muss regelmäßig ausgeführt werden. Daher wird die sog.
Prozesspriorität auf Echtzeit gesetzt, damit auch wirklich alle 10ms geprüft
wird, ob genügend Kommandos da sind. Gleichzeitig müssen die Messdaten abgeholt
werden, da sonst der Empfangs-Fifo überläuft und Daten verlorengehen.
Da
in 10 Sekunden 1 Mio. Werte verarbeitet werden müssen und entsprechende
Kommandos gesendet werden müssen, ist eine effiziente Programmierung wichtig.
Der Treiber wurde daher in C++ geschrieben.
Technisch werden diese
Aufgaben von einem Automaten ausgeführt, der unter Windows als Echtzeitprozess
läuft. Er kommuniziert mit der eigentlichen Messanwendung, die ein anderer
Prozeß ist und jeder selbst programmieren kann, über einen gemeinsamen
Speicherbereich, sog. Shared memory. Die Treiber übernehmen die
Kommunikation mit dem Echtzeit-Erfassungsprozess über die Shared Memory
Schnittstelle. Die Messanwendung läuft als ganz normaler Prozess (Task) unter
Windows.
Soweit die Erklärung, wie das Ganze funktioniert, obwohl keine
CPU auf der Karte vorhanden ist.
Alle typischen Einstellungen wie
Abtastrate setzten, Triggerfunktionen usw. sind per Software realisiert.
Nach diesen Erklärungen nun zu den Eigenschaften der Karte mit Software:
Specification
Analog Inputs |
|
Inputs: |
16 single ended or 8 differential channels, software-selectable |
Coupling: |
DC |
Resolution: |
12 bits / 4096 steps |
Input ranges: |
MI16081: +10V or +/-5V (+/- ranges require differential input) |
Sample modes: |
Continuous, Trigger, Snapshot (<720 values, no trigger) |
Sample rate: |
Snapshot: 100kHz (single input), Single channel: 1Hz-35kHz, Multi-channel: 1Hz-100kHz sum sample rate at 16 channels |
Channel capture delay: |
10µs +/-1µs at all sample rates! |
DNL: |
1.0 LSB maximum error |
INL: |
0.5 LSB typ. |
T/H acquisition time: |
0.6 µs |
Gain accuracy: |
MI16084: 0.25% at +/-8ppm/K drift |
Reference voltage drift: |
< 30 ppm/K |
Input impedance: |
MI16084: 24pF || 100kΩ |
Trigger: |
Trigger source is one of the input channels. |
Posttrigger: |
Unlimited number of samples |
Trigger events: |
- Rising (positive) edge |
Isolation: |
All analog, digital I/O and sensor
supply isolated from USB. Rated 2500V/1sec |
Analog Outputs |
|
Outputs and Ranges: |
8 x 12 bit DAC with 0..+4.096V voltage outputs (1mV resolution) |
Coupling: |
DC |
Sample rate: |
Asynchronous "port like" DAC outputs, low speed only. |
Accuracy: |
± 0.2% |
DNL: |
+/-0.5 LSB. typ. |
Output impedance: |
0.5 Ohm typ. |
Output current: |
<=2mA each output |
Settling time: |
2us to 1 LSB, at 30pF load |
Digital Port |
|
Input/Output: |
10 bits, direction can be set for each bit |
Input levels: |
Low: <=0.8V, High: >=2.4V |
Output levels: |
Low: 0.4V @ Isink= 2mA |
General |
|
Compliance: |
USB 2.0 full speed interface (12MBit) compatible to USB1.1 |
Environment: |
0...85°C operating temperature |
Dimensions: |
Following mechanical data applies only if case "Fischer AKG 7116100" is used: 105mm x 72mm x 16mm (LxBxH) including DSUB connector |
Mass: |
125g |
Case material: |
2mm Aluminum |
Connectors & lights: |
37 pole male DSUB connector for
signals |
Power consumption: |
0.4W (5V/80mA) typ. |
Sensor power supply: |
+5V/25mA max, provided by onboard DC/DC converter |
Weitere Unterlagen:
Platinenlayout + Schaltplan als Target 3001 Projekt
Fotos: