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


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

Реклама:

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

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

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

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 кБ - загружено 12 раз.)

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


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

bambirtuya

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

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

Maksuxa2003

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

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

dimap

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

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

dimap

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



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

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

DarkByte

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

В пакете от контроллер к LCD возможно правильнее будет выполнять операцию xor между байтами 3-12 и 13, вместо операции вычитания. Пример пакетов:
Цитата
36 2b 00 09 09 09 00 09 45 09 09 7e 3a 09 15  => 36 2b 00 00 00 00 f7 00 3c 00 00 75 31 00 15
36 2c 00 32 32 32 00 32 6e 32 3c a7 63 32 8c  => 36 2c 00 00 00 00 ce 00 3c 00 0a 75 31 00 8c
36 2d 00 37 37 37 00 37 6e 37 41 ac 68 37 f0  => 36 2d 00 00 00 00 c9 00 37 00 0a 75 31 00 f0
36 2e 00 30 30 30 00 30 67 30 3a a5 61 30 81  => 36 2e 00 00 00 00 d0 00 37 00 0a 75 31 00 81
36 2f 00 35 35 35 00 35 6c 35 3f aa 66 35 86  => 36 2f 00 00 00 00 cb 00 37 00 0a 75 31 00 86
36 30 00 2e 2e 2e 00 2e 65 2e 38 a3 5f 2e a7  => 36 30 00 00 00 00 d2 00 37 00 0a 75 31 00 a7
36 31 00 33 33 33 00 33 6a 33 3d a8 64 33 9c  => 36 31 00 00 00 00 cd 00 37 00 0a 75 31 00 9c
36 32 00 2c 2c 2c 00 2c 63 2c 2c a1 5d 2c b7  => 36 32 00 00 00 00 d4 00 37 00 00 75 31 00 b7

В пакете от LCD к контроллеру, в моём случае в байтах 3 4 и 6 значение меняется в зависимости от выбранного уровня ускорения. На уровне 0 значение 0, 1-3, 2-6, 3-9, 4-12, 5-15. В байте 8 ограничитель максимальной скорости (P07). В байте 12 число магнитов в колесе (насколько я понял) (P02). В байте 9 битовые флаги разных состояний (вкл\выкл света, круиз). Байт 8 - псевдослучайное число, которое всегда начинается с одного и того же значения. Байт 14 - контрольная сумма. Пример пакета:
Цитата
01 03 6f 0f 0f 81 0f 00 64 80 00 00 34 38 0b  =>   1   3 111  15  15 129  15   0 100 128   0   0  52  56  11
01 03 70 0f 0f 7a 0f 00 64 80 00 00 34 38 ef  =>   1   3 112  15  15 122  15   0 100 128   0   0  52  56 239
01 03 71 0f 0f 7f 0f 00 64 80 00 00 34 38 eb  =>   1   3 113  15  15 127  15   0 100 128   0   0  52  56 235
01 03 72 0f 0f 80 0f 00 64 80 00 00 34 38 17  =>   1   3 114  15  15 128  15   0 100 128   0   0  52  56  23
01 03 73 0f 0f 25 0f 00 64 80 00 00 34 38 b3  =>   1   3 115  15  15  37  15   0 100 128   0   0  52  56 179
« Последнее редактирование: 27 Сен 2018 в 21:37 от DarkByte »

DarkByte

  • Начинающий
  • *
  • Репутация: 0
  • Сообщений: 63
  • Россия, Челябинск
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
В пакете от контроллер к LCD возможно правильнее будет выполнять операцию xor между байтами 3-12 и 13, вместо операции вычитания
Был не прав, всё таки тут вычитание/сложение, а не xor применяется. Чтобы в вашей теме не флудить своим контроллером, создал свою.

zy_tm

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

Ссылку не могу вставить, гуглится по словам: "habr Знакомство с микроконтроллерами Renesas на примере линейки RL78"


Страницы: 1Вверх
 

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

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

Powered by SMFPacks Alerts Pro Mod
Powered by SMFPacks Mentions Pro Mod