Авторизация
Зарегистрироваться

Контроллер мотор-колеса на MM32SPIN05. Нет повести печальнее на свете…

Нет, к Ромео и Джульетте претензий нет, они кросавчеги, конечно. Но вот события вокруг них развиваются очень грустно.

В этом рассказике тоже будут убийства, вскрытие и много соплей слез.

Началось все очень красиво — я приобрел на Али контроллеры для гироскутера. Не те, традиционно-посконные и известные всем, где один контроллер управляет двумя двигателями, а более поздние версии, где каждому колесу полагается собственный контроллер. Радиодетальки нынче дешевы, а чего их жалеть, супостатов — можно и два контроллера сгородить, зато толстых проводов и, соответственно, потерь меньше.

Ну да ладно, ближе к телу.

Сейчас все это мы разберем, восстановим схему и попробуем немного поардуинить.

 

Вот они, контроллеры. Закатанные в пластик. Коробочки склеены, поэтому надо просто ломать — парой отверток это делается враз. Обнаруживаем платки — слегка разные, на одной есть преобразователи напряжение от батареи 10s во что-то более-менее разумное, на второй — место для bluetooth модуля. Это нас сейчас интересует меньше всего, поэтому вторую платку откладываем в сторону и плотно займемся первой.

Для начала — что там с мозгами? Обнаруживаем микроконтроллер MM32SPIN05PF. Казалось бы, очень похож на STM32 — но все-таки не очень. Это Cortex-M0, какая-то часть периферийных устройств похожа на STM32, какая-то не очень, вернее даже совсем не похожа. И диапазон питания у него другой — и это для контроллера мотора неплохо подходит — ведь тем же датчикам Холла надо минимум 4 лишним вольта. Мы к нему потом вернемся и разберемся, как его программировать, хорошо?

 

Рядом с микроконтроллером стоит IMU — 6D гироскоп/акселерометр, по виду и разводке ног очень похож на MPU-6900 из iPhone, но не он. Ну и ладно, все равно и на MPU-6900 спецификации у меня нет, да и вообще на этой плате он мне не интересен.

Перейдем к системе питания, тут найдется кое-что интересное.

 

Кнопка включения-выключения ничего особенного не представляет, во всех аналогичных изделиях сделано более-менее похоже. А вот понижающий преобразователь интересен. Обратите внимания — у схемы не предусмотрено подключение к земле. Данный преобразователь способен выдать 15 Вольт из 100 с приличной эффективностью. 

Прецезионностью преобразователи такого типа не страдают, но зато среди них есть экземпляры, которые могут работать с очень высоким входным напряжением, до 800 Вольт. Естественно, их применяют во всяких устройствах для хитроумных домов. Они стоят очень дешево, 20-30 центов в розницу и их много разных: MP173, PN8015, PN8016, MP9488, PN6055 — короче, nomen illis legio — легион им имя. И даже диоды со щетками им не нужны — в схеме можно самые дешевые использовать. Правда, индуктивность у катушки должна быть приличной, в моих закромах такие не валяются.

На моей плате этот преобразователь выдает около 13.6 вольт, это питание используется для драйверов затвора транзисторов и внешних светодиодов. С него же через обычный линейный стабилизатор берется 5 Вольт для микропроцессора. И еще один линейный стабилизатор на 3.3 Вольта исключительно для питания IMU. Импульсный преобразователь на 5 Вольт предназначен для питания чего-то внешнего, похоже там предусмотрена целая гирлянда WS2812.

 

Транзисторный полумост и драйверы затвора — абсолютно ничего особенного, как и должно быть. А вот с измерением токов — чуть интереснее. В обычном контроллере гироскутера на измерении тока стоят усилители — для фазных токов измерение происходит на открытом переходе транзистора, и у усилителя коэффициент усиления в районе 3. Общий ток измеряется на шунте, там у усилителя усиление порядка 10. Здесь никаких усилителей нет вообще. Где собака порылась, спрашивается?

