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.