Dieses Projekt hatte ich bereits 2011 entwickelt und andernorts veröffentlicht, Jahre bevor eine Menge ähnlicher Schaltungen im Internet aufgetaucht sind. Es ist ein klar strukturierter Entwurf mit gut funktionierender und frei verfügbarer Software, um eine Wägezelle über USB anzusteuern. Ich habe Teile einer günstigen Küchenwaage mit Doppelbiegebalken vom Discounter genutzt, um eine USB Waage zu bauen mit einer Auflösung von weniger als 1g.
Teil 1: USB Wägezellen Interface Controller
Herzstück der Schaltung ist ein Atmel ATMEGA644 Mikrocontroller, der die A/D-Wandlung steuert und die Daten vom AD7797 liest. Auf der anderen Seite fungiert der Atmel als „low speed USB 1.1 HID device“ mit dem Vorteil, dass für HID Devices kein extra Treiber für das Betriebssystem notwendig ist, mit dem die Hardware verbunden ist.
Der Controller macht zusätzliche eingebaute Funktionen möglich.
- automatische zyklische Wandlung
- Offset- und Verstärkungs-Kalibrierung
- diverse Statistikfunktionen wie Mittelwert, Median, Varianz und Standardabweichung
Als Basis für die Statistiken können die letzten 2 bis 256 Messwerte verwendet werden.
Über die serielle RS232 Schnittstelle des ATMEGA644 können nützliche Informationen zur Fehlersuche ausgegeben werden. Dazu muss in der Firmware das „DEBUG“ Flag gesetzt und diese neu übersetzt werden.
Der USB-Teil der Firmware nutzt V-USB, einen reinen Firmware USB Treiber von Objective Development Software GmbH.
Die Software für den integrierten Mikrocontroller ATMEGA644 ist für die Übersetzung mit avr-gcc in C geschrieben. Sie wurde mit „AVR Studio 4.18“, SP3, entwickelt, einer Entwicklungsumgebung für 8 Bit AVR-Controller von Atmel. Der Quellcode steht unter der „GNU General Public License (GPL)“ frei zur Verfügung und kann hier heruntergeladen werden.
Teil 2: Frontend
Das Frontend für die Wägezelle besteht aus einem 24 Bit A/D-Wandler AD7797 von Analog Devices mit integriertem programmierbarem Verstärker mit einer Verstärkung von 128. Dadurch kann der Wandler direkt und ohne zusätzlichen Verstärker mit einer Wägezelle verbunden werden. Die Referenzspannung wird mit einem ADR441 erzeugt, einer „ultra low noise“ Spannungsreferenz ebenfalls von Analog Devices.
Sowohl Offset als auch Verstärkung des Frontends können kalibriert werden. Die Kalibrierungsparameter werden im EEPROM des Controllers gespeichert und beim Einschalten automatisch geladen.
Teil 3: USB Host Software mit GUI
Ich habe eine Software als Beispiel bereitgestellt, welche die USB HID Programmierung sowie alle Funktionen der Schaltung demonstriert. Sie kann für Linux, Windows und eventuell für MacOS übersetzt werden. Die Software ist in C++ geschrieben und mit „Qt Creator“ entwickelt, einer Cross-Plattform Qt IDE von Qt Software und Nokia Corporation. Der Quellcode ist hier veröffentlicht unter der „GNU General Public License“ (GPL).
Bereits kompilierte Programmversionen können hier heruntergeladen werden für linux/x86_64 und win32.
Projektbesonderheiten
- 24 Bit A/D-Wandler, 21 Bit effektive Auflösung
- integrierte Statistikfunktionen
- Kalibrierungs- und Startparameter im EEPROM gespeichert
- USB HID Device – kein Treiber im Betriebssystem notwendig
- optionale Debug-Ausgabe
- Grafische Bedienoberfläche für verschiedene Plattformen
- eindeutige USB-ID: vendor: 0x16c0, product: 0x05df, Manufacturer: „runlevel3.de“, Product: „USB-A/D-Interface“
Das Schaltbild ist hier zum Download verfügbar.
USB-AD-Converter_schematics.pdf