Делаем ардуину из контроллера мотора самоката Xiaomi M365

Для начала позвольте пояснить, зачем козе потребовался баян.
Предположим, вам вдруг загорелось поиграть с программным обеспечением контроллера бесколлекторного мотора популярных нынче электровелосипедов и самокатов и сделать модное векторное управление (этой новинке, конечно, много десятков лет, но когда она появилась, с ее помощью крутили немного другие моторы).
Поковырявшись в интернете, вы обнаружили, что стая товарищей не так давно разработала для ардуины библиотеку SimpleFOC (field oriented control — то самое векторное управления), и теперь когда-то нетривиальную задачу кажный решить может, не заморачиваясь преобразованиями Парка и Кларка, и даже не задумываясь, что это такое и зачем это надь.

Но тут возникла засада — библиотеке требуется определенная конфигурация оборудования, с каким попало контроллером она работать не станет. Самым критичным оказывается наличие датчиков фазового тока на честных резисторах. Хотя бы для двух фаз.
У самых простых контроллеров есть только один общий датчик тока на все фазы — отпадают сразу.
Контроллер от гироскутера — неплохая вещь. Сначала делали один контроллер сразу на два двигателя, позднее появились версии с раздельными контроллерами. В интернетах ходят слухи, что на Таобао пару таких контроллеров можно купить за два доллара — хорошая сделка, но у меня с Таобао как-то не сложилось. На Али видел аналогичную пару контроллеров за 6 с копейками евро плюс 7 евро доставка.



Казалось бы куда уж дешевле и лучше — но контроллеры гироскутера имеют два фазовых канала измерения тока, а в качестве шунта используется сопротивление открытого транзистора. Теоретически этого достаточно для FOC, но SimpleFOC такую конфигурацию (пока?) не поддерживает. И в этой дешевой паре используется контроллер MM32SPIN05, который вроде как совместим по ногам с популярным STM32F103, но у него есть еще встроенные компараторы, если просто перепаять микроконтроллер на другой — каменный цветок не выйдет. А разбираться с программированием еще одного контроллера как-то лениво. Посему — ф топку.

Как-то попался контроллер для самоката M365, и у него реализовано что надо и что не надо, про него сейчас и расскажу.

При цене около 16 евро с доставкой — вполне терпимо. Самому собирать что-то аналогичное — дороже выйдет. А у этого контроллера есть все с избытком — контроль фазных токов и напряжений, входа для датчиков холла и два последовательных интерфейса, один из них, правда двунаправленный.
Кстати, если лень самому что-то делать — есть готовое программное обеспечение, то только для мотора M365.

Вот такая коробочка из алюминиевого сплава в роли теплоотвода, транзисторы изолированы от теплоотвода лавсаном — не самый хороший по теплопроводности материал. Прижаты они к теплоотводу крышкой из оргстекла через резиновую прокладку.


Разъем питания по виду похож на популярный XT60, но меньшего размера, видимо XT30.


Мотор подключается обычными плоскими контактами, остальные разъемы — с шагом 2мм. Как все соединяется в самокате — на рисунке ниже:


Назначение контактов разъемов:


Для того, чтобы народ не ставил какие попало батарейки, родная батарея Xiaomi оснащена последовательным интерфейсом, с чужой батареей самокат работать не будет — старый трюк, как заработать деньги на расходниках с задранными ценами.

Общий вид на плату с обеих сторон (кликабельно):



И принципиальная схема (обратите внимание — схема действительно лишь принципиальная, величины резисторов могут быть другими и непринципиальные компоненты я рисовать не стал):


Назначение выводов микропроцессора:


Схема для одной фазы — опять таки несущественные детали опущены:


Усилитель тока — один счетверенный операционник используется один для всех трех фаз, он прячется под большим электролитом.


Транзисторы — RU6888R, Shenzhen ruichips Semicon — 68V 88A 8mΩ@10V,35A. Сопротивление в открытом состоянии не самое маленькое, но вполне сойдет. Полумостовые драйверы затвора — LN4306, спецификация не нашлась, да и не суть важно — их не производит нынче только совсем ленивый. Самый дешевый, который мне удалось найти — это FD2103. У него только максимальное напряжение 180 вольт (у других значительно больше), но для батарейных моторов больше и не надо.

