Электротранспорт
Пожалуйста, войдите или зарегистрируйтесь.


Расширенный поиск    

Реклама:

Протокол общения контроллера Speedway mini IV с "курком"

Страницы: 1Вниз

Автор Тема: Протокол общения контроллера Speedway mini IV с "курком"  (Прочитано 523 раз)

0 Пользователи и 1 Гость просматривают эту тему.

dimap

  • Начинающий
  • *
  • Репутация: 1
  • Сообщений: 29
  • Россия, Москва
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
Честно говоря дефолтный "компьютер" с курком на минике достаточно отстоен (начиная хотя бы с точности измерения им напряжения батареи). В общем я задумался потенциально заменить его (не меняя контроллер) или же поставить свой самодельный БК параллельно, в связи с чем встал вопрос о протоколе обмена между контроллером и штатным БК. Поискал по форумам, но полноценного ответа на мой вопрос не нашел. Возможно я не там искал и кто-то сейчас ткнет меня в ссылку, но я пока решил сам попробовать отреверсить, как контроллер в минике управляется штатным БК. Возможно эта тема будет кому-то интересна/полезна, а кто-то даже захочет помочь с анализом собранных данных.

На данный момент удалось выяснить следующее:

1. В БК приходит 5 проводов:
  красный -- питание от батареи
  оранжево/красный -- включение/отключение батареи
  черный -- земля
  зеленый -- управление газом
  желтый -- данные от контроллера
  синий -- данные к контроллеру

2. Управление газом происходит по средством изменения напряжения на зеленом проводе от 0.8В (курок отпущен) до 3.7В (полный газ).

3. Контроллер и БК общаются по UART, baudrate 1200, 15-ти байтовым фреймами, асинхронно, с частотой 5Hz.

4. БК хранит все свои настройки внутри себя и 5 раз в секунду шлет их в контроллер, который уже меняет свой режим работы в зависимости от этих настроек. Контроллер со своей стороны 5 раз в секунду шлет в БК свой статус (где скорее всего в том или ином виде есть информация о скорости вращения МК).

5. Сам протокол я пока не смог полностью расшифровать, но кое что уже удалось идентифицировать.

Данные от БК к контроллеру
Пример данных (15-ти байтовые фреймы):
1, 3, 64, 0, 0, 74, 2, 100, 0, 128, 2, 0, 0, 0, 236,
1, 3, 65, 0, 0, 79, 2, 100, 0, 128, 2, 0, 0, 0, 232,
1, 3, 66, 0, 0, 80, 2, 100, 0, 128, 2, 0, 0, 0, 244,
1, 3, 67, 0, 0, 117, 2, 100, 0, 128, 2, 0, 0, 0, 208,
1, 3, 68, 0, 0, 126, 2, 100, 0, 128, 2, 0, 0, 0, 220,
1, 3, 69, 0, 0, 115, 2, 100, 0, 128, 2, 0, 0, 0, 208,

Как видно, сначала идут два байта 1 и 3 (они не меняются), скорее всего это идентификатор фрейма БК-контроллер, дальше один байт -- счетчик, который просто циклично меняет свое значение от 0 до 255 по кругу.
7-й байт -- битовый вектор флагов, значений параметров P4-P7 (0000 P7 P6 P5 P4)
8-й байт -- значение параметра P8
11-й байт -- значение параметра P9
15-й байт -- контрольная сумма (побитовый xor первых 14-ти байт)
Остальные пока не идентифицировал.
Итого имеем:
1, 3, counter, unk, unk, unk, P4-P7 bits, P8, unk, unk, P9, unk, unk, unk, checksum

Данные от контроллера к БК
Пример данных (15-ти байтовые фреймы):
54, 63, 0, 101, 101, 101, 0, 101, 101, 101, 101, 218, 150, 101, 69,
54, 64, 0, 30, 30, 30, 0, 30, 30, 30, 30, 147, 79, 30, 170,
54, 65, 0, 99, 99, 99, 0, 99, 99, 99, 99, 216, 148, 99, 59,
54, 66, 0, 28, 28, 28, 0, 28, 28, 28, 28, 145, 77, 28, 168,
54, 67, 0, 97, 97, 97, 0, 97, 97, 97, 97, 214, 146, 97, 49,
54, 68, 0, 106, 106, 106, 0, 106, 106, 106, 106, 223, 155, 106, 54,

Первый байт -- идентификатор фрейма контроллер-БК, второй -- счетчик, 15-й -- контрольная сумма, остальные пока восстановить не смогу.
3-й и 7-й в моих логах всегда 0.
4, 5, 6, 10 и 14 -- всегда имеют равные значения
Так же заметил некоторые интересные зависимости, например вот так во времени выглядят 11, 12 и 13-й байты:

