Автор Тема: Цифров потенциометър - абсолютен магнитен енкодер AS5600 за STM32xx  (Прочетена 522 пъти)

Неактивен EDM electronics

  • Global Moderator
  • Много Напреднал
  • *****
  • Публикации: 3 096
Аналоговия потенциометър има редица недостатъци, предимно бързо износване, дребезг, ниска устойчивост на влага, ниска шумоустойчивост, ако се намира на отдалечено място от контролера и т.н.

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

Направих набързо един такъв потенциометър, за да създам темпелийт при работа с контролери на 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. Може някой да прояви интерес и това ще го улесни.
« Последна редакция: Декември 31, 2021, 05:38:11 pm от EDM electronics »

Неактивен EDM electronics

  • Global Moderator
  • Много Напреднал
  • *****
  • Публикации: 3 096
Още малко за датчика:
Има го и в готов вариант, струва около 25$.
Моя вариант струва под 2$.
Има го с кръгла платка без резистори за I2C, но те не са и необходими, защото на пиновете на контролера се включва PULLUP, и в този вариант е изключително удобно да се залепи на гърба на двоен потенциометър, става много професионално.

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



« Последна редакция: Декември 31, 2021, 05:39:26 pm от EDM electronics »

Неактивен GMG

  • Експериментатор
  • Сериозно Активен
  • ***
  • Публикации: 458
  • Големите неща се раждат в малките часове!
Аналоговия  I2C с разрядност 12-бита или 4096. .... Адресът на слейфа е 0х36
Цитат
Има 4096 стойности за 360 градуса
шлейф 0х36, Мен ми трябват 16384, STM32 по I2C може ли да се заключва, питам за една проста пералня Whirlpool.

Неактивен EDM electronics

  • Global Moderator
  • Много Напреднал
  • *****
  • Публикации: 3 096
Този енкодер по темата се използва за определяне на градуси за 1 оборот. За двигатели се ползва друг тип енкодер - инкрементален. Той брои импулси. Така може да се определи колко оборота е направил и с каква скорост. Иначе има 16-битови абсолютни енкодери. Не виждам смисъл да се ползва абсолютен енкодер на пералня, защо ти е да знаеш, на колко градуса е застанал барабана и спрямо кой от всичките обороти?

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

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

"Заключване" може би имаш предвид НЕчетете? Или примерно "разрешаване" със стробиращ вход на датчика. Примерно I2C EEPROM имат такъв вход за забрана за запис, а енкодера от темата има вход за четене/запис в зависимост дали е 1 или 0.
После интерфейса е стандартен и контролера няма значение. Принципа на четене и запис е един и същ.
« Последна редакция: Януари 01, 2022, 11:38:29 am от EDM electronics »

Неактивен GMG

  • Експериментатор
  • Сериозно Активен
  • ***
  • Публикации: 458
  • Големите неща се раждат в малките часове!
Не стробира и не чете, пълна мъка, снощи замених платката, тръгна да центрофужи, но не върти мотора - EEPROM дава че чист, а там има ключ..

Неактивен EDM electronics

  • Global Moderator
  • Много Напреднал
  • *****
  • Публикации: 3 096
Не ми е ясно ти как го разбра тоя епром, че бил чист, епрома няма връзка с енкодера пък и в една пералня и съдомиалня знам има магнитен енкодер с една рид-ампула за обема на водата - енкодер-водомер, не знам дали в двигателя има енкодер, ако за него ми говориш. Но независимо как е, ти не можеш да добавяш свой енкодер по направи си сам.

Нито можеш да смениш контролера, защото няма как да го прочетеш - те са заключени за сваляне на бинарния файл. Щом си сменил платката с нова и не работи, проверява се мотора. Но платката трябва да е точно същата, защото за различните модели, дори серии по години, са с различни платки.

Скоро си правих съдомиалната - БЕКО /голям турски боклук/. Не ща да чуя повече за тия. Платката е направена нарочно да се разваля често. Между контролера и симисторите няма галванично разделяне с оптрони. Освен това симисторите нямат никаква варисторна защита, а това ги обрича на кратък живот, всяка обратна индукция може да повреди не само симистора, а директно и контролера, както в моя случай. И така и става, и купуваш недодяланите им чокондурски платки за 110 лв.

Неактивен GMG

  • Експериментатор
  • Сериозно Активен
  • ***
  • Публикации: 458
  • Големите неща се раждат в малките часове!
   От мануала хванах кода, оказа се три нули и едно, чета го с програматора, рестартира се - оказа се че помни грешки.
 STM32 излиза  хубав, 32 бита има още място.
Сега пералнята пее, мерси че на дърти години са разчовъркахме.
Комшийката ще почерпи.  :)

Неактивен EDM electronics

  • Global Moderator
  • Много Напреднал
  • *****
  • Публикации: 3 096
   1. От мануала хванах кода, оказа се три нули и едно, чета го с програматора, рестартира се - оказа се че помни грешки.
 
2.STM32 излиза  хубав, 32 бита има още място.


1. Кой код си хванал ми стана много интересно? На кое викаш програматор, контролера на пералнята ли?

2. СТМ бил хубав. Кое му е хубаво, прическата ли? 32-бита имало още място..
Говориш несвърани неща. От тия 32 бита не зависи "многото място", от друго зависи.  ;D
 Ей, ши ма спукаш от смях. Я дай още нещо?  ;D

Неактивен GMG

  • Експериментатор
  • Сериозно Активен
  • ***
  • Публикации: 458
  • Големите неща се раждат в малките часове!
. Я дай още нещо?  ;D
   Давам  ;)
32-битно ЦПУ е архитектура основана на регистри и шини за даден размер.
От от 0 до 4 294 967 295, не сравнявам с 64, но за проста пералня е много.  ;)