Питание спроектировано вполне аккуратно, благо в Китае сейчас производится множество дешевых понижающих преобразователей с входным напряжением 70...90 Вольт: XL7046, XL7005A и так далее. В данном случае, судя по схеме, использован SY8502 или что-то подобное, хотя надпись BDXCYG ни о чем не говорит.


На выходе преобразователя напряжение 12 Вольт, оно используется для питания драйверов затворов и понижается следующим преобразователем до 5 Вольт. А это напряжение уже разведено по всему самокату для питания прочей электроники и фонарей.


Опять таки то, что написано на микросхеме 5-вольтового преобразователя, ни о чем не говорит, давайте считать что это JW5062T — по параметрам и ножкам вроде как вполне подходящая микросхема.

И последний шаг — обычный LDO, который из 5 Вольт сделает 3.3 Вольта. Их такое превеликое множество, что разбираться какой именно использован просто бессмысленно.


Пишут, что в большинстве аналогичных контроллеров моторов используется STM32F103C8T6, но в моем оказался APM32F103CBT6 от Geehy (128KB FLASH 20KB RAM 2V~3.6V ARM-Cortex-M3 96MHz) — придется или с ним мучиться, или заменить его на STM32F103C8T6.


Без мучений ардуина все равно не получится — кварца, с которым работает ардуино, тут нет. Еще одна заметка — существует 2 различных варианта ардуино для STM32 — старый на базе библиотеки Mapple и на HAL. SimpleFOC на Mapple просто так работать не будет, переделок столько, что проще свою библиотеку написать.
Пробуем подключить ST-LINK через STM32 Cube Programmer. Контроллер читается, хотя защита установлена. Но при попытке считать Flash — облом, читаются одни нули. Значит, по крайней мере, защита не совместима с STM32, там бы просто ничего не читалось. При попытке снять защита память стирается, после этого считываются 0xFF.


Итак, родное программное обеспечения сдохло, можно с чистой совестью доламывать контроллер.

Для начала конфигурируем настройки ардуино — все видно на картинке. Обязательно указать, что у нас нет USB — тогда системный генератор будет генерировать код для работы со встроенным осциллятором.


Как раз к той ножке, куда подключается кварц, в нашей плате подключен светодиод. Но просто так он работать не станет — в реализации ардуино небольшой глюк, инициализируется встроенный генератор, а порт PD остается подключенным к генератору. Не беда — мы его легко переключим куда надо:
AFIO->MAPR |= AFIO_MAPR_PD01_REMAP;  

После этого светодиодик начинает моргать.


В программу добавлен код для управления кнопкой включения-выключения. При первом нажатии питание включается, при повторном — выключается. При экспериментах лучше не пытаться использовать питание микроконтроллера от программатора — велика вероятность, что благодаря куче катушек в преобразователях, микроконтроллер умрет. Единственное утешение — вы будете не первый, кто его убил таким образом. Так что используйте внешний источник питания вольт на 30, и установите ограничение тока миллиампер 20 — для экспериментов без подключения двигателя этого хватит. Ну и до кучи протестируем последовательные интерфейсы:


#define LED_BUILTIN PD1

HardwareSerial Serial1(PB7, PB6);
HardwareSerial Serial3(PB11, PB10);

void setup()
{
  AFIO->MAPR |= AFIO_MAPR_PD01_REMAP;  
  RCC->APB2ENR |= RCC_APB2ENR_IOPDEN;
  GPIOD->CRL =  0x33;
  GPIOD->IDR=0;

  Serial3.begin(115200);
  Serial1.begin(115200);

  pinMode(PC14, INPUT);  
  pinMode(PC15, OUTPUT);
  digitalWrite(PC15, 1);
  while (digitalRead(PC14)==1);
}

void loop()
{
  GPIOD->BSRR = 2;   //digitalWrite(PD1, HIGH); 
  delay(500);      
  GPIOD->BRR = 2;  //digitalWrite(PD1, LOW);   
  delay(500); 
  Serial3.write('*');
  Serial1.write('#');  

  if(digitalRead(PC14)==1)
  {
    while (digitalRead(PC14)==1);
    digitalWrite(PC15, 0);   
  }
 
}

Использовать Arduino GUI вовсе не обязательно, в конце концов это программа для мазохистов. Все то же работает и в Platformio, ini файл выглядит так:

[env:genericSTM32F103CB]
platform = ststm32
board = genericSTM32F103CB
framework = arduino
upload_flags = -c set CPUTAPID 0x2ba01477  ; APM32

