Obsługa enkodera AS5048 we Flowcode

Obsługa enkodera AS5048 we Flowcode
Czujniki położenia są szeroko wykorzystywane w systemach automatyki, aparaturze medycznej robotyce itp. Jest to element, który przetwarza przemieszczenie na wielkość elektryczną lub w bardziej rozbudowanych konstrukcjach ? na wielkość cyfrową.

Najbardziej popularne czujniki to czujniki liniowe i czujniki obrotowe. Te pierwsze wykrywają i mierzą przesuniecie liniowe, a drugie kąt obrotu. Układ scalony AS5048 jest czujnikiem mierzącym kąt obrotu z bardzo dużą dokładnością wynoszącą 0,05° w zakresie 0…360°.

Nie jest to kompletny czujnik wyposażonym w obudowę z łożyskowana osią, ale układ scalony będący zasadniczym elementem do budowy takiego czujnika. Do kompletu jest potrzebny magnes obracający się w osi prostopadłej do górnej płaszczyzny układu.

Podstawowym elementem układu jest obszar czujników Hall’a wykonana w technologii CMOS. Obszar sensora Hall’a umieszczony w centralnej części obudowy układu mierzy natężenie pola magnetycznego. Do konwersji natężenia pola w funkcji obrotu magnesu nad czujnikiem jest używany 14-bitowy przetwornik A/C. Daje to rozdzielczość pomiaru 360°/16384=0,02197°, ale jak już wspomniałem, producent deklaruje dokładność 0,05°.

Sensor pozycji jest zbudowany z 4 czujników rozmieszczonych na obwodzie koła co 90°. Jeżeli magnes jest w położeniu prostopadłym do czujnika i nie obraca się (jest zablokowany) to zmiana natężenia pola magnetycznego spowodowana zmianą odległości powierzchni obudowy od magnesu nie wpływa na pomiar kąta obrotu.

Jest to ważna cecha tego układu, bo dopuszcza zmiany natężenia pola wynikające z ruchu magnesu równolegle do osi obrotu (ruch pionowy) oraz - co również ważne - ze zmiany temperatury. W praktyce, pole magnetyczne może być niezbyt silne lub podlegać czasowym fluktuacjom.

Może to wynikać ze zbyt dużej szczeliny pomiędzy czujnikiem i magnesem lub ze złej jakości materiału, z którego jest wykonany magnes. Zwiększa się wtedy szum na wyjściu wzmacniaczy pomiarowych i co z tym idzie – wynik pomiaru będzie obarczony większym jitterem.

Żeby układ mógł wyrównać zmiany sygnału elektrycznego na wyjściu wzmacniaczy pomiarowych wynikające ze zmian natężenia pola magnetycznego, wprowadzono układ automatycznej regulacji wzmocnienia AGC stabilizujący poziom sygnału na wyjściu wzmacniaczy pomiarowych.

(…) Interfejs I²C układu AS5048B składa się z linii danych SDA (wyprowadzenie SDA/CSn na płytce testowej) i linii zegarowej SCL (wyprowadzenie SCL/SCK na płytce testowej). Dodatkowo, są dostępne 2 wyprowadzenia wejść adresowych (A1/MOSI i A2 MISO). Dwukierunkowe linie SDA i SCL muszą być podciągane do plusa zasilania przez rezystory - wymaga tego specyfikacja standardu I²C.

Ja zastosowałem 2 rezystory o wartości 2,2 k. Moduł może być zasilany napięciem +3,3 V lub +5 V - służą do tego celu 2 osobne wyprowadzenia napięcia zasilania oznaczone VDD3V i VDD5V. Napięcie +3,3 V dołączamy do wyprowadzenia VDD3V, a wyprowadzenie VDD5V musi być zwarte z VDD3V.

Kiedy chcemy zasilać moduł napięciem +5 V, to dołączamy je do VDD5V, a wyprowadzenie VDD3V powinno być zblokowane kondensatorem 10 uF do masy. Nie może pozostać niedołączone, bo powoduje to niestabilności w wewnętrznym napięciu zasilania i w rezultacie zakłócenia fazowe przy pomiarze kąta obrotu.

Wymuszając poziomy logiczne na liniach A1 i A2 można wybrać jeden z 4 dostępnych adresów na magistrali I²C. Umożliwia to podłączenie 4 układów do jednej magistrali. Ponieważ w zaawansowanych układach może to być zbyt mało, to producent układu zastosował nietypowe rozwiązanie polegające na możliwości programowania przez użytkownika 5 starszych bitów adresu slave. Sterowanie funkcjami AS5048B i odczytywanie wyniku odbywa się przez zapisywanie i odczytywanie wewnętrznych rejestrów.

Dostęp do rejestrów odbywa się poprzez osobne sekwencje zapisu i odczytu. Zapis rejestru lub grupy rejestrów o adresach następujących po sobie rozpoczyna się od wysłania sekwencji Start i adresu slave z wyzerowanym najmłodszym bitem R/W.

Potem jest wysyłany 8-bitowy adres pierwszego odczytywanego rejestru. Po nim można wysłać wartość zapisywanego rejestru. Prawidłowe zapisanie jest sygnalizowane bitem ACK ustawianym przez enkoder. Potem można zakończyć zapisywanie przez wysłanie sekwencji Stop lub wysyłać kolejne bajty, które będą zapisywane pod kolejnymi adresami. Po zakończeniu wysyłania bloku danych trzeba wysłać na magistralę sekwencję Stop. Odczyt rejestru lub grupy rejestrów jest trudniejszy do wykonania. (…)

Oprogramowanie

W czasie testów moduł enkodera został dołączony do wyprowadzeń portów mikrokontrolera PIC18F4550 umieszonego na module ECIO40P produkowanym przez firmę Matrix (producenta Flowcode). Mikrokontroler z ECIO40P ma fabrycznie zaprogramowany bootloader i może się łączyć z komputerem poprzez interfejs USB.

Na płycie instalacyjnej Flowcode jest umieszczony odpowiedni driver i po jego zainstalowaniu można programować pamięć Flash mikrokontrolera bezpośrednio z poziomu Flowcode. (…) Przedstawiony tutaj program jest typowo testowy, ale łatwo go można zmodyfikować do konkretnego zastosowania.

Zawartość rejestru obrotu można wykorzystać w algorytmach sterowania lub przesłać na przykład interfejsem USB do komputera.

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik lipiec 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio lipiec 2020

Świat Radio

Magazyn użytkowników eteru

APA - Automatyka Podzespoły Aplikacje lipiec 2020

APA - Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna lipiec 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich lipiec 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów