Силовая электроника самодельного робота, контроллер питания и Raspberry Pi
Как изготовить не сложный электронный модуль управления питанием для самодельного робота. Схемы контроллера питания для электроники и Raspberry Pi, силовых MOSFET-ключей для управления питанием различных блоков, а также конвертера сигналов для управления двигателями через микросхему L298.
Мои эксперименты и готовые решения. Полезные рекомендации по подбору аккумуляторной батареи, расчеты потребления тока и много другой полезной информации. Постараюсь рассказать все подробно и простым, доступным языком.
В одной из статей я приводил фото простого экспериментального робота, который построен на основе Raspberry Pi. Позже было рассказано как изготовить самодельное шасси для робота, прикрепить двигатели и акустические системы.
Пришло время познакомить вас со схемами питания всей электроники и силовыми модулями для этой конструкции под названием "Zer0".
Содержание:
- Электропитание самодельного робота
- Оценка потребителей тока
- Подбор аккумулятора
- Заряд и подзаряд аккумулятора
- Крепление аккумуляторной батареи к шасси
- Изготовление панели управления питанием
- Схема простого силового ключа на MOSFET-транзисторе
- Контроллер питания, схема на цифровой микросхеме
- Контроллера питания на AVR-микроконтроллере
- Преобразователь сигналов для управления двигателями на основе L298
- Крепление модулей на шасси самодельного робота
- В завершение
Электропитание самодельного робота
Любой робот состоит из связанных между собою механических и электрических частей. Механикой, как правило, управляет электроника, а электроникой может управлять какая-то логическая схема или мини-компьютер.
Чтобы обеспечить надежное питание всей электроники нужно:
- Оценить количество потребляемой модулями энергии;
- Подобрать подходящий источник питания;
- Обеспечить нужные напряжения и токи для разных электронных блоков;
- Правильно все это соединить, для минимизации потерь тока и падений напряжения при транспортировке через проводники;
- Побеспокоиться о электро и пожарной безопасности.
Приведенная ниже информация пригодится при сборке своего робота, также можно взять какие-то отдельные идеи, схемные решения или просто поэкспериментировать.
Оценка потребителей тока
Давайте разберемся с тем какие модули и компоненты в планируемой конструкции будут потреблять ток.
В моем случае, основные потребители электроэнергии это:
- электродвигатели;
- мини-компьютер;
- HD WEB-камера;
- звуковой усилитель на микросхеме TDA1517.
Измеряем и оцениваем потребление Raspberry Pi
Как узнать мощность, потребляемую мини-компьютером Raspberry Pi в состоянии бездействия и при полной загрузке микропроцессора? - можно использовать Амперметр или мультиметр для измерения тока, а потом выполнить не сложные расчеты.
В примере использован одноплатный компьютер Raspberry Pi 2B. Для измерения потребляемого им тока я подключил плату к аккумулятору на 6В (при полном заряде - 7,3В) через импульсный понижающий DC-DC преобразователь напряжения, настроенный на выдачу +5В.
В разрыв линии питания +6В (от аккумулятора) подключен мультиметр в режиме измерения токов до 10А.
ВНИМАНИЕ! Все расчеты будем выполнять грубо - для приблизительной оценки. Принимаем напряжение батареи равным +7В (почти полностью заряжена).
Рис. 1. Измерение потребляемого платой Raspberry Pi тока в режиме без нагрузки на CPU.
Подключив к малинке USB Wi-Fi адаптер и загрузив операционную систему (ОС) я получил доступ к ее консоли по SSH (Secure SHell) и запустил команду 'top', которая интерактивно показывает используемые ресурсы и процессы.
Это нужно чтобы хоть немного нагрузить беспроводной адаптер, но при этом процессор остался практически без нагрузки (1-3%).
Полученное значение тока - 0.29А.
Теперь не трудно посчитать потребляемую мощность:
P = U * I = 7В * 0.29А = 2.03Вт.
Чтобы узнать какой ток малинка потребляет по линии питания +5В нужно подключить мультиметр (амперметр) в ее разрыв. Но зная потребляемую мощность можно выполнить перерасчет для +5В:
P = 2.03Вт, U = 5В, I = P / U = 2.03Вт / 5В = 0.406А.
Следующий эксперимент - в один из свободных USB-портов была подключена (но не активирована) WEB-камера Logitect C270 HD:
Рис. 2. Какой ток потребляет Raspberry Pi 2B с веб-камерой Logitech C270 HD в холостом режиме.
При питании +7В получаем ток - 0.51А (это 3.57Вт), а по линии +5В ток получится 0.714А.
Как видим, простое подключение веб-камеры добавляет примерно 1.5Вт потребляемой мощности, а при ее активации и использовании значение потребления еще немного возрастет.
Следующий эксперимент по измерению потребляемой мощности - нагрузим микропроцессор (CPU), оперативную память (RAM) и заставим считываться какие-то данные (IO) с карточки Micro-SD.
Для этого стресс-теста под нагрузкой применим программу 'stress', о ней я рассказывал в статье 'как нагрузить все ядра микропроцессора в Линукс'.
Установим stress и запустим на выполнение:
sudo apt-get install stress
stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --hdd 2 --timeout 5m
Описание параметров:
- --cpu 8 - запуск 8-ми работников, нагружающих ядра CPU (выполнение расчетов с помощью функции sqrt);
- --io 4 - запуск четырех работников, выполняющих sync();
- --vm 2 --vm-bytes 128M - запуск двух процессов, каждый из которых будет работать с 128М оперативной памяти (в сумме 256М);
- --hdd 2 - запуск двух процессов, которые будут записывать временные файлы (write) а потом удалять их (unlink);
- --timeout 5m - тест будет длиться 5 минут, после этого программа завершит свою работу.
Рис. 3. Установка и запуск программы stress в Linux консоли малинки.
Результат в нагруженном состоянии:
Рис. 4. Ток, потребляемый Raspberry Pi при параллельной загрузке всех ядер CPU, использовании памяти и записи на SD-карту.
С питанием +7В ток потребления - 0.44А, мощность - 3.08Вт, ток по линии +5В - 0.616А.
В целом, это не много.
В примере был использован компьютер Raspberry Pi 2B - он достаточно экономичен. Старшие модели Raspberry Pi 3B и Raspberry Pi 4 потребляют тока намного больше.
Приблизительно подсчитаем максимальную потребляемую мощность:
- 3.08Вт - с Wi-Fi и полностью загруженными ресрусами системы и CPU;
- 1.5Вт - подключение веб-камеры, при ее активации добавим, например, еще 1Вт;
- 2.5Вт - другие устройства, подключенные по USB (дополнительное потребление 0,5А по линии +5В);
- 1Вт - разная нагрузка на пины GPIO (50мА*3.3В) + питание каких-то датчиков от линии 5В (150мА*5В).
В сумме - 9.08 Ватта.
В разрыв линии питания +7В получим ток примерно 1.297 Ампера. При условии что система будет загружена на полную, а все датчики, модули и адаптеры будут активны - это не много.
Ток, потребляемый электродвигателями
В предыдущей статье я выкладывал рисунок с измерением тока потребления движков:
Рис. 5. Ток, потребляемый от батареи на 6В двумя электродвигателями, подключенными через импульсный преобразователь напряжения.
Поскольку электродвигатели питаются от +24В, то я подключил их через повышающий (Step-Up) DC-DC преобразователь напряжения на основе микросхемы XL6009, выставив на его выходе напряжение +25В.
Ток в холостом режиме при питании двух движков - всего лишь 40мА. При значительной нагрузке и почти полной остановке движков вручную ток возрастает до 80мА.
Потребляемая мощность при максимальной нагрузке:
P = 7В * 0.08А = 0.56Вт!
Это сравнительно очень мало, но нужно учитывать и то что движки здесь достаточно слабые, хотя для неспешных "покатушек" по какому-то помещению их вполне хватит.
Какой-то другой коллекторный электродвигатель вполне способен потреблять при напряжении 5-7В ток более 1-2 Ампер!
Потребление тока другой электроникой
В составе робота еще будет усилитель мощности звуковой частоты (УМЗЧ) с двумя динамиками по 3 Ватта, но питаться он должен от напряжения 12В. Примем его максимально возможную потребляемую мощность из расчета суммы мощности динамиков - 6Вт.
При мощности 6Вт по линии питания +12В мы получим ток 0.5 Ампера (I=P/U=6V/12W).
Из другой электроники будут еще два сервопривода - для позиционирования головы робота. Думаю что их потребляемую мощность можно оценить в 1Вт.
Еще можно добавить какие-то светодиоды для подсветки, фонарик-прожектор - пусть будет еще 0.5Вт.
Суммарное потребление мощности
Подведем приблизительный итог:
- Raspberry Pi 2B - 9.08 Ватта;
- Электродвигатели - 0.56Вт Ватта;
- Звуковой усилитель - 6Вт;
- Сервоприводы, светодиоды - 0.5Вт.
В сумме получается примерно 16,14 Ватта - это максимально возможное значение потребления, когда все устройства включены и работают на полную мощность!
Но такого потребления не будет практически никогда, поскольку в каждый момент времени будут активны, скорее всего, лишь несколько компонентов и то не на полную мощность.
Если все питать от одного шестивольтового аккумулятора, то при его полном заряде (7В) и потребляемой мощности 16,14Вт получаем значение тока - 2.3А, а при напряжении 12В - 1.345А.
Подбор аккумулятора
Питать автономного робота Zer0 я решил от аккумуляторной батареи - соединенных последовательно отдельных аккумуляторных элементов или же от готовой батареи в едином корпусе.
Разбираемся с набором разных напряжений питания
На какое напряжение выбрать аккумулятор для самодельного робота - 3.7В, 6В, а может 12В? - думаю здесь нужно отталкиваться от необходимого набора напряжений, которые будут питать все электронные блоки.
Зная требуемые напряжения понадобится подобрать необходимое количество DC-DC (а может и DC-AC) преобразователей и стабилизаторов напряжения.
DC - расшифровывается как Dicital Current (постоянный ток), а AC - как Alternating Current (переменный ток).
В моем случае нужны следующие напряжения:
+3.3В | +5В | +12В | +25В |
Модули, датчики, подключаемые к малинке. |
Raspberry Pi, сервоприводы, модули и датчики, светодиоды. |
Усилитель звука на TDA1517 |
Моторы |
При выборе основного питающего напряжения можно отталкиваться от максимального значения, которое необходимого для электронных блоков.
Использовав понижающие (Step-Down) и повышающие (Step-Up) DC-DC преобразователи напряжения, выбор можно сменить буквально в противоположную сторону.
Для получения 24В (при полном заряде ~28В) мне не хотелось устанавливать две батареи по 12В, более удобный вариант в моем случае - одна емкая батарея на 12В!
Как быть со всеми нужными напряжениями при основном питании от +12В? - нам помогут платки с DC-DC "магией" внутри:
- +3.3В мы получим с самой малинки, тока оттуда вполне хватит чтобы питать все датчики и разную мелочь;
- +5В получим из +12В использовав один Step-Down DC-DC преобразователь напряжения;
- +25В выкачаем из +12В использовав один Step-Up DC-DC конвертер.
Просто? - вполне, для решения всех задач с питанием нам понадобится всего лишь два преобразователя DC-DC.
Как правило, такие модули выполнены на мощных интегральных микросхемах и при небольших габаритах позволяют получать токи до 3А в нагрузку.
Блочки преобразования напряжений можно собрать с нуля и самому, но это - дополнительные затраты по времени и обойдется в целом немного дороже.
Если интересно поэкспериментировать и изучить работу DC-DC конвертеров напряжения, то этим делом лучше все же заняться как-то отдельно.
Сравнение аккумуляторов
Какого типа аккумулятор (кислотный, Ni-MH, Li-Ion, Li-Po) лучше для самодельного робота? - здесь каждый выбирает по своим вкусам и возможностям, но есть некоторые особенности, на которые стоит обратить свое внимание.
Нужно понимать что для использования Li-Ion и Li-Po аккумуляторов/батарей понадобится хороший контроллер заряда/разряда и балансировщик.
Также придется продумать о возможности параллельной подзарядки аккумуляторов в процессе их работы, возможно понадобится покупка или создание какого-то "умного" модуля питания и зарядки от внешней сети.
Плюсы использования Li-Ion, Li-Po:
- Большие токи, отдаваемые в нагрузку;
- Большая энергоемкость при малом весе и габаритах;
- Быстро заряжаются (за несколько часов).
Минусы Li-Ion, Li-Po:
- Необходимость в дополнительных контроллерах заряда/разряда;
- Боится низких температур;
- Сравнительно высокая цена;
- Есть вероятность опасного возгорания при повреждении или внутреннем замыкании (например брак производства).
Со свинцово-кислотными (далее СКБ) и Ni-MH аккумуляторами дела обстоят немного проще - они также выполнены в герметичных и безопасных корпусах, но более лояльны к условиям заряда/разряда.
СКБ - это батарея из кислотно-свинцовых химических элементов в герметично закрытом корпусе.
Плюсы использования свинцово-кислотных аккумуляторов:
- Достаточные токи, отдаваемые в нагрузку;
- Неплохая энергоемкость;
- Не сложные схемы заряда, простота в обслуживании;
- Безопасность при эксплуатации и авариях;
- Низкая себестоимость.
Минусы СКБ:
- Сравнительно большой вес и габариты;
- Длительные циклы заряда (8-24 часа);
- Подвержены "эффекту памяти" (об этом будет рассказано в следующем разделе).
Значительный вес и габариты таких аккумуляторов могут быть критичными при использования в каком-то устройстве и перечеркнуть практически все плюсы этого источника питания.
Ni-MH аккумуляторы - имеют хорошую энергоемкость и при этом сравнительно меньший вес чем СКБ, но стоят они дороже.
Из недостатков Ni-MH можно еще отметить: наличие "эффекта памяти", а также высокий показатель саморазряда (например, остаток энергии после года хранения может составить 50%), но эта проблема частично устранена в элементах Eneloop торговой марки Sanyo.
Все типы аккумуляторов хороши, в зависимости от того где их использовать и при каких условиях.
Для питания своего робота напряжением +12В (+14 при полном заряде батареи) я отметил несколько вариантов:
- Ni-MH - 10 элементов по 1.2В (~40$), (Eneloop ~70$)
- Li-Ion - 4 емких элемента по 3.7В (~40$) + контроллер (10$)
- СКБ - одна на 12В (15$).
На данном этапе, я решил пока что выбрать свинцово-кислотный аккумулятор. Основные причины такого выбора - экономия денег и простота в использовании, пришлось "закрыть глаза" на относительно большой вес батареи.
Аккумуляторы данного типа часто можно встретить с системах бесперебойного питания (UPS, Uninterrupted Power Supply) различных устройств, детских игрушках и других случаях где нужно простое и надежное питание.
Они просты в обслуживании, очень доступны по цене и прекрасно подходят для различных экспериментов.
О энергоемкости аккумулятора
От энергетической емкости аккумулятора напрямую зависит длительность автономной работы устройства. Емкость батарей часто указывают а Ампер-Часах (А*Ч или AH, Amper-Hour) или миллиАмпер-Часах (mA*H или mAH, milliAmper-Hour).
1 Ампер = 1000 миллиАмпер. 1 A*H = 1000 mA*H.
1 Ампер*Час (1AH) - означает, что при потребляемом от батареи токе величиной в 1 Ампер, ее заряд достигнет низкого значения примерно после 1-го часа работы в таком режиме, батарея разрядится до значения когда ее уже нужно будет заряжать.
Низкое значение разряда батареи - это не ноль (0) Вольт, а например 9,6В (для аккумулятора на 12В, при полном заряде 13,7В)!
В процессе эксплуатации аккумуляторной батареи очень важно контролировать напряжение на ней и не допускать его снижения ниже рекомендуемого производителем значения.
В самом начале для робота были приобретены два свинцово-кислотных аккумулятора - каждый на напряжение 6В и энергоемкость 6А*Ч. Вес одного - 750 грамм, в сумме 1500 грамм!
Насчет производителя аккумуляторов - взял те, которые были на тот момент в магазине в наличии. Работаю с этими аккумуляторами уже достаточно долго (питаю экспериментальные схемы, микро-сверлилку для плат и т.п.) - показали себя не плохо (не реклама).
Рис. 6. Свинцово-кислотные аккумуляторные батареи MT660 на 6В и 6А*Ч.
Как для небольшого робота, вес батарей в 1.5кг - это многовато. Поэтому была куплена одна длинная батарея - на 12В, 2.3А*Ч (вес 970г).
Рис. 7. Свинцово-кислотный аккумулятор MT1223 на 12В и 2.3А*Ч.
На сколько часов использования робота хватит такого аккумулятора? - давайте посчитаем!
Максимально возможная потребляемую мощность при расчетах получилась 16,14Вт, что при напряжении 12В равно току 1.345А. Ёмкость нашей батареи - 2.3А*Ч.
Считаем время работы от аккумулятора при полной максимальной нагрузке:
t = 2.3А*Ч / 1.345А = 1.71 Часа.
Почти 2 часа при грубом подсчете и полной нагрузке - вполне не плохо. При меньшем токе потребления - большее время работы.
Более точные параметры аккумуляторов (напряжение заряда/разряда, длительность разряда при какой-то мощности нагрузки и т.п.) можно узнать из официального сайта производителя или даташита на него.
Заряд и подзаряд аккумулятора
После покупки аккумулятор заряжен примерно на половину емкости, поэтому перед использованием его нужно зарядить.
Перед тем как использовать аккумулятор нужно найти и изучить документацию от производителя по нему. Более правильно это сделать еще перед покупкой - будете знать возможности батареи и условия необходимые для ее надежной и длительной работы.
Параметра моего аккумулятора MT1223 (из официального PDF):
- Тип: герметичный свинцово-кислотный, VRLA/SLA - AGM;
- Номинальная емкость: 2.3Ah;
- Максимальный разрядный ток: 23A;
- Напряжение постоянного подзаряда: 13.7V..13.9V (при +25°С);
- Максимальный ток заряда: 0.69A;
- Напряжение выравнивающего и циклического заряда: 14.6V..14.8V (при +25°С);
- Напряжение окончания разряда: 10.5В (при Iн<0.46A), 10.2В (2.3A>Iн>0.46A), 9.6В (Iн=2.3A);
- Рабочие температуры: -20°С..+60°С (разряд и хранение), 0°С..+50°С (заряд).
VRLA (Valve-Regulated Lead–Acid) - тип необслуживаемой батареи в полностью герметическом корпусе.
AGM (Absorbent Glass Mat) - технология производства свинцово-кислотных аккумуляторов, при которой вместо жидкого электролита используется абсорбированный, им пропитан пористый заполнитель каждой из ячеек. Этот пористый материал (стекловолокно) заполнен не полностью, свободные микропоры используются для рециркуляции газов, выделяемых в процессе хим-реакций.
Преимущества аккумуляторов AGM в сравнении с классическими свинцово-кислотными:
- устойчивы к вибрациям;
- обладают низким саморазрядом;
- могут быть установлены в любом положении;
- быстрее заряжаются;
- полностью герметичны и более безопасны/экологичны.
От количества циклов заряда-разряда, а также глубины разряда, температуры эксплуатации и напряжений заряд/разряд будет зависеть продолжительность службы аккумулятора.
В даташите на мою батарею приведены следующие рекомендации:
- Каждый месяц делать осмотр и проверять напряжение батареи;
- Каждые 3 месяца выполнять один раз выравнивающий заряд (разрядить 100% емкости, заряжать 24 часа током 0,3СА до 14.7В);
- Батареи, которые хранятся (при температуре 25°С) нужно заряжать не реже одного раза в пол года.
Думаю вы обратили внимание на выражение "заряжать 24 часа током 0,3СА до 14.7В", а именно на "0,3СА".
Буквой "C" здесь обозначена емкость (Capacity) батареи, соответственно получается: заряжать током 0.3С=0.3*2.3А*Ч=0.69А - именно это значение указано в документации как максимальный ток заряда.
Надписями 0.1C, 0.5C, 1C, 2C, 15C, 20C и т.п. часто обозначают максимальные зарядные и разрядные (в том числе кратковременные) токи, зависящие от емкости рассматриваемого в контексте аккумулятора.
Если нет документации или не знаете каким током заряжать аккумулятор - возьмите значение 0.1С (1/10 емкости).
Это значение тока безопасно для заряда практически любого аккумулятора:
- литиевого - Li-ion;
- литий-полимерного - Li-Pol;
- никелевого - Ni-MH;
- никель-кадмиевого - NiCd;
- и т.п.
Правда процесс заряда в таком режиме займет некоторое время - желательно ~10 часов.
Например, ток 0.1С для аккумулятора с емкостью 2.3А*Ч: I = 0.1*2.3=0.23A.
Пока что, в своей экспериментальной конструкции, я заряжаю аккумулятор самым простым и доступным способом: блок питания с регулировкой напряжения + амперметр.
Рис. 8. Заряд аккумуляторной батареи на 12В с помощью блока питания с регулировкой напряжения и амперметра.
Рис. 9. Принципиальная схема подключения аккумуляторной батареи для заряда от блока питания с регулируемым напряжением.
Диод D1 нужен для предотвращения протекания обратного тока - с батареи в блок питания, когда последний будет выключен или его напряжение на выходе будет ниже напряжения батареи. Используемый мною диод Шотки - КД213.
Алгоритм заряда такой схемой (пример для моей батареи):
- Отключаем батарею, включаем блок питания, выставляем напряжение 9-10В;
- Подключаем батарею, медленно поднимаем напряжение, следим чтобы ток заряда не превысил рекомендуемый производителем порог (0,69А), можно придерживаться например значения 300-400мА;
- По мере заряда батареи ток в цепи будет снижаться - добавляем вольтаж с блока питания, поднимая тем самым и ток до нужного значения;
- Наблюдаем за процессом заряда, напряжение с блока питания не должно превышать 14.6В (рекомендуемое значение для циклического заряда);
- Примерно после 8-12 часов процесс заряда можно считать завершенным.
Если кратко: придерживаемся тока заряда 0.3-0.4А, заряжаем батарею до напряжения 14.6В на протяжении 12 часов.
Батарею можно будет заряжать параллельно с питанием робота, а также держать ее в режиме постоянной подзарядки (как UPS) - до напряжения 13.7В.
Для работы в таком режиме блок питания должен быть рассчитан на обеспечение достаточного тока: ток потребляемый роботом + ток заряда для батареи.
Выше было упомянуто что свинцово-кислотный аккумулятор подвержен так называемому "эффекту памяти".
Что такое аккумуляторный "эффект памяти"? - это особенность, спровоцированная не полными циклами разряда и химическими процессами внутри аккумулятора, что приводит к замедлению отдачи электроэнергии, некоторому снижению энергоемкости.
Кроме свинцово-кислотных и Ni-MH аккумуляторов эффекту памяти также подвержены Ni-Cd, а вот у Li-Ion и Li-Po он отсутствует - там происходят совсем другие химические процессы.
Как бороться с "эффектом памяти" у аккумуляторов? - периодично выполнять их "тренировку", по сути это несколько последовательных циклов: полный разряд - полный заряд.
В процессе тренировки аккумулятора химический состав его пластин стабилизируется, энергоемкость восстанавливается до номинального значения.
Тренировать аккумуляторы можно с помощью разряда какой-то нагрузкой (например мощные резисторы) и последующего заряда (блоком питания). Более удобно для этой цели будет приобрести специализированное зарядное устройство, которое умеет выполнять эту процедуру в автоматическом режиме.
Крепление аккумуляторной батареи к шасси
Итак, батарея выбрана и приобретена, теперь разберемся с ее креплением на шасси будущего робота.
Рис. 10. Шасси робота, аккумулятор, компьютер, веб-камера и различные крепежные элементы.
Аккумулятор достаточно длинный, чтобы равномерно распределить его вес по шасси - разместил по центру, вдоль деревянной рамы. По бокам будут размещены: силовые модули, компьютер, датчики и все остальное.
Поставил аккумулятор на шасси и обрисовал его контур по периметру на деревянной основе.
Поскольку батарея весит и так не мало, то хочется чтобы ее крепление практически не повлияло на общий вес конструкции, поэтому вариант с изготовлением прижимных пластин из металла я откинул, да и смотреться будет как-то не очень с открытым корпусом.
Решил сделать так:
- Выфрезеровать небольшие канавки в деревянной основе под ножки аккумулятора;
- "Привязать" аккумулятор к деревянной основе ремешком из эластичной ткани;
- Для крепления ремешка изготовить специальные держатели с шайбами;
- С одной стороны аккумулятора - все привязано статически, с другой - сделать растяжки с винтами.
Вот все детали для данного замысла:
Рис. 11. Детали для будущего крепления аккумуляторной батареи к шасси робота.
Сам ремешок - от какой-то флешки или бейджика, ткань сильная и немного тянется.
К шайбам будет привязан плоский ремешок, поэтому их острые края снаружи и внутри были немного закруглены с помощью надфиля. Из металлических пластинок были отрезаны кусочки достаточной длины. С одной из сторон они прикрутятся шурупами к шасси, а с другой - будут держать шайбы.
Рис. 12. Металлические пластины с закрепленными шайбами.
С одной из сторон аккумулятора две пластинки с шайбами прикручены к шасси статически:
Рис. 13. Прикрученные к шасси металлические пластины с шайбами, на одной из сторон аккумулятора.
С противоположной стороны аккумулятора - прикручены пластинки в виде буквы Г, вверху которой будет просверлено отверстие. С помощью винта и гайки к такой пластине будет притянута ответная ей вторая пластинка с шайбой.
Получится простейший механизм для натяжки ремешка из ткани, аккумулятор будет держаться очень надежно!
Рис. 14. Механизм натяжки ремешков для крепления батареи.
Четыре крепежные пластины били прикручены к деревянному шасси с помощью шурупов-саморезов.
Для более легкого завинчивания в дерево шурупов-саморезов - в точке их расположения можно предварительно просверлить отверстия, использовав для этого сверло в 1.5-2 раза тоньше чем сам шуруп.
Рис. 15. Смонтированные на шасси элементы для крепления батареи питания самодельного робота.
Теперь пришло время закрепить ремешок: сперва привязываем один из его концов к кольцам с уже закрепленными к шасси пластинами, а потом отмеряем необходимую длину (с запасом для растяжки с помощью механизма) и привязываем к кольцам с пластинами, которые являются ответными частями растяжного механизма.
Ремешок можно привязать к шайбе с помощью нити, обмотав ее вокруг соединения. Также, для надежности, место соединения можно еще прошить несколько раз с помощью нити и иголки.
Рис. 16. Самодельный узел для крепления батареи робота к шасси готов.
Осталось установить батарею на шасси и с помощью натяжных винтов надежно ее притянуть ремешками.
Рис. 17. Аккумуляторная батарея на 12В надежно установлена на шасси самодельной робоплатформы.
Изготовление панели управления питанием
Панель питания моего робота - это такой себе пульт управления и сервисного обслуживания, с помощью которого можно:
- Включить и выключить Zer0;
- Подать какой-то запрограммированный сигнал (одна кнопка);
- Установить или заменить предохранители цепей питания;
- Подключить к батарее внешнее зарядное устройство;
- Запитать от батареи робота какое-то внешнее устройство на +12В.
Для изготовления этой панельки был найден кусочек толстого алюминиевого листа, с размерами 50х65мм (примерно 50мм имеет в ширину свободное пространство от аккумулятора до края шасси).
С одной из сторон пластины (по длине 65мм) полоска шириной 10-13мм была загнута на 90° - с ее помощью панелька будет крепиться к шасси. Для этой цели удобно применить металлические тиски и молоточек. Чтобы при зажимании в тиски на пластине из алюминия не осталось вмятин - обложил ее по бокам брусочками из дерева.
Элементы управления и взаимодействия, что будут установлены на панель питания:
- Механический выключатель под ключик, как в старых персональных компьютерах IBM PC (блокировка включения);
- Два зажима под проводники, красного и черного цветов (зарядка батареи, питание внешних устройств);
- Два держателя под плавкие предохранители (безопасность);
- Две миниатюрные кнопки - черная и желтая (включение и выключение питания);
- Одна большая кнопка желтого цвета (будет запрограммирована под какие-то действия);
- Двухцветный желто-зеленый светодиод (индикатор питания и ждущего режима).
Рис. 18. Заготовка под панель питания робота, некоторые элементы управления.
Поэкспериментировав с расположением всех компонентов на пластине, был найден оптимальный вариант. Позже будет небольшая реконфигурация, поскольку планируется еще две миниатюрные кнопки и светодиод.
Рис. 19. Планировка панели управления питанием, подбор расположения кнопки, выключателя, предохранителей, зажимов.
С помощью иголки были намечены примерные центры осей всех элементов. Использовав штангенциркуль измерил диаметры всех деталей.
Линейкой и иголкой была размечена ровная и симметричная сетка из центров, а игольчатым циркулем - намечены контуры отверстий для высверливания.
Рис. 20. Разметка расположения элементов управления на панели питания робота.
Дрель со сверлами, крупнозернистый напильник и тиски - инструменты, которыми выполнена работа по сверлению и подгонке отверстий в пластине из алюминия.
Рис. 21. Сверление и подгонка отверстий для крепления элементов управления.
Металлическая основа панельки была прикручена к деревянному шасси мощными шурупами, такие можно извлечь из компьютерного блока питания где ими крепится вентилятор.
Рис. 22. Основа панели управления прикручена к шасси робота мощными шурупами.
Все кнопки, выключатель, зажимы и предохранители прикручены к панельке с применением идущих вместе с ними гаек и шайб. Для фиксации светодиода в отверстии панели управления применена капелька расплавленного силиконового клея.
Рис. 23. Готовая и закрепленная панель управления питанием для DIY-робота.
Схема простого силового ключа на MOSFET-транзисторе
Для подачи питания на разные устройства и весь робот в целом нужен какой-то силовой ключ - выключатель, управляемый слаботоковым сигналом.
Самое простое что приходит на ум - это механическое или герконовое реле.
Плюсы применения электромагнитного реле:
- Простота подключения;
- Дешевизна решения.
Минусы:
- Дополнительное потребление тока (например 50мА при +5В);
- Шум, издаваемый механикой в процессе переключения;
- Относительно низкое быстродействие;
- Изнашиваемость механики (контактов).
Казалось бы просто, не хочется тратить ток на удерживание контактов реле в замкнутом состоянии, а также шум...а если таких реле будет 5-10.
Смотрел я в сторону мощных оптронов и твердотельных реле, но потом решил использовать более дешевый и достаточно эффективный вариант - собрать силовой ключ на мощном MOSFET-транзисторе.
Плюсы такого решения:
- Отсутствие шума;
- Коммутация достаточно мощных нагрузок (можно запараллелить несколько MOSFET);
- Отсутствие большой нагрузки для GPIO/IO управляющего устройства, безопасность.
Минусы:
- Небольшие потери тока на самом ключевом транзисторе.
Такое электронное реле можно будет применить для управления питанием: электродвигателей, цифровой логики, потребляющих некоторую мощность датчиков (например MQ-135) и даже всей электроники в целом.
Рис. 24. Схема мощного силового ключа (электронного реле) на MOSFET-транзисторе, управляемого с AVR-микроконтроллера или Raspberry Pi.
В основе показанного на рисунке модуля лежит P-канальный (P-Channel) MOSFET (Metal-Oxide-Semiconductor Field Effect Transistor) транзистор - Q1. Для управления им применен второй, но уже кремниевый и маломощный транзистор - Q2.
При появлении на выводе GPIO высокого уровня напряжения (+3.3В) транзистор Q2 откроется. Нулевое напряжение с него, через резистор R2, поступит на затвор G(Gate) полевого транзистора Q2, который также теперь откроется - ток потечет с истока S(Source) на сток D(Drain) и двигатель M1 заработает.
Сигнал управления на вход IN такого ключа можно подавать не только с Raspberry Pi, но и с AVR-микроконтроллера, какой-то цифровой логики или даже маломощного микро-выключателя - ток там будет очень небольшой.
Детали:
- Q1 - IRF9610 в корпусе TO-220 (-200V, -1.8A);
- Q2 - 2N2222 в корпусе TO-92;
- R1-R3 - резисторы мощностью 0,125Вт и выше.
Рис. 25. Схема расположения выводов на корпусах транзисторов IRF9610 и 2N2222.
Для быстрой сборки таких модулей в количестве была разработана миниатюрная печатная плата. После изготовления она не нуждается в отдельном креплении, поскольку закрепить модуль можно к корпусу силового транзистора Q1.
При коммутации значительных нагрузок этот транзистор желательно установить на радиатор.
Рис. 26. Силовой ключ на MOSFET-транзисторе - печатная плата и расположение деталей на ней.
В моем самодельном роботе будет использоваться три таких внешних модуля. Они будут включать и выключать питание следующей электроники:
- Датчик газов MQ-135 (потребляет ~150мА при +5В);
- HC-Sr501 (~60мА при +5В);
- Маленький прожектор из шести ярких светодиодов (~50-100мА при +5В).
Все эти устройства, когда они не используются, будут отключаться для экономии электроэнергии в батарее.
Ранее я уже подробно описывал процесс изготовления самодельной печатной платы методом ЛУТ. В данном случае был выбран тонкий стеклотекстолит, чтобы вырезать заготовки из него удалось обойтись обычными советскими ножницами.
Трафареты для плат были распечатаны на листике какого-то банковского буклета.
Рис. 27. Заготовки для печатной платы силового модуля и распечатанные трафареты.
Тонер перенесся на медь отлично, травление плат заняло не много времени, сверление отверстий в прочем тоже.
Рис. 28. Готовые печатные платки для сборки силовых ключей на мощных полевых транзисторах.
Готовые модули в сборе:
Рис. 29. Самодельные модули с силовыми MOSFET ключами для управления питанием различных устройств через GPIO/IO.
Контроллер питания, схема на цифровой микросхеме
Контроллер питания - это небольшая электронная схема, которая позволит управлять подачей напряжения питания с батареи на всю электронику робота - на модули, датчики, компьютер Raspberry Pi и т.п.
Простое включение и выключение с помощью переключателя здесь не подойдет, поскольку в составе робота присутствует компьютер Raspberry Pi (малинка), пропадание питания на нем без предварительной подготовки может повредить как данные на SD-карте, так и сам компьютер!
Прежде чем обесточить всю конструкцию нужно корректно завершить работу малинки и на эту процедуру может потребоваться некоторое время (например 20-30 секунд).
Сперва решил попробовать сконструировать несложный контроллер питания на цифровой логике, который обеспечит:
- Управление используя две маломощные кнопки
- Ждущий режим и индикация состояния
- Задержка по времени перед отключением питания всей электроники.
На макетной панели была составлена экспериментальная схема подобного устройства.
Для реализации понадобится генератор импульсов (мигание светодиодом ждущего режима), триггер управляемый двумя кнопками и небольшое реле времени.
Управляемым шлюзом для подачи питания послужит более мощный вариант силового ключа, того что был представлен в предыдущем разделе.
Получилась следующая принципиальная схема контроллера питания:
Рис. 30. Принципиальная схема контроллера питания для робота на основе микросхемы с двумя D-триггерами.
Устройство построено на основе микросхемы CD4013 (4013 или К561ТМ2), которая содержит в себе два двухтактных D-триггера. Элементы микросхемы показаны на схеме как:
- U2A - первый триггер;
- U2B - второй триггер;
- U2C - питание микросхемы.
Весь контроллер и управляемая им нагрузка (J2 и J3) питается батареи на +12В (J4 и J5), для питания микросхемы применен интегральный стабилизатор напряжения на +5В (L7805).
Оба элемента U2A и U2B включены как RS-триггеры (от англ. Reset и Set) С установкой низкого уровня на выходах Q по умолчанию (на входе D - лог. 0, он подключен к общему).
На триггере U2A собран переключатель состояний, управляемый двумя входами:
- первый (6) - подключается к выходу GPIO малинки или другого контроллера (сигнал выключения питания, OFF);
- второй (4) - к кнопке (сигнал включения питания, ON).
Конденсатор С3 часто можно встретить в логике с кнопками для подавления эффекта "дребезга контактов", в данной схеме на основе RS-триггера эту деталь можно исключить.
Для автоматической установки высокого уровня на выходе 2, в момент подачи питания на схему, был установлен конденсатор C6.
К прямому (1) и инверсионному (2) выходам U2A подключены половинки двухцветного светодиода:
- желтый светодиод - для индикации ждущего режима;
- зеленый - светится если питание на нагрузку было подано.
На триггере U2B собран генератор импульсов, частоту и скважность сигналов на его выходе можно установить с помощью емкостей C4 и C5.
Выход генератора (12) через резистор R9 подключен к желтой половинке светодиода D4, также некоторый ток будет течь через светодиод с выхода (2) переключающего триггера через резистор R5.
Таким образом, при включении схемы этот светодиод будет менять уровень своего свечения (помигивать) и тем самым отображая состояние ждущего режима.
На транзисторах Q1 и Q2 собран небольшой усилитель, на основе которого вместе с конденсатором C7 реализовано реле задержки по времени.
Транзисторы Q3 и Q4 - это мощный силовой ключ для коммутации нагрузки.
После подачи питания на схему:
- На выходе 2 U2A - высокий уровень, ток течет через резисторы R5 и R9 на желтую половинку светодиода D4;
- Генератор. собранный на U2B начинает работать, импульсы с выхода 12 через резистор R9 поступают на желтую половинку светодиода D4;
- На выходе 1 U2A - низкий уровень, зеленая половинка D4 не светится;
- Конденсатор C7 разряжен, транзисторы Q1 и Q2 закрыты, также закрыты Q3 и Q4 - нагрузка обесточена.
После нажатия на кнопку SW1:
- На выходе 2 U2A - низкий уровень, ток (импульсы) с генератора на основе U2B утекает через резистор R5, желтая часть D4 перестает мигать;
- На выходе 1 U2A - устанавливается высокий уровень, зеленая половинка D4 начинает светится;
- Напряжение +5В с выхода 1 U2A поступает через D3 и R10 на конденсатор C7 и быстро его заряжает;
- Достигнув достаточного уровня заряда на C7, напряжение через стабилитрон D5 откроет транзисторы Q1 и Q2, вслед за ними откроются полевые транзисторы Q3 и Q4, на нагрузку поступит напряжение 12В.
Теперь, после подачи высокого уровня на J1 (сигнал выключения):
- Триггер U2A переключится, на выходе 1 будет 0В, а на выходе 2 - 5В. Зеленая часть D4 погаснет, а желтая - начнет снова мигать
- Конденсатор C7 начнет разряжаться через резистор R11.
- Когда напряжение на стабилитроне D5 упадет ниже заданного им порога, то транзисторы Q1 и Q2, а также Q3 и Q4 закроются, нагрузка будет отключена от батареи.
Таким образом, в момент подачи сигнала на выключение, на нагрузке еще некоторое время будет присутствовать напряжение питания. Длительность этого времени должно быть достаточной (подбор номиналов C7 и R11) чтобы надежно завершить работу компьютера Raspberry Pi.
Эта схема была смоделирована и отлажена на макетной панели:
Рис. 31. Моделирование и отладка схемы контроллера питания на макетной панели.
Ниже вы можете увидеть видео с демонстрацией работы этой схемы. Для подачи сигнала выключения использована кнопка, в качестве нагрузки (для индикации) - два красных светодиода.
Убедившись что такая схема работает думал уже планировать печатную плату, но поразмышляв немного решил также попробовать реализовать другой, более гибкий и современный вариант - на микроконтроллере.
Контроллер питания на AVR-микроконтроллере
Сперва на кандидатуру микроконтроллера у меня претендовал чип ATtiny13 в корпусе DIP-8. Но поскольку решил в контроллер питания еще интегрировать схему с автоматическим отключением питания драйвера электродвигателей, то пришлось использовать МК с дополнительными пинами.
Для построения схемы был выбран AVR микроконтроллер ATtiny2313 в корпусе DIP-20.
Принцип управления питанием нагрузки здесь тот же самый что и в схеме на основе логической микросхемы. Дополнительно реализована возможность отключать питание модуля управления двигателями, после некоторого времени его бездействия.
Схема контроллера питания
Рис. 32. Схема контроллера питания на AVR ATtiny2313 для робота с Raspberry Pi.
Назначение выводов:
- P1 - питание от батареи (+12В);
- P2 - питание от батареи (GND);
- P3 - MISO (интерфейс программирования ISP-6);
- P4 - SCL (ISP-6);
- P5 - RESET (ISP-6);
- P6 - VCC +5V (ISP-6);
- P7 - SDA (ISP-6);
- P8 - GND (ISP-6);
- P9 - сигнал "Power OFF" c пина GPIO Raspberry Pi;
- P10 - GND;
- P11 - сигнал с входа "Enable" 1-го канала модуля L298;
- P12 - сигнал с входа "Enable" 2-го канала модуля L298;
- P13 - питание на все устройства робота (+12V);
- P14 - питание повышающего DC-DC преобразователя для модуля L298.
На микросхеме 7805 собран стабилизатор напряжения +5В для питания микроконтроллера (МК) ATtiny2313.
Из транзисторов Q1-Q3 составлен мощный электронный ключ, управляемый с порта PD4 МК и способный выдержать токи более 3А. Через этот ключ будет питаться вся основная электроника робота, в том числе и компьютер Raspberry Pi.
Выводы P3-P8 модуля нужны для подключения программатора к МК, что позволит сменить алгоритм работы программы, задать новое время задержки выключения и т.п. без перепайки каких-либо компонентов.
Двухцветный светодиод подключен к портам PB0 и PB1 микроконтроллера, кнопка включения питания - к порту PD2, а вывод для подачи сигнала отключения питания (с GPIO малинки) - к PD3.
На транзисторах Q4 и Q5 собран еще один электронный ключ, управляемый с порта PD6 МК. Этот силовой элемент будет управлять питанием +12В, которое пойдет на повышающий DC-DC преобразователь напряжения.
Напряжение +25В, полученное с выхода этого DC-DC преобразователя, поступит на цепи питания электродвигателями в модуле на основе микросхемы L298.
У L298 и модуля на ее основе есть два специальных входа - EN_A и EN_B (Enable_A, Enable_B). Подача высокого уровня сигнала на эти входы включает выходные силовые каскады управления электродвигателями, которые собраны внутри микросхемы L298.
Сигнал на эти выводы в моем роботе будет подаваться с Raspberry Pi. Если эти сигналы формировать с применением широтно-импульсной модуляции (PWM), то можно будет управлять скоростью вращения движков.
Когда робот не перемещается некоторое время (на EN_A и EN_B не было сигналов) - МК будет обесточивать схему питания с повышающим DC-DC преобразователем напряжения.
Когда на EN_A/EN_B снова появится сигнал - питание опять поступит на движки и будет там несколько секунд, начиная со времени последней активности.
Получится некоторая экономия электроэнергии.
Возможно кому-то пригодится только сам контроллер питания, без силового ключа для управления питанием движков - в таком случае из схемы можно исключить следующие компоненты:
- Q4, Q5;
- R6, R7, R8, R11, R13;
- D2, D3.
Печатная плата
Печатная плата разрабатывалась в той же программе что и принципиальная схема - в KiCad.
Рис. 33. Размещение деталей на печатной плате для контроллера питания робота с Raspberry Pi, применен МК ATtiny2313.
Рис. 34. Трафарет печатной платы контроллера питания на основе ATtiny2313 для робота (масштаб 200%).
Размеры платы: 51 х 55 (мм).
Силовые мощные полевые транзисторы были установлены на небольшой радиатор из алюминия, я извлек его из нерабочего импульсного блока питания стандарта ATX (для компьютера).
Подкладки транзисторов должны быть изолированы друг от друга! Для этого я применил шайбы с кусочками кембриков внутри, а также резиновые термопрокладки (изъятые из платы БП ATX).
Рис. 35. Изоляция и крепление подкладок мощных транзисторов на общий алюминиевый радиатор.
Рис. 36. Готовый модуль управления питанием для самодельного робота на основе Raspberry Pi.
Программа и прошивка для МК
Программа управления модулем питания для МК ATtiny2313 очень проста, в ней разберется даже тот кто только начинает изучать AVR-микроконтроллеры.
/* Контроллер питания на ATtiny2313 для самодельного робота на Raspberry Pi
* https://ph0en1x.net
*/
#define F_CPU 1000000U // 8000000/8=1000000 Hz internal RC-generator
#include <avr/io.h>
#include <util/delay.h>
#define LED_GREEN_ON PORTB |= (1 << PB0)
#define LED_GREEN_OFF PORTB &= ~(1 << PB0)
#define LED_YELLOW_ON PORTB |= (1 << PB1)
#define LED_YELLOW_OFF PORTB &= ~(1 << PB1)
#define POWER_ON_BUTTON bit_is_clear(PIND, PD2)
#define POWER_OFF_SIGNAL bit_is_set(PIND, PD3)
#define POWER_KEY_ON PORTD |= (1 << PD4)
#define POWER_KEY_OFF PORTD &= ~(1 << PD4)
#define DCDC_POWER_KEY_ON PORTD |= (1 << PD6)
#define DCDC_POWER_KEY_OFF PORTD &= ~(1 << PD6)
#define DCDC_POWER_ON_SIGNAL bit_is_set(PIND, PD5)
void main(void) {
int standby = 1;
int power_off_requested = 0;
int power_off_timer = 0;
int dcdc_power_on_timer = 0;
DDRD |= (0 << PD2); // Pin 6 to input - BUTTON (Power ON)
PORTD |= (1 << PD2); // Pull-UP pin
DDRD |= (0 << PD3); // Pin 7 to input - SIGNAL (Power OFF)
DDRD |= (0 << PD5); // Pin 9 to input - SIGNAL (DC-DC Power ON)
DDRD |= (1 << PD4); // Pin 8 to output - POWER ON KEY
DDRD |= (1 << PD6); // Pin 11 to output - DC-DC POWER ON KEY
DDRB |= (1 << PB0); // Pin 12 to output - LED (Green)
DDRB |= (1 << PB1); // Pin 13 to output - LED (Yellow)
POWER_KEY_OFF;
DCDC_POWER_KEY_OFF;
while(1) {
// STANDBY mode
if(standby) {
LED_GREEN_OFF;
LED_YELLOW_ON;
if(!power_off_requested)
_delay_ms(1000);
if(!power_off_requested) {
LED_YELLOW_OFF;
_delay_ms(2000);
}
}
// power ON
if(POWER_ON_BUTTON && !power_off_requested) {
_delay_ms(20);
standby = 0;
LED_YELLOW_OFF;
LED_GREEN_ON;
// --- turn on power pin
POWER_KEY_ON;
}
// DC-DC
if(!standby) {
if(DCDC_POWER_ON_SIGNAL) {
_delay_ms(10);
DCDC_POWER_KEY_ON;
dcdc_power_on_timer = 1;
}
if(dcdc_power_on_timer) {
dcdc_power_on_timer++;
_delay_ms(100);
if(dcdc_power_on_timer>300) { // 30 sec
DCDC_POWER_KEY_OFF;
dcdc_power_on_timer = 0;
}
}
}
// init power OFF process
if(POWER_OFF_SIGNAL && !standby) {
_delay_ms(10);
standby = 1;
power_off_requested = 1;
}
// power OFF procedure
if(power_off_requested) {
power_off_timer++;
_delay_ms(100);
if(power_off_timer>400) { // 40 sec before Power OFF
POWER_KEY_OFF;
power_off_requested = 0;
standby = 1;
power_off_timer = 0;
}
}
}
}
Сперва задаем реальную частоту на которой работает кристалл, это нужно для корректной работы функции '_delay_ms'.
Потом подключаем заголовочные файлы и объявляем целый ряд макросов (кратких по коду функций с уникальными именами), которые позволят управлять пинами портов МК и считывать их значения.
Основная программа содержится в функции 'main', в ее начале объявлены служебные переменные, а потом выполнена инициализация портов МК и их конфигурирование на выход/вход.
Далее вызываем два макроса: "POWER_KEY_OFF", "DCDC_POWER_KEY_OFF" - установка низкого уровня на пине PD4 (отключение основного силового ключа на MOSFET) и пине PD6 (отключение силового ключа для питания движков).
Весь алгоритм реализован в одном бесконечном цикле.
Теперь о том что делается в самом цикле программы:
- Управление индикацией для ждущего режима (STANDBY mode) - мигание желтым светодиодом, гашение зеленого;
- Проверка нажата ли кнопка включен питания (power ON), смена свечения светодиодов, активация основного силового ключа;
- Проверка наличия сигнала с платки L298, активация на некоторое время питания для DC-DC преобразователя с движками;
- Проверка на наличие сигнала выключения питания (power OFF), подготовка и переключение в режим ожидания (установка переменных);
- Активация процедуры выключения питания, ожидание прохождения заданного времени (100мс*400=40сек), отключение основного силового ключа.
Как видите, в программе даже не применяются прерывания в МК, все предельно просто для понимания.
Скомпилированный код прошивки для микроконтроллера ATtiny2313:
:1000000012C017C016C015C014C013C012C011C052
:1000100010C00FC00EC00DC00CC00BC00AC009C07C
:1000200008C007C006C011241FBECFEDCDBF02D04F
:100030008BC0E6CF81B381BB929A81B381BB81B380
:1000400081BB8C9A8E9AB89AB99A9498969820E027
:1000500030E060E070E040E050E081E090E0009748
:10006000C1F0C098C19A4115510599F4AFE3EDE094
:10007000F3E0A150E040F040E1F700C00000C1987B
:10008000AFE7EAE1F6E0A150E040F040E1F700C060
:10009000000082990DC04115510551F487E893E1A4
:1000A0000197F1F700C00000C198C09A949A02C06D
:1000B000892B09F5859B0AC0E3ECF9E03197F1F74C
:1000C00000C00000969A21E030E003C02115310500
:1000D000A9F02F5F3F4F87EA91E60197F1F700C043
:1000E00000002D3291E039074CF0969880E090E0C6
:1000F00020E030E005C081E090E002C080E090E0C8
:10010000839B0DC0892B49F4E3ECF9E03197F1F7BB
:1001100000C0000081E090E006C081E090E0411561
:10012000510509F49CCF6F5F7F4FE7EAF1E6319705
:10013000F1F700C000006139F1E07F071CF441E0F5
:0C01400050E08DCF949885CFF894FFCF4D
:00000001FF
Если нужно увеличить или уменьшить время ожидания перед отключением питания с помощью силового ключа, то программу придется скомпилировать заново.
Для работы рекомендую программатор USB ISP и программу AVRDude. Сперва, перед прошивкой нужно правильно подключить микроконтроллер. В одной из статей есть примеры работы с программатором и AVRDude. Отлаживать и компилировать программы на Си (C) удобно в настроенной среде разработчика Geany.
Преобразователь сигналов для управления двигателями на основе L298
Основная цель приведенного здесь модуля преобразования сигналов - экономия пинов (выводов) GPIO на гребенке Raspebrry Pi и упрощение управления двумя движками, которые подключены к микросхеме L298.
Схему подобного конвертера для работы в паре с микросхемой L298 я уже приводил в статье "Управляем шаговыми движками и DC моторами, L298 и Raspberry Pi".
Микросхема L298 содержит по три вывода-входа для каждого канала:
- Enabled (EN1, EN2) - разрешить подачу питания на выходной каскад канала;
- IN1 (DA, DC) - первая конфигурация полярности (+ и -) на выходе (вращение движка в одном направлении);
- IN2 (DB, DD) - вторая конфигурация полярности (вращение движка в противоположном направлении).
Для управления двумя каналами и двумя движками понадобится шесть пинов GPIO.
Но поскольку в один момент времени может быть активен только один из режимов вращения движка (вправо или влево), то пины IN1 и IN2 можно с помощью простейшей логической схемы объединить в один.
Это позволит управлять двумя движками используя лишь четыре пина GPIO вместо шести, к тому же за направление вращения теперь будет отвечать один пин для каждого из движков, что гораздо удобнее при программировании!
Схема конвертера логических уровней
Такую не сложную схему можно построить на одной микросхеме с четырьмя инверторами внутри:
Рис. 37. Схема конвертера сигналов на микросхеме CD4011 для управления модулем L298 через 4 пина GPIO.
Вместо CD4011 можно использовать советскую микросхему К561ЛА7 или К176ЛА7.
Элементы U1A и U1B используются как усилительные (но с инверсией сигнала), а U1C и U1D - для формирования инвертирования сигнала что пришел с элементов U1A и U1B.
Каналы EN1 и EN2 для безопасности включены через небольшое сопротивление, а также прижаты к земле резисторами по 100К.
Кратко опишу принцип работы, на примере с каналом для входа DIR1 и выходов DA, DB:
- Если на DIR1 низкий уровень сигнала (0В), то и на входах 1, 2 (U1A) он тоже низкий.
- На выходе 3 - сигнал уже инвертированный, то есть высокий уровень (+5В)
- На выходе DA и входах 8, 9 (U1C) получаем также высокий уровень (+5В)
- На выходе 10 (U1C) сигнал с входов 8, 9 инвертируется - на выходе DB получаем низкий уровень (0В).
Таким образом, при установке на входе DIR1 низкого уровня, на выходе DA получим высокий уровень (+5В), а на выходе DB - низкий уровень (0В).
Состояния выходов этой схемы при разных значениях на входах:
Вх. / Вых. | DA | DB | DC | DD | EN1 | EN2 |
DIR1 = 0 | 1 | 0 | ||||
DIR1 = 1 | 0 | 1 | ||||
DIR2 = 0 | 0 | 1 | ||||
DIR2 = 1 | 1 | 0 | ||||
EN1 = 0 | 0 | |||||
EN1 = 1 | 1 | |||||
EN2 = 0 | 0 | |||||
EN2 = 1 | 1 |
Уровни напряжений:
- логический 0 = 0 Вольт;
- логическая 1 = +5 Вольт.
Печатная плата и подключение
Привожу рисунок печатной платы для этого небольшого, но полезного модуля.
Рис. 38. Расположение электронных компонентов на плате конвертера сигналов для L298.
Рис. 39. Трафарет, разводка печатной платы для конвертера сигналов (масштаб 200%).
Размеры платы: 40 х 24 (мм).
Рис. 40. Готовая плата конвертера сигналов для управления модулем L298 через 4 пина GPIO.
Для подключения платки конвертера сигналов к модулю L298 я использовал коннекторы с проводниками, такие можно извлечь из корпусов компьютеров старого и нового стандарта.
Решил закрепить платку сразу над панелькой с входами модуля. Кстати можно было бы развести платку конвертера сигналов так, чтобы все шесть выводов точно совпадали с пинами входов на модуле, но я тогда думал разместить плату вообще около модуля а не над ним.
Но получилось и так вполне хорошо:
Рис. 41. Плата конвертера сигналов подключена к модулю с микросхемой L298.
Крепление модулей на шасси самодельного робота
Теперь осталось придумать как закрепить на шасси все модули питания, а это:
- Понижающий DC-DC преобразователь напряжения (+12В в +5В);
- Повышающий DC-DC преобразователь напряжения (+12В в +25В);
- Контроллер питания на чипе ATtiny2313 + MOSFET'ы.
DC-DC преобразователь напряжения с выходом +5В нужно установить на радиатор, поскольку потребляемый устройствами по линии +5В ток может достигать 2.5-3А.
Был найден миниатюрный ребристый радиатор из алюминия. С его обратной стороны, с помощью напильника по металлу, была подготовлена ровная площадка для установки платы преобразователя.
Для крепления платы с помощью двух винтов в радиаторе были просверлены два отверстия.
Рис. 42. Радиатор и изоляционные резиновые термопрокладки для DC-DC преобразователя напряжения на LM2596.
Почти весь монтаж платы преобразователя - поверхностный. С ее обратной стороны выступают лишь несколько выводов - от переменного резистора.
Ток там не большой (управление микросхемой), поэтому эти выступающие выводы с припоем можно смело спиливать и практически уровнять с самой платой.
На площадку радиатора была нанесена термопаста, потом туда уложены три резиновые термопрокладки (на всю длину платки). Саму плату DC-DC я также покрыл небольшим слоем термопасты.
Рис. 43. Установка модуля DC-DC с LM2596 на радиатор, термопрокладки и термопаста.
После этого установил модуль преобразователя напряжения на подготовленный радиатор.
Рис. 44. DC-DC преобразователь напряжения с LM2596 надежно установлен на радиатор.
Еще один DC-DC преобразователь напряжения, но теперь повышающий (Step-Up на XL6009), было решено закрепить поверх уже установленного с LM2596.
Нагрузка на этот преобразователь напряжения в моем случае будет не большая, поэтому радиатор ему не понадобится.
Элементы крепления просты: две полоски из алюминиевой бляхи. Ими же весь "бутерброд" из преобразователей напряжения будет крепиться к шасси.
Рис. 45. Подготовка крепления для модуля Step-Up DC-DC на основе XL6009.
По бокам радиатора пришлось просверлить еще два отверстия и нарезать там резьбу под винтики на 3мм.
Рис. 46. Собранная конструкция из DC-DC преобразователей напряжения на основе LM2596 и XL6009.
Чтобы было к чему крепить контроллер питания, а также всю верхнюю часть робота, я подготовил четыре небольших стойки.
Извлек из старых разъемов набор алюминиевых планок - они очень легкие и в них по всей длине насверлено отверстий. За счет того что их бока загнуты вовнутрь эти планочки достаточно прочны.
Из металлических полосок (не алюминий) изготовил небольшие соединяющие элементы с просверленными в них двумя отверстиями, а также прямоугольники для крепления к шасси.
Получился вот такой набор для удержания будущей верхней рамы, а также крепления электроники по бокам робота:
Рис. 47. Подготовленные стойки для крепления верхней части робота и электроники по бокам к шасси.
Установив стойки на шасси, к одной из них (со стороны панели питания) прикрепил модуль управления питанием на МК ATtiny2313.
Рис. 48. Вспомогательные стойки для крепления верхней рамы и прикрепленный модуль управления питанием.
Все модули управления питанием, а также силовой модуль для управления движками решил установить следующим образом:
Рис. 49. Размещение модулей питания и модуля управления электродвигателями на шасси робота.
Рис. 50. Размещение основной электроники и компьютера на шасси будущего самодельного робота.
Последние фото не очень хорошего качества, но думаю что суть всего вполне ясна.
В завершение
Таким образом, батарея питания установлена, вся силовая электроника для питания робота и его электродвигателей готова.
Следующий этап - изготовление блока из сервоприводов для управления поворотами головы робота. А потом - изготовление самой головы робота с OLED-дисплеем, HD-видеокамерой, пиродатчиком и фонариком внутри.
Как видите, небольшими и малозатратными шагами вполне можно самостоятельно собрать необходимую электронику для робота и закрепить ее на шасси.