Я писал, что периферия у этого мелкоконтроллера немного другая, и ADC отличается очень сильно. В том числе и использованием внутреннего опорного напряжения. В ADC MM32SPIN05 используется напряжение 1.2 Вольта (в STM32 — это напряжение питания) — стало быть усиление в районе трех уже лишнее. Точность измерения общего тока становится уже не очень, до какой-то степени это компенсируется увеличением сопротивления шунта.

Но все это были предположения до того, как я стал писать для этого контроллера свое программное обеспечение.

И опять таки мучило сомнения — ну на кой нужно к одному каналу аж три вывода подключать? Один товарищ таки надоумил — он работал с микропроцессорами, где внутрях есть операционники. Тут пазл и сложился — все эти выводы как раз для усилителя. Либо плата разрабатывалась для другого микропроцессора, у которого есть эти операционники, либо они есть и у этого — но в документации о них нет ни слова.

 

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

 

Ну, думаю, поверхностно я все рассказал, но полная схема все равно расскажет больше — можете кликнуть для увеличения.

 

И чисто для удобства — куда щупальца у микроконтроллера тянутся:

 

 

Теперь начнем ардуинить.

Первый вопрос — чем этот микроконтроллер шить? Есть такая штука — называется pyOCD. В паре со свистком st-link она этот вопрос решает.

Ставим ее:

python3 -m pip install -U pyocd

 

и добавляем возможность программировать наш MM32SPIN05, по умолчанию его там нет: 

pyocd pack install mm32spin05pf

 

Все, прошивальщик у нас есть. Стереть микросхему и снять защиту: 

pyocd erase -t mm32spin05pf —chip

 

Прошить ваш файл:

pyocd flash -t mm32spin05pf your_file_name.ext

 

Программу для этого контроллера тоже надо как-то разрабатывать. На сайте разработчика  лежат и приличная документация на контроллер, и пакеты для Keil uVision, IAR workbench, свой HAL, примеры — короче всего много. Не обольщайтесь только сильно — ошибок там хватает.

Гнутый Си, конечно, забыт. Ну да не боги горшки обжигают, пишем свой ассемблерный стартап, скрипт для линкера, берем готовые заголовочные файлы — и с make уже вполне можно работать, Cortex-M0 — он и в Африке Cortex.

Затем берем широко известный в узких кругах хак гироскутерных плат и выдираем из него все упоминания о втором моторе и кубическом HAL.

Чем это программное обеспечение отличается от других? Двигатель смоделирован в Simulink, и этот Simulink генерирует код для векторного управления в C файл. При этом он все оптимизирует и по получившемуся коду абсолютно непонятно, чем он занимается.

Симулинковыми картинками можно полюбоваться здесь, правда, что-либо изменить и перегенерировать код не получится.

 

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

Пытаемся отлаживать, подключаю контрольные точки. Не разрядив конденсатор, лезу в схему. Нечаянно замыкаю два вывода на драйвере затвора. Процессор не выдерживает 12 вольт и в муках умирает. Мир его кремниевому праху.

Купить такой же — на Али они стоят раза в два дороже STM32 и его еще ждать надо. Погоревав, берем вторую плату. Резво начинаем отладку. Но опять засада — проводок от логического анализатора касается чего-то высоковольтного. В итоге — он (логический анализатор) жертвою пал в борьбе роковой. Да ладно бы один — он был подключен к очень неплохому USB хабу с переключаемым выходами. Один вход и один выход накрылись медным тазом.

Отпеваем невинных жертв, доделываем программу. Запускаем — работает, но не во всех режимах. Точности измерения АЦП — максимум менее 5% от полной шкалы не хватает для режимов, где измерение тока критично. Управление моментом не работает — а мне именно оно было нужно. Печаль. Плата годна только на раздергивания на запчасти. Или найти правильный процессор со встроенным операционным усилителем.

