ARDUINO Плата драйвера 8хDC-моторов, управление по I2C ( TWI )

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
В общем, накидал пока такой вариант в kicad, получается не так уж и плохо:
8DCdrive-1.png8DCdrive-2.png
Из PCA9685 (16xPwm Led Controller) управляем сигналами ШИМ на левое и правое плечо полумоста драйвера - "какое надо". 12-и битный ШИМ с допустимым диапазоном частот от 25гц до 2кГц, согласно даташиту на этот контроллер. Не густо, но вполне терпимо, особенно если учесть что на хорошей потребляемой мощности и вращении с малыми оборотами частоту ШИМ полезно снижать, а не растить (дольше период воздействия на обмотки - больше тяга мотора).

Одной PCF8574 управляем направлением вращения (Dir_xx) "туда/обратно", и ещё 2шт для приема сигналов энкодера мотора с прерыванием МК.
Каждая PCF8574 энкодерной части получает одноименные сигналы энкодеров и они генерируют каждая свое прерывание, что должно упростить ПО, работающее сразу с 8-ю моторами.

Программное управление по шине I2C, вполне терпимое:
1. Отключаем ШИМ на моторе, меняем направление вращения сигналом Dir и снова задаем ШИМ мотору в нужную сторону линией "a" или "b"..

Можно добавить ещё одну PCF8574 и разделить управление верхними плечами полу-мостов сделав сигналы Dir_xA и Dir_xB по аналогии, с целью иметь возможность отключая верхние плечи - включать ОБА ШИМ сигнала для активного торможения двигателем (короткозамкнутые обмотки) "периодически" с указанным заполнением ШИМ... нигде не видел решения по регулировке такого режима.. а ведь это д.б. интересным - управляемая сила торможения.

Разьемы выбраны совместимые с Лего EV3, NXT но .. можно поставить любые.

Ещё можно разделить силовую и управляющую земли и воткнуть резисторы для измерения токов драйверов, повесив их на входы АЦП Меги .. их все равно 16. :)

Интересно, надо ? Предлагайте, критикуйте ..

P.S. Да, забыл .. ТТХ :)

Примененные полумосты AO4616 (30в, 7А), но можно и те что на схеме. В этом случае потребляемый ток мотора уменьшается до 5А.
Схема остается работоспособной при питании моторов от 6.5в до 30в VAA. Ток мотора до 5А при питающем 12в - держит, проверено прошлым опытом.
 
Изменено:
  • Лойс +1
Реакции: Shalom

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
8DCdriver-3.png
Ну вот. Как-то так, примерно. Вроде ничего не забыл .. разводить начну, всплывет по-любому. :)

Тут раздельное управление верхними плечами полумостов для реализации режима "управляемое торможение двигателем". Контроль тока решил не делать .. пока не вижу надобности, да и не очень понимаю "где" брать резисторы для съема 1вольта с токов под 7А .. 0.14ома на мощность под 7вт?!? Каков у такого резистора "габарит"? :)
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
Получилось разбросать элементы по плате, пока как-то так:
8DCdriver-4.png
Прикинул токи перезаряда АО4616 напрямую PCA9685 и как-то решил, что надежнее будет воткнуть токоограничительные резисторы в нижние плечи.
Тока перевода ног Dir_xx в "1" у PCF8574 вроде должно хватать на переключение транзистора 2N7002 .. импульс там вроде как вполне приличный.

В итого 2-х стороння плата с монтажем деталек на обоих сторонах платы. 4 мотора с одной стороны и 4 с другой. Компоновку моторных блоков - уложил (не первый раз драйвера паяем), а вот компоновку микросхем управления .. надо будет поиграться. Предварительно.

А ещё .. забыл воткнуть резисторы подтяжки для I2C .. :)

Да, габарит платы всё тот же самый: 88х56мм (7х11 лего дырок)
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
Сложно сказать. Самих драйверов на базе AO4606 4616 сделано около десятка. В теме Ардуино как Лего есть в т.ч. и схемы и по.
В таком варианте - с управлением по I2C пробная плата.
Опыт работы с шиной и PCA9685 тоже есть, так что проблем не вижу.
Если видите ошибки или потенциальные проблемы - пишите, буду благодарен
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,265
944
58
Марий-Эл
Просто странное решение. Драйвером светодиодов управлять двигателями. С другой стороны, а почему бы и нет.
Я интересовался в своё время подобной темой, но на базе специального контроллера. А он по тем временам стоил 5000р.
Да плюс обвес. Выходило на 8000 примерно. Но с другой стороны всё равно дешевле готового устройства стоимостью в 40 000.
 
  • Лойс +1