На сем позвольте откланяться, если ничего не спалю — продолжение будет (если кому-то это интересно).
Добавить в избранное +87 +119
+
avatar
  • djdff
  • 21 июля 2024, 11:13
+1
почему необходимы раздельные шунты если есть один общий, контролер знает какие ключи открыты, и узнать через какую обмотку течет в данный момент ток не является особой проблемой.
вопрос теоретический контролерами не занимаюсь
+
avatar
+5
Можно тут почитать, например habr.com/ru/companies/npf_vektor/articles/367653/
Суть в сдвиге фаз.
А в простейшем случае делают именно так, как вы думаете.
+
avatar
  • djdff
  • 21 июля 2024, 12:13
+1
мой вопрос стоил полученной информации, что такое векторное управление я знал, но бывало приходилось объяснять на пальцах другим, а пальцы то корявые, а тут прям не объяснение а конфетка. за ссылку спасибо. но по прежднему как нуб в вопросе не увидел необходимости в раздельных шунтах, плюс мосфеты они сами себе шунты. но я понимаю раз их используют то это надо, но пока не погружусь в вопрос не пойму для чего :) в теории все без них получается :)

пс автор, я не докапался, просто мысли в слух, а вы красавчик.
+
avatar
+2
Думаю, что всё дело в точности. Мосфеты в качестве шпунтов — так себе идея. Будет погрешность в зависимости от тока и температуры. Имеется зарядное устройство, в котором именно таким образом измеряют ток разряда аккумулятора, погрешность очень существенна.
Полагаю, аналогично и с общим шунтом. Нагрузка не чисто активная, поэтому рассчитать ток в плечах с необходимой точностью через общий шунт не представляется возможным.
+
avatar
0
Уважаемый автор. Если не сложно то могли бы вы проверить на той плате что есть у вас в распоряжении от какого напряжения питается Lm324 используемая для усиления сигналов с шунтов? В приводах что мне приходилось реверс инжинирить у китайцев был использован интересный хак. Они питали ее от напряжения 12 или 15 вольт что увеличивало быстродействие ОУ и даже 1 микросекундные сигналы хоть и с большим завалом и поворотом фазы но все же появлялись на выходе оу. Далее стояли ограничительные элементы для нормирования сигнала для АЦП. Казалось бы что можно было запитать оу от 5в и избавиться от этих элементов но тогда пришлось бы ставить ОУ не ниже 20МГц и с высоким slewrate. Вообще в китайских кажущихся на первый взгляд простых вещах есть очень интересные тех.решения имеющие хороший экономический эффект при массовом производстве.
+
avatar
0
У меня в схеме ошибка, там вокруг операционника 3.3В, и питание у него 3.3В соответственно.
Схема когда-то планировалась другая, где стоял обычный Lm324, у него максимальное выходное не R2R — питание минус 1.5В. Поэтому питание было 5 вольт. А потом этот кусок был просто скопипасчен.
А здесь Lmv324. И четвертый операционник для чего-то используется как буфер.
+
avatar
0
Теперь я увидел что приведенная вами схема не срисована с натуры а из каких то личных архивов. При внимательном рассмотрении фото увидел что у китайцев таки правильно сделано. Дифф усилитель с другими номиналами 3к/24к.

Но я более чем уверен что в этой плате три оу для усиления сигналов с шунтов а 4ый как буфер для уменьшения выходного сопротивления от цепи измерения напряжения постоянного тока. И скорее всего в этой плате lm324 запитана на 12 вольт. Если будет иначе я буду немного удивлен.
+
avatar
+1
Я же написал — там 3.3В. Специально для вас оторвал конденсатор, сделал фото и измерил питание. Так что можно немного удивляться :)
+
avatar
+1
Спасибо)

Да удивлен.
Но не китайцам а себе.
Не заметил в вашем сообщении что не просто LM 324 a lmv324. Только на фото смог это рассмотреть. Это все объясняет кроме моей невнимательности.
+
avatar
+1
контролер знает какие ключи открыты, и узнать через какую обмотку течет в данный момент ток не является особой проблемой.
В векторном управлении «открыты» (в разной степени) все ключи сразу, то есть, напряжение подается сразу на все обмотки и ток течет через все три фазы.
почему необходимы раздельные шунты если есть один общий
Если шунт будет только один, вы не сможете понять, как именно измеренный ток распределяется по фазам, то есть, не сможете понять направление того самого вектора тока. Для построения вектора надо минимум два датчика.
+
avatar
  • djdff
  • 22 июля 2024, 16:10
