Gd32f103 как прошить
В общем, попались такие микросхемы — GD32F103CBT6. Судя по даташиту на них, это китайские клоны процессоров STM32F103CBT6. Все одинаково, видимых различий не обнаружено.
Но при попытке программировать их, программатором ST-Link, происходит лажа. Процессоры превращаются в камень. После такой попытки программатор перестает их видеть вообще.
Кто-нибудь работал с ними? Может, у них есть различия в алгоритме программирования? Или есть какие-то дополнительные особенные фьюзы?
Если для них требуется особенный программатор, то как он называется, и где его взять?
Меню пользователя Alex9797 |
Посмотреть профиль |
Отправить личное сообщение для Alex9797 |
Найти ещё сообщения от Alex9797 |
Тема эта возникла с того, что год назад шеф принес мне две небольшие китайские платы, на которых были эти процессоры. Он обратил внимание на то, что очень уж похожие были их названия на STM32. Попросил покопаться, в просветах между основной работой. Я срисовал полную схему с этих плат. В инете нашел даташит на эти процы. И по всему выходило, что это аналоги STM32. По крайней мере внешняя распиновка, и описание функций выводов — совпадали полностью.
Следующим шагом была попытка прошить их своей программой. Выводы для программирования SWD на платах были уже выведены на разъем. Подключил ST-Link. Если бы он не видел «своего» процессора, то и не дошло бы до начала процесса программирования. То есть, процессор он видел.
Конечно, я был уверен, что защита от считывания программы была установлена. Поэтому естественно было, что программатор сообщил, что прочитать память нет возможности. Но прошивать мою программу — не отказался. Я нажал «Пуск». Пошел процесс прошивки. А когда он закончился, программатор уже не видел процессор.
Убедившись окончательно, что ничего больше не получится, я выпаял китайский проц, и впаял на его место обычный STM32F103. Он прошился без проблем.
Через некоторое время снова появилось свободное время. Занялся второй платой. Она точно такая же, как и первая. Только теперь я не стал сразу прошивать своей программой. Сначала я попытался просто стереть китайскую программу. То есть, в ST-LINK утилите просто снял галочки с битов защиты.
И все, уже этого оказалось достаточно, чтобы и второй проц стал невидимым.
Контроллеры от GigaDevice GD32F103xxxx. Попытка миграции с STM32F103xxxx
В связи с тем. что последнее время цена на контроллеры растет быстрей чем стоимость битков, а, например, наш основной STM32F103VGT6 стал стоить вместо 500р аж 5000+, да еще с непонятными сроками ожидания от года и более, то мы начали вынужденную миграцию на аналоги. И взгляд пал на GD32, как на наиболее вменяемого и адекватного представителя китайпрома. А главная задача стала сделать универсальную прошивку которая бы одинаково работала как на STM32 так и на GD32. Чтобы можно было не глядя лить в наши машины смерти, не обращая внимания на то на какой архитектуре там мозги.
Купили мы небольшую партию этих чипов на Алиэкспрессе :))) Уже звучит жутко, но вариантов особо не было 🙂
Итак, на смену STM32F103VGT6 идет GD32F103VGT6 — китайцы не заморачивались вообще с названиями. И то правда. Чего нам париться? Совместимость у него по ногам полная, так что впаиваем его как есть.
А вот дальше начинаются различия. Во первых, памяти у него может быть больше. Аж до трех мегабайт флеша, против мегабайта у STM. Что, впрочем, не более чем потенциальная возможность, в моем случае, т.к. GD32F103VGT6 по объему памяти идентичен STM овскому камню. А еще у китайца тактовая частота выше, 108Мгц против 72Мгц у STM. Подозреваю Errata там тоже исправлена. Но, не факт что это к лучшему 🙂
Качаю Даташит, User Manual, а также подобие SPL только свою собственную. С примерами и кучей сорцев из которых прям торчат уши STM 😉 Где то они даже копирайты не вычистили.
Беглое чтение user manual дает ощущение дежавю. Ну да, почти полная бинарная совместимость с STM32 на уровне регистров их адресов. В некоторых местах, там где им не хватило конфигурационных бит, они использовали то, что у STM32 зовется как Reserved.
STM32
GD32
Названия регистров немного иные, название битов тоже. Но, на мой взгляд, эти имена часто звучат понятней чем в STM32, банально считывается на уровне аббревиатур логичней.
Сама же структура юзермануала списана почти один в один, как старательный троечник списывает курач, чтобы препод «не догадался». Но это даже к лучшему, проще находить если что.
Ладно, сидеть сравнивать построчно документацию мне лень, попробуем взять быка за рога, а там будь что будет. Буду решать проблемы по мере их поступления.
Беру свой рабочий проект над которым мы копаемся уже несколько лет и, как есть, байт в байт, ничего не правя вообще, заливаю в GD32…
Чем заливаю? Да тем же китайским ST-Link за сто рублей:
ST-Link Utility восприняла ускоглазого сынка как родного. Для нее чужих детей не бывает. 🙂 Все корректно зашилось и … заработало. Подозрительно…
Хм, как прикольно. А что с отладкой? Жму Debug и… все заработало.
Тут, правда, стоит оговориться, что работаю я не с STM TrueStudio, а уже много лет пишу в EmBitz и с недавних пор они используют свой отладчик EbLink и вот ему пофигу что отлаживать, хоть STM хоть GD. Оно там просто работает. Брейкпоинты ставятся, память и регистры видятся, по шагам шагается, флеш прошивается.
С TrueStudio это уже не прокатывает. Они говорят, что мол это не STM и мы этих косоглазых знать не знаем, а что похожи, так это просто совпадение. Для Keil же GigaDevice, я слышал, выкатила плагин.
Диодики моргают, порты считываются, подтяжки встали на нужные уровни. Все пять UART бодро отработали… Аппарат вышел на связь с мозгами и встал в боевой режим и приготовился убивать человеков. Все вроде бы работает. А где секс? Чо секса не будет? Ну воооот.. А я было настроился…
Да щаз! При попытке пошевелить шаговыми движками наша машина смерти рванула с такой прытью, что я думал из нее все гайки ща посыпятся, даром что на нейлоне. Начинаю разбираться. Скорость тиков шаговых двигателей ровно в полтора раза выше. Но при этом мигалка blinker’a, а также все бодрейты уартов тикают штатно. Мигалка ровно раз в секунду на 100мс, а уарты заданы жестко и перебоев со связью нет. Из этого вывод, что как минимум SysTick тикает с правильной частотой. А от него и AHB APB и прочие частоты тоже. Но не может же так быть…
Опять углубляюсь в юзермануалы, сравниваю все побитно. Все совпадает. Все значения делителей тактовых частот совпадают. Один к одному, просто у GD множители PLL идут дальше и позволяют множить аж до х32. Проверяю по SysTick, просто инвертируя бит порта по его прерыванию — тикает верно. Проверяю по DWT таймеру — тикает верно. Timer2 тактуется тоже верно. То есть, по всем признакам работы периферии, SysClock идентичная. А работает быстрей.
Начинаю ковырять исходники и прихожу к выводу, что на максимальной скорости работы шаговых движков у меня тики происходят с такой скоростью, что половина задержки между тиками приходится не столько на выдержку таймера (с ней все в порядке), сколько на выполнение кода, переходы и прочее. Т.е. код выполняется быстрей… Проверяю гипотезу.
Делаю тупую задержку на цикле:
Сравниваю моргание на оригинальном STM и на GD — на GD в полтора раза примерно быстрей. И либо даташит врет и на самом деле SysClock работает на 108Мгц, а значения битов делителей значат вовсе не то, что написано и приводят со 108Мгц до стандартных частот шин, либо код и вправду исполняется быстрей за счет выборки команд.
Первый вариант весьма шизофреничен, т.к. какой смысл так извращаться, а на опечатку это не тянет вообще, т.к. это уже заговор какой то. А вот второй… второй может быть вероятен. Просто за счет того, что у GD более быстрая память и он команды из флеша берет быстрей.
Но вот что странно, судя по вскрытиями чипов, у GD память реализована путем напаивания отдельного (. ) кристалла поверх кристалла контроллера и все это уже заливается в корпус. По идее, такая конструкция должна работать медленней. Китайцы сделали какое то кэширование? А может вообще суперскалярность с предсказанием переходов?
Ответ должен быть в сравнении битов настройки задержки выборки флеша. Сравниваю в STM32:
Регистр FLASH_ACR по адресу 0x40022000 и там у нас:
Младшие три байта отвечают за задержку. Я частоты конфигурирую ручками. Не верю я CMSISовскому SystemInit. Слишком часто его переписывали то так то эдак. Хрен знает, что там будет в очередной версии, а мне сюрпризы не нужны. Поэтому я иницилизацию частот написал сам, ручками. В моем коде сделано так:
#ifndef SYSCLK_FREQ #define SYSCLK_FREQ 72000000U #warning SYSCLK_FREQ set up to MAX automatically. Check this shit! #endif /* Enable Prefetch Buffer */ FLASH->ACR |= FLASH_ACR_PRFTBE; /* Flash 2 wait state */ FLASH->ACR &= (uint32_t)((uint32_t)
FLASH_ACR_LATENCY); #if SYSCLK_FREQ<24000000U FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; // Если SystemCoreClock <= 24 МГц #endif #if SYSCLK_FREQ>=24000000U && SYSCLK_FREQ<48000000U FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; // Если 24< SystemCoreClock <= 48, через такт. #endif #if SYSCLK_FREQ>=48000000U FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; // Если больше 48, то через два такта. #endif
То есть выборка команд будет через два такта. Что же у ГД по этому адресу прячется? Лезем в мануал:
Все то же самое, те же биты отвечающие за задержку чтения из флеша, но с пометочкой, которую я не сразу заметил. О том, что вся эта радость работает только если поставить бит WSEN в FMC_WSEN, а иначе оно не используется. В STM32 никакого такого регистра естественно нет и задержка работает если выставлена. Зачем китайцы встрелили себе в ногу, поломав совместимость в такой простой фигне непонятно. Что им мешало сделать так, чтобы все работало идентично? Ничего не мешало. Но тем не менее. Можно, конечно, тут добавить запись бита в байт по этому адресу, убедившись только, что на STM32 выстрел уйдет в молоко, попав в очередную Reserved секцию.
Окей, добавляем. Поскольку этого адреса у STM32 нет, то я его добавлю вручную, просто через указатель:
uint32_t *FMC_WSEN; FMC_WSEN = (uint32_t*)0x400220FC;
Бит WSEN там нулевой, поэтому достаточно по этому указателю записать единичку. Правда запись туда запрещена, нужно сначала разблокировать флеш. Записав два раза в регистр FLASH_KEYR ключевое слово 1 и слово 2. Эти слова есть в хидерах на STM32 и на GD. Они одинаковые для обоих камней. Кому интересно FLASH_KEY1 = 0x45670123, а FLASH_KEY2 = 0xCDEF89AB.
FLASH->KEYR = FLASH_KEY1; FLASH->KEYR = FLASH_KEY2;
Разблокировали запись во флеш, записываем бит WSEN:
После чего выставляем задержку памяти:
#ifndef SYSCLK_FREQ #define SYSCLK_FREQ 72000000U #warning SYSCLK_FREQ set up to MAX automatically. Check this shit! #endif /* Enable Prefetch Buffer */ FLASH->ACR |= FLASH_ACR_PRFTBE; /* Flash 2 wait state */ FLASH->ACR &= (uint32_t)((uint32_t)
FLASH_ACR_LATENCY); #if SYSCLK_FREQ<24000000U FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; // Если SystemCoreClock <= 24 МГц #endif #if SYSCLK_FREQ>=24000000U && SYSCLK_FREQ<48000000U FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; // Если 24< SystemCoreClock <= 48, через такт. #endif #if SYSCLK_FREQ>=48000000U FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; // Если больше 48, то через два такта. #endif LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
И включаем снова блокировку флеша, на всякий случай.
По идее, можно включить блокировку флеша сразу же после *FMC_WSEN = (uint32_t)1; А для настроек во FLASH_ACR разблокировка не нужна. Но это не работает, должно пройти какое то время, видимо, чтобы бит успел записаться во флеш и только потом включать снова блокировку.
Правда тут тоже не вышло счастья :)))) Оказалось, что с задержкой в два такта GD32 медленней чем STM32 c задержкой в эти же два такта. Тестовый импульс у GD32 на полной скорости у нас был 23мкс, на двух тактах задержки памяти стал 54мкс, а на одном такте задержки 37мкс. В то время как STM32 на двух тактах давал 37мкс.
То есть в любом случае нам придется как то узнавать где мы находимся и исходя из этого подгонять тайминги.
Ковыряясь в даташите на GD32 я увидел, что следующим после FMC_WSEN идет регистр FMC_PID и в нем сидит какое-то число, уникальный номер кристалла (или его памяти). Но у STM32 этот же адрес возвращает какую-то фигню. Которая еще и меняется. Хотя эти адреса никак не документированы. Так что вариант так себе.
Посоветовался с коллегами, покурил даташиты и документацию на ARM ядро и нашел, что по адресу 0xE00FFFD0 и далее прячутся Peripheral ID регистры. Которые содержат циферки присущие только конкретному семейству и производителю. В частности там зашито номер ревизии чипа, JEP 106 код и еще всякая лабуда. Но, главное, что у STM32 и GD32 эти байты различаются, не меняются, всегда одни и те же от чипа к чипу, в отличии от индивидуального 96 битного ID чипа, который уникальный для каждого экземпляра.
Поэтому поглядел под отладчиком что там, да написал простенькую процедурку для опознания где мы:
Проверил в железе — работает. Вот и славно. Пляшем дальше! 🙂
А в сухом остатке, из нескольких дней ковыряния GD32, из того что проверил у нас без проблем, идентично, работает:
- SysTick
- USART’ы все
- Timer2
- DWT
- GPIO
Хватаю дисплейный модуль от другого проекта, но с этим же камнем. На нем есть FSMC интерфейс. Я на нем управлял дисплеем. Работает на отлично. Добавляем к списку проверенной периферии FSMC.
- FSMC
Хватаю другой проект, на этой же плате. Но уже боевой дисплей от компрессорной установки. Заливаю… Все работает, но жууууутко мееееееедленнно. Я поначалу решил, что я тупо кварц залил флюсом и у меня HSE не поехал. Промыл, просушил. Включил… все жууууутко меееедленно осталось. Странно. К сожалению исходников этого проекта у меня нет, знаю только что он написан на SPL и возможно что-то где-то недоинициализировалось в режиме тактирования. Надыбаю исходники, перепишу и будет ясно в чем был затык. Но я уже четко вижу, что нормально работают каналы DMA. Все не проверял, но UART там сделан через DMA это я знаю точно.
В общем, по мере освоения периферии буду добавлять в этот пост подробности о том, что же у нас по совместимости.
Спасибо. Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!
А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок.
44 thoughts on “Контроллеры от GigaDevice GD32F103xxxx. Попытка миграции с STM32F103xxxx”
Статейку лучше было бы разместить на dihalt.ru с тэгом ‘последний герой труда’. Статья помечена ‘ARM учебный курс’, думаю единственное, что тут можно почерпнуть — не используй в своих проектах всякое китайское говно.
Ну… как бы гигадевайс это вполне себе бренд. Только раньше они флеш делали. Это раз. Во вторых, гд32 превосходит стм32 почти во всем. По крайней мере в этих семействах. Ну третье… стм32 сейчас купить просто нельзя. Нигде их тупо нет. Вообще. Везде срок ожидания от года и цена при этом космическая.
А F0 семейство? Оно же посвежее чем F1 и должно быть более доступно при схожих характеристиках.
Также, ЕМНИП, потоньше техпроцесс там.
Полного совпадения по ногам и периферии нет. А проблемы с доступностью есть 🙂
Кроме как на Али их можно у Элтеха купить. Они в РФ дистрибьютеры
А в STM32Cube с этими камнями работать тоже можно?
По идее да, но может не заоаботать что-то из-за таймингов. Ну и отлаживать придется переброской проекта в эмбитз или делать в кейле с плагином.
А в STM32Cube с этими камнями работать тоже можно?
Можно, но из-за таймингов не все может работать. Т.к. хз как индусы там написали эти библиотеки.
Можно. Работаю. Только там подкрутить надо одну настройку, чтобы Куб и чужого ребенка распознал. Высплюсь, дам ссылку на подкрутку.
Самое для меня смешное, что у них есть девайсы из которого Cortex M достали, RISC-V засунули, а всю обвязку не тронули вообще. Очень смешные кадаврики получились. Вроде и RISC-V а вся периферия, вообще вся, STM32-совместимая.
Я видел. Но я пока не понимаю профитов, кроме скорости. На него линух можно будет натянуть?
Нет. Это ровно тот же контроллер, только вместо CM-3 там RV32 чего-то там.
Потенциальный профит — РИСКи будут со временем дешевле: открытое ядро, платить АРМу не надо, все дела. Понятно, что пока они в экспериментальной стадии развития, то дешевле не будут — не те тиражи — но может быть, когда нибудь…
Потенциальный профит — в будущем они, вероятно, будут дешевле. Открытая архитектура, АРМу платить не надо, все дела. Но это всё из серии «может быть, когда-нибудь». Пока что они в экспериментальной стадии, и тиражи не те, чтобы быть дешевле.
А камни от Nuvoton не пробовали? Тот же ARM.
Я тут давече именно этой темой и занимался: диверсификация поставщика STM32F. Кое-какие результаты раскопок тиснул в форум electronix.ru.
Коротко: бинарник для STM32F103VET запустился на GD32F103VET на ура за исключением I2C. Когда начал разбираться, показалось, что GD и вправду почистил errata STM32 I2C в некоторых местах, но и добавил своё. Не буду вдаваться в подробности, но скажу, что устанавливать биты POS и/или BUFIE еще до начала передачи адреса (ID) I2C периферии в GD32F нельзя: бит SB (старт) не сбрасывается после передачи адреса (ID), и логика (прерывание) зацикливается. Это странно, т.к. POS или BUFIE никак не связаны с передачей адреса, а лишь перемещают NAK и разрешают прерывание по приему, что правильно работает на STM32F1хх. К счастью, логику можно построить с установкой POS/BUFIE и после передачи адреса, что работает как на GD32F1xx, так и на STM32F1xx. Ноги предыдущей логики росли с давних времен (примерно 2009) и базировались на примерах для STM32.
Еще интересен момент, что бинарник прекрасно работает и на GD32F303VET, который внутри имеет Cortex-M4.
Ага, еще по ADC. Температурный датчик (канал ADC) всегда показывает 0xFFF. Но это при нормальном питании в 3.3V. Случайно обнаружил, что при 3.2V все работает правильно; на 303 такого эффекта нет.
В некоторых форумах на иностранных языках было упоминание, почему GD шустрее STM: якобы, GD, на самом деле, всегда работает из теневого (дополнительного) RAM, куда при старте копируется содержимое… SPI-Flash, которая и есть та странная насадка на основной кристалл. То есть, по крайней мере GD32F1хх — это такой гибрид.
Я пока не занимался проверкой этого утверждения, но я точно заметил, что запись во flash из самой программы работает явно медленнее (по ощущениям — на 30-40%), чем на STM32F, а камень в целом шустрее.
Сейчас жду образцы GD32F130K8U6, которые по пинам и всему есть аналог STM32F051K8U (используем во многих проектах), но в GD ядро -M3, а не -M0.
Разработку я веду как в (стареньком) KEIL, так и STMCubeIDE. В последнем пришлось чуть подправить один файл конфигурации, чтобы он не отвергал китайца, но это, вроде, касалось работы с STLink; J-Link V9 работает без проблем, хотя может правка делает свое дело и для него. Я сейчас за другим компом пишу, точную ссылку на правку в STMCubeIDE тисну, как доберусь до рабочего компа.
Прошивка гироскутера для управления ручкой газа
Всем привет! Для своего проекта “ Электроскутер Honda Tact AF16 из деталей от гироскутера ” решил изучить тему по прошивке гироскутера для управления ручкой газа. Пересмотрел несколько видео и прочитал столько же разных инструкций по прошивке, решил в итоге собрать все рекомендации и советы в одну статью для удобства личного использования.
В своем проекте планирую установить сдвоенные мотор-колеса на заднее колесо скутера, управление хочу сделать электронной ручкой газа и использовать плату от гироскутера. Для этого я приобрел на Авито гироскутер с мотор-колесами 6,5 дюймов (диаметр 17 см) полностью в рабочем состоянии. Остальные подробности о проекте “ Электроскутер Honda Tact AF16 из деталей от гироскутера ” расскажу в следующей статье, а теперь приступлю к описанию прошивки платы от гироскутера.
Прошивка, о которой пойдет речь в этой статье находится в общем доступе на странице официального разработчика Emanuel Feru на сайте GitHub . Данная прошивка периодически обновляется и улучшается автором.
Особенности прошивки для платы гироскутера:
- Управление моторами векторное (FOC), за счет этого получается высокий КПД и экономичный расход энергии;
- Использование ручки газа для электротранспорта на датчиках холла или потенциометрах;
- Плата от гироскутера выдерживает пиковый батарейный ток на каждый мотор до 20А, при 36В.
- В данной прошивке ручка газа управляет мощностью (током), поступаемой в мотор, а не оборотами (напряжением). За счет этого получаем плавный старт.
- Электронный тормоз можно сделать с кнопки или курка;
- Прошивка обеспечивает свободный накат мотор-колес при сбросе ручки газа;
- Функция “ослабление поля” позволяет получить более высокие оборотов без повышения напряжения батареи;
- Безопасный максимальный предел напряжения питания до 60 В (Батарея до 14S, с полным зарядом 58,8В).
Процесс подготовки и прошивки платы:
Шаг 1. Что понадобится для прошивки
- Для такой прошивки подойдет гироскутер с тремя платами в корпусе. Нам понадобится самая большая из трёх – это плата контроллера (остальные две платы поменьше это гироскопы). На плате контроллера обязательно должен стоять чип STM32F103RCT6, GD32F103RCT6 или GS32F103RCT6. Работа прошивки с другими чипами не поддерживаются. Также если в вашем гироскутере всего две платы, то такие платы не подойдут для данной прошивки.
- Необходимо купить программатор ST-Link V2 для загрузки новой прошивки в плату контроллера гироскутера. Программатор можно купить на сайте Aliexpress доставка из Китая / доставка из РФ.
- Электрическая Ручка газа с вольтметром и двумя кнопками: красная кнопка (с фиксацией) используется для включения и отключения вольтметра, а зеленая кнопка (без фиксации) будет использоваться в качестве электронного тормоза и включения заднего хода. Ссылка: Ручка газа с вольтметром (доставка из Китая).
- Также нужны будут конденсаторы 0,1-0,47 мкФ (2 шт.) и резисторы 2-10 кОм (2 шт.). Для подключения программатора ещё понадобится “гребенка” на 3 или 4 контакта.
Шаг 2. Подготовка платы к прошивке
Перед началом прошивки нужно изучить расположением всех контактов на плате контроллера гироскутера, в интернете нашел хорошую картинку с данной информацией:
Плата контроллера у меня на чипе GD32F103RCT6 (это аналог STM32).
Сначала необходимо припаять на плату контроллера конденсаторы 0,1-0,47 мкФ (2 шт.) и резисторы 2-10 кОм (2 шт.). Установка данных элементов на плату контроллера предназначена для устранения помех в проводах систем управления ручкой газа, без их установки может быть нестабильная работа и возможны ложные срабатывания при управлении. Ниже на фото показана установка данных элементов.
Ещё для подключения программатора к плате контроллера необходимо припаять гребенку на 3 контакта (можно на 4 контакта). Выход +3,3В мы не будем использовать при подключении программатора, так как может выйти из строя чип микроконтроллера (это советуют многие самодельщики).
Для удобства подключения платы для прошивки, вместо кнопки включения гироскутера, добавил переключатель на 2 положения (вкл. и выкл.). После прошивки нужно будет установить обратно стандартную кнопку для корректной работы платы.
Я же в итоге оставил и кнопку от гироскутера и переключатель, подключенными к плате, чтобы при необходимости снова прошить гироскутер ничего не перепаивать.
На этом подготовка платы к прошивке завершена.
Шаг 3. Настройка прошивки / Файл прошивки
Как я писал ранее, в качестве прошивки был выбран проект автора Emanuel Feru на Github . Вот прямая ссылка на прошивку для скачивания, после скачивания извлекаем её из архива. Эту прошивку будем настраивать в дальнейшем под свои нужды. (В исходном состоянии прошивка не готова к заливке в контроллер, её нужно сначала настроить)
Для настройки прошивки необходимо скачать и установить программу Visual Studio Code . После настройки прошивки мы сможем получить BIN-файл, который после закачаем в микроконтроллер с помощью программатора. (Чтобы скачать Visual Studio Code нужно будет зарегистрироваться на их сайте)
После запуска программы Visual Studio Code нужно будет установить дополнительное расширение PlatformIO IDE. (В некоторых случаях для Windows 10 требуется ещё дополнительно установить Python на компьютер).
Теперь открываем в Visual Studio Code папку со скаченным с Github проектом (Жмём иконку Файл – Открыть папку):
Далее открываем файл platformio.ini, в котором мы будем настраивать прошивку. В прошивке имеется несколько вариантов реализации управления, но нам необходимо выбрать вариант VARIANT_HOVERCAR (строка 18), поэтому нужно “раскомментировать” эту строку как показано на картинке ниже:
18 default_envs = VARIANT_HOVERCAR ; Variant for HOVERCAR build
Далее переходим в подпапку “Inc” и открываем “config.h“. В этом файле нужно будет установить все необходимые нам параметры. Управление выбираем VARIANT_HOVERCAR (строка 19), также нужно “раскомментировать” данную строку.
Теперь приступаем к настройке батареи – раздел “BATTERY”. Эта настройка необходима для того, чтобы контроллер научить верно определять напряжение батареи.
76 #define BAT_CALIB_REAL_VOLTAGE 4100 – здесь нужно указать фактическое напряжение батареи из расчета 1000=10В. Т.е. если после измерения напряжения своей батареи мультиметром я получил 41В, значит в прошивке прописываем значение 4100.
77 #define BAT_CALIB_ADC 1492 – здесь нужно указать значение, измеренное АЦП контроллера, которое можно будет получить через серийный порт. Это значение можно будет замерить позже.
78 #define BAT_CELLS 10 – количество последовательных ячеек в аккумуляторной батарее.
86-87 #define BAT_LVL_1..2 – напряжение при котором будет подаваться предупреждающий звуковой сигнал (340 = 3,4 вольт на банку при 10S)
88 #define BAT_DEAD (337……) – при каком напряжении на банку (320=3,2 В) отключить батарею (во избежание переразряда).
Если использовать литий-ионную аккумуляторную батарею 10S, то допускается разряжать её до 30В. Поэтому можно будет установить значения BAT_LVL2, BAT_LVL1 и BAT_DEAD соответственно 330, 320 и 300.
Если не нужно звуковое оповещение и отключение при разряде АКБ, то нужно снизить значение BAT_DEAD до 100 (10 вольт), отключить звук можно установив значение #define BAT_LVL1_ENABLE пишем 0.
Далее переходим в раздел “MOTOR CONTROL”.
В строках 146-147 можно отключить одно из колес, если планируется использовать только одно колесо. Чтобы отключить колесо нужно “закомментировать” значение в строке, поставив спереди две косых черты //. Но я в проекте планирую использовать два мотор-колеса, поэтому оставляю без изменений.
В строках 150-152 можно выбрать тип управления, для самокатов хорошо подходит FOC_CTRL в сочетании с TRQ_MODE (управление моментом). При выборе этих значений получаем мягкое управление, свободный накат при сбросе газа и высокую энергоэффективность.
В строках 155-157 можно установить ток подаваемый на мотор-колеса и установить ограничение максимальных оборотов (об/мин). Для мотор-колес мощностью 250 Вт рекомендуется устанавливать ток 15А. На практике любая плата выдерживает пиковый непродолжительный ток до 25А (но для этого нужно улучшать охлаждение).
155 #define I_MOT_MAX 15 – максимальный ток для одного мотор-колеса, А.
156 #define I_DC_MAX 17 – ставим на 2А больше по рекомендации автора прошивки.
157 #define N_MOT_MAX 1000 – ограничение максимальных оборотов, об/мин. Установка данного значения не гарантирует, что при использовании батареи 36В получится раскрутить колеса до такой скорости, так как все зависит от мощности моторов, тока и нагрузки.
В строках 160-164 можно включить режим ослабления поля (Field Weakening), что позволяет увеличить максимальную скорость. Я планирую использовать следующие значения:
160 #define FIELD_WEAK_ENA 1 – включение (1) или отключение (0) ослабления поля (опережения фазы).
161 #define FIELD_WEAK_MAX 9 – максимальный ток ослабления поля, чем больше значение, тем выше скорость (максимальное значение 10).
163 #define FIELD_WEAK_HI 1000 – (1000, 1500) верхний порог для ограничения оборотов.
164 #define FIELD_WEAK_LO 750 – (500, 1000) нижний порог для начала ослабления поля, рекомендуется значение 750.
В строке 177 можно установить время в минутах, по истечении этого времени плата будет выключаться самостоятельно, если не будет выполнятся никаких действий. (Удобная функция, если забыли выключить плату и отошли по делам, то она автоматически выключится и тем самым сохранится заряд аккумуляторной батареи)
В строках 517-518 можно инвертировать направление вращения мотор-колеса. Это очень нужная функция, особенно пригодится если при сборке вы перепутали расположение мотор-колес.
Строку 519 #define DEBUG_SERIAL_USART3 нужно “раскомментировать”, это позволит нам подключиться в дальнейшем к плате с помощью USB-TTL адаптера через USART3 и получить фактические значения о напряжении нашей батареи. Эти значения нужно будет добавить в строки 76-77 и прошить повторно плату контроллера.
На этом основные настройки прошивки завершены, можно переходить к её компиляции (т.е. получению готовой прошивки). Для этого нужно нажать на кнопку “PlatformIO: Build” в нижнем левом углу и в итоге получим прошивку для установки в микроконтроллер на плате. Готовый файл прошивки (firmware.bin) будет находиться в папке: \hoverboard-firmware-hack-FOC-main.pio\build\VARIANT_HOVERCAR\firmware.bin
Шаг 4. Подключение программатора к плате
Подключение программатора к плате контроллера отображено на следующей схеме:
Для подключения буду использовать три контакта от программатора SWCLK-GND-SWDIO, подключаем их к гребенке, которую ранее припаяли к плате контроллера (для подключения нужны только три контакта).
Питание +3,3В с программатора ST-LINK V2 для питания микроконтроллера на плате советуют не брать, прошивать будем с подключенной к плате аккумуляторной батареи от гироскутера.
При прошивке контроллера должны быть подключены:
- Аккумуляторная батарея от гироскутера;
- Кнопка включения питания гироскутера (для удобства лучше подключить кнопку с фиксацией или переключатель);
- Программатор ST-LINK Utility.
Шаг 5. Процесс прошивки
Для программатора нужно скачать утилиту STM32 ST-LINK Utility с официального сайта , чтобы скачать утилиту потребуется принять действующее соглашение и указать ваш адрес электронной почты. Далее устанавливаем утилиту на компьютер стандартным способом.
Перед прошивкой необходимо будет снять защиту Flash-памяти микроконтроллера. Это можно сделать также через программу STM32 ST-LINK Utility. Для этого подключаем программатор ST-LINK к плате гироскутера и к компьютеру через USB. Также подключаем аккумуляторную батарею к плате (см. фото ниже).
Подключение платы гироскутера к компьютеру для прошивки
Включаем переключателем плату гироскутера (Если вы используете стандартную кнопку от гироскутера, то тогда зажимаете и удерживаете кнопку в течении всего процесса прошивки). Для подключения к чипу нужно нажать Target – Connect (или иконка серой вилки на панели управления).
Процесс по снятию защиты представляю несколько скриншотов.
После разблокировки открываем в программе файл своей прошивки (Нажимаем Open file).
Для запуска процесса установки прошивки нужно нажать Target – Program & Verify…., в открывшемся окне Start.
Если прошивка прошла удачно, то появится в нижнем окне надпись Verifycation…OK и Programmed Memory Checksum: ******. Теперь можно отпустить кнопку включения гироскутера или выключить плату переключателем.
Если потребуется заново установить прошивку, то всегда предварительно нужно очистить микроконтроллер платы (кнопка Full chip erase), иначе фрагменты старого кода останутся и это будет мешать работе новой прошивке.
Шаг 6. Подключение ручки газа и тормоза / Калибровка
Для моей самоделки подходит следующая схема подключения ручки газа:
Необходимое напряжение +3,3В для питания ручки газа будет взято с корпуса преобразователя AMC1117 отдельным проводом.
Обратите внимание, что от USART2 (провода для подключения левой платы гироскопа) выходит провод с питанием +15В, который нельзя использовать для питания ручки газа.
Теперь нужно подключить все устройства для проверки работоспособности: мотор-колеса, ручку газа и аккумуляторную батарею.
Сразу после прошивки не будет никакой реакции от поворота ручек газа и нажатия тормоза. Чтобы контроллер определил элементы управления и смог реагировать на них, сначала нужно его этому обучить. Для этого нужно провести калибровку.
Вход в режим калибровки и процесс определения элементов управления:
- Нажимаем и отпускаем кнопку питания контроллера;
- Сразу после звукового сигнала зажимаем кнопку и ждём многотональный звуковой сигнал;
- Теперь отпускаем кнопку и дожидаемся короткого гудка высокого тона (входим в режим калибровки);
- Крутим пару раз полностью ручку газа и отпускаем;
- Нажимаем пару раз на кнопку тормоза и отпускаем;
- Нажимаем и отпускаем кнопку выключения контроллера (выходим из режима калибровки);
- Перезагружаем контроллер и проверяем работу ручки газа и электронного тормоза.
Если все прошло успешно, то после калибровки мотор-колёса должны реагировать на ручки газа и тормоза. Если контроллер издает звуковые сигналы ошибки, то необходимо проверить правильность подключения фазных проводов и сигнальных проводов с датчиков Холла.
На этом процесс прошивки гироскутерной платы для управления ручкой газа завершён. Дальнейшее описание проекта “ Электроскутер Honda Tact AF16 из деталей от гироскутера ” скоро будет размещен на этом сайте. Электроскутер уже собран, нужно время на написание статьи и также на монтаж видео.
А пока можете подписаться на наши сообщества, чтобы не пропустить новые статьи и видео о самоделках:
Прошивка гироскутера под ручку газа
Прошивка платы надоевшего гироскутера под ручку (педаль) газа открывает новые возможности для самодельщиков электротранспорта. Гироскутер (ховерборд) является отличным недорогим донором для изготовления электротранспорта своими руками. На основе запчастей гироскутера можно собрать электросамокат, трайк, детский четырехколесный автомобиль, багги, самоходную тележку и другие двух (и более) колесные полезные и интересные самоделки.
Некоторые самоделки Вы можете посмотреть в этом видео.
Второе условие – плата контроллера обязательно должна быть с чипом STM32F103RCT6, GD32F103RCT6.
Что понадобится для прошивки
Программатор ST-Link
Программатор ST-Link V2 доставка из Китая / доставка из РФ. Все необходимые провода для подключения будут в комплекте.
Утилита для программатора STM32 ST-LINK Utility
Скачиваем с официального сайта актуальную версию. Нужно будет принять пользовательское соглашение и указать действующий адрес электронной почты. На него придет письмо со ссылкой на скачивание утилиты.
При установке всё предельно просто, и проблем возникнуть не должно.
Интерфейс утилиты выглядит следующим образом:
Драйвера для программатора ST-Link V2
Распаковываем архив и от имени администратора запускаем dpinst_amd64 (для х64) или dpinst_x86 (для х32) в зависимости от разрядности операционной системы. Разрядность можно посмотреть – Мой компьютер – свойства, (тип системы)
Исходник прошивки
Исходник прошивки (проект) прямая ссылка скачиваем, извлекаем из архива и сохраняем. Его будем настраивать.
В связи с иногда возникающими проблемами в обновленных исходниках, оставлю архив с одной из старых стабильных версий:
Программа Visual Studio
Программа Visual Studio позволит настроить прошивку нужным нам образом и создать BIN-файл, который мы и будем заливать в микроконтроллер с помощью программатора. Для скачивания Visual Studio нужно будет зарегистрироваться на сайте. В процессе установки необходимо соглашаться на все разрешения для программы.
После запуска необходимо установить дополнение PlatformIO IDE. Копируем название, жмем на значок в левом меню, вставляем в поле поиска, выбираем из списка и жмем Install. После завершения установки и автоматических обновлений (это может занять немало времени и она подгузит еще несколько нужных дополнений сама) программа готова к работе.
В некоторых случаях потребуется дополнительно установить Python. На свой компьютер я его не устанавливал, так как всё работает и без него. У некоторых пользователей без него работать не получается.
Также при неполадках с программой иногда помогает её запуск через “Исправление неполадок совместимости” (жмем на иконку программы правой кнопкой мыши, из меню выбираем эту функцию) экспериментируем с различными вариантами.
Настройка прошивки
В исходном состоянии прошивка не готова к заливке в контроллер и её нужно подготовить. Все скриншоты сделаны после редактирования настроек под ту конфигурацию, которая была необходима мне для электросамоката. В ней оба колеса вращаются в одном направлении, максимальный ток на один мотор 15А. Для своих нужд Вы можете экспериментировать с настройками.
Открываем в программе Visual Studio папку с проектом (исходником прошивки). Жмем иконку Explorer – File – Open Folder и выбираем папку с проектом. Необходимо выбрать именно конечную папку с этим названием, иначе прошивка может не компилироваться (не собираться).
Выбор режима управления
Открываем в левом меню пункт platformio.ini. Здесь мы видим список возможных вариантов управления. Для управления ручкой газа служит вариант HOVERCAR. Для его активации нужно раскомментировать строку default_envs = VARIANT_HOVERCAR; Variant for HOVERCAR build, для этого убираем знак ; в начале строки.
Далее в левом меню выбираем Inc – config.h, открывается код, в котором и проводим необходимые настройки.
Настройка батареи
Так как исходник проекта периодически обновляется, у Вас номера строк могут отличаться от тех, что я привожу в скриншотах, но по тексту их легко найти. Вы можете воспользоваться переводчиком, чтобы понять за что отвечают строки, я приведу описание только понятных мне.
Настройки батареи (строки 63-82).
Эта настройка нужна для того чтобы научить контроллер правильно измерять напряжение батареи. При вводе неправильного значения в BAT_CALIB_REAL_VOLTAGE возможно преждевременное отключение контроллера, отключение сразу после запуска.
70 #define BAT_CALIB_REAL_VOLTAGE 3600 – указать реальное напряжение батареи из расчета 1000=10В на момент прошивки. Достаточно измерить напряжение батареи мультиметром. Например, 36 В записываем как 3600.
72 #define BAT_CELLS 10 – количество последовательных ячеек в батарее
73-74 #define BAT_LVL_1..2 напряжение при котором будет подаваться предупреждающий звуковой сигнал (350 = 3,50 вольт на банку при 10S)
81 #define BAT_DEAD (337……) – при каком напряжении на банку (337=3,37 В) отключить батарею (во избежание переразряда)
При использовании 10S литий ионной батареи допускается её разряд до 30 В. Поэтому значения BAT_LVL2, BAT_LVL1 и BAT_DEAD целесообразнее установить 340, 320 и 300 соответственно.
Можно сделать проще, если не нужно звуковое оповещение уровня заряда и отключение при разряде АКБ. Если на борту есть вольтметр (например курок газа с ним) и батарея с БМСкой, эти функции вобщим то и не нужны. В этом случае BAT_CALIB_REAL_VOLTAGE пишем например 3600, занижаем значение BAT_DEAD например до 100 (10 вольт). Отключаем звук #define BAT_LVL2_ENABLE (пишем 0 как у #define BAT_LVL1_ENABLE) Плата исправно работает начиная с 24 В (моя точно работает).
Отключение/включение моторов
(138-140) При необходимости, можно программно отключить один из моторов, если он не нужен в конструкции. Дело в том, что при запуске контроллера сначала происходит самодиагностика. Если один из моторов отключен физически (отключены провода датчиков Холла) от платы с прошивкой на два мотора, при запуске будет ошибка. Не будет работать ни один мотор и зуммер будет писком сигнализировать о неисправности. По умолчанию оба мотора включены.
138 // Enable/Disable Motor
139 #define MOTOR_LEFT_ENA – для отключения левого мотора закомментировать
140 #define MOTOR_RIGHT_ENA – для отключения правого мотора закомментировать
Типы управления и методы контроля
Для самокатов, машинок и других проектов с водителем хорошо подходит FOC_CTRL в сочетании с TRQ_MODE (управление моментом). При этом управление наиболее мягкое, высокая энергоэффективность, свободный накат при сбросе газа.
Также в разделе ховеркар (ищите ниже)
выставляем в #define CTRL_MOD_REQ значение TRQ_MODE
Ограничение тока и оборотов
В зависимости от требуемой пиковой мощности в моторах и токоотдачи аккумулятора можно отрегулировать максимальный вливаемый в моторы ток. Для своих 250 Вт моторов я оставил ток по умолчанию 15А. На практике любая плата выдерживает пиковый непродолжительный ток до 25 А (потребуется улучшить охлаждение). Более высокий ток на ваш страх и риск.
define I_MOT_MAX 15 – максимальный ток одного мотора, А
define I_DC_MAX 17 – ставим на 2 Ампера больше как рекомендует автор исходника
define N_MOT_MAX 1000 – ограничение максимальных оборотов, об/мин. Это не значит что с 36 В батареей гироскутерные колеса раскрутятся до такой скорости, обороты зависят от мощности моторов, приложенной нагрузки, тока, напряжения батареи в совокупности.
Если Вы хотите понизить максимальные обороты, например для безопасности при эксплуатации транспортного средства детьми, уменьшите N_MOT_MAX экспериментально подобрав это значение для своих моторов. При этом ослабление поля из следующего пункта настроек обязательно должно быть отключено.
Ослабление поля/опережение фазы
Ослабление поля позволяет раскручивать мотор на бОльшие обороты без увеличения напряжения батареи. При этом если силы моторов хватает для ускорения под нагрузкой, они раскрутятся. Также увеличится и расход батареи. Если при резком сбросе газа после разгона до повышенной скорости моторы будут притормаживать до замедления до некой промежуточной скорости, установите в FIELD_WEAK_HI и N_MOT_MAX значение 1600.
// Field Weakening / Phase Advance
153 define FIELD_WEAK_ENA 1 – Включение ослабления поля / опережения фазы: 0 = отключено (по умолчанию), 1 = включено
154 define FIELD_WEAK_MAX 6 – Максимальный ток ослабления поля, чем больше тем выше возможная скорость (максимум 10)
156 define FIELD_WEAK_HI 1000 // (1000, 1500] – Верхний порог для ограничения оборотов, ставим 1600 если наблюдается глюк при сбросе газа как описано выше
157 define FIELD_WEAK_LO 750 // ( 500, 1000] – Нижний порог для начала ослабления поля, рекомендуется оставить 750
Направление вращения моторов
Раскомментировать для активации. По умолчанию моторы вращаются как если бы они стояли на гироскутере и он катился вперед. На скриншоте инвертирован правый мотор, при этом оба мотора (если смотреть со стороны оси) вращаются по часовой стрелке.
//#define INVERT_R_DIRECTION – инвертировать правый мотор
//#define INVERT_L_DIRECTION – инвертировать левый мотор
#define SPEED_COEFFICIENT – чем больше значение тем стремительнее ускорение. При токе на колесо 15 А его значение 16384 более менее оптимально, если уменьшаете ток то экспериментально уменьшите и коэффициент, чтобы при ускорении “газ в пол” колеса не издавали шум на подобие звона/неприятного свиста (шум из обмоток, т.к. срабатывает ограничение тока). Если наоборот Вы добавляете максимальный ток то увеличьте если нужно и коэффициент (если динамика разгона будет недостаточной но при этом еще нет шума из колес).
Формирование файла прошивки
После завершения настройки нужно нажать галочку внизу. Программа проверит код на ошибки и при их отсутствии создаст файл прошивки в папке с исходником по адресу hoverboard-firmware-hack-FOC-master / pio / build / VARIANT_HOVERCAR / firmware.BIN. Его мы и будем заливать в чип платы гироскутера.
Если возникают ошибки, проверяем визуально не поставили-ли чего лишнего или не удалили-ли что то нужное. Галочка запуска компиляции может отсутствовать если идет обновление компонентов Visual Studio.
Также замечены похожие платы, но немного с другой разводкой. Они встречаются очень редко, но всё же они есть. После прошивки зуммер не издает звуков – возможно у Вас именно такая плата. В послендем обновлении исходника появилась и эта версия. В config.h строки 61…66 выбираем вариант 0 – (подходит большинство плат), вариант 1 – второй, более редкий тип плат.
############################### BOARD VARIANT ###############################/* Board Variant * 0 – Default board type * 1 – Alternate board type with different pin mapping for DCLINK, Buzzer and ON/OFF, Button and Charger*/
#define BOARD_VARIANT 0
Подключение программатора к плате
Программатор ST-Link V2 подключается выводами +3,3 V, SWDIO, GND и SWCLK к соответствующим точкам на плате, как показано на рисунке ниже.
Батарею НЕ ПОДКЛЮЧАЕМ и для дополнительного обесточивания платы нажимаем кнопку включения. При попытке запуститься произойдет разряд электролитических конденсаторов на плате. Теперь можно подключить программатор.
Процесс прошивки
- Запускаем STM32 ST-LINK Utility
- Для подключения к чипу жмем Target – Connect (либо иконку серой вилки на панели управления)
Появившееся предупреждение Can not read memory!… Означает, что чтение родной прошивки недоступно, так как она защищена от чтения.
Придется её стереть. Внимание. После стирания её невозможно будет восстановить и гироскутер уже не получится обратно сделать гироскутером.
- жмем Target – Option Bytes…
Снимаем защиту от перезаписи
- в поле Read Out Protection меняем Enabled на Disabled
- жмём Apply
После завершения этой манипуляции получаем чистый чип
Теперь выбираем файл своей прошивки
- жмем Open file
Напоминаю, что по умолчанию после настроек в Visual Studio файл прошивки будет находиться по пути hoverboard-firmware-hack-FOC-masterhoverboard / firmware-hack-FOC-master / pio / build / VARIANT_HOVERCAR / firmware.bin.
- выбираем firmware и жмём Oткрыть
- для запуска процесса прошивки жмем Target – Program & Verify…, в открывшемся окне – Start
После удачного завершения процесса в нижнем окне увидим Verifycation…OK и Programmed Memory Checksum: ******
Если у Вас что-то идет не так, проверьте внимательно по скриншотам наличие галочек, и прочих настроек, где они присутствуют на каждом этапе.
При последующих заливках прошивки обязательно предварительно стирайте чип кнопкой Full chip erase, иначе фрагменты старого кода будут мешать работе нового!
Подключение ручки газа и тормоза
В качестве ручки газа можно использовать велосипедные или самокатные газульки с датчиком Холла, педали, либо обычные потенциометры. Подключение по трем проводам, как на схеме внизу. Цвета проводов на платах гироскутеров могут отличаться от приведенного примера, поэтому ориентируемся по расположению точек (пинов) на плате.
В процессе доработки платы соблюдайте осторожность и не допускайте случайных замыканий выводов компонентов токопроводящими предметами, так как даже после отключения батареи в электролитических конденсаторах сохраняется заряд!
Всвязи с тем, что обычно ручки управления выносятся далеко от платы, в проводах могут наводиться помехи, что может вызывать нестабильную работу и ложные срабатывания. Для подавления этих помех желательно повесить между сигнальными входами и GND конденсаторы ёмкостью 0,03…0,1 мкФ и резисторы сопротивлением 1…10 кОм, лучше установить их на плате.
Тормоз может не подключаться вообще, если он не нужен и в Вашей конструкции предусмотрены механические тормоза. На практике он отлично работает и в своём самодельном самокате я использую его и не стал заморачиваться с механическими. Но повесить на него резистор и конденсатор нужно обязательно! И при калибровке (о ней будет ниже) нужно показать вход тормоза сымитировав нажатие кнопки (синий провод на +3,3 В).
При срабатывании на скорости он начинает тормозить рекуперацией, отдавая энергию в батарею. Когда скорость падает до определенного значения, при которой рекуперация становится неэффективна для торможения, контроллер наоборот вкачивает в моторы энергию батареи продолжая активное торможение до полной остановки. На всём продолжении торможения полная блокировка колес исключена и получается некий эффект ABS. Усилие торможения развивается достаточное для того чтобы почти улететь через руль при полном резком нажатии. Поэтому реализовывать его с помощью одной только кнопки – плохая идея. Для плавного дозирования торможения годится аналогичная газульке ручка на датчике Холла. Вариант подешевле – кнопка с потенциометром. Потенциометром в этом случае устанавливается требуемое усилие торможения.
Калибровка ручек газа и тормоза
Сразу после прошивки не будет никакой реакции на нажатия ручек газа и тормоза. Для того чтобы контроллер понимал, как на них реагировать, его необходимо обучить. Во время этой операции он запомнит минимальные и максимальные значения напряжений сигналов управления. Они не обязательно должны быть именно от 0 до 3,3 В и могут принимать любые значения этого диапазона, например от 0,5 В до 3 В.
Перед калибровкой необходимо убедиться, что контроллер выключен, колёса (включая фазные провода и провода от датчиков Холла), ручки газа и тормоза (если она нужна) подключены согласно схеме.
Для входа в режим калибровки нужно выполнить следующие действия:
- нажать и удерживать кнопку питания контроллера не менее 2 сек, в этот момент прозвучит многотональный звуковой сигнал
- кратковременно отпустить (менее секунды) и снова зажать и удерживать кнопку питания, в этот момент прозвучит короткий гудок высокого тона
- дождаться короткого гудка высокого тона
- отпустить кнопку питания
- дождаться длинного гудка низкого тона
- нажать пару раз полностью на ручку газа и отпустить
- нажать пару раз полностью на ручку тормоза и отпустить(если используется кнопка с потенциометром, то нажимать её при выкрученном потенциометре в минимальное сопротивление, чтобы показать максимальное напряжение на сигнальном проводе)
- нажать кнопку выключения
- перезагрузить контроллер и проверить реакцию на нажатия ручек управления
После успешной калибровки колёса должны соответственно реагировать на ручки газа и тормоза. Без нагрузки колёса могут в диапазоне высоких оборотов начинать вращаться рывками, если Вы применили в настройках ослабление поля. Это так называемая “отсечка” от превышения максимальных оборотов. При торможении колёса вращаются “туда – обратно” и не успокаиваются. В вывешенном состоянии колес это нормально, под нагрузкой такого не будет.
Если калибровка прошла успешно и контроллер не издает звуковых сигналов ошибки, но при этом колёса не крутятся либо крутятся медленно/с посторонними звуками, возможно необходимо подобрать правильную комбинацию фазных проводов/сигнальных проводов с датчиков Холла.
Это не все возможные настройки, а только основные которым обязательно нужно уделить внимание.