Реакции: Arhat109

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
Тут выше была иная идея, но .. меня жаба задавила столько ног тратить на моторы. ;)

P.S.
На самом деле, моторов хватило бы и меньше, скажем 6 шт. нормально, 4 как у Лего - однозначно маловато. Но тут с учётом до 12 серводвигателей, наверное можно и даже 4шт., хотя наш опыт тоже подсказывает "маловато будет".
Применение этого драйвера светодиодов позволяет сильно упростить обрамление и даёт 8 моторов .. почему бы и нет?
Кроме этого, появляется крайне заманчивый режим "управляемое активное торможение" .. его нигде нет. А наших предыдущих версиях так и самого режима не было, и его часто не хватало.
И ещё непонятно отсутствие решений по драйверам по шине I2C - вроде бы оно ничему не противоречит, скоростных параметров шины вполне с запасом...

В общем буду пробовать.
 
Изменено:
  • Лойс +1
Реакции: ТехнарьКто

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
Упс. Идея платы моторов в теме про самодельную Мегу.. ошибся. Из нее и выросла эта тема.
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
Н-да .. орешек оказался тверд. Развести плату пока полноценно так и не удалось, несмотря на казалось бы "места - вагон". Фигу! Управление полумостами + энкодеры на моторах .. все это приобретает жутко перекрестное соединение по всей плате .. сегодня убил всю субботу, но так до конца развести сигналы по микросхемам и не удалось. @опа какая-то. :(

Если получится - будет просто шедевр.. ;)
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
Вах .. похоже получается. Осталось залить зоны, которыми досоединить питание +5в и землю .. пока выглядит как-то так:
DC8-v2.png

Итого, по шине I2C можно будет управлять до 8-ю DC моторами, с 12-и битной регулировкой скорости, возможностью управляемого ШИМом (!) торможения якорем мотора с нагрузочными параметрами до 30в х 5(7)А на мотор.

Программно, по шине I2C плата управляется отправкой данных в 5 адресов для:
1 адрес: PC9635PW -- 12-и битный ШИМ контроллер по 2 ШИМ сигнала на мотор (вперед-назад)
2 адреса: 2хPCF8574T -- управление направлением вращения "вперед -назад".
По сути на каждый полумост подается отдельный сигнал управления. Это позволяет наступить на грабли пожечь схему легко при не грамотном управлении, но сильно упростило разводу и дало возможность поиметь режим управляемого торможения якорем.

Ещё 2 адреса на шине I2C занимает пара PCF8574AT, которые могут принимать сигналы энкодеров с моторов. Один принимает "канал А" энкодеров всех моторов, а второй соответственно "канал В". Сигналы прерывания с этих расширителей выведены на интерфейс платы и могут вызывать прерывание Меги. Так что .. энкодер по прерываниям - вполне реально.

Разьемы на моторы - по углам платы, с "обоих сторон" .. между верхними и нижними блоками зарезервировал место под 8шт SMD конденсаторов большой емкости с рабочим напряжением от 35в. К сожалению, нашел только танталовые типоразмер E емкостью на 100мкф .. маловато, однако.

Кажется "получилось" .. ;)
 
  • Красота! +2
Реакции: Shalom

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
вау, получилось. Окончательный вид платы управления 8-ю моторами по шине I2C выглядит так:

8DC-3D.png

Сторона с перетычками адресов I2C..

Оценил нагрузку на микроконтроллер, в случае подключения 8-и моторов EV3 с энкодерами:
Мотор имеет обороты на валу 220rpm при точности энкодера около 1* или 360 отсчетов на оборот .. что дает частоту прерываний на мотор не более 1320 в сек. И, для 8-и моторов, в худшем случае будем иметь около 10560 отсчетов в сек.

