28

AS5045 и Ардуино

Доброго времени суток. Появилась у меня необходимость сделать считывание угла поворота без какого-либо физического контакта. После некоторых поисков был выбран абсолютный магнитный энкодер AS5045. Он имеет 4096 позиций на один оборот, что соответствует точности примерно 0,088 градуса на позицию. Меня такая точность вполне устраивала и решил брать. Вот тут-то и появилась первая проблема. Заключалась она в том, что на него очень мало толковой информации на русском языке. Забегая вперед, скажу что запустить мне его удалось, именно по этому и захотелось сделать более менее полезную выжимку из того что нашел.

Полазив в даташите и посмотрев фотографии дем-плат от производителя  нарисовал такую схему подключения:

Вторая проблема  это корпус датчика. Датчик поставляется в достаточно маленьком корпусе - SSOP-16, по этому плату делал фоторезистом. Требование по размерам были достаточно жестким  соответственно и элементы взял не большие в корпусе 1206.

Третья проблема это, как ни странно китай. AS5045, как и подобные ему энкодеры требуют  диаметрально намагниченный магнит. Проблема появилась тогда, когда я понял,что китайцы положили не диаметральный магнит а обычный. В принципе это решается установкой магнита на бок, но повторюсь требования по размерам достаточно жесткие. Так что пришлось искать пути обхода. А ларчик просто открывался. Вытащил из мебельной магнитной держалки для дверцы, там и магнит тонкий и если правильно расположить, то все прекрасно работает.

Как сказано в заголовке, подключаться он  будет к плате Ардуино. Для этих целей есть хорошая библиотека (https://github.com/DashZhang/AS5045).  Пример из библиотеки сразу выполняет то что мне и нужно:

[code]

#include <AS5045.h>
// CHANGE THESE AS APPROPRIATE

#define CSpin 2

#define CLKpin 3

#define DOpin 4
AS5045 enc (CSpin, CLKpin, DOpin) ;
// didn't program the OTP

void setup (){

Serial.begin (115200) ;

// NOTE BAUD RATE

if (!enc.begin ()) Serial.println ("Error setting up AS5045") ;}
void loop ()

{/* Serial.print ("value:") ;

Serial.print (enc.read (), DEC) ; 

Serial.print (" ") ; 

Serial.print ("status:") ;

Serial.print (enc.status (), BIN) ; Serial.print (" ") ; 

Serial.print (enc.valid () ? "OK" : "Fault") ; 

Serial.print (" ") ; 

Serial.print ("Z:") ; 

Serial.println (enc.Zaxis ()) ;

*/Serial.print (enc.read () , BIN);Serial.print ("\t");Serial.print (enc.status (), BIN) ;

Serial.print ("\t");

Serial.print ("Angle : ");

Serial.println (enc.read () * 0.08789, DEC);

delay(10);

}

[/code]

В заключении скажу что данная статья не претендует на какое-либо всеобъемлющее учебное пособие и никого не заставляет делать так же как у меня. Написал просто что бы поделиться опытом и помочь тем, у кого возникнут такие же проблемы

0
Автор поста оценил этот комментарий

Спасибо)
Я, кстати, нашел, заказал и уже получил с Алишки кучку датчиков AS5600 сразу с магнитами)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Проверьте что бы они были именно диаметральные. Китайцы меня один раз обманули(
0
Автор поста оценил этот комментарий

Вот спасибо за инфу!
Я на днях озадачился идеей немного поизучать программирование микроконтроллеров, и вместе с этим одновременно решил обзавестись штурвалом для авиа- и космосимуляторов. Но почему бы эти две идеи не объединить?
Тут сразу возник вопрос - как получить достаточно точный, с высоким разрешением, сенсор угла поворота осей штурвала. Промышленные слишком дороги - дешевле купить готовый штурвал. И вот, кажется, вы мне помогли с первоначальным определением того, что мне нужно)

Но, так как я в электрике/электронике не силен, есть пара вопросов. Обязательно ли использовать такой маленький магнит? Можно ли прямоугольный? Насколько сильным должен быть магнит, чтобы датчик нормально воспринимал его движение?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Извиняюсь за долгий ответ, давно не заходил. Размер магнита не имеет значения, главное что бы он был диаметрально намагниченный и распологался над центром микросхемы. Сила магнита зависит от расстояния до микросхемы, если не далеко то и сильный магнит не нужен. Но из того что я видел диаметральные магниты есть только неодимовые. А они сами по себе сильнее обычных
показать ответы