Итого имеем:
54, counter, unk, unk, unk, unk, unk, unk, unk, unk, unk, unk, unk, unk, checksum

Прикладываю собранные логи, если кому будет интересно тоже поразбираться с протоколом. Там совсем небольшой кусочек, в котором я сперва газовал курком, а потом переключал режим ограничения скорости 3-1-2-3:
Контроллер-БК:
* y_line_dec.txt (9.55 кБ - загружено 7 раз.)

БК-Контроллер:
* b_line_dec.txt (7.99 кБ - загружено 4 раз.)


PS: Да, у меня "синий" БК.
« Последнее редактирование: 25 Авг 2018 в 16:20 от dimap »

bambirtuya

  • Старожил
  • *****
  • Репутация: 2
  • Сообщений: 2441
  • Россия, Москва, на краю ЦАО.
  • без подписи.
  • Оффлайн Оффлайн
    • Награды
подписался.

dimap

  • Начинающий
  • *
  • Репутация: 1
  • Сообщений: 29
  • Россия, Москва
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
Удалось так же распарсить как БК сообщает контроллеру про значения P4, P5, P6, P7 и P9

P4-P7 это битовые флаги, младшие 4 бита в 7-ом байте, то есть битовое представление 7-го байта выглядит так (от старшего бита к младшему):
76543210
not usednot usednot usednot usedP7P6P5P4
Например, у меня конфиг: P4 -- кмч, P5 -- старт с толчком, P6 -- круиз отключен, P7 -- плавный старт, получаем следующий байт конфигурации: 0000 0010
Или 2 в десятичном представлении (что и видно в логах к моему первому посту)

С P9 все тоже просто, это 11-ый байт, у меня стоит максимальный уровень рекуперации и значение этого байта равно 2, при среднем будет 1, а если отключить, то 0.

По определению скорости пока не разобрался, но есть пара мыслей, посмотрим, что получится понять.
« Последнее редактирование: 19 Авг 2018 в 17:44 от dimap »

Сообщение понравилось: igoree, Mr_Hurma_xD

dimap

  • Начинающий
  • *
  • Репутация: 1
  • Сообщений: 29
  • Россия, Москва
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
"Разобрался", как БК вычисляет скорость и понимает, что активен рекуп.

Я не буду описывать, как мне удалось это понять и просто приведу кусочек кода на питоне, который вычисляет скорость (p -- это 15-ти байтовый фрейм данных от контроллера):

b8 = p[8] - p[13]
if b8 < 0:
b8 = b8 + 256

speed = int(((p[7] - p[13]) * 256 + b8) / 1024.0 * 50)


Соотвественно значение (p[7] - p[13]) * 256 + b8 это обороты двигателя в некоторой системе координат. В моих экспериментах это значение менялось в диапазоне от 0 до 988, что соотвествовало изменению скорости на БК от 0 до 49 (опыты делал на вывешенном без нагрузки колесе). В коде выше значение 50 просто подобрано, чтобы вычисляемое значение скорости наиболее соотвествовало показанию БК (на котором параметр P2 выставлен в 17).
В МК миника 30 магнитов (кажется это так :bw:, поправьте, кто разбирал колесо), у меня получилось, что ближе всего это значение похоже на количество полюсов, которые проходят через одну точку в секунду.

Флаг рекуперации определяется по значению:
regen = ((p[4] - p[13]) & 32)
Возможно, что это какой-то стандартный радиомодельный протокол, но я их не знаю, поэтому просто "подогнал" способ вычисления значений под показания БК :)

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

Мне пока никак не удается понять каким образом БК сообщает контроллеру про скоростной режим. Эти данные не присуствуют в явном виде в фреймах от БК к контроллеру (где я расшифровал почти все значения, кроме одного байта, который пока похож на рандомный шум, в то время как все остальные или имеют фиксированные значения всегда или я уже определил их значения).
« Последнее редактирование: 24 Авг 2018 в 22:21 от dimap »

Сообщение понравилось: Mr_Hurma_xD

dimap

  • Начинающий
  • *
  • Репутация: 1
  • Сообщений: 29
  • Россия, Москва
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
В общем, по скорости у меня получилось вывести вот такую зависимость, если обозвать (p[7] - p[13]) * 256 + b8 из прошлого сообщения mcount, то получается:

speed = (mcount / (P2 * 2,74)) * P0 * 2,54 * pi / 100 * 3,6