Процедура прерывания дожна считать по I2C 2 регистра (каналы А, В) по 2-м адресам = 4 байта пересылки. При скорости 880кГц (тянет, проверено), с округлением посылки до "10бит на байт" получим время считывания (ожидания данных) около 46мксек. Плюсом вход-выход в процедуру около 15 тактов + 100тактов на "вычисления внутри" (за глаза) = 6.25мксек ..
Итого время обработки энкодеров (сразу все 8 оптом) составит не более 60мксек, что даст "100% занятость МК" в 1000/60 около 17кГц.

При частоте прерываний в 10.5кГц получим пиковую нагрузку на проц в районе 63% .. в реальности около 50.. многовато, но вполне терпимо, да и не всегда нужны моторы с энкодерами ..

Для наших "желтых моторов с енкодерами" имеем: мин. редуктор = 27.5, при частоте вала 12500rpm и 8-и моторах с энкодерами по 6* получим пиковую частоту прерываний .. 3,7кГц, что снижает нагрузку на проц практически в 3 раза. ;)

В целом .. "жить можно".

P.S. Сложность разводки платы заключалась в грубых установках: ширина линии 0.3мм, зазор не меньше 0.3мм, сверло переходного отверстия - 0.8мм. Это для того, чтобы плату можно было изготовить дома, методом ЛУТ. Мельче, лично для меня все становится сильно сложней.

P.P.S. Если учесть, что работа с I2C сама по себе возможна на прерываниях, то затраты на чтение можно выкинуть из обработчика, усложнив код .. В этом случае, ожидаемая нагрузка на проц. упадет раз в 5.. ;)
 
Изменено:
  • Лойс +1
Реакции: Shalom

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
Приготовил герберы, проверил. Можно отправлять китайцам на изготовление .. посмотрел, посмотрел и понял что засверливать и пропаивать такую тучу переходных отверстий руками я не готов, явно.
Отправлять буду совместно с платой дисплея и клавиатуры, и возможно дозакажу ещё с пяток плат расширенной SRAM .. уж больно кузяво получилось с этим модулем + SD ридер.

Пока платы не приедут - тема пополняться не будет.
 
  • Лойс +1
Реакции: kostyamat

РыкаВладимир

✩✩✩✩✩✩✩
20 Мар 2020
25
3
Какой смысл в Р-канальных мосфетах? Что мешает в место них поставить N-канальные и открывать их сразу диром (Dir). Не нужны транзисторы для раскачки и резисторные пары.
Жду мосфеты из поднебесной, в планах собрать несколько драйверов для поделок. Практического опыта пока нет , потому не утверждаю а интересуюсь).
 

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
2,004
406
Москва
wan-derer.ru
@РыкаВладимир, полевик открывается напряжением на затворе относительно истока. Значит исток должен сидеть на стабильной шине (земля или питание), а не болтаться в воздухе.
 

РыкаВладимир

✩✩✩✩✩✩✩
20 Мар 2020
25
3
На схеме драйвера мосфеты к которым подходит шим "болтаются". ???
Речь про то, стоит ли использовать полумост или переложить логику на контроллер (плюс один пин для каждого коллекторного двигателя).
 
Изменено:

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
Речь про то, стоит ли использовать полумост или переложить логику на контроллер (плюс один пин для каждого коллекторного двигателя).
Эта схема управляется по I2C от слова "ВСЯ". О каком контроллере Вы хотели сказать? На ней стоит контроллер светодиодного ШИМ (16 выходов, все заняты) и для управления двигателями использованы пара регистров PCF8574 .. ещё пара занята работой с энкодерами моторов, если надо ..
Всё управляется по I2C если речь за конкретно эту схему. :)

Если за обычное управление мотором, то требуется полноценно 3(три) ноги на каждый мотор. Их тут 8шт, итого 24 ноги .. мне показалось "многовато будет" ПОЭТОМУ и сделана эта схема. В ней занято всего .. 2 ноги от МК. :)

Кроме этого, схема позволяет реализовать режим "управляемого торможения", программируя для него ШИМ .. такого режима нет даже в помине нигде.. кмк, полезная фича.

Ну и таки да. Если не использовать полумосты, схема станет значительно сложнее из-за необходимости применения схем управления верхними N-канальными транзисторами. Они есть типовые, но их сюда потребуется много .. 8шт. Размер и цена платы вырастут значительно.
 
Изменено: