Versuche mit der USB -Schnittstelle - sokrates

Werbung
Versuche mit der USB -Schnittstelle
Programm
Seite
Inhaltsverzeichnis
1
Die USB-Schnittstelle (Theorie)
2
Das CompuLAB (Theorie)
3
Spannung messen (Batterie, Solarzelle)
messen
4,5
Piezoelektrizität
messen
6
Ein Barcode-Leser
messen
7
Sensoren (Theorie)
8,9,10
Eine Spule als Wechselfeldsensor
Transistor als Temperatursensor
Transistor als Sensor für Ladungen
Ausgang schalten
schalten
Zeitschaltung für Digital Ausgang
Zeitschaltung
Kondensator aufladen
Oszilloscop
großer Schrittmotor; kleiner Schrittmotor
Schrittmotor
Lichtschranke und zählen
Lichtschranke
-2-
Die USB -Schnittstelle
Computer
Prozessor
Micro
Kontroller
USB
angeschlossenes Gerät
--- Maus
--- Tastatur
--- CompuLAB -USB
MicroKontroller: der Micro-Kontroller im Computer kontrolliert 16 Datenkanäle
Kanal Nr 0 ist die USB-Schnittstelle im Computer
Kanal 1.. 15 sind für weitere externe Geräte
USB : die Schnittstelle benötigt zum Senden und Empfangen von Daten einen
Systemtreiber. Er ist in der Windows.DLL enthalten. Die Treiberaufrufe laufen über
den I/O -Manger.
Der USB -Treiber holt jede 1 ms von den Geräten die Daten ab. Ein Datenpaket ist
8 bis 256 Byte groß. Low speed-Geräte arbeiten mit einer Datenrate von 1.5 Mb/s.
Übertragungsarten
-- Control-Transfer: wird verwendet im Bereich Messen und Steuern; arbeitet mit
Fehlerüberwachung, hat eine hohe Übertragungsrate bis zu 64 Byte pro
Control-Aufruf (Request), hat hohe Priorität.
-- Interrupt-Transfer: wird verwendet für Maus und Tastatur; der Computer holt
alle 10 ms die Daten ab.
Jedes angeschlossene Gerät (Maus, Tastatur, ..., CompuLAB ) hat einen eigenen
Treiber, der Daten im Gerät verteilt und im Endpoint-Puffer speichert.
plug and play
Der Computer erkennt ein neu angeschlossenes Gerät. Er stellt einen Treiber bereit,
vergibt eine Bus-Adresse und sendet Control-Aufrufe. Zuerst wird der DeviceDescriptor gesendet und ein Datenpaket von 18 Byte geholt. Darin sind die
Angeben über Hersteller, Gerät, Seriennummer, ... enthalten.
Dann wird der Configuration-Descriptor gesendet, und ein Datenpaket von 10 Byte
abgeholt. Darin steht z.B die max. Stromaufnahme des Gerätes.
-3-
Das CompuLAB
Das CompuLAB-USB - Interface ist ein PC-Interface mit universellen Ein- und
Ausgängen. Im einzelnen handelt es sich dabei um:
8 digitale Eingänge (TTL-Pegel)
8 digitale Ausgänge (TTL-Pegel)
2 analoge Eingänge (0-5 Volt)
bis zu 9 weitere analoge Eingänge
Die Stromversorgung erfolgt direkt über den USB -Anschluß. Für Versuche mit
externen Verbrauchern wird ein Steckernetzteil 12V/0,5A (z.B.NT51) benötigt.
Die Software
Das CompuLAB Interface wird mit einem USB -Kabel an den Computer
angeschlossen und der Firmen-Geräte-Treiber installiert. Windows erkennt das
Gerät, es leuchtet die grüne Kontrollleuchte auf.
Ab Windows 98 darf kein Anwenderprogramm direkt auf die Hardware zugreifen.
Vielmehr muß ein Treiber aufgerufen werden, der die Hardware direkt oder über
tiefer liegende Treiberschichten anspricht.
Ein Anwenderprogramm öffnet einen Zeiger ( DeviceHandle ) auf den Gerätetreiber,
und verwaltet ihn wie eine Datei.
Der Treiber arbeitet dann mit den Windows-IO-Funktionen.
Das Übertagungsprotokoll ist:
DeviceHandle:=
CreateFile ()
ReadFile ()
WriteFile ()
DeviceIOControl ()
bResult ()
CloseHandle
(DeviceHandle)
öffnen des Gerätes
lesen von Daten
schreiben von Daten
ausführen der Treiberfunktionen
diese Prozedur liefert Ergebnisse zurück, z.B.
bResult ist true, wenn das Gerät angeschlossen ist
schließen
-4-
Spannung messen
Masse
Analog
A
B
+
+5V
_
Programm MESSEN verwenden
1) Die Schaltung nach Zeichnung aufbauen.
2) Es wird angezeigt ob das CompuLAB angeschlossen ist.
3) Die Spannung in (A) bzw.(B) wird angezeigt.
type _lIn = record
bFunction : Byte;
bValue1 : Byte;
bValue2 : Byte;
bValue3 : Byte;
end;
type _lOut = record
bAck : Byte;
bValue1 : Byte;
bValue2 : Byte;
bValue3 : Byte;
bValue4 : Byte;
end;
var Form1: TForm1;
DeviceHandle: THandle;
TemplateHandle: THandle;
nBytes: DWord;
lIn: _lIn;
lOut: _lOut;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var bResult: Boolean;
begin
DeviceHandle := CreateFile ('\\.\CompuLABusb_0',Generic_write,File_Share_write, nil,
open_existing, 0,TemplateHandle);
bResult := DeviceIoControl (DeviceHandle, $08, @lIn, sizeof(lIn), @lOut,sizeof(lOut) ,
nBytes,nil );
if bResult= true then statusBar1.panels.Items[0].text:= 'CompuLAB-USB angeschlossen'
else statusBar1.panels.Items[0].text:= 'kein Gerät vorhanden';
end;
-5-
procedure TForm1.Timer1Timer(Sender: TObject);
var AnA, AnB: Real;
begin
lIn.bFunction := 6;
// die Treiber-Funktion (6)
DeviceIoControl (DeviceHandle,$08,@lIn,sizeof(lIn), @lOut,sizeof(lOut),nBytes,nil);
AnA := (4*lOut.bValue2+ (lOut.bValue4 and 15))/1023*5;
// Analog(A)
Edit1.Text := Format ('%3.2f',[AnA])+' V';
AnB := (4*lOut.bValue3+ (lOut.bValue4 div 15))/1023*5;
Edit2.Text := Format ('%3.2f',[AnB])+' V';
end;
// Analog(B)
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseHandle (DeviceHandle);
end;
end.
-6-
Piezoelektrizität
Zwischen 2 isolierte Kupferbleche legt man einen Bergkristall. Die
Kupferbleche werden mit dem Anschluß Analog (A) und der Masse vom
CompuLAB verbunden. Drückt man nun auf das Kupferblech und damit auf
den Bergkristall, so entsteht eine Spannung, die das Programm "messen"
anzeigt.
U,ref
1M
1M
Piezo-Schallgeber
hier als Spannungsquelle
Besser arbeitet ein Piezo-Schwingquarz und erreicht Spannungen bis zu
einigen Volt.
Quarz zeigt piezoelektrische Eigenschaften. Dies bedeutet, durch
mechanische Deformation kommt es zu elektrischen Ladungsverschiebungen, die an die Elektroden und die Kondensatoren
weitergegeben werden.
Die hervorgerufene Oberflächenladung ist proportional zur aufgebrachten
Kraft. Mit den Versuchswerten ( U = 0,4 V ; C,Kondensator = 50 pF ) wird
Q,exp = U * C
Q,exp = 2 x 10-11 C
Für die nötige Kraft zum Drücken gilt
Q= k * F
Aufgrund der hohen Ladungsverluste in Kabeln, und Schaltungselementen ist
dieser Zusammenhang mit dieser einfachen Anordnung nicht zu verifizieren.
Dennoch kann man die Kraft abschätzen.
Q = k * F,theor
; mit k = 2,3 x 10-12 As/N.
F,theor ≈ 9 N.
Der Piezoeffekt wird bei Piezozünder (Feuerzeugen) eingesetzt.
-7-
Barcode-Leser
-8-
Sensoren
Zum Anschluß an den Spannungseingang eines Interfaces oder Meßgeräts
verwendet man einen Spannungsteiler.
Die besten Ergebnisse erhält man, wenn der Festwiderstand etwa den
gleichen Widerstand wie der Sensor hat.
Sensoren in Spannungsteilerschaltung
Der LDR-Widerstand verändert seinen Widerstand mit Änderung der
Helligkeit.
Der NTC-Widerstand (Heißleiter) verändert seinen Widerstand mit
Änderung der Temperatur. Man erhält eine angenähert gerade
Übertragungskennlinie im Bereich der normalen Lufttemperatur.
Die Fotodiode (BPW34) hat eine große bestrahlungsempfindliche Fläche
und damit eine gute Empfindlichkeit. Sie ist ein Stromsensor, wenn sie in
Sperrichtung betrieben wird. Der Sperrstrom ist über weite Bereiche streng
proportional zur Lichtintensität.
Die Infrarot-LEDs reagieren besonders empfindlich auf Licht. Sie werden in
Gabel-Lichtschranken eingesetzt, wie man sie in Diskettenlaufwerken findet.
Der Fototransistor (BP103) hat eine sehr viel höhere Empfindlichkeit. Die
Übertragungskennlinie ist allerdings nicht mehr linear. Fototransistoren
findet man ebenfalls in Gabel-Lichtschranken.
Die Glühlampe ist ein brauchbarer Sensor für Luftströmungen, wenn man
vorsichtig ihren Glaskolben entfernt. Der Glühdraht erhöht seinen
Widerstand mit der Temperatur. Im Betrieb soll der Glühfaden durch einen
Strom auf etwa 50-100 °C erhitzt werden. Jede kleine Luftströmung führt zu
einer Abkühlung, die den Drahtwiderstand verringert und den Strom erhöht.
-9-
Sensoren als Spannungsquellen
Die Fotozelle als Sensor für die Helligkeit. Sie liefert eine Spannung von ca.
0,5 Volt.
Der Gleichstrommotor als Sensor für die Drehgeschwindigkeit oder
Windgeschwindigkeit.
Die Spule mit 1000 Windungen und Eisenkern als Sensor für magnetische
Wechselfelder wie sie bei Transformatoren oder Monitoren auftreten.
Der Piezo-Schallgeber als Sensor für Kräfte. Die abgegebene Spannung
erreicht Werte von einigen Volt, wenn man einen vorsichtigen Druck ausübt.
- 10 -
Der Transistor als Sensor für die Temperatur. Jedes Ungleichgewicht in den
Temperaturen der Transistor führt zu einer deutlichen Spannungsänderung.
Der Transistor als Verstärker von Induktionsspannungen bei der
Magnetfeldmessung.
Der Transistor als Verstärker von elektrische Ladungen. Ein einfacher
Versuch zeigt die Aufladung durch Reibung. Man berührt den Eingang mit
dem Finger und bewegt seine Füße. Die beobachtete Ladungstrennung ist
abhängig vom Material der Schuhe und des Bodenbelags.
- 11 -
Spule als Wechselfeldsensor
- 12 -
Transistor als Temperatursensor
- 13 -
Transistor zur Ladungsmessung
- 14 -
Ausgang schalten
Masse
Digital
D1
300 Ohm
LED
Programm SCHALTEN verwenden
Klickt man auf A1, so wird ein Häkchen sichtbar, die rote Kontroll-LED und die
eigene LED leuchten; der Ausgang hat + 5 Volt.
Man kann die Ausgänge auch vom Programm aus schalten.
Dout := 5;
Die Eingabe wird als Binärzahl (0101) interpretiert. Die Ausgänge (A2) und (Ao)
sind dann geschaltet.
- 15 -
Zeitschaltung für Ausgang
Masse
Digital
D1
300
LED
Schaltung : wie oben
Programm: Digit-Ausgang-mit-Zeit
procedure TForm1.PAUSE( zeit: integer);
var zeit1: integer;
begin
zeit1:= GetTickCount;
repeat;
application.processMessages;
end;
until (getTickCount -zeit1 > zeit);
procedure TForm1.Button1Click(Sender: TObject);
var DeviceHandle: THandle;
TemplateHandle: THandle;
nBytes: DWord;
bResult: Boolean;
lIn: _lIn;
lOut: _lOut;
begin
PAUSE ( 1000);
lIn.bFunction := 6;
// Funktion Nr.6 des CompuLab -Treibers
lIn.bValue1 := 1;
// digit-Ausgang-0 einschalten
checkBox1.checked:= true;
DeviceHandle := CreateFile
('\\.\CompuLABusb_0', Generic_write, File_Share_write,
nil, open_existing, 0, TemplateHandle );
bResult := DeviceIoControl
( DeviceHandle, $08, @lIn, sizeof(lIn), @lOut, sizeof(lOut), nBytes, nil );
PAUSE ( 1000);
lIn.bFunction := 6;
// Funktion Nr.6 des CompuLab -Treibers
lIn.bValue1 := 0;
// digitAusgang-0 ausschalten
checkBox1.checked:= false;
bResult := DeviceIoControl
( DeviceHandle, $08, @lIn, sizeof(lIn), @lOut, sizeof(lOut), nBytes, nil );
CloseHandle (DeviceHandle);
- 16 end;
END.
- 17 -
Kondensator aufladen
Programm Oszilloscop verwenden
Aufgabe
1)
2)
3)
4)
Die Schaltung nach Zeichnung aufbauen. Das Programm starten.
Das Programm erkennt die angeschlossene Schnittstelle und gibt den Namen
der Schnittstelle in der StatusBar aus.
Digit-Ausgang Do setzen.
Mit <Messung > beginnt der Versuch, der Kondensator wird geladen.
Masse
analoge
Eingänge
A
B
Dig-Aus
+
17 k
50 müF
- 18 -
Schrittmotor
Masse
Digital-Ausgang
A4 A3 A2 A1
blau
weiß
gelb rot
Motor
braun-1
braun-2
Programm Schrittmotor verwenden
Versuch : großer Schrittmotor
Durch den Timer wird gesteuert
Dig-Aus-1 einschalten
sleep(2)
// diese Verzögerung macht einen runden Lauf des Motors
Dig-Aus-1 ausschalten
usw.
Die Geschwindigkeit kann man über die TrackBar steuern
=============
Versuch : kleiner Schrittmotor
Am CompuLAB wird geschaltet
Dig-Aus-1: weiß
Dig-Aus-2: blau
Dig-Aus-3: gelb
Dig-Aus-4: rot
Der Motor dreht richtig
- 19 -
Lichtschranke
Dig-Aus-3
Masse
Dig-Ein-0
Dig-Aus-0
schwarz
rot
gelb
weiß
Die Lichtschranke in einem Diskettenlaufwerk hat 3 Anschlüsse. Der mittlere
ist wahrscheinlich die Masse und die Farben könnten so sein
rot: LED
schwarz: Masse
gelb: Fotodiode .
Mit einem OHM- Meter werden die Leitungen durchgemessen. Der
Widerstand für die Leitung Masse -- Fotodiode ist stark lichtabhängig und
auch von der Polung abhängig.
An die Fotodiode muß man noch eine 2. Leitung, hier weiß, anlöten.
Messung
Das Programm "Lichtschranke" starten.
Die Digi-Ausgänge werden vom Programm gesetzt.
Der Digi-Eingang wird vom Programm gesetzt.
<Start Messung>
Den Lichtweg unterbrechen.
Es wird die Anzahl der Unterbrechungen angezeigt.
Herunterladen