Ну и быстродействия Cortex-M0 немного не хватает для оригинальных 16 кГц PWM, пришлось снизить до 12.

 

Тем не менее — все исходники я выложил на гитхаб, можете посмотреть и поиграть при желании.

Но мне же нужно управление моментом, и что, мне пустым возвращаться назад? Но тут я набрел на товары вспомнил про плату от самоката M365, про которую уже писал. Клонируем (исходники положил на Гитхаб) хак Eferu еще на один процессор — и чудо случилось, все заработало так, как надо.

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

 

 

 

 

 

 

Добавить в избранное +37 +45
свернуть развернуть
Комментарии (20)
RSS
+
avatar
+19
+
avatar
+3
Только читал занятную статью про импортозамещение simulink — habr.com/ru/articles/846918/

Чтобы не палить usb и комп, может стоит купить usb isolator на ADUM3106?
+
avatar
  • donBaton
  • 01 октября 2024, 16:23
+9
Зачем его покупать? Он же уже давным-давно в столе лежит. Может, вы еще его и подключить посоветуете? :)
+
avatar
0
А почему не пользуетесь?
+
avatar
  • donBaton
  • 01 октября 2024, 16:38
+6
Хороший вопрос :)
+
avatar
  • VladM
  • 01 октября 2024, 16:36
+4
… Предыдущие сочинения автора, мне как-то казались и понятнее и логичнее. Здесь же что- то без начала и с задушенным концом… Кстати, это только у меня загадочные окошечки в тексте, не реагирующие на попытки активировать, или все тоже самое видят?
+
avatar
0
Как раз такие все понятно (если читать автора с самого начала). Не понятно зачем дону-батону управлять по моменту, логичнее же по скорости.
+
avatar
  • donBaton
  • 01 октября 2024, 16:57
+2
Нет, не логично. Если одновременно работают 2 мотора — они пойдут в разнос, а момент — это что-то типа электронного дифференциала. Ну и привычнее — поведение, как у обычного автомобиля. Едем в горку при том же положении газа — теряем скорость.
+
avatar
+2
Да, про повороты и колесную базу я забыл. Теперь понятно. Спасибо.
+
avatar
+2
Повесть хороша, как всегда. А печальная или весёлая, не важно…
П.С. Тоже пожёг немало чего из-за подобной криворукости.
+
avatar
  • Lenny
  • 01 октября 2024, 18:58
+2
Интересно как много народу поняло о чем вообще эта повесть? ))))))
+
avatar
-1
Нужна внимательность при прочтении.
+
avatar
  • ABATAPA
  • 01 октября 2024, 19:11
+1
Ловите самокатчика!
+
avatar
+1
Он вооружён…
+
avatar
  • DIMAace
  • 01 октября 2024, 19:21
+2
Мне всё ясно. Нет смысла мучать колесо и ардуину, лучше пойду налью себе коньячку.
+
avatar
0
Поддерживаю…
+
avatar
  • INN36
  • 01 октября 2024, 20:05
0
Симулинковыми картинками можно полюбоваться здесь, правда, что-либо изменить и перегенерировать код не получится.
Почему не получится? Это же симулинк из матлаба, если я правильно понял?
+
avatar
  • donBaton
  • 01 октября 2024, 20:10
0
это web-версия, смотрелка.
+
avatar
  • INN36
  • 01 октября 2024, 20:38
0
это web-версия, смотрелка.
Скажите, в пакете симулинк от матлаба Вы реально пытались моделировали свою нелинейную динамическую систему или привели эту смотрелку, что бы нагнать волны?)
+
avatar
+1
А вот понижающий преобразователь интересен. Обратите внимания — у схемы не предусмотрено подключение к земле.
Кто бы объяснил, как эта дичь работает. Ладно с питанием, но как осуществляется обратная связь? Понятно, что на ногу FB приходит какое-то напряжение, но напряжение нам надо стабилизировать относительно земли. Той самой, с которой у нас нет связи.

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.