Обновлено 13.02.2013
English version of the article
Мне досталась более старая версия платы v1.1. В ней перепутаны подписи к выводам SCK и MOSI. Eсли ваш программатор не находит плату, то попробуйте поменять их местами
Позже постараюсь выложить картинку.
Плату я подключаю к роботу. Работает он под Linux. Шина i2c там реализована посредством драйвера i2c-gpio. Для тестирование использую утилиту i2cdetect, которая пробегает по всем адресам и показывает список присутствующих устройств.
Так вот, после первого обращение к плате управления двигателями, шина i2c умирает, и уже невозможно связаться с другими устройствами.
Обновление прошивки тоже мало что меняет. Устройство начинает отзываться на другой адрес, но работает ещё хуже: то совсем не отзывается, то вешает шину.
В документации написано, что в arduino-0019 плата работает, а начиная с версии arduino-0022 нужно добавить задержку в конце Wire.endTransmission().
Но копаться в коде утилиты i2cdetect и вставлять там задержку - не самое лучшее решение.
Поэтому я и решил написать свою альтернативную прошивку.
Прошивка написана с использованием библиотеки AVR Libc (для Linux). Под Windows должно работать с WinAVR, но сам я её не использовал.
Прошивка позволяет управлять двумя двигателями с использование программного ШИМ. Частота ШИМ составляет 200 Гц. Выбор частоты ШИМа пока не поддерживается.
Рад буду услышать ваши отзывы об использовании. Также, если у вас есть желание как-то улучшить данную прошивку - с радостью готов с вами сотрудничать. Пишите на Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript..
Адрес I2C устройства на шине 0x28.
Устройство работает в коммандном режиме (возможно когда-то появится и регистровый режим). За одну посылку передаётся комманда и её аргументы.
Комманда | Код комманды | Аргумент 1 | Аргумент 2 | Пояснение |
DRV_WHO_AM_I | 0x10 | - | - | Проверка существование устройство. Устройство должно вернуть код 0x47 |
DRV_DRV_ENABLE | 0x11 | - | - | Включить драйвер |
DRV_DRV_DISABLE | 0x12 | - | - | Выключить драйвер (По умолчанию). |
DRV_SET_SPEED | 0x13 | byte. Скорость левого двигателя | byte. Скорость правого двигателя | значения от 0 до 100. (по умолчанию: 0) |
DRV_SET_DIRECTION | 0x14 | byte. Направление левого двигателя | byte. Направление правого двигателя | 0x0 - вперёд; 0x1 - назад (по умолчанию: вперёд) |
Изменения:
* v1.1. Добавлена поддержка платы v1.2, которая имеет другую распиновку.
Последняя стабильная версия (бинарная прошивка + исходники):
VTMotor v1.1 13.02.2012
Репозиторий для разработки:
https://github.com/vitperov/VTMotor
Vitaly Perov