0
Транзисторы не в линейном режиме работают а шимятся,
Плюс как уже сказал ток через них все равно снюхивается для защиты и эта информация уже есть в контроллере.
Но как уже сказал, я чисто теоретик
+
avatar
+1
Транзисторы не в линейном режиме работают а шимятся
Ну, это очевидно, что линейный режим никто не будет использовать. Но ШИМ-сигнал подается сразу на 3 фазы (точнее, на две, а на третью — ноль). В общем, ток сразу течет через три фазы, а не через две, как в «скалярном» или «6-ступенчатом» управлении.
Плюс как уже сказал ток через них все равно снюхивается для защиты и эта информация уже есть в контроллере.
Я же пытаюсь вам объяснить — ток идет сразу через три фазы, грубо говоря, в две (которые ШИМятся) заходит и через третью (которая сейчас на земле) выходит. Знание общего тока через двигатель позволяет определить лишь длину вектора тока, но не его направление по фазам. Для этого нужен, как минимум, еще один датчик.
+
avatar
  • djdff
  • 23 июля 2024, 07:13
0
То что вы пытаетесь мне объяснить я знаю, и знаю очень давно, вы не поняли что я написал.
+
avatar
+1
Ваш изначальный вопрос был:
почему необходимы раздельные шунты если есть один общий
Я это и пытался объяснить. Но вы говорите, что знаете это и знаете очень давно. Взаимоисключающие параграфы, однако.
+
avatar
  • djdff
  • 23 июля 2024, 15:57
+1
Хорошо, давайте тезисно, чтоб и позицию прояснить и в обсуждении не увязнуть.
Я давно занимаюсь электроникой, векторное управление асинхронниками учил в вузе когда часто ники были диковинкой.
Что я имел в виду про один шунт.
Магнитное поле крутится путем шимирования нагрузки и у контроллера есть информация какой идёт общий ток, и о том какие ключи открыты, при шимировании они бывают открыты вместе бывают по очереди бывают закрыты, этой информации уже достаточно для целей смещения магнитного поля,
Если вы в курсе там все равно не прямой расчет должен быть иначе скорости калькулятора не хватит. Так вот, помимо этого у контроллера должна быть косвенная информация в попугаях какой ток течет через какое плечо от снюхивателя перехода транзистора, так как без этого защиты по току не будет, а она есть, и пусть это условные единицы, но сумма условных единиц равна току одного общего шунта.
Потому я как теоретик не вижу необходимости в отдельных грунтах, но я занимаюсь электроникой, а значит чуток критического мышления имеется, потому прямо и говорю, раз люди умнее меня в этом вопросе ставят индивидуальные шунты, значит они там нужны, и это моих познаний не хватает чтоб это понять, возможно просто математика в камешке это не вывозит, возможно идёт каша с переходов мосфетов из-за индуктивности движка, этого я не знаю, но в теории, 1 мосфета достаточно.
+
avatar
+1
Вы правильно написали про то, что одного шунта достаточно для суммарного тока через все фазы моста для обеспечения его защиты. Но вычленить из этого сигнала значения токов отдельно для каждой фазы практически нереально. Поэтому и используются отдельные шунты.
+
avatar
+1
Так вот, помимо этого у контроллера должна быть косвенная информация в попугаях какой ток течет через какое плечо от снюхивателя перехода транзистора
Что это значит? Вы имеете в виду тот факт, что каждая фаза двигателя дополнительно через делитель идет на вход контроллера? Так это не для «измерения» тока, это для измерения напряжения свободной (в данный момент) фазы и определении момента, когда оно переходит через ноль в 6-ступенчатом управлении. Измерять ток через фазу (в общем случае) оно не умеет, т.к. может быть выполнено вообще на компараторе, а если даже и на ADC, то разрешение не то — ЭДС двигателя измеряется вольтами, а падение на открытом транзисторе — милливольтами. Поэтому для измерения тока ставят усилитель.

Да и как вы себе представляете измерение тока при наличии там сигнала ШИМ? Ведь измерять можно только в то время, пока транзистор открыт (что требует огромного быстродействия), и ток этот будет несколько не тот, что реально течет через обмотку.
так как без этого защиты по току не будет, а она есть
Защита по току делается как раз на общем шунте.
возможно просто математика в камешке это не вывозит
Нет, зная лишь одно число даже теоретически невозможно получить из него полноценный двумерный вектор.
+
avatar
+1
Хоть и с опозданием но поучаствую в обсуждении.

