Adapterboard für AS5046 Winkelsensor und Ansteuerungsbeispiele

Ein Adapterboard mit Schaltplan und Layout zum Download für den Winkelsensor AS5046 von austriamicrosystems. Dazu noch ein kleines Ansteuerungsbeispiel.

All available languages for this article:

Adapterboard für AS5046 Winkelsensor und Ansteuerungsbeispiele [de]

Categories:

Mikrocontroller


Allgemeines

Hinweis: Der Autor übernimmt keinerlei Haftung für Schäden jeglicher Art, die durch die Durchführung der hier beschriebenen Aktionen entstehen könnten.

Der AS5046 austriamicrosystems ist ein kleiner Sensor mit Hilfe dessen man leicht absolute Winkelmessungen durchführen kann. Er verfügt ein I2C-Interface, was seinen Einsatz sehr einfach macht.

Zum Experimentieren ist das SSOP16 Gehäuse leider nicht besonders gut geeignet, weswegen ich hier Schaltplan und Layout der von mir designten Adapter-Platine zum Download anbiete.

Schaltplan und Platinenlayout

Hinweis: Die Platine ist für 3,3 Volt Betriebsspannung entworfen, bei Betrieb an 5 Volt muss die im Datenblatt angegebene Beschaltung verwendet werden! Bitte auch sicherstellen, dass der I2C-Bus mit 3,3 Volt Pegeln arbeitet!

(Nicht wundern, dass es nicht ganz dem Foto entspricht, aber im geätzten Layout war ein kleiner Fehler drin.)

as5046.brd
as5046.sch

Ansteuerung

Das Auslesen von Winkeln ist sehr einfach, ich beschränke mich auf die Dokumentation dieser Funktion. Der AS5046 ist auch programmierbar, dies werde ich jedoch nicht beschreiben - die Platine ist hierfür auch nicht ausgelegt, da der PROG-Pin mit Masse verbunden ist.

Zum Auslesen müssen 4 Byte Daten vom Sensor gelesen werden, folgender Ausschnitt aus einem C-Programm gibt den Winkel sowie weitere Statusinformationen aus:

            signed int angle;
            angle=data[0] << 4;
            angle+= (data[1] >> 4) & 0xc;
            angle+= (data[3] >> 6) & 0x3;

            signed char magnitude=data[2];

            /* der Uebersicht halber in 3 printfs */
            printf("Angle: %6.2f, Mag: 0x%x",
                (angle/4096.)*360,
                (magnitude)
                );
            printf(", OCF: %d, COF: %d, LIN: %d, M_I: %d, M_D: %d, Parity: %d",
                (data[1] >> 5)&0x1,
                (data[1] >> 4)&0x1,
                (data[1] >> 3)&0x1,
                (data[1] >> 2)&0x1,
                (data[1] >> 1)&0x1,
                (data[1] >> 0)&0x1
                );
            printf("\n");


 
     
© 1999 - 2018 ScriptKiller
Impressum | Sitemap
Bei der Nutzung dieser Webseite werden IP-Adressen und Informationen über verwendete Browser in Logfiles gespeichert. Mit der Nutzung erkennen Sie diese Tatsache an.