RSS блога
Подписка
Трицикл из гироскутера/мини-сигвея: cборка, прошивка и настройка.
Всем добрый день! В этом обзоре речь пойдет, пожалуй, о моем самом увлекательном DIY проекте, который доставил такую массу положительных эмоций, как детям, так и их родителям.
Будем делать детский трицикл (трайк) из старого китайского мини-сигвея/гироскутера и детского велосипеда. Как всегда, в обзоре подробно представлю используемые доступные компоненты и комплектующие, процесс изготовления и сборки конструкции трицикла с задней подвеской, подготовки и установки электро-компонентов, настройки параметров и прошивки контроллера мотор-колес для комфортной езды и управления.
Обзор получился достаточно объемным, я постарался представить все основные моменты и особенности реализации поставленной задачи, поэтому придется выделить значительное время для подробного ознакомления с материалом.
Я сразу попрошу простить меня инженеров-машиностроителей, электроинженеров и программистов за ошибки в используемой мной терминологии, я в этом только стараюсь разбираться, отнеситесь пожалуйста со снисхождением, как к обзору от лингвиста-строителя).
Идея реализации данного проекта возникла в момент, когда наш мини-сигвей под названием «A8», которому уже 4 года, в очередной раз сломался.
Сигвей перестал реагировать на поворот ручки, соответственно пропала функция поворота. Необходимо было разбираться с датчиком Холла, но честно сказать, заниматься этим уже не было желания. Сигвей уже ранее начал проявлять признаки неадекватного поведения, несколько раз отключался на ходу, излишне накренялся назад при ускорении, на нем уже становилось опасно ездить.
Поэтому родилась идея использовать его мотор-колеса и сделать трицикл, как наиболее простую конструкцию. Направившись в сеть за развитием идеи, я вдруг осознал, что всё уже давно происходит без меня, и моя идея уже давно проработана большим количеством людей).
Поэтому перед непосредственной реализацией я ознакомился с опытом других самодельщиков, и отметил для себя следующие основные моменты:
— трицикл должен иметь заднюю подвеску, так как мы живем в частном секторе, и у нас рядом с домом нет ровных асфальтированных дорог (максимум укатанные асфальтовой крошкой грунтовые дороги), а выезжать на городскую проезжую часть не совсем правильно;
— трицикл должен быть двухместным, так как детей у нас двое, а организованное поочередное катание, рано или поздно, всё равно приведет к громкому конфликту и жалобам;
— трицикл надо собирать на родном контроллере от сигвея/гироскутера, так как много энтузиастов занимаются открытыми прошивками для плат на микроконтроллерах STM32/GD32, которые установленны в данных китайских изделиях. Появляется возможность получить исправления ПО, гибкие настройки, дополнительные функции, в отличии от готовых китайских контроллеров для электротранспорта.
Идейными вдохновителями моего трицикла послужили работа и видеоролики автора Youtube-канала ILYANOV. Он разработал свою конструкцию трицикла, а также сделал свою альтернативную прошивку контроллера гироскутера для удобного управления в качестве трицикла. У него есть бесплатный (с ограничением максимальной скорости) и платный вариант прошивки. Сумма за платную прошивку больше символическая, но вскоре я наткнулся в сети на другие варианты альтернативных прошивок, с более гибким конфигурированием и более эффективной работой мотор-колес. Об этом чуть позже.
Сразу скажу, что идею задней подвески я позаимствовал у товарища ILYANOV, как простой и доступный вариант, однако не стал использовать в своей конструкции раму самого гироскутера.
В ходе непродолжительного моделирования была получена, и согласована с детьми, следующая конструкция трицикла:
Для изготовления и сборки трицикла мною были куплены следующие компоненты и материалы:
Программатор 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
Для изготовления каркаса трицикла был куплен следующий стальной профиль:
Также были приобретены в магазине автозапчастей:
А также в магазине крепежа приобретен высокопрочный болт М12х170 с короткой резьбой (для крепления подрамника)
В качестве передней части нашего трицикла был куплен БУ детский велосипед. При поиске приоритетным являлось наличие переднего ручного тормоза:
Первым делом, изготовление было решено начать с подготовки колес и задней оси трицикла.
Мотор-колесо зажал в тиски и выполнил замену покрышки и камеры. Отверстие под ниппель в алюминиевом ободе колеса пришлось немного рассверлить сверлом 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-рейку с клеммниками на основании:
Соответствующим образом разместил батарею, зафиксировал штатной прижимной деталью, покрасил основание с обратной стороны черной краской, и всё подключил:
Ставим основание на подрамник:
Прикручиваем заднюю ось трицикла и подключаем фазные провода мотор-колес и коннекторы от датчиков Холла:
Несем всё на улицу и приступаем к сборке трицикла. Соединяем раму и подрамник:
Болт фиксации оси крепления подрамника в распорной втулке посадил на фиксатор резьбы:
Гайку М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, поэтому раскомментируем строку:
Затем, перейдем в подпапку “Inc” и откроем файл “config.h”
В этом файле будет редактировать необходимые нам параметры перед компиляцией.
Первым делом перейдем в раздел “BATTERY”, где в строке
Нам необходимо указать реальное значение напряжения батареи в милливольтах. А в строке
вводится значение, измеренное АЦП контроллера, которое мы получим через серийный порт чуть позже.
Перейдем в раздел “MOTOR CONTROL”
И проверим выбранный режим управления электродвигателем в строке
Чтобы у нас использовался режим FOC
В этом же разделе можно отключить одно из колес, если используется только одно мотор-колесо (иначе прошивка после включения будет ругаться на обрыв одного из колес)
А также включить режим ослабления поля (Field Weakening) для увеличения максимальной скорости движения нашего транспортного средства. Скорость увеличивается значительно:
Я использовал значение FIELD_WEAK_MAX 8, так как в ходе тестирования на стуле, при значении FIELD_WEAK_MAX 10 у меня продолжили вращаться колеса при сбросе ручки акселератора. Правда это было до шунтирования USART2 конденсаторами от наводок. Надо попробовать опять значение 10:
Раздел “DEBUG SERIAL” рассказывает нам как получить данные с USB-SERIAL адаптера подключившись к USART3 и как интерпретировать полученные данные. Это мы сделаем после первоначальной прошивки.
И наконец переходим в раздел VARIANT_HOVERCAR SETTINGS
Значение строки:
говорит, что используется Torque Mode, что дает плавный разгон, равномерную езду через препятствия и в гору, а самое главное – накат, движение по инерции при отпускании ручки акселератора, без торможения двигателем. Это очень увеличивает время пробега на батарее, так как можно разогнаться, и определенное время двигаться по инерции.
Данный параметр обеспечивает систему от обрыва провода питания или 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;
Строки
и тоже самое для ADC1, можно не трогать, так как автор реализовал режим автоматической калибровки максимальных и минимальных значений напряжения от ручки акселератора и тормоза при зажатии кнопки включения платы более 5 секунд, что мы сделаем после прошивки.
А вот строки
оказались очень кстати, потому что при сборке трицикла, я перепутал левое и правое колесо, и они у меня закрутились в обратную сторону. Данный параметр инвертирования стороны вращения мотор-колес позволил исправить направление вращения без перекоммутации.
Строку
надо обязательно закомментировать. Автор проекта использует одну боковую плату гироскутера со своей альтернативной прошивкой для индикации заряда батареи блоком светодиодов. Если плату не подключать, но при запуске прошивка вещает зумером, что имеется проблема, и двигаться дальше отказывается.
А вот строку
надо наоборот раскомментировать, так как это даст нам возможность подключиться к нашей плате с помощью USB-TTL адаптера через USART3 и получить данные по фактически определённому контроллером напряжению нашей батареи, и сделать корректировку.
Строка
Поможет включить функцию стояночного тормоза. После полной остановки и неактивной ручки акселератора наше транспортное средство будет невозможно сдвинуть с места, мотор-колеса будут сопротивляться, естественно в ущерб заряду батареи. Я не использую.
После всех внесенных изменений можно перейти к компиляции нашей прошивки. Жмем на кнопку “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
Подключаем адаптер к плате по следующей схеме:
Запускаем окно чтения виртуального серийного порта командой в терминале:
В окне побежали следующие строки с данными:
Нам интересно значения в строке под цифрой 5 и 6. Значение под цифрой 5 – измеренное значение АЦП, а под цифрой 6 – пересчет в значение напряжение питания.
Значение под цифрой 5 необходимо записать.
Затем выключаем трицикл кнопкой выключения/выключения, подключаем опять наш USB-программатор ST-LINK V2, открываем опять файл “config.h” в PlatformIO, переходим в раздел “BATTERY”, и в строке
Вносим текущее значение напряжения батареи, измеренное мультиметром, в милливольтах, а в строке
указываем измеренное значение АЦП, которое мы получили под цифрой “5” шагом ранее, с серийного порта.
Снова компилируем нашу прошивку, и опять загружаем в микроконтроллер платы.
Теперь у нас прошивка правильно определяет напряжение нашей батареи, что можно проверить, опять подключив USB-TTL адаптер, и проверив полученное значение напряжения под цифрой “6”.
Теперь нам необходимо откалибровать нашу ручку акселератора и кнопку тормоза. Для этого автор прошивки предусмотрел режим автокалибровки. Необходимо выключить плату трицикла, и снова включить, зажав кнопку включения на 5-8 секунд. Зуммер на плате издаст дополнительный сигнал, сообщив, что мы вошли в режим калибровки. Теперь у нас есть 20 секунд, в течение которых нам нужно плавно покрутить пару раз ручку акселератора от минимума до максимума, и отпустить. Соответственно, несколько раз включить кнопку тормоза и отпустить. Порядок не важен. Через 20 секунд прошивка сама выйдет из режима калибровки и все параметры наших органов управления (минимальные и максимальные значения напряжения на ADC2 и ADC1) будут сохранены. Это необходимо делать после каждой загрузки новой прошивки, если мы делаем в ней изменения и заливаем новую.
Кстати, если во время режима автокалибровки подключиться к плате USB-TTL адаптером и вывести данные с серийного порта, то экран оповестит нас о начале режима автокалибровки, и покажет статус после завершения.
В принципе всё, можно ехать! На небольшом отрезке неровной грунтовой дороги я разогнался до 32 км/ч, на асфальте думаю шустрее поедет. У детей динамика внушительней.
UPD: Задний ход включается двойным нажатием кнопки тормоза, при полной остановке трицикла. Включается зуммер заднего хода, и можно двигаться назад. Затем опять двойным нажатием на тормоз выключаем режим заднего хода, и едем вперед.
Основные моменты которые необходимо учесть при доработке данной конструкции трицикла:
— Отбойник нижнего подрамника. После сборки и полной загрузке пассажирами, выяснилось, что профиль заднего сидения встречается с подрамником на большом ходе амортизатора — слишком мягкий амортизатор. После некоторых раздумий, я обнаружил, что амортизатор можно настроить, закручивая нижнюю резьбовую чашку по оси вверх, на сжатие пружины. Жесткость увеличилась, и сидение перестало бить по крышке подрамника. По началу у меня была идея поставить сразу резиновый отбойник, на всякий случай, от задней подвески Нивы. Но проехавшись по местным магазинам автозапчастей, такой не нашел, и я про это вскоре забыл.
Забыл зря, так как на хороших кочках дети всё-таки смогли найти слабые места конструкции:
На скорую руку мною был придуман следующий отбойник/ограничитель ходя заднего подрамника, из болта, гаек и старого подшипника:
Работает хорошо, но постукивает, надо думать над другой реализацией.
— Подножки водителя и пассажира. После нескольких дней разъездов на новом транспортном средстве, краска с подножек начала стираться. Соответственно, нужно было это исправить. Не нашел ничего проще и быстрее, чем обтянуть их двойным слоем плотной термоусадки:
— Батарея. Это, на данный момент, самый критичный момент в данном проекте, так как родная батарея уже немного устала, и её хватает лишь на 5-7 км, что совсем грустно.
Разобрал мертвую батарею от купленного БУ гироскутера, достал из него плату BMS, купил новых аккумуляторов, соберу новую батарею. Их оставшихся банок двух старых штатных батарей соберу еще одну батарею и поставлю как вторую в подрамник, с возможностью переключения ранее приобретенной клавишей:
Что еще хотелось бы добавить к трициклу:
На этом всё! Если есть вопросы, постараюсь ответить. Если есть предложения по доработке и улучшению — давайте вместе обсудим, тем более, что это уже второй обзор на данную тему.
Будем делать детский трицикл (трайк) из старого китайского мини-сигвея/гироскутера и детского велосипеда. Как всегда, в обзоре подробно представлю используемые доступные компоненты и комплектующие, процесс изготовления и сборки конструкции трицикла с задней подвеской, подготовки и установки электро-компонентов, настройки параметров и прошивки контроллера мотор-колес для комфортной езды и управления.
Обзор получился достаточно объемным, я постарался представить все основные моменты и особенности реализации поставленной задачи, поэтому придется выделить значительное время для подробного ознакомления с материалом.
Я сразу попрошу простить меня инженеров-машиностроителей, электроинженеров и программистов за ошибки в используемой мной терминологии, я в этом только стараюсь разбираться, отнеситесь пожалуйста со снисхождением, как к обзору от лингвиста-строителя).
ВВЕДЕНИЕ.
Идея реализации данного проекта возникла в момент, когда наш мини-сигвей под названием «A8», которому уже 4 года, в очередной раз сломался.
Сигвей перестал реагировать на поворот ручки, соответственно пропала функция поворота. Необходимо было разбираться с датчиком Холла, но честно сказать, заниматься этим уже не было желания. Сигвей уже ранее начал проявлять признаки неадекватного поведения, несколько раз отключался на ходу, излишне накренялся назад при ускорении, на нем уже становилось опасно ездить.
Поэтому родилась идея использовать его мотор-колеса и сделать трицикл, как наиболее простую конструкцию. Направившись в сеть за развитием идеи, я вдруг осознал, что всё уже давно происходит без меня, и моя идея уже давно проработана большим количеством людей).
Поэтому перед непосредственной реализацией я ознакомился с опытом других самодельщиков, и отметил для себя следующие основные моменты:
— трицикл должен иметь заднюю подвеску, так как мы живем в частном секторе, и у нас рядом с домом нет ровных асфальтированных дорог (максимум укатанные асфальтовой крошкой грунтовые дороги), а выезжать на городскую проезжую часть не совсем правильно;
— трицикл должен быть двухместным, так как детей у нас двое, а организованное поочередное катание, рано или поздно, всё равно приведет к громкому конфликту и жалобам;
— трицикл надо собирать на родном контроллере от сигвея/гироскутера, так как много энтузиастов занимаются открытыми прошивками для плат на микроконтроллерах STM32/GD32, которые установленны в данных китайских изделиях. Появляется возможность получить исправления ПО, гибкие настройки, дополнительные функции, в отличии от готовых китайских контроллеров для электротранспорта.
Идейными вдохновителями моего трицикла послужили работа и видеоролики автора Youtube-канала ILYANOV. Он разработал свою конструкцию трицикла, а также сделал свою альтернативную прошивку контроллера гироскутера для удобного управления в качестве трицикла. У него есть бесплатный (с ограничением максимальной скорости) и платный вариант прошивки. Сумма за платную прошивку больше символическая, но вскоре я наткнулся в сети на другие варианты альтернативных прошивок, с более гибким конфигурированием и более эффективной работой мотор-колес. Об этом чуть позже.
Сразу скажу, что идею задней подвески я позаимствовал у товарища ILYANOV, как простой и доступный вариант, однако не стал использовать в своей конструкции раму самого гироскутера.
В ходе непродолжительного моделирования была получена, и согласована с детьми, следующая конструкция трицикла:
КОМПЛЕКТУЮЩИЕ:
Для изготовления и сборки трицикла мною были куплены следующие компоненты и материалы:
Программатор 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 с короткой резьбой (для крепления подрамника)
В качестве передней части нашего трицикла был куплен БУ детский велосипед. При поиске приоритетным являлось наличие переднего ручного тормоза:
ИЗГОТОВЛЕНИЕ И ПОДГОТОВКА И ОСНОВНЫХ КОМПОНЕНТОВ И УЗЛОВ:
Первым делом, изготовление было решено начать с подготовки колес и задней оси трицикла.
Мотор-колесо зажал в тиски и выполнил замену покрышки и камеры. Отверстие под ниппель в алюминиевом ободе колеса пришлось немного рассверлить сверлом 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-рейку с клеммниками на основании:
Соответствующим образом разместил батарею, зафиксировал штатной прижимной деталью, покрасил основание с обратной стороны черной краской, и всё подключил:
Ставим основание на подрамник:
Прикручиваем заднюю ось трицикла и подключаем фазные провода мотор-колес и коннекторы от датчиков Холла:
СБОРКА:
Несем всё на улицу и приступаем к сборке трицикла. Соединяем раму и подрамник:
Болт фиксации оси крепления подрамника в распорной втулке посадил на фиксатор резьбы:
Гайку М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: Задний ход включается двойным нажатием кнопки тормоза, при полной остановке трицикла. Включается зуммер заднего хода, и можно двигаться назад. Затем опять двойным нажатием на тормоз выключаем режим заднего хода, и едем вперед.
Бюджет проекта и требуемые доработки:
Основные моменты которые необходимо учесть при доработке данной конструкции трицикла:
— Отбойник нижнего подрамника. После сборки и полной загрузке пассажирами, выяснилось, что профиль заднего сидения встречается с подрамником на большом ходе амортизатора — слишком мягкий амортизатор. После некоторых раздумий, я обнаружил, что амортизатор можно настроить, закручивая нижнюю резьбовую чашку по оси вверх, на сжатие пружины. Жесткость увеличилась, и сидение перестало бить по крышке подрамника. По началу у меня была идея поставить сразу резиновый отбойник, на всякий случай, от задней подвески Нивы. Но проехавшись по местным магазинам автозапчастей, такой не нашел, и я про это вскоре забыл.
Забыл зря, так как на хороших кочках дети всё-таки смогли найти слабые места конструкции:
На скорую руку мною был придуман следующий отбойник/ограничитель ходя заднего подрамника, из болта, гаек и старого подшипника:
Работает хорошо, но постукивает, надо думать над другой реализацией.
— Подножки водителя и пассажира. После нескольких дней разъездов на новом транспортном средстве, краска с подножек начала стираться. Соответственно, нужно было это исправить. Не нашел ничего проще и быстрее, чем обтянуть их двойным слоем плотной термоусадки:
— Батарея. Это, на данный момент, самый критичный момент в данном проекте, так как родная батарея уже немного устала, и её хватает лишь на 5-7 км, что совсем грустно.
Разобрал мертвую батарею от купленного БУ гироскутера, достал из него плату BMS, купил новых аккумуляторов, соберу новую батарею. Их оставшихся банок двух старых штатных батарей соберу еще одну батарею и поставлю как вторую в подрамник, с возможностью переключения ранее приобретенной клавишей:
Что еще хотелось бы добавить к трициклу:
- переднюю фару и задние фонари;
- небольшую сетку-багажник на спинку заднего сидения;
- крылья на задние колеса (пока не знаю какой конструкции и формы);
Бюджет проекта:
№ | Наименование | Цена (руб.) |
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 р. |
На этом всё! Если есть вопросы, постараюсь ответить. Если есть предложения по доработке и улучшению — давайте вместе обсудим, тем более, что это уже второй обзор на данную тему.
Самые обсуждаемые обзоры
+66 |
2009
155
|
+37 |
2259
65
|
и… свободному времени, перепрошить контролёр только чего стоит… разобраться в прошивке все изучить.
— Батарея. Это, на данный момент, самый критичный момент в данном проекте, так как родная батарея уже немного устала, и её хватает лишь на 5-7 км, что совсем грустно.
Да, батарея на 5-7 км, это, конечно, слезы…
Амортизатор второй, с другой стороны не думали поставить?
Второй пока не думал. Важно найти баланс, так как одному ребенку на двух амортизаторах будет также жестко, как и без них.
Я специально делал широкую базу и низкий уровень посадки. В ходе самостоятельного тестирования мне не удалось нарушить горизонтальное положение трицикла при маневрах. Однако сын говорит, что ему удавалось поднять одно из колес, но это всё его тяга к поиску пределов. На велосипед ведь ограничитель скорости не поставишь, а на нем у него скорости повыше будут, и передний тормоз дисковый имеется, вероятность улететь даже больше.
Дочь напротив, сама себе ставит ограничение, выше которого не поедет, тут даже в прошивке изменения делать не надо ).
Тормоза как писали уже выше — хилые. Были бы хотя бы дисковые. Нужно или дублирование на случай отказа (лопнул тросик, выпала тормозная резинка) или аварийная кнопка торможения мотор-колесами, когда поехал под уклон и понял что ручной тормоз не помогает.
По подножке с Вами согласен, такая же вероятность прокручивалась в голове, надо доработать конструкцию.
вот так выглядят травмобезопасные подножки
Может стоило установить амортизатор прямо под креплением заднего сидения (чуть под наклоном), оперев нижний конец на вторую втулку (параллельно распорной).
Плюс приподнимет заднюю сторону рамы, и второму ребенку будет комфортнее гордо глазеть по торонам :)
Дело в том, что для одного водителя, даже для меня, подвеска работает очень комфортно, но вот когда уже в есть пассажир, например такой же, как сын, то на больших кочках появляется большая амплитуда и получаем пробой. Надо найти баланс, пока не знаю как, надо думать.
Чтобы не было пробоя на большой развесовке можно добавить под хвост короткую пружину для гашения ударов.
Просто на профильных форумах обсуждения очень много, есть много людей которые подробно разобрались, но почему-то не хотят поделиться знанием с теми, кому это приходится тяжело, при чем это делается с фразой «в исходниках всё написано подробно, разбирайтесь… кстати смотрите как еще умеет ездить мой аппарат!»
Поэтому я решил поделиться тем, в чем мне удалось разобраться, чтобы работало, так сказать — любителям от такого же любителя!
Кстати забыл, хотел собрать файл со схемами плат гироскутеров, которые мне удалось найти на просторах сети, и которые помогут при ремонте плат и подключении. У меня в первый же день сгорел один из TIP127 на плате, пришлось менять.
Сегодня сделаю в качестве приложения к обзору, чтобы всё было в одном месте.
И еще кто бы посоветовал, как просто сделать зависимую подвеску — она должна вот так делать:
Ваша так не делает, ну а в моем варианте подвеска отсутствует, как класс :)
Независимую подвеску в простейшем варианте проще сделать, а в зависимой перекосы получаются.
У меня мысль в очередной игрушке сохранить корпус гирика, как несущую конструкцию, но подвеску тогда надо делать зависимую
ЗЫ байкера растите)
Хотел написать про отбойник, но в конце статьи про него уже написали, он действительно крайне полезен.
Ещё желательно добавить датчик угла поворота руля и отдавать его данные на плату контроллера (чтоб она подтормаживала одно из колёс).
У вас же оба ведущих колеса и нет дифференциала, даже при небольшом повороте руля и выкрученной ручке газа могут быть нехорошие последствия.
Ну и как уже писали — нужен задний тормоз.
Можно и электронный с регулировкой усилия (хоть и менее безопасно), но на больших скоростях (а 30 км/с это уже немало) передний тормоз может привести к неконтролируемому заносу и перевороту.
А ещё было бы круто добавить заднюю скорость ;)))
Благо это делается чисто прошивкой, механически ничего переделывать не нужно.
Больше ничего не надо.
Тогда реально круто!!!
Поздравляю!
Есть вопросик.Хочу сделать чтото среднее между ситикоко и китайским скутером на маленьких колесах, проєкт должен быть мегабюджетным.
Без прошивки по Вашей схеме подключения ручки газа он хоть как то будет ехать или с покупкой гироскутера-донора надо брать оба програматора?
Надо будет изменить значение «337» в строке в разделе BATTERY:
на какое-нибудь другое значение отключения
Почему предохранитель без запаса?.. Наклон вилки не нравится.
Можно со сплавом Розе отпаять, но важно хорошо убрать остатки легкоплавкого припоя, вплоть до повторного лужения обычным припоем. Оплёткой проводить вдоль площадок.
И как насчет 4-х колесного устройства? Из двух гироскутеров
Может мне показалось, но у вас у трицикла надо зад утяжелять. Такой вид что вот вот на повороте завалится.
А касаемо жесткости — можно попробовать придумать поставить второй такой же аморт, сжать его до конца и зафиксировать на раме (приварить например). На подвижной части сделать подобие отбойника, который будет работать только при сильном сжатии основного аморта.
А обзор супер! В закладки полюбому!
Интересно, что будут собирать дети и их родители из подручных средств у себя в гараже лет эдак через тысячу. Что-нибудь способное долететь на подуставших аккумуляторах до Луны, с планами переоборудовать чем-то более впечатляющим, чтобы хватило до Марса?)
Сколько вся конструкция весит?
интересный проэкт.
… но
но мне показалось, что «снаряд» без ограничения скорости достаточно опасен для детей — они ж жмут всегда «на все деньги»… а если авто из-за поворота?
— сын сам разберется с прошивкой, уберет ограничение и перепрошьет. Он видел как это делается, значит точно повторит;
— пересядет на велосипед, как более быстрый вид транспорта, там ограничений нет;
А дочь сама себе делает внутреннее ограничение, так как быстро передвигаться не любит.
У самого дома 2 гироцикла и желание сделать что-то подобное для детей. Есть старый веломобиль, на который можно поставить двигатели. Осталось выкроить время.
electrotransport.ru/ussr/index.php?topic=25627.0
3,5 года назад сделал. С этого года радует уже дочку друга, моя выросла ))
Батарея 10Ач 12S LiFePO4, зарядки хватало на 4-7 дней активного катания. Имеется регулировка мощности.
Не могу залить прошивку, всё делаю по порядку, но выдает ошибку:
Не подскажете что может быть? Возможно из-за того что плата GD32?
P.S. Зашел сюда абсолютно случайно по ссылке гугла. А топик актуален день-два после публикации — дальше вопросы никто, кроме автора не увидит. Хотите ответов — пишите лично тому, кто, по вашему мнению, может ответить.
Еще такой момент, в прошивке в файле config.h отсутствует строка #define ADC_PROTECT_ENA, и возможно это какраз сработала защита?
у меня ошибка, как исправить?
#define DUAL_INPUTS // ADC*(Primary) + Sideboard_R(Auxiliary). Uncomment this to use Dual-inputs
#define PRI_INPUT1 1, 1000, 0, 2500, 0
#define PRI_INPUT2 1, 500, 0, 2200, 0
#define AUX_INPUT1 2, -1000, 0, 1000, 0
#define AUX_INPUT2 2, -1000, 0, 1000, 0
Прописал параметры ADC1 и ADC2 руками, а указанные выше соответственно закомментировал, посыпались ошибки, т.к. на них ссылаются другие файлы.
Подскажите пожалуйста как правильно переключиться на ADC?