На самом деле то какие ключи открыты и в какой момент времени зависит не от принципа управления (скалярный, foc или какой то другой), а от способа модуляции. Это может быть два совершенно разных способа модуляции при одном и том же методе управления. Кстати в библиотеке о которой упоминает топик-стартер simple foc можно выбрать метод модуляции. Естественно некоторые методы управления не поддерживают те или иные типы модуляции. Для более подробного ознакомления можно на Ютубе посмотреть видео от компании НПФ Вектор о которой тоже было сказано в посте. Там много интересного по этой теме. Особенно мне понравилось видео о способах измерения скорости который я у них позаимствовал.

По измерениям токов.
На самом деле есть возможность использовать и один шунт в звене постоянного тока, и три шунта в транзисторных стойках и два шунта непосредственно в фазных проводах и до точно определить результирующий вектор магнитного поля. Но как и везде есть свои но. При использовании одного шунта предъявляются ооооочень высокие требования к операционному усилителю по полосе, скорости установления, скорости нарастания сигнала и дополнительно налаживаются ограничения на минимальный шаг изменения скважности что налагает некоторые ограничения на модуляцию. Так что с экономической точки зрения этот метод не очень привлекателен ибо усилитель с требуемыми характеристиками будет стоить как все изделие и даже при этом общий результат будет хуже чем у схемы с фазным измерением. Три шунта немного упрощают задачу как для аналоговой части так и для цифровой. С тремя шунтами можно до точно знать что напряжение на шунте это ток втекающий или вытекающий из конкретной фазы. Но это решение удел приводов небольшой мощности.
Два датчика тока в фазных проводах(а в серво решения ставят всё-таки три для уменьшения погрешностей, так как при использовании двух третий вычисляют но вычисления то содержат погрешности измерений первых двух) дают данные о том какой ток течет в фазе в любой момент времени не зависимо от этапа коммутации(хотя на практике все стараются делать выборки в моменты статики а не в момент коммутации). Если в первых двух способах реконструкция фазных токов по шунтам требует некоторых вычислений то последний вариант даёт сразу результат. Хотя у меня есть схема которая аппаратно делает восстановление фазных токов по трем шунтам разгружая вычисления но и у нее тоже есть ограничение к примеру ШИМ не более 0.95 ну и самый неприятный момент зависимость данных о токе от скважности хотя и это решается авто корректировкой при старте приложения с помощью линейного интерполятора что увеличивает получение данных о токе на одно умножение. Так что тоже очень спорное решение оказалось.

Удивительно что на таком ресурсе поднимаются столь серьезные темы. Моё почтение собравшимся.
+
avatar
+1
На самом деле то какие ключи открыты и в какой момент времени зависит не от принципа управления (скалярный, foc или какой то другой), а от способа модуляции.
Вот тут не соглашусь — когда реализуется 6-ступенчатое управление, у нас по определению подключено только две фазы, а третья висит в воздухе. То есть, открыто только два (четыре) ключа из 3-х (6-ти). Когда же реализуется векторное управление, обычно одна фаза висит на нуле, а на две другие подается какие-то напряжения (с помощью ШИМ). И способ модуляции на это никак влиять не может, ведь это сам принцип управления.

При этом, в первом случае путь тока точно определен и для его измерения вполне достаточно одного общего шунта. Во втором же случае использование общего шунта принципиально не может дать нам двумерный вектор, т.к. значение только одно. Да, можно начать извращаться, сильно увеличить полосу ОУ и АЦП и пытаться проводить несколько измерений за один период ШИМ, чтобы, например, сначала получить ток А-(В + С) (когда обе фазы ВС подключены к питанию), потом А-В или А-С, когда одна из фаз переключится ШИМ-ом на ноль. Но я не уверен, насколько качественный результат это даст, да и какие аппаратные ресурсы это потребует.

Возможно, можно пойти другим путем и проводить измерения токов только один раз для каждой фазы за один электрический оборот в «удобный» момент, а остальные значения получать с помощью интерполяции, и, наверное, это даже будет нормально работать для установившегося режима с постоянной нагрузкой.

