Справочници, схемотехника, теория > Програмиране на микроконтролери, програматори, цифрови проекти

Цифров потенциометър - абсолютен магнитен енкодер AS5600 за STM32xx

(1/2) > >>

EDM electronics:
Аналоговия потенциометър има редица недостатъци, предимно бързо износване, дребезг, ниска устойчивост на влага, ниска шумоустойчивост, ако се намира на отдалечено място от контролера и т.н.

Цифровия потенциометър не се бои от влага, дълговечност, точност, шумоустойчивост. Практически е вечен и живота му се ограничава до механическо разрушаване. Използва се предимно в апаратури, където се изисква надеждна работа, примерно медицинската апаратура.

Направих набързо един такъв потенциометър, за да създам темпелийт при работа с контролери на STM32.
Магнитния датчик е AS5600. Състои се от 4 бр. аналогови датчика на хол и един аксиален магнит. Има аналогов изход за АЦП и цифров за шина I2C с разрядност 12-бита или 4096. Има почти идеална линейност и регулира изключително плавно и прецизно, така както аналоговия не може. Има 4096 стойности за 360 градуса, което много.
Аналоговия изход не ме интересува, защото той е неустойчив към смущения, интересен е цифровият. Адресът на слейфа е 0х36 и е непрограмируем. Това означава, че на една шина може да се върже само един датчик. Има такива от същото семейство датчици с програмируем адрес и могат да се вържат до 16 датчика.

Тук давам кода са STM32, той е универсален, защото съм го правил с библиотека HAL и може да се приложи на всеки контролер STM без изключение, след инициализация на I2C.

Код:
uint8_t buffer [2];
uint16_t angle = 0;

void AS5600_Read (uint16_t addr, uint16_t* val) {
   for (uint8_t i = 0; i < 2; i++) {
   HAL_I2C_Mem_Read(&hi2c1, 0x36<<1, addr + i, 1, (uint8_t*)buffer, sizeof(buffer), 100);
      }
   *val = *(uint16_t*)&buffer;
    }

Прототип:
 AS5600_Read (0x0C, &angle);
0x0C е адреса на регистъра от даташийта на датчика. Това са 4-тири регистъра за четене с 4-тири адреса.

Защо давам кода?
Ами никъде из интернет не се намира код за четене на датчика за STM32. Може някой да прояви интерес и това ще го улесни.

EDM electronics:
Още малко за датчика:
Има го и в готов вариант, струва около 25$.
Моя вариант струва под 2$.
Има го с кръгла платка без резистори за I2C, но те не са и необходими, защото на пиновете на контролера се включва PULLUP, и в този вариант е изключително удобно да се залепи на гърба на двоен потенциометър, става много професионално.

Моето е направено с течен силикон само за пробата, това е прототип.



GMG:

--- Цитат на: EDM electronics в Декември 31, 2021, 05:11:25 pm ---Аналоговия  I2C с разрядност 12-бита или 4096. .... Адресът на слейфа е 0х36

--- Край на цитат ---

--- Цитат ---Има 4096 стойности за 360 градуса
--- Край на цитат ---
шлейф 0х36, Мен ми трябват 16384, STM32 по I2C може ли да се заключва, питам за една проста пералня Whirlpool.

EDM electronics:
Този енкодер по темата се използва за определяне на градуси за 1 оборот. За двигатели се ползва друг тип енкодер - инкрементален. Той брои импулси. Така може да се определи колко оборота е направил и с каква скорост. Иначе има 16-битови абсолютни енкодери. Не виждам смисъл да се ползва абсолютен енкодер на пералня, защо ти е да знаеш, на колко градуса е застанал барабана и спрямо кой от всичките обороти?

Такъв енкодер е най-добре приложим при серво двигателите.

Заключвало ли се I2C?
Я си формулирай по-точно въпроса, щото в интерфейса няма понятие "заключване". Има адрес и четене на байт последователно бит по бит, после другия адрес. Има и протокол.

"Заключване" може би имаш предвид НЕчетете? Или примерно "разрешаване" със стробиращ вход на датчика. Примерно I2C EEPROM имат такъв вход за забрана за запис, а енкодера от темата има вход за четене/запис в зависимост дали е 1 или 0.
После интерфейса е стандартен и контролера няма значение. Принципа на четене и запис е един и същ.

GMG:
Не стробира и не чете, пълна мъка, снощи замених платката, тръгна да центрофужи, но не върти мотора - EEPROM дава че чист, а там има ключ..

Навигация

[0] Списък на темите

[#] Следваща страница

Премини на пълна версия