Skip to content

Слоты расширения

Dmitry V. Sokolov edited this page Mar 6, 2016 · 19 revisions

Распиновка разъёмов

Контроллер имеет два слота расширения, но вполне вероятно, что пластиковый корпус не прорезан для их использования, это сделано для избежания неприятных инцидентов. Итак, если настала пора работать с картами расширения, то нам понадобится нож. Вывинчиваем четыре самореза, нежно открываем корпус, стараясь не потерять кнопки.

Затем при помощи обыкновенного ножа делаем прорези, корпус уже предослаблен в нужном месте, резаться должно легко. Пока видны непосредственно разъёмы, отметим их распиновку. Слотов расширения два, JX1 и JX2, на последующих фотографиях показана работа с портом JX2.

На этой фотографии показана стандартная разветвительная карточка.

Если у вас её нет, не беда, можно сделать самостоятельно, начиная с самых простых вариантов:

Разъём стандартный edge board connector с шагом в 2.54мм, допустимая толщина текстолита 1.37-1.78мм. Итак, карточка вставлена, давайте проверим распиновку. Итак, схема нам говорит, что 11й пин порта JX2 - это EPWM1_A. Точнее, это PWM управление порта S5. Заходим в Настройки->Сервоприводы, включаем сервопривод на порту S5 и выставляем ему какой-нибудь угол (на фотографии 60). Тыкаемся осциллографом в соответствующий пин и наблюдаем квадратный сигнал, ширина которого зависит от выставленного угла. На фотографии специально показана разветвительная плата, сделанная "на коленке", так как на ней хорошо видно, какой именно пин разъёма мы проверяем.

Проверка связи

Давайте попробуем простейшую проверку связи между десктопом и контроллером ТРИК: используем последовательный порт UART0 контроллера, а со стороны десктопа возьмём стандартный usb to serial свисток.

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

Используем только три провода: земля на контроллере с землёй usb2serial свистка (здесь зелёный). TX на контроллере с RX на свистке (здесь белый) и RX на контроллере с TX на свистке (жёлтый).

Подключаемся по ssh на контроллер, выставляем скорость последовательного порта 1Мб/сек и выводим содержимое порта:

root@trik-e44067:~# stty -F /dev/ttyS0 1000000 raw
root@trik-e44067:~# cat /dev/ttyS0

На десктопе также выставляем скорость и пишем что-нибудь в порт, эта надпись должна появиться на контроллере:

~$ stty -F /dev/ttyUSB0 1000000 raw
~$ echo "foo bar" >/dev/ttyUSB0

Проверка связи, 5В

Если нам нужно работать с устройствами, требующими пятивольтовой логики, то можно использовать стандартный преобразователь уровней. Я переставил джампер на моём usb2serial свистке на 5В, а затем соединил последовательные порты контроллера ТРИК (который по-прежнему работает на 3.3В) и усб свистка через преобразователь на мосфетах bss138:

Dynamixel AX-12a

Итак, первое подключение робосервопривода (кликабельно):

Dynamixel использует полудуплексный протокол, поэтому подключать напрямую последовательный порт не получится. Вкратце, со стороны контроллера ТРИК нам понадобится три управляющих провода: RX, TX и переключатель, который будет говорить, хотим мы получать или отправлять, эрзац-версия RTS/CTS.

Оригинальный мануал предполагает использовать связку двух чипов 74hc04+74hc126:

Вместо этого я использовал один чип 74ls241:

Direction сигнал (зелёный провод) переключает либо RX, либо TX в hi-z состояние. Триковский RX жёлтый, триковский TX белый. Одна сторона (верхняя на фотографии, рыжие провода) макетной платы имеет напряжение 3.3В, вторая 5В (нижняя на фотографии, красные провода). 12В напряжение для сервопривода берутся непосредственно с разветвительной платы. Управляющий провод сервопривода также жёлтого цвета. Серые/чёрные провода - (общая) земля.

Исходный код примера брать здесь. Он предполагает один подключенный сервопривод с идентификатором 1, работающий на скорости 57600 бод.

Внимание, для переключающего сигнала я использовал GPIO ногу контроллера. Самый простой способ управления GPIO через sysfs интерфейс. К сожалению, это очень медленно, время переключения измеряется десятками миллисекунд, в то время как сервопривод отвечает (обычно) через десять микросекунд. Поэтому работа с GPIO должна вестись непосредственно через регистры процессора.

Clone this wiki locally