Поэтому наиболее точный вариант — это три шунта (чтобы как вы и сказали) не вычислять значение тока третьей фазы по остальным двум :).
+
avatar
+1
6ти ступенчатое управление это частный случай, когда к методу управления подходит только определенный тип модуляции. В этом случае шунт используется не для измерения и установления точно заданного вектора магнитного поля а для банального ограничения тока в обмотках. Иначе не приходилось бы вводить значения углов опережения. Это весьма простой хотя и эффективный способ управления использующийся в простых и дешёвых системах.

Вы близки к пониманию того как происходит определения вектора магнитного потока. Именно за один период ШИМ происходит несколько измерений тока на одном шунте в разные моменты времени когда открыты разные ключи, или если правильно сказать разные сектора активны. Потом это анализируется. И если частота ШИМ хотя бы 16кГц то при 8 измерениях за период сигнал с ОУ должен установиться и быть стабильным быстрее чем 7 микросекунд. Отсюда и требования к ОУ.

Про электрический оборот это вы попытались описать прогнозирование скорости а к измерениям тока это к сожалению невозможно применять. Если оу не вытягивает то он будет не вытягивать в любой момент времени даже самый удобный.
+
avatar
0
Для того, чтобы народ не ставил какие попало батарейки, родная батарея Xiaomi оснащена последовательным интерфейсом
А эмулятор не замутили ещё (как раньше к ноутам DELL c 1-wire в бп, да и сейчас много где), или там по хитрому с переменными кодами и всяким ноу-хау
Пишут, что в большинстве аналогичных контроллеров моторов используется STM32F103C8T6
И она конечно же залочена со взрывом дороги (фото гуглить лень, но красивое)
+
avatar
0
А эмулятор не замутили ещё (как раньше к ноутам DELL c 1-wire в бп, да и сейчас много где), или там по хитрому с переменными кодами и всяким ноу-хау
Давно уже, есть вариант прошить мозги дабы они игнорировали BMS, есть прошивки BMS, есть хардварные физические эмуляторы которые висят на проводе и рапортуют идеальную статистику батареи
+
avatar
+1
А дайте ссылочку пожалуйста. Отстал от темки, а самик валяется с полудохлой сток bms
+
avatar
+4
Для Ninebot и сяоми есть эта утилита utility.cfw.sh/ ставим ее, прошиваем контроллер самоката и в настройках прошивки прямо в приложении тыкаем на «Disable BMS Communication».
+
avatar
0
Все варианты звучат как пороховая бочка.
Не проще ли тогда вместо замены батареи заменить банки, а БМС оставить родной? Или оно там в энергонезависимую память пишет состояние банок?
+
avatar
0
Как раз заменяют всю сборку и самокат не хочет ехать а тут отключили проверку бмса и поехали. Бмс если нормальный то сам отключит выход при проблемах.

А вот банки менять это и есть пороховая бочка, родные +- притерты по параметрам и новые банки будут ни к селу ни к городу, а балансир у сяоми очень слабенький.
+
avatar
+1
Так надо просто банки нормальные брать, а не непонятный китайский подвал + при формировании сборки компоновать подобные банки в параллели.
+
avatar
+1
Кривая разряда старых и новых банок сильно разная будет, отсюда разбаланс и повышенные требования к балансиру который у того же сяоми 20мА если я правильно помню, а у дешевых куго авово и тому подобных вообще нет. В итоге такой ремонт скорее вред чем польза.
Уж лучше продать такой аккумулятор тому кто готов рисковать жизнью ради трех копеек, а себе взять что то нормальное что квартиру не спалит.
+
avatar
+1
5 мА там
+
avatar
+3
Ну если батарею не из говна и палок собирать, а также нормальную изоляцию использовать и BMS нормальную, то спалить хату будет сложновато. Правда эффективность такой поделки с ассорти из бу банок и новых тоже будет не фонтан.
P.S.: Хотя еще и от «приложения» к рукам зависит, а то знаю я деятеля, который устанавливая сидуху типа стульчак на самокат, умудрился саморезами не только верхний лист деки просверлить, но и удачно в батку забуриться, аж часть волшебного дыма вышла. Вот там было хорошо что банки из песка на половину с говном и палками, а то не только бы волшебный дым вышел, но и файер-шоу на халяву бы чел посмотрел.
+
avatar
0
Вариантов уже вагон и маленькая тележка — можно заменить банки и прошить в родную BMS правильную емкость (например увеличенную) и повысить вольтаж (нужно будет пропатчить BMS), можно взять другую BMS и эмулятор или просто сделать свою с поддержкой родного протокола, можно просто прошить ESC, то бишь основной контроллер, чтобы он забил болт на BMS.
Причем родная BMS не самая удачная, балансировка через опу…
+
avatar
+5
donBaton, всегда с интересом читаю и вдохновляюсь Вашими изысканиями. Уверен, не один я надеюсь на скорое продолжение.
+
avatar
+9
Да, и мне нравится. Ничего не понял,
+
avatar
-2
Наймите переводчика на человечий
+
avatar
  • serghs
  • 21 июля 2024, 15:57
