Рабочее напряжение конденсатора
Рабочее напряжение: поскольку конденсаторы представляют собой не более чем два проводника, разделенных изолятором (диэлектриком), вы должны обратить внимание на максимально допустимое на нем напряжение. Если приложено слишком высокое напряжение, номинальное значение «пробоя» диэлектрического материала может быть превышено, что приведет к внутреннему короткому замыканию конденсатора.
Полярность конденсатора
Полярность: некоторые конденсаторы изготавливаются таким образом, что они могут выдерживать приложенное напряжение только одной полярности, но не другой.
Это связано с их конструкцией: диэлектрик представляет собой микроскопически тонкий слой изоляции, нанесенный во время изготовления на одну из пластин с помощью постоянного напряжения.
Они называются электролитическими конденсаторами, и их полярность четко обозначена.
Рисунок 1 – Полярность конденсатора
Изменение полярности напряжения на электролитическом конденсаторе может привести к разрушению этого сверхтонкого диэлектрического слоя, что приведет к разрушению устройства.
Однако толщина этого диэлектрика позволяет получать чрезвычайно высокие значения емкости при относительно небольшом размере корпуса.
По той же причине электролитические конденсаторы имеют тенденцию иметь низкое номинальное напряжение по сравнению с другими типами конструкций конденсаторов.
Эквивалентная схема конденсатора
Эквивалентная схема: поскольку пластины в конденсаторе имеют некоторое сопротивление, и поскольку ни один диэлектрик не является идеальным изолятором, не существует такой вещи, как «идеальный» конденсатор. В реальной жизни конденсатор имеет как последовательное сопротивление, так и параллельное сопротивление (сопротивление утечки), взаимодействующие с его чисто емкостными характеристиками:
Рисунок 2 – Эквивалентная схема конденсатора
К счастью, относительно легко изготовить конденсаторы с очень маленьким последовательным сопротивлением и очень высоким сопротивлением утечки!
Физические размеры конденсатора
Для большинства применений в электронике минимальный размер является целью для разработки компонентов. Чем меньшие по размеру компоненты можно изготовить, тем большая схема может быть встроена в меньший корпус, при этом, как правило, также уменьшается вес.
В случае конденсаторов существуют два основных ограничивающих фактора для минимального размера устройства: рабочее напряжение и емкость. И эти два фактора, как правило, противоречат друг другу.
Для любого конкретного выбранного диэлектрического материала единственный способ увеличить номинальное напряжение конденсатора – это увеличить толщину диэлектрика. Однако, как мы видели, это приводит к уменьшению емкости. Емкость можно восстановить, увеличив площадь пластины, но это делает компонент больше.
Вот почему вы не можете судить о емкости конденсатора в фарадах просто по размеру. Конденсатор любого заданного размера может быть относительно высоким по емкости и с низким рабочим напряжением, или наоборот, или иметь некоторый компромисс между двумя этими крайностями. Посмотрим для примера следующие две фотографии:
Рисунок 3 – Масляный конденсатор высокого напряжения
Это довольно большой конденсатор по физическим размерам, но он имеет довольно низкое значение емкости: всего 2 мкФ.
Тем не менее, его рабочее напряжение довольно высокое: 2000 вольт! Если бы этот конденсатор был перепроектирован так, чтобы между его пластинами был более тонкий слой диэлектрика, то могло бы быть достигнуто, по крайней мере, стократное увеличение емкости, но за счет значительного снижения его рабочего напряжения.
Сравните приведенную выше фотографию с приведенной ниже. Конденсатор, показанный на нижнем рисунке, представляет собой электролитический компонент, по размерам подобный приведенному выше, но с очень отличающимися значениями емкости и рабочего напряжения:
Рисунок 4 – Электролитический конденсатор
Более тонкий слой диэлектрика дает ему гораздо большую емкость (20000 мкФ) и резко снижает рабочее напряжение (постоянное напряжение 35 В, напряжение 45 В в пике).
Вот некоторые образцы конденсаторов разных типов, все по размеру меньше, чем показанные ранее:
Рисунок 5 – Керамические конденсаторыРисунок 6 – Пленочные конденсаторыРисунок 7 – Электролитические конденсаторыРисунок 8 – Танталовые конденсаторы
Электролитические и танталовые конденсаторы являются полярными (чувствительны к полярности) и всегда помечаются как таковые. У электролитических конденсаторов отрицательные (-) выводы отмечаются стрелками на корпусе.
У некоторых полярных конденсаторов полярность обозначена на положительном выводе. У большого электролитического конденсатора на 20 000 мкФ, показанного выше, положительный (+) вывод помечен знаком «плюс».
Керамические, майларовые, пленочные и воздушные конденсаторы не имеют маркировки полярности, потому что эти типы являются неполярными (они не чувствительны к полярности).
Конденсаторы являются очень распространенными компонентами в электронных схемах. Внимательно посмотрите на следующую фотографию – каждый компонент, обозначенный на печатной плате буквой «С», является конденсатором:
Рисунок 9 – Конденсаторы на сетевой карте
Некоторые конденсаторы на плате – это стандартные электролитические конденсаторы: C30 (верхняя часть платы, в центре) и C36 (левая сторона, 1/3 от вершины).
Некоторые другие представляют собой особый вид электролитических конденсаторов, называемый танталовым, потому что именно этот тип металла используется для изготовления пластин. Танталовые конденсаторы имеют относительно высокую емкость для своих физических размеров.
На плате, показанной выше, танталовые конденсаторы: C14 (чуть ниже слева от C30), C19 (непосредственно под R10, который ниже C30), C24 (нижний левый угол платы) и C22 (внизу справа).
Примеры еще меньших по размеру конденсаторов можно увидеть на этой фотографии:
Рисунок 10 – Конденсаторы на жестком диске
Конденсаторы на этой печатной плате из соображений экономии места являются «устройствами поверхностного монтажа», как и все резисторы. В соответствии с соглашением о маркировке компонентов конденсаторы могут быть идентифицированы по меткам, начинающимся с буквы «C».
Теги
Алюминиевый электролитический конденсаторКерамический конденсаторКонденсаторТипы конденсаторовЭлектролитический конденсаторЭлектронные компоненты
В случае комментирования в качестве гостя (без регистрации на disqus. com) для публикации требуется время на премодерацию.
Конденсаторы
Наряду с резисторами конденсаторы являются наиболее широко используемыми компонентами электрических цепей.
Основные характеристики конденсатора — номинальная ёмкость и номинальное напряжение. Чаще всего в схемах используются постоянные конденсаторы, и гораздо реже — переменные и подстроенные.
Отдельной группой стоят конденсаторы, изменяющие свою ёмкость под воздействием внешних факторов.
Подавляющее большинство оксидных конденсаторов — полярные, поэтому включать их в электрическую цепь можно только с соблюдением полярности.
Чтобы показать это на схеме, у символа положительной обкладки такого конденсатора ставят знак «+», Обозначение С1 на рис. 2 — общее обозначение поляризованного конденсатора. Иногда используется.
другое изображение обкладок конденсатора (см. рис. 2, С2 и СЗ).
С технологическими целями или при необходимости уменьшения габаритов в некоторых случаях в один корпус помещают два конденсатора, но выводов делают только три (один из них общий). Условное графическое обозначение
Для развязки цепей питания высокочастотных устройств по переменному току применяют так называемые проходные конденсаторы. У них тоже три вывода: два — от одной обкладки («вход» и «выход» ), а третий (чаще в виде винта) — от другой, наружной, которую соединяют с экраном или завёртывают в шасси.
Эту особенность конструкции отражает условное графическое обозначение такого конденсатора (рис. 3, С1). Наружную обкладку обозначают короткой дугой, а также одним (С2) или двумя (СЗ) отрезками прямых линий с выводами от середины.
Условное графическое обозначение с позиционным обозначением СЗ используют при изображении проходного конденсатора в стенке экрана. С той же целью, что и проходные, применяют опорные конденсаторы.
Обкладку, соединяемую с корпусом (шасси), выделяют в обозначении такого конденсатора тремя наклонными линиями, символизирующими «заземление» (см. рис. 3, С4).
Конденсаторы переменной ёмкости (КПЕ) предназначены для оперативной регулировки и состоят обычно из статора и ротора. Такие конденсаторы широко использовались, например, для изменения частоты настройки радиовещательных приёмников. Как говорит само название, они допускают многократную регулировку ёмкости в определенных пределах. Это их свойство показывают на схемах знаком регулирования — наклонной стрелкой, пересекающей базовый символ под углом 45°, а возле него часто указывают минимальную и максимальную ёмкость конденсатора (рис. Если необходимо обозначить ротор КПЕ, поступают так же, как и в случае проходного конденсатора (см. рис. 4, С2). Для одновременного изменения ёмкости в нескольких цепях (например, в колебательных контурах) используют блоки, состоящие из двух, трех и большего числе КПЕ. Принадлежность КПЕ к одному блоку показывают на схемах штриховой линией механической связи, соединяющей знаки регулирования, и нумерацией секций (через точку в позиционном обозначении, рис. При изображении КПЕ блока в разных, далеко отстоящих одна от другой частях схемы механическую связь не показывают, ограничиваясь только соответствующей нумерацией секций (см. рис. 5, С2. 1, С2. 2, С2.
Разновидность КПЕ — подстроенные конденсаторы. Конструктивно они выполнены так, что их ёмкость можно изменять только с помощью инструмента (чаще всего отвертки).
В условном графическом обозначении это показывают знаком подстроечного регулирования — наклонной линией со штрихом на конце (рис.
Ротор подстроечного конденсатора обозначают, если необходимо, дугой (см. рис. 6, СЗ, С4).
Саморегулирумые конденсаторы (или нелинейные) обладают способностью изменять ёмкость под действием внешних факторов. В радиоэлектронных устройствах часто применяют вариконды (от английских слов vari(able) — переменный и cond(enser) — еще одно название конденсатора). Их ёмкость зависит от приложенного к обкладкам напряжения. Буквенный код варикондов — CU (U— общепринятый символ напряжения, см. табл. 1), УГО в этом случае — базовый символ конденсатора, перечеркнутый знаком нелинейного саморегулирования с латинской буквой U (рис. 7, конденсатор CU1). Аналогично построено УГО термоконденсаторов. Буквенный код этой разновидности конденсаторов — СК (рис. 3,7, конденсатор СК2). Температура среды, естественно, обозначается символом tº
Электрический конденсатор
У этого термина существуют и другие значения, см. Конденсатор (значения). также: вариконд
См. также: варикап
Основа конструкции конденсатора — две токопроводящие обкладки, между которыми находится диэлектрик
Слева — конденсаторы для поверхностного монтажа; справа — конденсаторы для объёмного монтажа; сверху — керамические; снизу — электролитические. На танталовых конденсаторах (слева) полоской обозначен «+», на алюминиевых (справа) маркируют «-». SMD-конденсатор на плате, макрофотография
Различные конденсаторы для объёмного монтажа
Конденсатор является пассивным электронным компонентом. Ёмкость конденсатора измеряется в фарадах.
История
В простейшем варианте конструкция состоит из двух электродов в форме пластин (называемых обкладками), разделённых диэлектриком, толщина которого мала по сравнению с размерами обкладок (см. рис.
Практически применяемые конденсаторы имеют много слоёв диэлектрика и многослойные электроды, или ленты чередующихся диэлектрика и электродов, свёрнутые в цилиндр или параллелепипед со скруглёнными четырьмя рёбрами (из-за намотки).
Свойства конденсатора
Конденсатор в цепи постоянного тока может проводить ток в момент включения его в цепь (происходит зарядка или перезарядка конденсатора), по окончании переходного процесса ток через конденсатор не течёт, так как его обкладки разделены диэлектриком. В цепи же переменного тока он проводит колебания переменного тока посредством циклической перезарядки конденсатора, замыкаясь так называемым током смещения.
В методе гидравлических аналогий конденсатор — это гибкая мембрана, вставленная в трубу. Анимация демонстрирует мембрану, которая растягивается и сокращается под действием потока воды, что аналогично заряду и разряду конденсатора под действием электрического тока
С точки зрения метода комплексных амплитуд конденсатор обладает комплексным импедансом
Z
^
j
ω
C
=
−
ω
C
=
−
2
π
f
C
— мнимая единица,— циклическая частота (радиан/с) протекающего синусоидального тока,— частота в герцах,— ёмкость конденсатора (фарад). Отсюда также следует, что реактивное сопротивление конденсатора равноω
CДля постоянного тока частота равна нулю, следовательно, реактивное сопротивление конденсатора бесконечно (в идеальном случае).
При изменении частоты изменяются диэлектрическая проницаемость диэлектрика и степень влияния паразитных параметров — собственной индуктивности и сопротивления потерь.
На высоких частотах любой конденсатор можно рассматривать как последовательный колебательный контур, образуемый ёмкостью
, собственной индуктивностью
и сопротивлением потерь
Резонансная частота конденсатора равна
2
π
f
>конденсатор в цепи переменного тока ведёт себя как катушка индуктивности. Следовательно, конденсатор целесообразно использовать лишь на частотах
Корпус и шасси
От выбранного корпуса зависит что и как вы сможете разместить, а от шасси зависит проходимость и быстроходность. Например, если вы хотите весело гонять на улице вам стоит выбрать шасси с большим клиренсом и желательно с какой никакой, но системой подвески, если же ваша техника будет ездить исключительно по ровным полам вашего дома и без преодоления таких сложных противотанковых препятствий как махровые ковры, то вы можете не заморачиваться – подойдет любое шасси.
Скорее всего вы будете создавать такое устройство, в котором будут использоваться редукторы (набор шестеренок, которые меняют обороты на усилие и наоборот) учитывайте, что они могут довольно сильно шуметь. Моторы часто продаются в паре с редукторами и найти мотор подходящих вам характеристик для достижения необходимой динамики не сложно.
Старайтесь все что вы размещаете на корпусе закреплять при помощи надежных, но разборных соединений – что-то вроде болта с гайкой. Это убережет вас от случайных поломок и даст вам необходимую гибкость для полета вашей фантазии в размещении элементов.
В своем танке я взял корпус от игрушечного танка, отфрезеровав внутри все что было лишним, для увеличения полезного объема. Все ненужные отверстия залил термоклеем (на улице это полезно – меньше набивается всякой пыли и воды). Редуктор оставил родным, но один из двигателей пришлось заменить, так как оказалось он не имел совместимости со случайно слетевшей фрезой.
Для удобства доступа (и для красоты) я сделал верхнюю часть корпуса в виде откидной металлической крышки, на которой размещаются основные блоки танка. Под крышкой находится моторное отделение – два мотора + редукторы и батарейный отсек с двумя аккумуляторами. Сама крышка вырезана из куска метала от автомагнитолы и покрашена в черный цвет, петля обычная – мебельная (возможно, брутальное решение, но я так и хотел).
Корпус для ESP-32-Cam (белая коробка с антенной) – это перевернутый корпус от инфракрасного датчика движения (BV-201). Он достаточно просторный и разделяется на две части, что позволяет легко в нем что-то менять.
При креплении всех плат я использовал нейлоновые стойки M3 – если у вас не какая-то «дикая машина», которая требует большой прочности, я рекомендую использовать именно нейлоновые стойки, а не металлические, так как их легко подрезать/подпилить, и они являются диэлектриком, что иногда может быть полезно.
Учитывая неадекватные цены на готовые шасси/корпуса для самоделок, самым дешевым решением будет взять уже готовую игрушечную модель, при покупке которой вы получите: корпус, двигатели и шасси. Так вы сможете быстро сделать прототип и впоследствии легко что-либо поменять. Имея опыт построения прототипа, вы будете уже знать чего хотите и как этого достичь.
Система электропитания (бортовая сеть)
От этой системы зависит надежность вашей техники и продолжительность ее автономной работы.
В зависимости от сценария использования (температура, напряжение, ток, безопасность) вашего устройства вам могут понадобиться различные типы аккумуляторов. В интернете довольно много информации по аккумуляторам, поэтому я не буду на них заострять внимание. Скорее всего, это будут литиевые аккумуляторы: Li-Ion или Li-Po.
При подборе аккумуляторов необходимо определиться с потребностями вашей машины – номинальное напряжение и максимальный ток потребителей: двигатели, микроконтроллеры, датчики и другое. К максимальному току прибавьте хотя бы 30% запаса на случай модернизации или ошибки при расчетах.
Зная ток вашей нагрузки, вы можете определится с формфактором и количеством аккумуляторов (не забывайте, что есть аккумуляторы повышенной токоотдачи).
Сформировать нужное бортовое напряжение вы можете комбинацией нескольких аккумуляторов (учитывайте, что по мере разряда аккумуляторы будут снижать напряжение) или же подключить между аккумуляторами и нагрузкой DC-DC преобразователь – который повысит или понизит напряжение до необходимого уровня и будет его удерживать на всем рабочем диапазоне аккумуляторов.
Для защиты аккумуляторов и остальных компонентов желательно использовать плату контроллера батареи (BMS) – она подключается в разрыв между батареей и нагрузкой, обеспечивая защиту от короткого замыкания (КЗ), ограничивая диапазон напряжений и защищая от аварийных ситуаций. Не забывайте обращать внимание на максимальный ток, который может пропустить через себя BMS до отключения нагрузки. Также эти платы могут иметь возможность зарядки батареи.
Вы должны обеспечить стабильное питание всего устройства в любых, даже самых худших условиях. Когда все включено на максимум, напряжение не должно проседать до того уровня, при котором будут глюки или перезагрузки.
Достичь стабильности электропитания можно несколькими способами:
- Создать такие условия, при которых будет невозможно использовать энергии больше, чем устройство способно себе предоставить – например программной защитой или физическим ограничением.
- Разделить питание для силовой части – моторы и мощные потребители отдельно от интеллектуальной части – микроконтроллеры, датчики. Таким образом, при просадке напряжения в силовой части, например, из-за заклинившего мотора, вы убережетесь от просадки напряжения для вашего управления – микроконтроллеров.
- Обеспечить какую-то кратковременную защиту от просадки напряжения, это может помочь в большинстве случаев и легко в реализации. Примером может быть конденсатор по питанию для микроконтроллера.
Главная идея в том, что просадка напряжения не так страшна для исполнительных механизмов типа моторов или манипуляторов, как для микроконтроллеров, поскольку это значит потерю управления над всей машиной, со всеми последствиями.
Потребление тока моего танка составляет примерно такие значения:
Из значений выше видно, что самым большим потребителем являются двигатели, у которых, к тому же, неравномерный расход энергии в зависимости от местности, по которой едет танк.
Танковая батарея состоит из пары дешевых литиевых аккумуляторов Westinghouse INR18650 2000мА*ч, 20А. Дальше батарея подключается к повышающему DC-DC преобразователю MT3608, который формирует стабильные 5. 1В для бортовой сети. Запас 0. 1В нужен для уменьшения влияния просадки напряжения на проводах и диодах.
Аккумуляторы подключаются параллельно к плате зарядки. Хотя она может выполнять роль BMS, я подключил плату в обход, потому что она рассчитана всего лишь на ток в 1А, то есть будет отключаться при рабочем режиме танка.
На входе DC-DC преобразователя стоит конденсатор, который немного уменьшает эффект резких просадок напряжения от работы двигателей в момент переходных процессов или заклинивания. Рядом установлен светодиод, который является индикатором роботы танка – очень полезная штука, чтобы всегда видеть, что устройство включено.
Все подключаемое оборудование на танке питается от 5В, которые выходят от стабилизатора. Те датчики, которым требуется 3. 3В, ввиду их малого потребления питаются от стабилизатора на Arduino Nano. На плате с ESP-32 имеется стабилизатор, который преобразует входные 5В в необходимые для ESP 3.
На двигателях стоят керамические конденсаторы 0. 1 мкФ, они гасят искру на щетках и устраняют помехи в цепи питания. Блокировочные конденсаторы также стоят возле входа по питанию на каждой плате микроконтроллеров, для защиты от помех.
При монтаже я использовал по одному контакту для минуса и для плюса. Из этих двух точек я делал разводку уже по всем местам, где требовалось питание. Делая так же, вы с меньшей вероятностью запутаетесь и будет меньше «земляных петель». Точки плюса и минуса лучше разнести подальше друг от друга для безопасности, например у меня можно эффектно уничтожить танк удачным попаданием металлической отвертки на контакты (а вот и недостаток обхода BMS – нет защиты от КЗ).
Мое решение не идеальное, лучше было бы использовать раздельное питание, при котором силовая часть запитывалась бы отдельно и не влияла на работу микроконтроллеров. К тому же микроконтроллеры и большинство датчиков можно запитать напряжением 3. 3В, уменьшив потери энергии на стабилизаторах, но мне просто захотелось, чтобы было единое бортовое 5В питание.
Рекомендую внимательно отнестись к организации бортовой сети, ведь случайные глюки не нравятся никому, и вы можете потратить уйму времени на отлов бага, которого можно было избежать, потратив немного больше усилий при проектировании.
Микроконтроллеры
Интеллектуальная часть вашей техники для обработки данных и управлением всеми остальными частями устройства. Не имея большого опыта брать голый микроконтроллер и городить вокруг него обвязку не имеет смысла – вы наберетесь опыта, но потратите много времени.
Если хотите поскорее увидеть готовый результат, гораздо более эффективно будет взять платы разработчика (dev board) с уже распаянными микроконтроллерами и дополнительными компонентами, вроде разъемов и программаторов. На таких платах могут быть установлены различные микроконтроллеры, на самом деле их очень много и в интернете по ним достаточно информации, могу лишь посоветовать начинающим смотреть в сторону плат с ESP-32, ESP-8266 и Arduino. Существует много других плат с классными микроконтроллерами, имеющие намного лучшие характеристики за те же деньги, но порог вхождения там будет выше, поскольку там не такое большое сообщество, меньше инструкций, документации, библиотек или попросту более сложное программирование.
Если же вам не хватает возможностей «обычных» микроконтроллеров или вы хотите сделать что-то более ресурсоемкое попробуйте поискать среди мини-компьютеров – Raspberry Pi и его аналоги.
Для своего танка я решил разделить логику на две части. Одна плата будет заниматься обработкой данных с датчиков, дергать моторами и заниматься другими «простыми делами» например моргать светодиодом или пищать в пищалку, то есть такой себе драйвер для доступа к остальным устройствам. Вторая плата будет заниматься обработкой камеры и коммуникациями с внешним миром.
Я выбрал две платы: в качестве драйвера – Arduino Nano, и ESP-32-CAM в роли коммуникационного центра с возможностью смотреть через камеру. Таким образом на танке получилось два бортовых микроконтроллера:
- ESP-32 в формфакторе платы с камерой – мне нужно было что то дешевое и что бы оно было с Wi-Fi и могло работать с камерой, лучшего по соотношению цена/возможности я не нашел.
- ATmega328 в виде платы Arduino Nano – это идеальная плата по размеру и у нее множество свободных пинов и все необходимые интерфейсы. Классический и надежный выбор для таких задач как снять показания датчиков и подергать моторами.
Можно было сделать все на одной плате, но есть несколько причин почему я выбрал две платы:
- Я хотел максимальной отзывчивости от Wi-Fi связи, поэтому любая лишняя задача на ESP дополнительно бы нагружала ее, и хоть она и двуядерная это могло бы привести к дополнительным задержкам, а это не позволительная роскошь.
- Плата с ESP-32 в формфакторе модуля ESP-32-CAM, к сожалению, имеет по жадному очень мало свободных пинов, причем часть из них зарезервирована для других нужд. Это значит, что все датчики не подключить, можно использовать было что-то типа сдвиговых регистров, но мне хотелось попроще.
- Некоторые из Arduino библиотек без обработки напильником плохо работают на ESP.
- Просто так захотелось, что бы было две платы. Мне нравится такая идея разделения обязанностей.
Вместо Arduino можно взять плату с ESP-8266 и отключить на ней Wi-Fi. Она бы тоже отлично подошла, даже лучше поскольку в наличии больше вычислительной мощности и оперативной памяти.
Перед прошивкой ESP-32 необходимо ее перевести в boot режим. Делается это замыканием контакта GPIO0 на GND. На танке есть переключатель (красный рычажок), который переводит ESP в режим прошивки или в рабочий режим. Но я столкнулся с плохо документированным багом/фичей. В обычном, рабочем режиме, на этом контакте генерируется какой-то специальный высокочастотный сигнал, нарушения которого приводит к различным глюкам всей ESP. Хотя контакт имеет внутреннюю подтяжку к питанию, это не спасало от помех на мой провод к переключателю (около 7 см), из-за этого постоянно были случайные зависания. При отключении провода от контакта, проблемы исчезали. Я выяснил, что это редкий баг (но бывает), замена платы мне помогла.
Среди аналогов плат разработчиков или микроконтроллеров по возможности старайтесь выбирать что-то более популярное, так вы сможете в случае необходимости найти решения большинства проблем.
Попробуйте хотя бы примерно представить какое количество вычислительных ресурсов вам необходимо, не имея опыта представить это довольно тяжело, но можно поискать в интернете похожие проекты и взять нечто подобное. Микроконтроллер подбирается под задачу, а не наоборот, избыточность не всегда хороша, как минимум это будет большее энергопотребление, а в некоторых случаях что-то реализовать может быть проще на более простом и «тупом камне».
Программное обеспечение (прошивка)
Тут я опишу общие моменты по коду которые у меня возникали, некоторые подробности я упущу, они будут описаны в частях ниже.
Если вы пишите код в Arduino IDE, рекомендую попробовать VS Code с расширением PlatformIO. Я сам ее использую так как, это дает возможность пользоваться такими плюшками «нормальных» IDE как автоподстановка, удобную работу с вкладками и несколькими проектами, более быстрая компиляция, преимуществ на самом деле больше, я описал лишь те, что главные для меня. В родной Arduino IDE было очень неудобно каждый раз переключатся между проектами и настраивать их заново. Сначала вы, потратите немного времени на изучение новой среды, но потом будете делать все намного быстрее и экономия времени будет вашим вознаграждением.
Я использовал Arduino фреймворк, таким образом получается единая экосистема на Arduino и ESP, хотя последняя обладает собственным фреймворком с прекрасной документацией.
Алгоритм работы танка
Это рабочие циклы в общих чертах. Мои алгоритмы нельзя назвать точным описанием того, что происходит на самом деле, для этого лучше смотреть код, я описываю лишь саму суть происходящего.
Защита от сбоев
Так как багов и зависаний не избежать, особенно в процессе отладки, пришлось сделать несколько элегантных костылей и назвать это «защитой от сбоев».
Следящие собаки (Watchdog). Есть такая штука как Watchdog, это аппаратный таймер, который все время считает в обратную сторону, и если дошел до нуля, то перезагружает микроконтроллер. В нормальном режиме работы, микроконтроллер должен периодически сбрасывать Watchdog приводя его время в изначальное состояние. Если вдруг микроконтроллер задумался и не успел сбросить, собака (Watchdog) дёрнет за рубильник перезагрузки – просто и эффективно.
На ESP все гораздо скучнее чем на Arduino, там две защиты от сбоев. Первая для защиты от нехватки ОЗУ при интенсивной передаче данных – обычный watchdog на 4 секунды. В случае зависания плата будет перезагружена, а скорость готовности к работе после включения позволяет даже не заметить обрыва связи по Wi-Fi (не требуется переподключение).
Вторая – защита от низкого питания (brownout detector) была выключена. Сделано это для того, чтобы в условиях 5В напряжения минус падение напряжения на диоде, была возможность поработать подольше. Теперь в случае реального зависания из-за нехватки питания, плата зависнет намертво или может что-то забаговатся, но это компенсируется программной защитой от перегрузки двигателей (подробнее ниже) и самое главное – увеличенным сроком работы от батареи, поскольку детектор имеет немного завышенный порог срабатывания.
Защита от перегрузки двигателей
Не смотря на название эта программная защита не защищает двигатели, а защищает бортовую сеть от просадки напряжения до критического уровня. Поскольку двигатели являются самими большими потребителями энергии на танке, то я сделал защиту, которая при напряжении ниже определенного уровня – останавливает двигатели (уменьшая тем самым потребления тока), это спасает от большинства перезагрузок или зависаний по питанию. При желании эту защиту можно отключить, но тогда есть риск намертво зависнуть и потерять управление.
Алгоритм реализован на Arduino, напряжение измеряется ее внутренним АЦП, он имеет следующий вид:
- С некоторой периодичностью (5 мс) замеряется напряжение на батарее.
- Если напряжение ниже порога, и в прошлое измерение не было такого, то просто запоминается этот факт.
- Если напряжение ниже порога, и в прошлом измерении тоже было ниже, то срабатывает защита – двигатели останавливаются. На терминал управления отправляется сообщение от том, что была сработана защита, пищалка издает характерный звуковой сигнал.
Я пробовал смягчить эффект просадки напряжения от переходных процессов (в момент смены стороны движения), путем плавной раскрутки двигателей, но это не дало ощутимого эффекта (возможно на больших двигателях это дало бы лучший результат), плюс потерялась динамика управления поскольку добавилась задержка во времени пока раскрутятся движки.
Звуковые оповещения – классная штука, позволяют мне знать, что с танком что-то произошло или же он готов к работе. Поскольку для генерации звукового сигнала требуется аппаратный таймер, то если танк движется – один из двигателей перестает получать ШИМ сигнал. Для устранения нежелательного движения перед тем, как пикнуть танк останавливается.
Всего у меня 4 звуковых сигнала:
- «Оповещение» – самый громкий, для разгона зевак по улице (что б не задавили танк), этот сигнал можно вызывать вручную с терминала управления.
- «Предупреждение» – просто что-то произошло, но не критично, например остановка двигателей из-за низкого напряжения.
- «Ошибка» – что-то сломалось так, что танк уже не может функционировать, без вмешательства или перезагрузки.
- «Хорошо» – значит, что все отлично, на данный момент используется как индикатор того, что танк готов к работе.
Все сигналы состоят из набора четырех частей. Каждая часть хранит частоту и длительность звучания, специальная функция переключает частоты во время звучания сигнала. Такая система оповещений простая в реализации и позволяет легко масштабироваться.
Это приложение, которое обеспечивает: управление движением, просмотр данных с датчиков, проведение диагностики и настройки танка. Приложение было сделано при помощи игрового движка Unity. Данное решение я могу обосновать как «just for fun». Выбор Unity обладает определенной избыточностью и костыльностью решений (из-за того, что движок не предназначен для такого).
Функционал приложения состоит из:
- Главный экран, на котором расположены кнопки управления движением танка, кнопки навигации по окнам приложения, верхней панели с данными датчиков и вспомогательной информации.
- Верхняя панель содержит данные с основных датчиков: скорость, расстояние до ближайшего препятствия (ультразвук), наклон танка, напряжение и уровень заряда батареи. Так же там есть уровень связи с повторителем, индикатор качества связи, последняя команда движения, которая была отправлена на танк и количество полученных кадров с камеры за секунду.
- Окно журнала (лог), куда Arduino, ESP и само приложение умеет записывать всякие события – удобно при отладке.
- Кнопка запуска акустического оружия подавления – звуковой сигнал оповещения.
- Окно настроек – можно подрегулировать масштаб видео, перезапустить стрим, вкл/выкл защиту от перегрузки, автоматическую настройку видео, а также настроить качество, разрешение и усиление видеокамеры.
- Окно телеметрии – вывод данных со всех датчиков и качество связи.
Алгоритм работы приложения:
- Поиск танка в Wi-Fi сети, если найден – установление с ним связи.
- Прием и отображение видео. При необходимости качество видео автоматически регулируется.
- Прием данных с датчиков.
- Прием данных в журнал (лог).
- Если есть команды управления – отправка их на танк.
- В случае обрыва связи, будет предпринята попытка заново установить связь.
Установление связи терминала с танком. Есть три режима соединения с танком:
- «Напрямую» – танк становится точкой Wi-Fi, к нему подключается терминал управления (смартфон).
- «Повторитель» – отдельная плата ESP8266 с внешней антенной, разворачивает точку Wi-Fi. К ней подключаются танк и терминал управления.
- «Нет соединения» – ничего не происходит.
При поиске танка, терминал периодически посылает сигналы через WebSocket на два IP адреса: адрес танка при режиме «Напрямую» и адрес при режиме «Повторитель», если с какого-то адреса приходит ответ, значит танк найден и выставляется соответствующий режим.
Определитель качества связи
Как только танк вышел на рабочий режим («Напрямую» или «Повторитель»), на терминале запускается Ping который периодически отправляет сигналы на танк и возвращает задержку. Тут записывается минимальная и максимальная задержка. Так же сохраняется значения последних 15 отправленных Ping, по ним высчитывается средняя задержка и соотношения отправленных к принятым.
На главном экране приложения есть индикатор (цветной квадрат), возле которого выводятся краткие данные по качеству связи и меняется цвет индикатора: Зеленый – Хорошо; Желтый – Потери; Красный – Нет соединения. Эта нехитрая система позволяет быстро оценить состояние канала связи.
Управление движением танка
Изначально у меня была идея сделать управление танком при помощи двух виртуальных джойстиков. От этой идеи было решено отказаться так как двигатели весьма маломощные, и вместе с редуктором не позволяют развивать большие скорости, то есть попросту нету диапазона регулирования скоростей – максимальная скорость мала. Но я уверен, что, если бы танк мог бы развивать внушительные скорости, то это было бы круто – можно было бы плавно развивать скорость и выделываться дрифтом на танке.
На моей же тихоходной танкетке оказалось достаточно 8 направлений движения: влево, вправо, вперед, назад и по диагоналям для поворота танка на ходу. Каждой стороне движения (включая стоп) соответствует цифра от 0 до 8.
Таким образом для движения танка необходима постоянное подтверждение команд с терминала, в случае их отсутствия танк автоматически прекращает движение. Эта избыточность позволяет достичь гарантии доставки команд движения и избежать забавной ситуации, когда танк движется, а вы не можете его остановить, потому что оборвалась связь.
Коммуникации
Вы можете использовать различные протоколы связи для управления своей техникой. Это может быть классический радиоканал, Wi-Fi или Bluetooth. У каждого есть свои плюсы и минусы, я же использовал Wi-Fi поэтому буду писать про него.
Причины почему я выбрал Wi-Fi:
- Мне нужно было передавать данные, возможно в будущем довольно большие объемы.
- Хотел управление (с передачей видео) в радиусе примерно 30 метров на улице.
- Хотелось управление со смартфона.
- Сама по себе технология мне нравится.
Учитывая, что на смартфоне не так и много радиоинтерфейсов, обычно это: NFC, GSM, Bluetooth и Wi-Fi, то только последний обладает нужными характеристиками. Bluetooth тоже неплохое решение если не надо передавать что-то вроде потокового видео.
Wi-Fi на танке работает в двух режимах «Напрямую» и «Повторитель». В режиме «Повторитель» танк и смартфон подключаются к другому микроконтроллеру (ESP8266), который выполняет роль Wi-Fi роутера. Сделано это для того, чтобы увеличить дальность связи, которая достигается несколькими вещами:
- Внешней антенной повторителя – эта антенна обладает лучшими качествами чем та, что в смартфоне.
- Физическим размещением повторителя где-то между смартфоном и танком.
По большому счету повторитель нужен для того, чтобы уменьшить влияние слабых Wi-Fi возможностей смартфона. Повторитель увеличивает радиус дальности связи примерно в 1. 5-2 раза чем подключение напрямую. Добавление дополнительного элемента в цепочке передачи данных также увеличивает задержку примерно на 10-15 мс.
Таким образом я могу контролировать настройки Wi-Fi. На смартфоне, к сожалению, нельзя подробно настроить точку, при этом у разных производителей, свое виденье настроек по умолчанию, из-за этого нет гарантии одинаковой работоспособности на разных смартфонах. Но есть и плюсы в решении развернуть точку на телефоне, например легкость доступа из сети Wi-Fi, в мобильную сеть (Интернет), то есть танком можно управлять через удаленный веб сайт (я так делал в одной из версий своего танка).
Методы улучшения Wi-Fi связи:
- ESP-32 работает в Wi-Fi сети на диапазоне 2.4 ГГц, значит все что на этих частотах и не наш полезный сигнал, является нам помехой. Об этом надо помнить, например в некоторых, очень зашумленных местах ваше устройство будет работать гораздо хуже, чем могло бы.
- Внешняя антенна вместо интегрированной. Для стабильной и далекой связи, родная антенна обладает не лучшими характеристиками. Я использовал внешнюю антенну от старого роутера на 5 дБ (родная 2 дБ).
- ESP-32 поддерживает три стандарта Wi-Fi: 802.11b; 802.11g и 802.11n, каждый стандарт обладает своей скоростью передачи данных, и условиях при которых они передаются, например чувствительностью уровня сигнала. Зная свои потребности в необходимой скорости, вы можете поменять стандарт на более «простой», выиграв при этом в чувствительности. Например, я использую на своем танке 802.11b, который обеспечивает всего 11 Мбит/с (для передачи данных и видео достаточно), но увеличивает чувствительность приема.
- Если вы используете стандарт Wi-Fi: 802.11n, имеет смысл уменьшить ширину полосы пропускания с 40 МГц до 20 МГц. Уменьшение ширины также уменьшает теоретическую максимальную скорость со 150 до 75 Мбит/с (вряд ли такие скорости понадобятся и микроконтроллер будет с ними справляться). Из-за меньшего рабочего диапазона частот, уменьшается вероятность наложения вашего сигнала с каким-либо еще – меньше помех. На стандартах Wi-Fi: 802.11b/g, такой фичи еще не было, поэтому там нет смысла напрягаться.
- Wi-Fi на ESP-32 использует диапазон частот от 2400 МГц по 2484 МГц. Для того что бы устройства не мешали друг другу они работают на разных каналах (частотах). Если ваше устройство работает в месте, где много других Wi-Fi сетей, возможно имеет смысл перейти на другой канал, чтобы избежать взаимных помех. На танке я выбрал 11 канал как самый менее популярный.
- По умолчанию на ESP-32 включен режим энергосбережения (сна) для Wi-Fi. Это прекрасное решение для каких-то IoT штучек, но плохое для устройств, где нужен максимальный отклик. Из-за этого режима, Wi-Fi как бы иногда «отдыхает», видно это по большим случайным задержкам. Отключить легко – WiFi.setSleep(false). Выключение этого режима, дает ровный стабильный отклик по сети, при условии отсутствия других проблем.
- Если вы используете одновременно Bluetooth и Wi-Fi, то надо помнить, что ESP-32 обладает одним радиомодулем. Хоть эти две технологии и работают в одном частотном диапазоне 2.4 ГГц, но все же их реальные рабочие частоты разнесены на десятки МГц. Поэтому при одновременной работе на этих двух технологиях ESP будет переключаться с одной связи на другую, вызывая задержки.
Принцип разворачивания Wi-Fi на танке:
- Вначале танк ищет, Wi-Fi точку повторителя, если она есть, он успешно к ней подключается.
- Если при каких-то обстоятельствах соединение с повторителем разорвется, танк попробует снова с первого пункта.
- Если повторитель не найден, танк разворачивает свою точку Wi-Fi.
ESP-32 поддерживает Long Range мод, это протокол разработанный Espressif Systems, который позволяет сделать связь еще дальше, обладает увеличенной чувствительностью даже по сравнению с 802. 11b. Разработчики говорят про связь на 1 км, и даже больше с применением направленных антенн. Но данный мод поддерживается только платами ESP-32.
Итого – танк имеет настроенный для его вида трафика Wi-Fi и два режима работы. Первый «напрямую» – для быстрого разворачивания, с меньшим радиусом работы и минимальной задержкой. И второй режим с повторителем, который хоть и добавляет задержку, позволяет работать танку на дальних дистанциях и в условиях сильно зашумленного эфира.
Протоколы передачи данных
- WebSocket – позволяет передавать данные в две стороны от сервера клиенту и наоборот. Используется в качестве начального «ping» для установления режима связи и для передачи данных с ESP и Arduino в журнал.
- SSE – работает по принципу подписки клиента на сервер, но работает только в одну сторону, от сервера к клиенту. Передает на терминал некоторые данные с датчиков, которые быстро обновляются.
Выбор WS и SSE обусловлен двумя факторами:
Скорость обновления данных
На ESP-32 есть определенный лимит количества данных, которые она может обработать – примерно 15 пакетов/с. В случае превышения этого предела, данные отбрасываются с записью в UART «ERROR: Too many messages queued». Заметьте тут больше влияет количество соединений за секунду, чем объем данных.
Так как я хотел передачу побыстрее, я решил попробовать обойти это через WS и SSE. Трафик у меня почти всегда однородный, поэтому тестировалось все в одинаковых условиях. Вот какие результаты у меня получились:
Скорее всего лимит пакетов возможно увеличить путем редактирования конфигурации проекта (там есть размер буфера, и лимит очереди сообщений). Но для связки Arduino фреймворка и ESP-32 используются предварительно скомпилированный код ESP-IDF. Поэтому внести туда изменения очень сложно.
Принцип передачи данных
Данные передаются в виде строк. Часть из них в таком виде как есть, другая упаковывается в JSON.
WebSocket – передает терминалу служебные сообщения для журнала (лог) и подтверждения того что настройки Arduino были приняты.
SSE – используется для одной цели: передачи на терминал данных быстро обновляемых сенсоров сразу же как только они были приняты от Arduino.
Передача данных с датчиков
Датчики разделены на две группы:
Разделение датчиков на медленные и быстрые, позволяет передавать определенные данные, которые должны быть немедленно или как можно чаще доставлены, отделяя их от тех которые могут подождать. Отправляя такими двумя кусками «быстрых» и «медленных» данных, уменьшается общее количество пакетов и время на отправку/прием и обработку этих данных, чем если их отправлять по отдельности.
Внутренняя связь. Arduino – ESP
Для связи между платами Arduino и ESP-32-Cam используется протокол UART. Сначала я делал свой велосипед для передачи данных, но, когда этих данных стало много я понял, что намного лучше использовать готовое решение.
Таким решением стала прекрасная библиотека SerialTrasfer, она берет на себя «грязную» работу по передаче данных»: организации правильной передачи пакетов, подсчета контрольных сум и позволяет передавать простые типы данных и структуры, как раз то, что мне и нужно, поскольку я храню данные с датчиков в структуре.
Хотя у SerialTrasfer заявлена поддержка программного UART’а (Software Serial), у меня не заработало. Из-за этого и учитывая интенсивный трафик, я оставил аппаратный UART на Arduino для передачи данных. Поэтому для перепрошивки Arduino, ее надо вытянуть из танка или отключить ESP (мешает прием данных по UART).
ESP-32 имеет на борту несколько аппаратных UART, которые к тому же в отличии от Arduino могут легко переконфигурироватся на другие выводы. UART_0 остался для отладки и прошивки, а UART_1 для связи с Arduino.
Скорость UART для передачи данных установлена в 76800 бод/с. На такой скорости возникает меньше всего ошибок при передаче из-за тактовой частоты микроконтроллеров 16 МГц у Arduino и 320 МГц на ESP. Такое решение позволяет с большой степенью гарантировать доставку корректных данных между ESP и Arduino, отказавшись от их проверки и возможного дублирования.
Из-за разной архитектуры микроконтроллеров Arduino Nano (ATmega328) – 8 бит и ESP-32 – 32 бит, необходимо использовать выравнивание данных в памяти, чтобы они (перечисления, структуры) были корректно приняты на обоих платформах. Я использую для этого атрибут «__attribute__((__packed__))».
Учитывая разные напряжения логичных уровней ESP-32 (3. 3В) и Arduino (5В), UART между ними подключен через конвертер.
Принцип передачи данных по UART:
- Данные передаются парами: «Тип данных» и «Полезные данные», причем последние могут отсутствовать, ведь иногда достаточно лишь наличие самого факта передачи, например сигнал о том, что надо обновить wathdog таймер.
- Всего 8 типов данных: «Показания датчиков», «Команда управления», «Тип звукового сигнала», «Wathdog», «Сообщение в журнал (лог)», «Показания быстрых датчиков», «Настройки Arduino», «Считать настройки Arduino».
- На отправляющей стороне готовится сообщение вначале которого стоит тип данных, за ним данные, если они нужны.
- Приемная сторона принимает сообщение и в зависимости от типа сообщения, может быть: какое-то действие или распаковка «посылки» в виде полезных данных.
Такая простая система передачи данных легко масштабируется, позволяя передавать различные виды данных и вносит небольшую избыточность поскольку типы данных всего лишь перечисления (Enum) то есть обычные цифры.
Можно использовать не только UART, а например SPI, или I2C, или другой протокол передачи данных на произвольных выводах. Я же выбрал UART по причине его хорошей документации, легкости работы с ним, и то, что он все равно нужен был бы – для отладки.