Для различных задач требуется управлять рукой с клешнёй, содержащий 6 сервоприводов. Решил, что удобно будет сделать отдельный силовой блок, который возьмёт на себя функции управления рукой и с которым можно будет общаться через UART.
Задачи, которые решает блок:
Позволяет подавать питание на выбранные сервоприводы.
Измеряет падение напряжения на сервомоторах.
Удерживает каждый из сервомоторов в заданном положении.
Управляется по UART или через USB с компьютера (виртуальный COM-порт).
Рассмотрим отдельные элементы управляющего устройства
Силовая часть, подающая напряжение на сервоприводы построена на основе полевых транзисторов P75N02LDG. Соответственно их используется 6 штук.
Вот как расположены ножки у транзистора:
Их я расположил на отдельных платках, так как на одну схему у меня всё не умещалось:
Схема позаимствована из статьи "Сенсорная крышка для мусорного ведра своими руками". Вот фрагмент этой схемы:
Есть небольшие отличия. Резистор R4 у меня не на 0.5 Ом, а на 0.75 Ом (на 0.5 не было). Думаю, этот резистор не сильно уменьшает мощность сервоприводов.
В качестве защитного диода Шотки D4 использую 1N5817 (20 V, 1 A).
Конденсатор C3 у меня имеет ёмкость 470 мкФ плюс я добавил ещё керамический конденсатор на 0.1 мкФ.
Некоторые рассуждения на тему мощности устройства и питания
В руке используются сервомоторы MG995. В интернете встречается упоминания, что в заклинившем положении этот сервомотор может потреблять до 2 А. Мои наблюдения это подтверждают. Именно 2A я не видел, но точно было более 1.5А. Так что цифра 2А вполне реальна.
Теоретически все сервомоторы могут дать 2*6=12А. Но это если они заклинят все сразу, что маловероятно.
Я использую блок питания на 6 V, мощностью 5 А. Но предохранитель я поставил на 4A.
Пока по наблюдениям потребляемый ток не превышал 3А. Так что я думаю всё будет нормально работать.
P.S. По моим прикидкам, можно питать блок и напряжением 7.5 Вольт. Хотя сервомоторы рассчитаны на 4.8-7.2 Вольта. Произойдет падение напряжения на резисторе сопротивлением 0.75 Ом. Да ещё падение напряжение из-за амперметра. Так что по моим (возможно неверным подсчётам) на сервомоторе будет даже меньше 7.2 Вольта. Да и вообще в интернете люди пишут, что питают MG995 от 7.5 Вольт и всё нормально.
На корпусе расположен вольтметр и амперметр, предохранитель, разъем питания, USB разъем и прочие выводы.
Виртуальный COM-порт соединён перемычками с UART микроконтроллера. Можно из вытащить и напрямую подавать сигналы на UART. Сейчас стоят три перемычки. Замкнута земля и соединены TX<->RX, RX<->TX.
Красным обведена часть схемы, отвечающая за развязку силовой части схемы и питания МК. Общая идея - стоит диод и большой конденсатор. При падении напряжения МК начинает питать от конденсатора.
Подробнее про это рассказывается в статье "10 советов по использованию микроконтроллеров AVR в системах с двигателями".
Для получения напряжение 5 V используется стабилизатор питания L7805. Радиатора нет, так как МК потребляет очень мало.
Синим обведены элементы, относящиеся к обвязке силовых полевых транзисторов P75N02LDG.
Случайно сделал выводы. Никак не используются.
Выводы для подачи ШИМ сигнала на сервоприводы. Сверху вниз в программе они соответствуют именам: A, B, C, D, E, F.
Кварцевый резонатор на 12 МГц.
Выводы для управления МК через UART. Сверху вниз: RX, TX, (пусто), GND, +5V.
Контакты, подсоединённые к RESET. Никак не используются.
МК настроен на использование кварцевого резонатора. Плюс включена перезагрузка при падении напряжения ниже 2.7V.
Текст программы доступен здесь: https://yadi.sk/i/3siwGaS6cymXi
При старте программа выводит строку [START]. Это позволяет внешней программы узнать, что МК включился или перезагрузился.
Затем программа постоянно измеряет напряжение на резисторах (см. схему) и распечатывает эти данные.
Эту печать можно отключить, послав символ 'd'. Так удобно работать с программой через терминал.
'_' Распечатка внутренних данных для отладочных целей.
'*' Подать напряжение на все сервоприводы. Но они включаются не сразу, а по очереди с задержкой.
'#' Отключить подачу напряжения для всех сервоприводов.
'+' Подать напряжение на сервопривод. За плюсом следует буква от A до F означающая номер сервопривода.
'-' Не подавать напряжение на сервопривод. За минусом следует буква от A до F означающая номер сервопривода.
'=' Установить значение ШИМ. Далее следует буква от A до F означающая номер сервопривода. А затем две цифры. Таким образом диапазон значений от 00 до 99. Пример команды: =B10
В случае внутренних ошибок МК распечатывает соответствующую информацию и прекращает работу.
Communication Parameters: 8 Data, 1 Stop, No Parity