0
Для того, чтобы народ не ставил какие попало батарейки, родная батарея Xiaomi оснащена последовательным интерфейсом, с чужой батареей самокат работать не будет — старый трюк, как заработать деньги на расходниках с задранными ценами.
Уж от кого, а от вас-то я такого пассажа не ожидал…
Батарея имеет на просто «интерфейс», а собственный контроллер, который управляет зарядом/разрядом, измеряет напряжение на ячейках, блокирует батарею при аварийных (нештатных) ситуациях. Т.е. батарея — это часть системы, ничуть не менее важная чем контроллер мотор-колеса. Другое дело, что последний — своеобразный «хаб», соединяющий систему в единое целое. И если при запуске тот же контроллер батареи выдаст в ответе на запрос некую ошибку, для простоты скажем «разряжен выше допустимого», она отобразится на дисплее руля (переданная теперь уже от контроллера мотор-колеса) и… усё, приехали ))
+
avatar
  • serghs
  • 21 июля 2024, 16:12
0
Кроме того, версия прошивки батарейного контроллера должна быть в соответствии с версией прошивки мотор-колеса (обычно это 1-2, реже 3 бывает — типа «белый список»), иначе контролер BLDC выдаст на дисплейчик руля ошибку «неверная версия батареи». И ишачок ехать откажется :)
+
avatar
+2
Да нет там никакой супер умной ультра безопасной BMS, базовые возможности BQ76930 используются и все, балансировка никакая.
+
avatar
  • vlo
  • 21 июля 2024, 20:14
0
вот с этого и надо начинать. защитные функции ни к чему из этого не обязывают. таки в чем вопрос к автору?
+
avatar
+1
собственный контроллер, который управляет зарядом/разрядом, измеряет напряжение на ячейках, блокирует батарею при аварийных (нештатных) ситуациях
Все это давным-давно прекрасно делают обычные BMS без какого-либо числового программного управления. Наличие в батарее контроллера, прежде всего, необходимо, чтобы госамокат не завелся с левым аккумулятором.

Так что автор описал всё абсолютно правильно.
+
avatar
0
Хорошо однако в Оулу — взял и скачал кубик, а у нас тут это вам не там, последнюю стиралку вчера разобрал вот.
+
avatar
  • serghs
  • 21 июля 2024, 20:51
0
Так пишите код, используя CMSIS, нафиг тот кубик… ))
+
avatar
+3
На случай, если кто не знает: есть проект VESC, весьма навороченный с векторным управлением и открытыми исходниками. На али можно найти готовые контроллеры по слову Flipsky
+
avatar
0
Да веск и в родной контр сяо нормально встанет
+
avatar
0
очень интересно было бы прочитать продолжение. прямо кладезь информации в одном месте.
+
avatar
  • kiv69
  • 01 сентября 2024, 06:50
0
Поругать ардуино иде — модно.
Похвалить эту отвратную платформио не менее модно.
А можно я сам буду решать, что лучше?
+
avatar
  • Kkm
  • 04 сентября 2024, 17:57
0
Кто бы сказал, какой ересью в прошивке Xiaomi добиваются такого мерзкого свиста-шипения мотора при работе не синусе, по которому можно однозначно определить линейку Ninebot/Xiaomi еще метров за 50 за спиной, пока не обгонит… в то время, как те же синусные контроллеры Kugoo и прочих электровелов и самокатов-работают абсолютно бесшумно, только шорох покрышек по асфальту, разве что бывает легкий гул при сильной нагрузке, вроде езды на небольшой скорости в крутую горку… В принципе-это вопрос академически интересует меня уже лет 7, в свое время сошлись на том, что это паразитная модуляция при контроле/ограничении тока в обмотках, но тем не менее… Т.к. во всех встреченных мной нормально и бесшумно работающих синусных контроллерах на STM32 шунтов в фазах не было. А вот в этих у Сяо-увы…