где P0 и P2 это значения из настроек
Цитата
(то есть P2 это вовсе не диаметр переднего колеса, как много где пишут, а скорее количество полюсов магнитов в МК)
2,54 -- преобразуем дюймы в сантиметры
100 -- сантиметры в метры
3,6 -- метры в секунду в километры в час
2,74 -- magik number, который я вычислил опытным путем (вообще это конечно костыль, благодаря которому вся формула сходится, но строго объяснить этот параметр пока не получилось)
« Последнее редактирование: 25 Авг 2018 в 16:27 от dimap »

Сообщение понравилось: igoree, Mr_Hurma_xD

djonny

  • Начинающий
  • *
  • Репутация: 0
  • Сообщений: 52
  • Россия, Москва
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
Спасибо за тему, интересно. Думал когда же народ понимающий займется этими самиками изнутри. Еще я считаю, что курок никак кодом не сообщает контроллеру о скоростном режиме, а все простейшие преобразования происходят внутри курка и отражаются только на выходном напряжении. А еще было бы очень полезно, если бы можно было программу в этих БК или контроллерах корректировать, потому что в фуфломоторс все плохо с нормальными инженерами. Например сделать на зеленых курках настраиваемую мощность рекуперации, как это было на синих..., время отключения курка с трех минут изменить на большее, сделать действительно юзабильные кривые плавного старта.
« Последнее редактирование: 29 Авг 2018 в 11:26 от djonny »

ShamaN4ik79

  • Местный
  • ****
  • Репутация: -1
  • Сообщений: 627
  • Россия, Москва, Красногорск
  • Езжу на батарейках! ;)
  • Онлайн Онлайн
    • Награды
Подписался.
А еще лучшее применение: покупать на али курки за 1 т.р. (а не за 2500р. оригинальные) и программить их для разного ЭТ (возможно слив EEPROM  с оригинального курка для начала). Но тот нужно подключиться к самому процу.
Даташит на проц прилепил.
« Последнее редактирование: 29 Авг 2018 в 12:02 от ShamaN4ik79 »

Maksuxa2003

  • Наш человек
  • ***
  • Репутация: 0
  • Сообщений: 366
  • Россия, Краснодар
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
Офигеть вы умные. Я нихера не понял вообще :-D

Сообщение не понравилось: ShamaN4ik79

dimap

  • Начинающий
  • *
  • Репутация: 1
  • Сообщений: 29
  • Россия, Москва
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
Спасибо за тему, интересно. Думал когда же народ понимающий займется этими самиками изнутри. Еще я считаю, что курок никак кодом не сообщает контроллеру о скоростном режиме, а все простейшие преобразования происходят внутри курка и отражаются только на выходном напряжении. А еще было бы очень полезно, если бы можно было программу в этих БК или контроллерах корректировать, потому что в фуфломоторс все плохо с нормальными инженерами. Например сделать на зеленых курках настраиваемую мощность рекуперации, как это было на синих..., время отключения курка с трех минут изменить на большее, сделать действительно юзабильные кривые плавного старта.
Курок действительно никак не сообщает контроллеру про скоростной режим, по крайней мере я пока не нашел. Но вот и выходное напряжение курка не меняется в зависимости от режима (это я проверял), то есть пока совсем не понимаю как контроллер узнает про ограничение (а я на 99% уверен, что именно контроллер ограничивает скорость, а не курок).
Плавный старт это опять же к контроллеру, курок этим не управляет.

Перепрограммировать штатный курок возможно, но кажется будет крайне "дорогая" разработка, я по крайней мере не возьмусь :) не найду
столько свободного времени. Сейчас планирую сделать свой дисплейчик с нормальным отображением оставшегося заряда и прочей статистикой, буду покдлючать одновременно со штатным курком.
« Последнее редактирование: 30 Авг 2018 в 20:52 от dimap »

dimap

  • Начинающий
  • *
  • Репутация: 1
  • Сообщений: 29
  • Россия, Москва
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
Собрал "черновик" дисплея на ардуинке, чтобы проверить свою гипотезу по расчету скорости.



Кажется все работает (есть небольшая задержка с отображением данных в сравнении со штатным БК, но это исправится).

Сообщение понравилось: igoree
Страницы: 1Вверх
 

Помощь форуму | Отказ от ответственности | Новая версия форума
©, Форум электротранспорта, electrotransport.ru, 2007—2018.
Копирование материалов возможно только с согласия правообладателя.

Размер занимаемой памяти: 6 мегабайт.
Страница сгенерирована за 0.198 секунд. Запросов: 79.