Всем добрый день! В этом обзоре речь пойдет, пожалуй, о моем самом увлекательном DIY проекте, который доставил такую массу положительных эмоций, как детям, так и их родителям. Будем делать детский трицикл (трайк) из старого китайского мини-сигвея/гироскутера и детского велосипеда. Как всегда, в обзоре подробно представлю используемые доступные компоненты и комплектующие, процесс изготовления и сборки конструкции трицикла с задней подвеской, подготовки и установки электро-компонентов, настройки параметров и прошивки контроллера мотор-колес для комфортной езды и управления. Обзор получился достаточно объемным, я постарался представить все основные моменты и особенности реализации поставленной задачи, поэтому придется выделить значительное время для подробного ознакомления с материалом.
Я сразу попрошу простить меня инженеров-машиностроителей, электроинженеров и программистов за ошибки в используемой мной терминологии, я в этом только стараюсь разбираться, отнеситесь пожалуйста со снисхождением, как к обзору от лингвиста-строителя).
ВВЕДЕНИЕ.
Идея реализации данного проекта возникла в момент, когда наш мини-сигвей под названием «A8», которому уже 4 года, в очередной раз сломался.
Сигвей перестал реагировать на поворот ручки, соответственно пропала функция поворота. Необходимо было разбираться с датчиком Холла, но честно сказать, заниматься этим уже не было желания. Сигвей уже ранее начал проявлять признаки неадекватного поведения, несколько раз отключался на ходу, излишне накренялся назад при ускорении, на нем уже становилось опасно ездить. Поэтому родилась идея использовать его мотор-колеса и сделать трицикл, как наиболее простую конструкцию. Направившись в сеть за развитием идеи, я вдруг осознал, что всё уже давно происходит без меня, и моя идея уже давно проработана большим количеством людей). Поэтому перед непосредственной реализацией я ознакомился с опытом других самодельщиков, и отметил для себя следующие основные моменты:
— трицикл должен иметь заднюю подвеску, так как мы живем в частном секторе, и у нас рядом с домом нет ровных асфальтированных дорог (максимум укатанные асфальтовой крошкой грунтовые дороги), а выезжать на городскую проезжую часть не совсем правильно; — трицикл должен быть двухместным, так как детей у нас двое, а организованное поочередное катание, рано или поздно, всё равно приведет к громкому конфликту и жалобам; — трицикл надо собирать на родном контроллере от сигвея/гироскутера, так как много энтузиастов занимаются открытыми прошивками для плат на микроконтроллерах STM32/GD32, которые установленны в данных китайских изделиях. Появляется возможность получить исправления ПО, гибкие настройки, дополнительные функции, в отличии от готовых китайских контроллеров для электротранспорта.
Идейными вдохновителями моего трицикла послужили работа и видеоролики автора Youtube-канала ILYANOV. Он разработал свою конструкцию трицикла, а также сделал свою альтернативную прошивку контроллера гироскутера для удобного управления в качестве трицикла. У него есть бесплатный (с ограничением максимальной скорости) и платный вариант прошивки. Сумма за платную прошивку больше символическая, но вскоре я наткнулся в сети на другие варианты альтернативных прошивок, с более гибким конфигурированием и более эффективной работой мотор-колес. Об этом чуть позже. Сразу скажу, что идею задней подвески я позаимствовал у товарища ILYANOV, как простой и доступный вариант, однако не стал использовать в своей конструкции раму самого гироскутера.
В ходе непродолжительного моделирования была получена, и согласована с детьми, следующая конструкция трицикла:
Что же нам понадобится?
Перед тем, как сделать гироскутер, понадобится собрать все нужные детали и сделать точные расчеты.
Сводный список материалов (с рекомендуемыми марками) таков:
- Беспроводной модуль управления XBee.
- Микроконтроллер arduino.
- Аккумулятор — 2 шт.
- Датчик Inven Sense MPU-6050 на модуле GY-521 (можно заменить на другую марку с аналогичными, либо близкими характеристика).
- Материал для корпуса и ручки — тонкая сталь, либо деревянный брус.
- Колеса с диаметром 26 см.
- Переключатель.
Такой минимальный набор поможет собрать сигвей своими руками. Кроме того, потребуются соответствующие инструменты в зависимости от материала корпуса. По себестоимости лучше всего сделать из дерева, но возможно использовать алюминий. Потребуется подготовить паяльную лампу со всеми необходимыми дополнениями, дрель, набор гаечных ключей, ножовку (для работы по металлу, либо дереву), плоскогубцы и простую ленту для измерения.
КОМПЛЕКТУЮЩИЕ:
Для изготовления и сборки трицикла мною были куплены следующие компоненты и материалы:
Программатор ST-Link V2
. Его будем использовать для загрузки новой прошивки микроконтроллера STM32/GD32 на плате сигвея/гироскутера. Ссылка: ST-Link V2 stlink mini STM8STM32 STLINK simulator download programming With Cover
Комплект ручек на руль велосипеда, с ручкой акселератора на датчике Холла,
с интегрированным вольтметром для контроля напряжения аккумулятора, и двумя кнопками: кнопка с фиксацией(красная) и кнопка без фиксации (зеленая), которую будем использовать в качестве кнопки электронного тормоза. Ссылка: Electric Bike Voltage Display 1 Pair Universal LED Voltage Display Twist Throttle for 12-99V Ebike Scooter Durable
Шины и камера для тачки, размерность «6”- 4.00». Так как родные шины мотор-колес низкопрофильные, больше подходят для ровного асфальта, и большую скорость на них не развить, то было решено поменять их на шины большего наружного диаметра. Покупать что-то специальное от Kenda, по 2-2,5 т.р. за шину пока не было желания (не было полной уверенности в успехе реализуемого проекта), поэтому был рассмотрен более дешевый вариант шин Delta в интернет-магазине. Ссылка на шины: Шина «Delta» 400-6 для пневматического колеса Ссылка на камеры: Камера 400-6 для пневматического колеса
Для изготовления амортизируемой задней подвески был куплен самый простой велосипедный амортизатор с заявленной жесткостью 850 LBS, что в итоге оказалось маловато, хотя может амортизатор не соответствует заявленной жесткости. Ссылка: Задний амортизатор рамы KZ-880B, 165 mm/420030
Для изготовления каркаса трицикла был куплен следующий стальной профиль:
- Профилированная труба 20х20х2 – 3м;
- Профилированная труба 40х20х2 – 3м;
- Профилированная труба 40х40х3 – 1м (был в наличии);
- Пластина 40х4 – 1 м (были обрезки в наличии);
Также были приобретены в магазине автозапчастей:
- Штанга реактивная средняя 2101-07, ссылка: Штанга реактиваня
- Втулка амортизатора заднего 2101-07 распорная большая металл, ссылка: Втулка амортизатора
А также в магазине крепежа приобретен высокопрочный болт М12х170 с короткой резьбой (для крепления подрамника)
В качестве передней части нашего трицикла был куплен БУ детский велосипед. При поиске приоритетным являлось наличие переднего ручного тормоза:
Ремонт segway
Ремонт сибвея свелся к замене силовых транзисторов, их драйвера, и резисторов обвязки. Также восстановлена перегоревшая дорожка, замок с ключом заменен на обычные тумблеры, и в схему включен защитный автомат на 63 А. Надеюсь, в случае чего, он спасет схему от выгорания.
Только в этом случае опять пострадает и чей-то нос.
Так что прогноз пессимистичный, покупайте только качественные вещи, особенно, если речь идёт о безопасности! Теперь понятно, почему на всех фото ездок на сигвее с надетым шлемом…
ИЗГОТОВЛЕНИЕ И ПОДГОТОВКА И ОСНОВНЫХ КОМПОНЕНТОВ И УЗЛОВ:
Первым делом, изготовление было решено начать с подготовки колес и задней оси трицикла.
Мотор-колесо зажал в тиски и выполнил замену покрышки и камеры. Отверстие под ниппель в алюминиевом ободе колеса пришлось немного рассверлить сверлом 9мм, так как у новой камеры основание ниппеля было заметно толще:
Получились вот такие внушительные бублики:
В качестве задней оси было решено использовать профилированную трубу 20х20х2. Диаметр оси самого мотор-колеса составляет 16мм, и я предварительно тестировал на небольшом обрезке, как подходит квадратный профиль на ось. Был небольшой люфт в 1мм, но при условии планируемой затяжки оси в профиле двумя болтами, меня данный люфт устраивал. Затем я купил 3 метра нового профиля, и вот он уже подходил под ось мотор-колеса просто идеально, даже заходил с трудом в натяг, получилось даже лучше, чем я ожидал.
Соответственно, отрезал кусок профиля для будущей оси трицикла и подготовил гайки и болты фиксации мотор-колес:
Просверлил отверстия в профиле и прикинул место крепления гаек:
Обварил гайки, закрутил болты:
Подготовил отверстия под вывод проводов от мотор-колес, собрал готовую заднюю ось:
Задний подрамник сделал из профиля 40х20х2, выполнил надрезы в профиле и согнул в тисках форму будущего подрамника:
Приварил внутреннюю перемычку подрамника и обварил все стыки:
Взял приобретенную реактивную штангу с сайлент-блоками, разрезал её пополам, скрепил обе половинки болтом М12х170 через распорную втулку, разметил и приварил к конструкции подрамника. Примечание: сварщик я еще тот! Опытные люди знают, а я не сразу сообразил, что при активной укладке сварных швов надо учитывать тепловое расширение элементов, соответственно перемычке подрамника, куда я приваривал половинки штанги, стало жарко, ей некуда было расшириться, и она пошла немного дугой. Особой роли не сыграло, но момент не очень приятный.
Распорная втулка оказалась с несколько большим внутренним диаметром, чем ожидалось – 16 мм, а меньшим диаметром найти не удалось. Поэтому поступил тем же способом – сверлим отверстие, привариваем гайку и фиксируем ось во втулке болтом М8:
Размещаем наш полученный подрамник и примеряем квадратный профиль рамы, прихватываем и привариваем втулку к профилю рамы:
Соединяем профиль рамы и подрамник, используем болт, шайбы и гайку М12:
Для крепления амортизатора подрамника подготовил пластины из полосы 40х4 и сделал отверстия 8мм. Отверстий сделал несколько, для возможной замены амортизатора и смены его положения:
Выставляем угол наклона подрамника к раме и примеряем пластины с амортизатором, подрезаем пластину под нужный угол для крепления к трубе подрамника и привариваем:
Подготавливаем ответную часть крепления амортизатора, из куска профиля 20х20х2 и пластин с отверстием 8 мм:
Примеряем ответный кронштейн амортизатора к раме, подрезаем и привариваем. Сразу скажу, что мне пришлось его потом отрезать и переварить чуть дальше, потому что я заложил слишком малый угол подрамника к раме, и даже при небольшой нагрузке подрамник выходил вровень с осью рамы:
Подготовил и приварил пластины крепления заднего сиденья, с отверстиями 8 мм:
Соответствующим образом и пластины переднего сиденья:
Для продолжения работы, необходимо было изготовить сами сиденья, потому что от них зависело место крепления подножек для водителя и пассажира, ну и точка крепления передней части велосипеда к раме трицикла.
Из фанеры 12 мм лобзиком вырезал основания сиденья и спинки (в этот раз не на распиловочном столе, так как он лишился пилы для работ на улице):
Разметил крепежные отверстия и забил усовые гайки М8
К основаниям приклеил поролон, оставшийся от изготовления кровати (40мм + 10мм):
Несколько лет назад я купил на распродаже в магазине кожи, кусок искусственной кожи черного цвета, который и решил использовать в этом проекте. Обтягиваем основания кресел кожей, используя мебельный степлер:
Нижнюю часть фанерного основания сиденья я впоследствии покрасил черной краской, а вот для задней части спинки было решено сделать панель из фанеры 6 мм, и также обтянуть кожей:
Раму сиденья сделал из профиля 40х20х2, выполнил надрез, согнул под нужным углом, обварил стыки, разметил и просверлил отверстия 8мм для крепления к кронштейнам на раме трицикла:
Пришло время стыковать переднюю часть трицикла. Разрезаем детский велосипед, выставляем раму на блок, формуем трубы рамы велосипеда под раму трицикла, зовем детей и замеряем необходимое расстояние крепления от сиденья, свариваем детали:
Крепление задней оси к подрамнику выполняем болтами М8, сверлим отверстия и крепим:
Подножки для водителя и пассажира изготовил из трубы 20х20х2 и пластин 40х4. Крепим болтам М6:
Плату контроллера и аккумулятор трицикла я запланировал разместить в самом подрамнике, для этого высоты профиля 40мм не хватало, и я нарастил его вниз до уровня задней оси профилем 20х20х2, итого глубина отсека получилась 60 мм:
Верхнюю и нижнюю крышку отсека я решил сделать из оргстекла:
Крепление крышек сделал на болты М6, резьбу нарезал метчиком прямо в профиле подрамника:
Берем все детали трицикла и отправляем грунтовать и красить:
Для закрытия торцов профилей приобрел торцевые заглушки для профиля, перед покраской использовал грунтовку по пластику:
Крышку «моторного» отсека зашлифовал 120 зерном, и также отправил в покраску:
Элементы рамы и подрамника покрасил в оранжевый цвет, для сидений, крышек «моторного» отсека и перехода передней части от велосипеда к раме был выбран черный цвет:
Пока сохнет грунтовка, краска и лак, можно опять сделать перерыв и перейти к электронной части нашего транспортного средства.
Еще до запуска проекта я получил программатор ST-LINK V2 и загрузил прошивку от автора ILYANOV через программу STM32 ST-LINK Utility (https://www.st.com/en/development-tools/stsw-link004.html). Всё получилось. По данной ссылке можно найти файлы прошивок автора и его схемы подключения: ссылка. Но позже я открыл для себя альтернативную прошивку другого автора, о которой речь пойдет далее.
Для данного проекта используется только основная плата сигвея/гироскутера, дополнительные гироплаты откидываются. В сети есть хорошая картинка с обозначением всех I/O платы:
В соответствии с имеющимися компонентами и платой получилась следующая схема подключения:
Плата у меня на микроконтроллере STM32F103. Необходимое напряжение +3.3В я взял с корпуса преобразователя AMC1117 отдельным проводом, который завел в общий жгут проводов от USART2 (на самом USART2 есть только +15В, которые использовать нельзя):
Для того, чтобы линии АЦП USART2 не были подвержены наводкам, а также для защиты от неадекватной реакции платы на обрыв провода от ручки акселератора или тормоза, необходимо зашунтировать выводы ADC2 и ADC1 конденсатором 0,1-0,01 мкФ и выполнить подтяжку резисторами 2-10 кОм к GND. У меня не было SMD деталей, поэтому использовал обычные выводные, и самый мелкий конденсатор у меня был 2200 пФ, который также подошел. Без конденсаторов у меня даже колеса начинали резво вращаться, когда я просто дотрагивался до корпусов мотор-колес пальцами рук:
Для установки резисторов и конденсаторов приходилось снимать радиатор с платы и возвращать назад. Обратите внимание на торчащий провод красного цвета сбоку платы (обвел красным кругом).
Это как раз тот провод +3,3В, который я добавил. В ходе вращения платы при установке радиатора, этот провод +3,3В попал оголенным проводником на корпус радиатора, и произошло замыкание. Конденсаторы на плате не были разряжены, и я коротнул +3.3В. Результат не заставил себя долго ждать – плата не работает. Я сначала подумал, что пробило преобразователь питания +3.3В AMC1117, так как на нем при подаче питания было только 1,2В, но после его замены (взял с гироплаты) ничего не изменилось. В ходе дальнейшей диагностики было обнаружено, что чип STM32 мертв, короткое замыкание. Разочарованию не было предела. Я до этого читал, что при любых манипуляциях с платами необходимо разряжать емкости, тем более что на данной плате это делается, просто зажав кнопку питания, но почему-то об этом вспоминаешь, когда уже всё плохо. Столько уже сделано работы, и всё, платы нет.
На следующее утро был произведен обзвон нескольких мастерских по ремонту гироскутеров, и получена цена на БУ плату от гироскутера – 2000р. А чуть позже, небольшой поиск на Авито выдал несколько результатов БУ гироскутеров в городе по схожей цене. К вечеру был приобретен целый гироскутер, с нерабочей батареей, за 2000р.
В итоге у меня появилась плата, нерабочая батарея (6шт. банок в батарее мертвые, остальные 14 были с напряжением 3,5-3,8В), и комплект новых мотор-колес для очередного проекта. На старой плате надо менять чип микроконтроллера, но в наличии нет паяльной станции-фена, только Т12, и нет пока опыта.
Новая плата оказалась на чипе GD32F103, что сначала насторожило. Но по отзывам энтузиастов, прошивается также, и теме же прошивками, что и STM32. Сейчас могу сказать, что никаких проблем с совместимостью нет. Также, на данной плате мосфеты прикручены к радиатору нейлоновыми винтами, на красной плате были стальные винты с пластиковыми втулками-шайбами:
Плату разместил на основание «моторного» отсека на стойках из винтов, гаек и шайб М3
Для коммутации всех приходящих линий от устройств управления, кнопок включения и разъема зарядки на плату, я решил изготовить вот такую не большую плату с винтовыми клеммниками. На плате также размещен перемененный резистор, которым я планировал регулировать силу электронного тормоза, потому что я использую для тормоза простую кнопку с двумя значениями 0% и 100%. На практике оказалось, что переменный резистор не нужен, и электронным тормозом пользуешься только когда не хватает переднего ручного, и максимальная эффективность тормоза только приветствуется.
Для коммутации проводов от батареи, предохранителя и кнопки отключения батареи я использовал маленькие проходные клеммники на мини-DIN рейке.
В автомагазине приобрел держатель для плавкого предохранителя, для защиты батареи от различных неприятностей:
Разместил коммутационную плату и DIN-рейку с клеммниками на основании:
Соответствующим образом разместил батарею, зафиксировал штатной прижимной деталью, покрасил основание с обратной стороны черной краской, и всё подключил:
Ставим основание на подрамник:
Прикручиваем заднюю ось трицикла и подключаем фазные провода мотор-колес и коннекторы от датчиков Холла:
Электронная начинка сигвея
Теперь подробнее рассмотрим электронику сигвея.
Вот фото подключения платы управления.
Устройство крупнее и подключение платы
Силовые транзисторы – IRF4110:
Силовые транзисторы платы управления
Именно парочка этих транзисторов и сгорела. При этом эта пара замкнула на себя питание аккумулятора, образовав КЗ.
Электронная схема сигвея – общий вид
Рассмотрим элементы схемы подробнее.
Электронная схема сигвея – общий вид – другой ракурс
Схема в общем не большая, разобьем её на несколько частей – приемник, контроллер, электронный гироскоп, драйвера транзисторов, силовые транзисторы, блок питания.
Микросхемки IC3, IC4 – это радиоканал, который позволяет управлять сигвеем с пульта. То есть, настраивать его, калибровать, блокировать, диагностировать.
Микросхема IC2 – контроллер ATMEGA 32A. Это сердце сигвея, точнее, мозг. Тут заложено самое главное – программа, алгоритм работы. Именно эта программа управляет вращением колёс и не дает человеку упасть.
Если контроллер – мозг, то гироскоп – это органы чувств. Гироскоп – это маленькая микросхемка INVENSENCE MPU6050. Это замечательное устройство представляет собой трехканальный измеритель положения в пространстве (наклон по трем осям) и трехканальный измеритель ускорения. Если кто помнит из физики, ускорение – это скорость изменения скорости. Честно, не понимаю, как в этот чип можно впихнуть такие измерители. Я до сих пор знал электромеханические гироскопы, а акселерометры знал только электронные. Теперь узнал, что бывают и такие, и используются очень широко, в основном в мобильной и автомобильной электронике.
На последнем фото также видно две микросхемы буферов CD4001 (это 2И-НЕ). Это для развязки контроллера и остальной схемы. Далее сигнал управления поступает на драйвера IR2184S, которые подают напряжения на затворы силовых полевиков, фото которых я давал выше.
Блок питания XL7015 – преобразователь DC-DC, из плавающего постоянного напряжения около 48В он путем преобразований на частоте несколько килогерц выдает стабильное постоянное напряжение 15В. Далее – обычная КРЕНка 7805 выдает 5 Вольт. Желтая топорная перемычка была, я тут ни при чём. А вот сгоревшая дорожка вверху справа – это путь питания 0В на управление, её пришлось восстанавливать.
Слаботочные элементы схемы сигвея соединяются через кросс-плату:
На эту плату приходят сигналы: от потенциометра руля, от кнопок наличия человека, к светодиодам панели управления. И уходят провода на главную плату.
Вот двигателя с редукторами, на оси которых непосредственно насаживаются колёса. Добротно сделано, только никаких опознавательных знаков:
Двигатель колеса с редуктором
Аккумулятор тоже не содержит никаких надписей:
Аккумулятор 48В
Входят два провода для зарядки (потоньше) и два выходных провода.
Видите искореженные места? Аккумулятор вообще никак не закреплен, болтается в сигвее, и бьётся об острые края ребер жесткости.
В общем, сделано на … короче, плохо сделано, и так или иначе скорая поломка сигвея была неизбежной.
Ещё примочка – преобразователь, также валялся на дне, замотан в плёнку. Поскольку светодиоды габаритных огней рассчитаны на напряжение 12 В, а аккумулятор – на 48 В, то используется преобразователь постоянного напряжения DC-DC 48-12 В:
Схема сибвея
СБОРКА:
Несем всё на улицу и приступаем к сборке трицикла. Соединяем раму и подрамник:
Болт фиксации оси крепления подрамника в распорной втулке посадил на фиксатор резьбы:
Гайку М12 оси подрамника законтрил старым способом: просверлил сквозное отверстие 3мм через гайку и болт М12, вставил гвоздь и загнул:
Ставим амортизатор. Для крепления использую везде гайки с нейлоновыми ставками, чтобы не открутились на ходу:
Крепим подножки водителя и пассажира:
Собираем сиденья и ставим на раму, крепим также на болты М8:
Ставим новые ручки на руль:
Для установки кнопки включения, гнезда зарядки батареи, кнопки отключения батареи, решил использовать клеммную коробку черного цвета, с резиновыми мембранами для ввода/вывода кабелей:
Разместил кнопку включения и гнездо зарядки:
Для крепления клеммной коробки на раму, разместил металлическую пластину на клепках, и к ней закрепил болтами и гайками саму коробку:
Завел кабель от ручки акселератора через коробку, она пройдет транзитом до подрамника, а также гофры для прокладки двух линий: силовой кабель 3х2,5 мм2 для кнопки отключения батареи (а в будущем двух батарей), контрольный кабель 3х2х0,5 мм2 для кнопки включения, гнезда зарядки и 2 жилы в запас. Кабель 3х2,5 в одной гофре 16мм, кабель 3х2х0,5, и кабель от ручки – в другой гофре;
Для будущего переключения двух батарей, и для аварийного отключения батареи в случае неадекватного поведения трицикла, приобрел влагозащищенную кнопку на 30А и установил в крышку клеммной коробки:
Для ввода гофр в «моторный отсек» решил использовать латунные кабельные вводы. Просверлил отверстия ступенчатым сверлом, и закрепил комплектными гайками:
Получился вот такой аппарат:
Похожие изделия
Наиболее близкое изделие — ховерборд. Единственное видимое отличие состоит в отсутствии рулевого столба, тогда как гироскутер управляется именно за счет ручек. Кроме того, на сигвей сильно похожи обычные самокаты.
Таким образом, можно собрать гироскутер своими руками. Главное, чтобы итоговая стоимость деталей и затрат на всё остальное не превысила цену заводской модели. Самодельный сигвей при правильной настройке будет отличной новинкой во дворе и поводом похвастаться перед друзьями.
ПОДГОТОВКА И ЗАГРУЗКА ПРОШИВКИ:
Как писал ранее, в качестве программной части, я выбрал открытый проект энтузиаста Emanuel Feru на Github: github.com/EmanuelFeru/hoverboard-firmware-hack-FOC
Данный проект предлагает использовать как синусный, так и векторный (FOC) принцип управления 3-х фазных электродвигателей, с функцией ослабления поля (Field Weakening), в результате получаем очень мягкую работу мотор-колес, отличную плавность набора скорости и крутящего момента, а также плюсом и более высокую скорость.
Для конфигурирования, компиляции и загрузки прошивки в микроконтроллер будем использовать то, что рекомендует сам автор проекта – PlatformIO IDE, которая устанавливается в качестве расширения в Visual Studio Code от Microsoft. Сказать честно, ранее мне никогда не приходилось пользоваться данными инструментами, так как я несколько далек от программирования. Я всё это делал под MacOS, но проверил в виртуальной машине на Windows 10, всё устанавливается и выполняется также. (Единственная проблема была при установке PlatformIO в Visual Studio Code на Windows 10, был цикличный процесс установки, пока я в системе не поставил дистрибутив Python 3.7)
Открываем в PlatformIO (установленной в Visual Studio Code) папку со скаченным с Github проектом, и открываем файл platformio.ini, в котором нам дают выбор вариантов нашей прошивки. Там много вариантов реализации и управления, но нам интересен вариант VARIANT_HOVERCAR, поэтому раскомментируем строку:
default_envs = VARIANT_HOVERCAR ; Variant for HOVERCAR build
Затем, перейдем в подпапку “Inc” и откроем файл “config.h”
В этом файле будет редактировать необходимые нам параметры перед компиляцией.
Первым делом перейдем в раздел “BATTERY”, где в строке
#define BAT_CALIB_REAL_VOLTAGE 3970
Нам необходимо указать реальное значение напряжения батареи в милливольтах. А в строке
#define BAT_CALIB_ADC 1492
вводится значение, измеренное АЦП контроллера, которое мы получим через серийный порт чуть позже.
Перейдем в раздел “MOTOR CONTROL”
И проверим выбранный режим управления электродвигателем в строке
#define CTRL_TYP_SEL FOC_CTRL
Чтобы у нас использовался режим FOC
В этом же разделе можно отключить одно из колес, если используется только одно мотор-колесо (иначе прошивка после включения будет ругаться на обрыв одного из колес)
// Enable/Disable Motor #define MOTOR_LEFT_ENA // [-] Enable LEFT motor. Comment-out if this motor is not needed to be operational #define MOTOR_RIGHT_ENA // [-] Enable RIGHT motor. Comment-out if this motor is not needed to be operational
А также включить режим ослабления поля (Field Weakening) для увеличения максимальной скорости движения нашего транспортного средства. Скорость увеличивается значительно:
// Field Weakening / Phase Advance #define FIELD_WEAK_ENA 0 // [-] Field Weakening / Phase Advance enable flag: 0 = Disabled (default), 1 = Enabled #define FIELD_WEAK_MAX 5 // [A] Maximum Field Weakening D axis current (only for FOC). Higher current results in higher maximum speed. Up to 10A has been tested using 10″ wheels.
Я использовал значение FIELD_WEAK_MAX 8, так как в ходе тестирования на стуле, при значении FIELD_WEAK_MAX 10 у меня продолжили вращаться колеса при сбросе ручки акселератора. Правда это было до шунтирования USART2 конденсаторами от наводок. Надо попробовать опять значение 10:
Раздел “DEBUG SERIAL” рассказывает нам как получить данные с USB-SERIAL адаптера подключившись к USART3 и как интерпретировать полученные данные. Это мы сделаем после первоначальной прошивки.
И наконец переходим в раздел VARIANT_HOVERCAR SETTINGS
Значение строки:
#define CTRL_MOD_REQ TRQ_MODE
говорит, что используется Torque Mode, что дает плавный разгон, равномерную езду через препятствия и в гору, а самое главное – накат, движение по инерции при отпускании ручки акселератора, без торможения двигателем. Это очень увеличивает время пробега на батарее, так как можно разогнаться, и определенное время двигаться по инерции.
#define ADC_PROTECT_ENA
Данный параметр обеспечивает систему от обрыва провода питания или GND от ручки акселератора и тормоза на USART2. Параметром #define ADC_PROTECT_THRESH 300 задается порог срабатывания защиты по минимальным и максимальным значениям.
Ввиду того, что у меня для тормоза используется просто кнопка, у которой только два значения: 0 и 4095 (min/mac ADC1-value while poti at minimum-position (0 — 4095), то у меня не получается использовать функцию защиты. Параметр ADC_PROTECT_THRESH нельзя поставить меньше 1, и при иных значениях после включения питания в прошивке включается защита по нулевому значению кнопки тормоза (как бы обрыв) и трицикл пищит зумером, и никуда не едет. Поэтому я закомментировал строку #define ADC_PROTECT_ENA, отключив защиту, тем более что у меня уже есть аппаратная защита, в виде установленных резисторов подтяжки на USART2;
Строки
#define ADC2_MIN 660 // min ADC2-value while poti at minimum-position (0 — 4095) #define ADC2_MAX 2063 // max ADC2-value while poti at maximum-position (0 — 4095)
и тоже самое для ADC1, можно не трогать, так как автор реализовал режим автоматической калибровки максимальных и минимальных значений напряжения от ручки акселератора и тормоза при зажатии кнопки включения платы более 5 секунд, что мы сделаем после прошивки.
А вот строки
#define INVERT_R_DIRECTION // Invert rotation of right motor #define INVERT_L_DIRECTION // Invert rotation of left motor
оказались очень кстати, потому что при сборке трицикла, я перепутал левое и правое колесо, и они у меня закрутились в обратную сторону. Данный параметр инвертирования стороны вращения мотор-колес позволил исправить направление вращения без перекоммутации.
Строку
#define SIDEBOARD_SERIAL_USART3
надо обязательно закомментировать. Автор проекта использует одну боковую плату гироскутера со своей альтернативной прошивкой для индикации заряда батареи блоком светодиодов. Если плату не подключать, но при запуске прошивка вещает зумером, что имеется проблема, и двигаться дальше отказывается.
А вот строку
#define DEBUG_SERIAL_USART3
надо наоборот раскомментировать, так как это даст нам возможность подключиться к нашей плате с помощью USB-TTL адаптера через USART3 и получить данные по фактически определённому контроллером напряжению нашей батареи, и сделать корректировку.
Строка
#define STANDSTILL_HOLD_ENABLE
Поможет включить функцию стояночного тормоза. После полной остановки и неактивной ручки акселератора наше транспортное средство будет невозможно сдвинуть с места, мотор-колеса будут сопротивляться, естественно в ущерб заряду батареи. Я не использую.
После всех внесенных изменений можно перейти к компиляции нашей прошивки. Жмем на кнопку “PlatformIO: Build” в нижнем левом углу и компилируем нашу прошивку по выбранному варианту и параметрам, смотрим на результат процесса в нижнем окне Terminal:
После завершения процесса компиляции прошивки, мы готовы загрузить ее в микроконтроллер на плате.
Для этого я изготовил трехжильный кабель и подключил USB-адаптер ST-LINK V2 к плате по следующей схеме. Предварительно на плате припаял гребенку для подключения:
+3.3В с адаптера ST-LINK V2 для питания STM32 везде советуют не брать, прошивать только с подключенной к плате основной батареей. Хотя я пробовал и так, у меня ничего не сгорело, возможно повезло. У коллеги donBaton микроконтроллер всё-таки сгорел. Лучше избежать проблем.
Перед прошивкой может потребоваться снять защиту от записи Flash-памяти микроконтроллера. На двух моих платах потребовалось выполнить данную процедуру.
Я это сделал с помощью программы STLINK Utility под Windows, но это можно также сделать на Linux и MacOS с помощью пакета OpenOCD Подробно об этом рассказывается по данной ссылке: github.com/EmanuelFeru/hoverboard-firmware-hack-FOC/wiki/How-to-Unlock-MCU-flash (How to Unlock MCU Flash)
Представлю несколько скриншотов с процессом разблокировки MCU Flash:
После разблокировки опять возвращаемся в PlatformIO, подключаем наш кабель, зажимаем кнопку включения питания и нажимаем кнопку “PlatformIO: Upload” в программе. Зуммер радостно пропищит, окно Terminal выдаст информацию об успехе:
После первоначальной прошивки полезным будет откалибровать батарею, для того чтобы микроконтроллер правильно определял напряжение питания. Для этого используется USB-TTL адаптер. Я приобрел самый простой адаптера на CP2102 по данной ссылке: CP2102 USB 2.0 to UART TTL 5PIN Connector Module Serial Converter
Для его работы в MacOS (и скорее всего и в Windows) необходимо установить специальный драйвер: CP210x USB to UART Bridge VCP Drivers
Устройство определилось в системе и стало доступно по адресу /dev/cu.usbserial-0001
Подключаем адаптер к плате по следующей схеме:
Запускаем окно чтения виртуального серийного порта командой в терминале:
screen /dev/cu.usbserial-0001 38400
В окне побежали следующие строки с данными:
Нам интересно значения в строке под цифрой 5 и 6. Значение под цифрой 5 – измеренное значение АЦП, а под цифрой 6 – пересчет в значение напряжение питания. Значение под цифрой 5 необходимо записать.
Затем выключаем трицикл кнопкой выключения/выключения, подключаем опять наш USB-программатор ST-LINK V2, открываем опять файл “config.h” в PlatformIO, переходим в раздел “BATTERY”, и в строке
#define BAT_CALIB_REAL_VOLTAGE 3762
Вносим текущее значение напряжения батареи, измеренное мультиметром, в милливольтах, а в строке
#define BAT_CALIB_ADC 1585
указываем измеренное значение АЦП, которое мы получили под цифрой “5” шагом ранее, с серийного порта.
Снова компилируем нашу прошивку, и опять загружаем в микроконтроллер платы.
Теперь у нас прошивка правильно определяет напряжение нашей батареи, что можно проверить, опять подключив USB-TTL адаптер, и проверив полученное значение напряжения под цифрой “6”.
Теперь нам необходимо откалибровать нашу ручку акселератора и кнопку тормоза. Для этого автор прошивки предусмотрел режим автокалибровки. Необходимо выключить плату трицикла, и снова включить, зажав кнопку включения на 5-8 секунд. Зуммер на плате издаст дополнительный сигнал, сообщив, что мы вошли в режим калибровки. Теперь у нас есть 20 секунд, в течение которых нам нужно плавно покрутить пару раз ручку акселератора от минимума до максимума, и отпустить. Соответственно, несколько раз включить кнопку тормоза и отпустить. Порядок не важен. Через 20 секунд прошивка сама выйдет из режима калибровки и все параметры наших органов управления (минимальные и максимальные значения напряжения на ADC2 и ADC1) будут сохранены. Это необходимо делать после каждой загрузки новой прошивки, если мы делаем в ней изменения и заливаем новую.
Кстати, если во время режима автокалибровки подключиться к плате USB-TTL адаптером и вывести данные с серийного порта, то экран оповестит нас о начале режима автокалибровки, и покажет статус после завершения.
В принципе всё, можно ехать! На небольшом отрезке неровной грунтовой дороги я разогнался до 32 км/ч, на асфальте думаю шустрее поедет. У детей динамика внушительней.
UPD: Задний ход включается двойным нажатием кнопки тормоза, при полной остановке трицикла. Включается зуммер заднего хода, и можно двигаться назад. Затем опять двойным нажатием на тормоз выключаем режим заднего хода, и едем вперед.
Теория
В теории управления, удерживая некоторую переменную (в данном случае позицию робота), требуется специальный контроллер, называемый ПИД (пропорциональная интегральная производная). Каждый из этих параметров имеет «прирост», обычно называемый Kp, Ki и Kd. PID обеспечивает коррекцию между желаемым значением (или входом) и фактическим значением (или выходом). Разница между входом и выходом называется «ошибкой».
ПИД-регулятор уменьшает погрешность до наименьшего возможного значения, постоянно регулируя выход. В нашем самобалансирующем роботе Arduino вход (который является желаемым наклоном в градусах) устанавливается программным обеспечением. MPU6050 считывает текущий наклон робота и подает его на алгоритм PID, который выполняет вычисления для управления двигателем и удерживает робота в вертикальном положении.
PID требует, чтобы значения Kp, Ki и Kd были настроены на оптимальные значения. Инженеры используют программное обеспечение, такое как MATLAB, для автоматического вычисления этих значений. К сожалению, мы не можем использовать MATLAB в нашем случае, потому что это еще больше усложнит проект. Вместо этого мы будем настраивать значения PID. Вот как это сделать:
- Сделайте Kp, Ki и Kd равными нулю.
- Отрегулируйте Kp. Слишком маленький Kp заставит робота упасть, потому что исправления недостаточно. Слишком много Kp заставляет робота идти дико вперед и назад. Хороший Kp сделает так, что робот будет совсем немного отклоняться назад и вперед (или немного осциллирует).
- Как только Kp установлен, отрегулируйте Kd. Хорошее значение Kd уменьшит колебания, пока робот не станет почти устойчивым. Кроме того, правильное Kd будет удерживать робота, даже если его толькать.
- Наконец, установите Ki. При включении робот будет колебаться, даже если Kp и Kd установлены, но будет стабилизироваться во времени. Правильное значение Ki сократит время, необходимое для стабилизации робота.
Поведение робота можно посмотреть ниже на видео:
Бюджет проекта и требуемые доработки:
Основные моменты которые необходимо учесть при доработке данной конструкции трицикла:
— Отбойник нижнего подрамника.
После сборки и полной загрузке пассажирами, выяснилось, что профиль заднего сидения встречается с подрамником на большом ходе амортизатора — слишком мягкий амортизатор. После некоторых раздумий, я обнаружил, что амортизатор можно настроить, закручивая нижнюю резьбовую чашку по оси вверх, на сжатие пружины. Жесткость увеличилась, и сидение перестало бить по крышке подрамника. По началу у меня была идея поставить сразу резиновый отбойник, на всякий случай, от задней подвески Нивы. Но проехавшись по местным магазинам автозапчастей, такой не нашел, и я про это вскоре забыл. Забыл зря, так как на хороших кочках дети всё-таки смогли найти слабые места конструкции:
На скорую руку мною был придуман следующий отбойник/ограничитель ходя заднего подрамника, из болта, гаек и старого подшипника:
Работает хорошо, но постукивает, надо думать над другой реализацией.
— Подножки водителя и пассажира
. После нескольких дней разъездов на новом транспортном средстве, краска с подножек начала стираться. Соответственно, нужно было это исправить. Не нашел ничего проще и быстрее, чем обтянуть их двойным слоем плотной термоусадки:
— Батарея.
Это, на данный момент, самый критичный момент в данном проекте, так как родная батарея уже немного устала, и её хватает лишь на 5-7 км, что совсем грустно. Разобрал мертвую батарею от купленного БУ гироскутера, достал из него плату BMS, купил новых аккумуляторов, соберу новую батарею. Их оставшихся банок двух старых штатных батарей соберу еще одну батарею и поставлю как вторую в подрамник, с возможностью переключения ранее приобретенной клавишей:
Что еще хотелось бы добавить к трициклу:
- переднюю фару и задние фонари;
- небольшую сетку-багажник на спинку заднего сидения;
- крылья на задние колеса (пока не знаю какой конструкции и формы);
Езда на Segway
Езда на подобном оригинальном внедорожном сигвее (в спокойном режиме) показана на видео:
Также в видео подробно рассказано про технические характеристики этого замечательного устройства.
Давайте поговорим о том как можно использовать Ардуино для создания робота, который балансирует как Сигвей.
Сигвей от англ. Segway – двухколесное средство передвижения стоя, оснащенное электроприводом. Еще их называют гироскутерами или электрическими самокатами.
Вы когда-нибудь задумывались, как работает Сигвей? В этом уроке мы постараемся показать вам, как сделать робота Ардуино, который уравновешивает себя точно так же, как Segway.
Чтобы сбалансировать робота, двигатели должны противодействовать падению робота. Это действие требует обратной связи и корректирующих элементов. Элемент обратной связи — , который обеспечивает как ускорение, так и вращение во всех трех осях (). Ардуино использует это, чтобы знать текущую ориентацию робота. Корректирующим элементом является комбинация двигателя и колеса.
В итоге должен получиться примерно такой друг:
Бюджет проекта:
№ | Наименование | Цена (руб.) |
1 | Гироскутер | 2’000 р. |
2 | Метал. профиль | 700 р. |
3 | Штанга | 430 р. |
4 | Поролон/клей/экокожа | 800 р. |
5 | Крепеж | 500 р. |
6 | Шины/камера | 800 р. |
7 | Ручка/кнопка/клеммники | 950 р. |
8 | Амортизатор | 650 р. |
9 | Велосипед | 1’500 р. |
10 | Краска/грунт/лак | 960 р. |
11 | Программаторы | 250 р. |
— | ИТОГО: | 9’540 р. |
На этом всё! Если есть вопросы, постараюсь ответить. Если есть предложения по доработке и улучшению — давайте вместе обсудим, тем более, что это уже второй обзор на данную тему.
Схема робота
Модуль драйвера двигателя L298N:
Мотор редуктора постоянного тока с колесом:
Самобалансирующийся робот по существу является перевернутым маятником. Он может быть лучше сбалансирован, если центр массы выше относительно колесных осей. Высший центр масс означает более высокий момент инерции массы, что соответствует более низкому угловому ускорению (более медленное падение). Вот почему мы положили батарейный блок на верх. Однако высота робота была выбрана исходя из наличия материалов