CUSTOMELECTRONICS.RU
Информационно-учебный блог о разработке электроники
Эл. почта: info@customelectronics.ru

Интеллектуальный сервопривод Turnigy TGY-S508H. Описание, разборка и подключение

Интеллектуальный сервопривод — особый класс двигателей предназначенный именно для применения в робототехнике. Они существенно дороже, но предоставляют гораздо больше возможностей разработчику.

Интеллектуальный сервопривод TGYS508

Интеллектуальный сервопривод TGYS508

Описание

Привычные сервоприводы изначально были предназначены для использования в радиоуправляемых моделях. Они имеют достаточно простую конструкцию и универсальную систему управления. Их часто применяют для строительства различных роботов, но они не отвечают многим требованиям. С другой стороны, есть двигатели, изначально предназначенные для использования в робототехнике. Их условно называют интеллектуальными сервоприводами
Основные особенности двигателей, о которых пойдет речь:

  1. Удобное крепление, как к корпусу, так и к валу. На корпусе есть сразу 16 отверстий с пазами для гаек (по 8 с каждой стороны). Вал имеет выход на обе стороны двигателя. Это очень удобно и устраняет лишние моменты
  2. Управление через интерфейс RS485. Это шина, а следовательно двигатели можно подключать друг за другом (до 254 штук). На них даже есть для этого два разъема. То есть каждый следующий подключается к предыдущему и т.д
  3. Питание от напряжения аккумулятора. Обычные сервы требуют внешнего стабилизатора, а в интеллектуальные сервоприводы встроена схема питания электроники, а сам двигатель питается от аккумулятора
  4. Обратная связь! Возможно, с этого стоило начать. Они могут сообщать как позицию, так и текущую скорость, температуру и напряжение аккумулятора
  5. Разные режимы вращения вала. Можно установить либо конкретный угол, либо непрерывно вращать вал с заданной скоростью

Нам для теста достался клон двигателя Dynamixel от RobotisTurnigy TGY-S508H. Они полностью совместимы с точки зрения протокола и очень похожи по посадочным местам. Стоил он тогда около $28.
Заглянем внутрь?

Разборка

Разборка сервопривода

Разборка сервопривода

Разобрать его очень просто, достаточно открутить четыре винта.
Редуктор полностью металлический. Хорошо смазан и имеет подшипник. К сожалению, усилие передается только на одну сторону двигателя. На второй стороне только подшипник:

Редуктор Turnigy TGY-S508H

Редуктор Turnigy TGY-S508H

С другой стороны открывается доступ к электронной начинке двигателя. Все это трудно снять и точно сказать, что служит датчиком положения не получится. Видно, что все изготовлено достаточно надежно, а оба разъема двигателя соединены pin to pin.

Плата управления сервопривода Turnigy TGY-S508H

Плата управления сервопривода Turnigy TGY-S508H

В целом, качество сборки и конструкция вообще вызывают уважение.

Подключение

Для подключения сервопривода достаточно устройства с интерфейсом RS485 и двухбаночного аккумулятора (либо блока питания на 8В). Мы предпочли использовать для этого Arduino с аккумулятором.
Можно купить готовый преобразователь UART-RS485, но у нас не было время ждать и мы просто взяли популярную микросхему MAX485CSA+T, три резистора по 1к, конденсатор на 0,1мкФ и сделали несложную плату:

Переходник UART-RS485 для интеллектуального сервопривода

Переходник UART-RS485 для интеллектуального сервопривода

С левой стороны пять выводов для подключения к Arduino. Свеху-вниз: 5В, 1, 2, 0 и GND. Разъем справа подключается к сервоприводу. На два нижних контакта необходимо подать питающее напряжение.
После этого достаточно скачать библиотеку (ссылка будет в конце), установить и можно запустить какой-нибудь готовый пример. Вот так выглядит исходный код для Dynamixel_Read:

#include <DynamixelSerial.h>

int Temperature,Voltage,Position; 

void setup(){
Dynamixel.begin(1000000,2);  // Inicialize the servo at 1Mbps and Pin Control 2
delay(1000);
}

void loop(){
  Temperature = Dynamixel.readTemperature(1); // Request and Print the Temperature
  Voltage = Dynamixel.readVoltage(1);         // Request and Print the Voltage
  Position = Dynamixel.readPosition(1);       // Request and Print the Position 
 
  Dynamixel.move(1,random(200,800));  // Move the Servo radomly from 200 to 800
 
 Dynamixel.end();                 // End Servo Comunication
 Serial.begin(9600);              // Begin Serial Comunication
 
  Serial.print(" *** Temperature: ");   // Print the variables in the Serial Monitor
  Serial.print(Temperature);
  Serial.print(" Celcius  Voltage: ");
  Serial.print(Voltage);
  Serial.print("  Volts   Position: ");
  Serial.print(Position);
  Serial.println(" of 1023 resolution");
  
 Serial.end();                     // End the Serial Comunication
 Dynamixel.begin(1000000,2);         // Begin Servo Comunication
 
delay(1000);

}

Его немного придется поправить перед использованием. Скорость для сервопривода должна быть 500к!
Как видите, эта программа сначала устанавливает связь с двигателем, меняет его позицию и вычитывает данные. Затем она переключается на скорость связи с компьютером и присылает в монитор COM-порта температуру, напряжение питания позицию и разрешение. Далее снова переключается на работу с двигателем. То есть скорость обмена необходимо поправить в двух местах. Вот и все!

Полезные ссылки

Описание подобного двигателя от Dynamixel
Описание протокола коммуникации
Чертеж двигателя
Библиотека для Arduino
Плата (скачать)

Мы будем очень рады, если вы поддержите наш ресурс и посетите магазин наших товаров shop.customelectronics.ru.

Метки: , , , , , , , , , , Просмотров: 4835