На Taobao я купил два подержанных одноосных сервопривода (продавец представил их как сервомоторы с определёнными суставами на некоторых популярных роботах) по очень низкой цене — 11,5 юаней. Если вы посмотрите на Taobao, то увидите, что полный комплект такого сервопривода стоит дороже.
Низкая цена имеет свои причины, но у этих сервоприводов нет документации и протоколов. Поэтому я разобрал их и решил изучить, чтобы понять протокол связи и использовать Arduino для управления ими.
Если вы чувствуете, что этот сервопривод вас заинтересовал, пожалуйста, посетите мой магазин и сделайте заказ на странице ниже. Я не зарабатываю на этом проекте, все средства идут на поддержку разработки.
Этот документ представляет собой полное исследование этого сервопривода.
Небольшая реклама:
Если вам понравился этот проект, пожалуйста, поддержите его. Вы можете сделать заказ на моей странице на Taobao. Цена — всего один юань. Все деньги пойдут на благотворительность.
Ссылка на страницу: https://item.taobao.com/item.htm?spm=a230r.7195193.1997079397.9.75b524d6Pn7IlS&id=593044206467&abbucket=20
Примечание: в Bilibili есть пользователь, который обнаружил проблему: если вы просматриваете эту страницу как гость, некоторые изображения могут быть недоступны. Я также столкнулся с этой проблемой на Code Cloud: файлы размером более 1 МБ нельзя просматривать без учётной записи Gitee.
Анализ схемы необходим для последующего анализа программы. В данном случае мы рассматриваем только ключевые детали, а не конкретные значения резисторов и конденсаторов. Вот основная схема платы управления:
Из схемы разборки можно увидеть, что на передней панели платы управления есть шестиконтактный разъём для пайки. Сначала я предположил, что это интерфейс для записи программы через ISP. После проверки с помощью мультиметра оказалось, что моё предположение верно.
С точки зрения схемы, можно записать программу, но для этого необходимо выполнить предварительное условие: автор прошивки не должен был заблокировать функцию записи через ISP. Поэтому я попробовал использовать свой инструмент USBASP. Вот схема подключения:
Затем я использовал следующую команду для попытки прочитать данные с микросхемы Mega8:
avrdude -cusbasp -pm8 -U flash:r:mega8_servo.hex:i
Оказалось, что автор прошивки поступил очень благородно!
Я сохранил прочитанные данные в файле mega8_servo.hex.
Итак, я получил файл hex. Следующим шагом было дизассемблировать его и получить код сборки. Команда была следующей: avr-objdump -D -m avr mega8_servo.hex > mega8_servo.s
Файл с кодом сборки также был сохранён в проекте. Стоит отметить, что файл, который вы видите в проекте сейчас, не является исходным файлом после дизассемблирования. Я добавил много комментариев.
Здесь есть небольшая история: когда я начал анализировать код, я случайно нашёл на одном сайте документацию по протоколу определённого сервопривода (документация PDF также находится в этом проекте). Когда я впервые увидел её, я был очень рад, думая, что мне не придётся анализировать код. Однако, внимательно изучив её, я понял, что она не содержит всей необходимой информации.
Вот скриншот:
В этой документации подробно описан формат протокола, но информация о параметрах остаётся неясной. Например, для команды 0x01:
Таким образом, анализ кода всё ещё необходим для полного понимания протокола. Эта документация служит важным ключом к анализу деталей протокола.
После примерно 20 дней работы в свободное время я проанализировал почти весь код, кроме загрузчика. Мои результаты превзошли ожидания:
Честно говоря, эта программа написана довольно небрежно:
Вот некоторые внутренние особенности этой прошивки (если вы хотите проанализировать дизассемблированный код самостоятельно, эти сведения будут полезны):
Подробное описание протокола с большим количеством комментариев уже загружено (doc каталог UBTECH_protocol_detail.pdf), вы можете скачать его самостоятельно.
За исключением формата протокола, почти все трёхлинейные последовательные интерфейсы для сервомашин работают одинаково: Сигнальная линия фактически является линией TTL-уровня, TX и RX совместно используют эту линию, хост и все сервомашины подключены к ней, один хост — много ведомых. Одновременно может передавать данные только один узел, остальные узлы слушают сигнальную линию.
Процесс управления сервомашиной:
Поняв процесс работы, становится легче понять назначение коммуникационной платы. Просто соединить TX и RX хоста вместе и подключить их к сигнальной линии не получится, так как TX будет отправлять данные обратно через RX. Необходимо использовать схему для изоляции TX хоста во время передачи данных и разрешения RX принимать данные от других узлов.
Здесь я предлагаю метод создания собственной коммуникационной платы, схема разработана мной самостоятельно. Она состоит из модуля CH340 USB-TTL, одной микросхемы 74HC125, двух резисторов 10 кОм и макетной платы. Стоимость не превысит 5 юаней.
Начните с рисования схемы:
И соберите плату:
Эта плата полностью соответствует требованиям, описанным выше. Принцип работы здесь не рассматривается, вы можете проанализировать его самостоятельно.
Производительность: я собрал две платы и протестировал их на скорость связи, они легко справляются со скоростью менее 1 Мбит/с!
Если вы хотите создать собственную коммуникационную плату на основе предоставленной схемы, обратите внимание на следующие моменты:
В проекте используется файл arduino_bus_servo_demo.ino, который содержит код для Arduino. Также существует дополнительный тестовый код arduino_bus_servo_demo.py, предназначенный для тестирования рулевого механизма на ПК с использованием самодельной платы управления. Логика управления в обеих демонстрационных версиях полностью идентична.
Рисунок: Схема подключения демонстрационной программы.
Кроме того, чтобы наглядно продемонстрировать эффект от демонстрации, я записал видео и загрузил его на Bilibili (B站). Ссылка на видео: https://www.bilibili.com/video/av51309465. Добро пожаловать к просмотру!
10. Сравнение и тестирование четырёх моделей рулевых механизмов, доступных на платформе Taobao
На данный момент я собрал на платформе только четыре модели рулевых механизмов. Различия между ними можно увидеть по задней крышке. Для удобства дальнейшего объяснения я присвоил каждой модели кодовое обозначение на рисунке.
A, C и D имеют полностью медные зубчатые колёса; B имеет стальные зубчатые колёса. Данные о крутящем моменте для A, B и C были получены путём предположения на основе информации о маркировке на обратной стороне печатной платы и предполагаемого значения тока блокировки. Я считаю, что точность этих данных очень высока.
Также на рисунке указаны типы основных контроллеров MCU и типы микросхем управления двигателем.
(Примечание: Я не смог найти информацию о микросхеме драйвера A4959xxx на сайте ALLEGRO или в интернете. Если у вас есть информация об этой микросхеме, пожалуйста, поделитесь ею со мной через комментарии или личные сообщения. Заранее благодарю!)
Результаты теста на рабочий ток и защиту от перегрузки (условия теста: напряжение питания рулевого механизма 7,4 В):
Рисунок: Результаты теста.
Наконец, несколько слов о проблеме с рулевыми дисками:
A и C имеют одинаковые оси рулевого диска, 24T. Диски для этих двух моделей взаимозаменяемы, но диски, доступные на платформе, не подходят для использования. В настоящее время можно использовать только оригинальные диски из разобранных устройств.
Рулевой диск модели B имеет отдельный стандарт. Точное количество зубьев неизвестно, но диаметр оси кажется меньше, чем у A и C.
Диск рулевого механизма модели D более распространён, имеет 25 зубьев и может быть использован с обычными дисками рулевого механизма типа 996.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )