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

 

Хочешь стать куратором любимой темы?

* Комментарии к новостям

1. Электролигерад МОЛНИЯ - идея, создание, опыт эксплуатации (Успешные проекты) от triaatlon (15.05.2021 в 23:19)2. (2018) Моноколесо Inmotion V10 (V10F) (Моноколёса Inmotion) от almartiny (15.05.2021 в 23:15)3. LiFePO4 Аккумуляторы характеристики, опыт эксплуатации. Часть 2. (Литий-железофосфатные (LiFePO4) аккумуляторы) от Boris b (15.05.2021 в 23:13)4. Прошивка гироскутера (Гироскутеры (мини-сигвеи)) от Kirill_Eltsov (15.05.2021 в 23:10)5. Полеты на Луну. Настоящее и прошлое. (Свободный электрон) от Сергей373 (15.05.2021 в 22:57)6. ULTRON T11/HALTEN RS-03 (60v, 2x1200, 23,4Ah) (Электросамокаты Halten ) от Serg_28 (15.05.2021 в 22:57)
Не нравится реклама? Пройдите простую регистрацию на форуме и не будете видеть рекламу.

Прочитано 4428 раз

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

18 Авг 2018 в 13:20
Прочитано 4428 раз
Оффлайн

dimap

Россия, Москва Сообщений: 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 кБ - загружено 46 раз.)

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


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


19 Авг 2018 в 04:26
Ответ #1
Оффлайн

bambirtuya

Россия, Москва, на краю ЦАО. Сообщений: 2699


19 Авг 2018 в 17:29
Ответ #2
Оффлайн

dimap

Россия, Москва Сообщений: 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 »


24 Авг 2018 в 22:04
Ответ #3
Оффлайн

dimap

Россия, Москва Сообщений: 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 »


25 Авг 2018 в 16:16
Ответ #4
Оффлайн

dimap

Россия, Москва Сообщений: 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 »


29 Авг 2018 в 11:14
Ответ #5
Оффлайн

djonny

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


29 Авг 2018 в 11:56
Ответ #6
Оффлайн

ShamaN4ik79

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


29 Авг 2018 в 20:33
Ответ #7
Оффлайн

Maksuxa2003

Россия, Краснодар Сообщений: 599
Офигеть вы умные. Я нихера не понял вообще :-D


30 Авг 2018 в 19:34
Ответ #8
Оффлайн

dimap

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

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


02 Сен 2018 в 19:15
Ответ #9
Оффлайн

dimap

Россия, Москва Сообщений: 29
Собрал "черновик" дисплея на ардуинке, чтобы проверить свою гипотезу по расчету скорости.



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


27 Сен 2018 в 21:24
Ответ #10
Оффлайн

DarkByte

Россия, Челябинск Сообщений: 217
Спасибо за информацию, наткнулся когда начал разбирать протокол обмена между китайским контроллером МК и 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 »


28 Сен 2018 в 13:24
Ответ #11
Оффлайн

DarkByte

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


12 Окт 2018 в 14:28
Ответ #12
Оффлайн

zy_tm

Россия, Москва Сообщений: 10
Интересная тема, наткнулся на статью на хабре, может чем то поможет
Там вроде и про софт для прошивки МК и про отладочную плату...

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



02 Фев 2020 в 17:11
Ответ #13
Оффлайн

Александр Туржов

Россия, Санкт-Петербург Сообщений: 26
Вопрос, можно ли перевести speedway mini 4 с 48в на 60в и что для этого нужно? Хочу расширить пробег запасными батареями, которых у меня уже 3 шт. Но они на 60в(16s)


02 Фев 2020 в 17:51
Ответ #14
Оффлайн

electro05

Модератор Россия Сообщений: 3873
Вопрос, можно ли перевести speedway mini 4 с 48в на 60в и что для этого нужно? Хочу расширить пробег запасными батареями, которых у меня уже 3 шт. Но они на 60в(16s)
Задайте ваш вопрос вот здесь ссылка


10 Окт 2020 в 21:51
Ответ #15
Оффлайн

Board118

Россия Сообщений: 13
Самокат Halten RS-03, протокол обмена от бортового компьютера к контроллеру мотор колеса практически идентичен описанному здесь.
Я нашел как задается скоростной режим. Аналоговый сигнал с курка действительно не меняется. Текущая скорость передается в байте 5 (считаю от 0). Но значение кодируется. Выяснил, что кодированная последовательность повторяется через каждые 128 пакетов (значение привязано к байту 2 - который инкрементируется каждый пакет).
        D[2]: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 ... 7E 7F
----------------------------------------------------------------------------------
1я скр. D[5]: 80 05 06 2B 34 29 2A 2F 28 2D 2E 53 7C 51 52 57 50 55 56 7B ... 82 07
2я скр. D[5]: 85 0A 0B 30 39 2E 2F 34 2D 32 33 58 81 56 57 5C ...
3я скр. D[5]: 8A 0F 10 35 3E 33 34 39 32 37 38 5D 86 5B 5C 61 ...
При 2-й скорости каждый элемент последовательности увеличивается на 5. При 3-й еще на 5.
Т.е. в  байте 5 будет D[5] = F(D[2]) + 5 * скорость.
Не могу понять алгоритм преобразования F(от D[2]). Кто могуч помогите. Чувствую это функция а не таблица.
« Последнее редактирование: 10 Окт 2020 в 22:35 от Board118 »


12 Окт 2020 в 15:32
Ответ #16
Оффлайн

procto87

химки Сообщений: 504
Задайте ваш вопрос вот здесь
миниководов осталось человек пять . тема полу дохлая .
 вопрос автору - почему зеленый курок не работает с "синим" контроллером . ?что там надо изменить ?


12 Окт 2020 в 19:05
Ответ #17
Оффлайн

Board118

Россия Сообщений: 13
Причем здесь миниководы? Только здесь поднимался вопрос про то как задается скоростной режим.
Более полное раскрытие протоколов обмена открывает перспективы, в части создания собственного бортового компьютера или модернизации существующих. Тех же Halten-ов у людей немало думаю.
Сдох контроллер какой подойдет? Дык а протокол обмена какой?
Кстати, отпаял цифровой канал от Rx, только с аналоговым сигналом управления с курка колесо не вращается.
По вопросу скоростного режима, вот последовательность байта 5 в более удобном для анализа виде (скорость 1):
80 05 06 2B 34 29 2A 2F 28 2D 2E 53 7C 51 52 57
50 55 56 7B 84 79 7A 7F 78 7D 7E 63 0C 61 62 67
60 65 66 0B 14 09 0A 0F 08 0D 0E 33 5C 31 32 37
30 35 36 5B 64 59 5A 5F 58 5D 5E 43 6C 41 42 47
40 45 46 6B 74 69 6A 6F 68 6D 6E 13 3C 11 12 17
10 15 16 3B 44 39 3A 3F 38 3D 3E 23 4C 21 22 27
20 25 26 4B 54 49 4A 4F 48 4D 4E 73 1C 71 72 77
70 75 76 1B 24 19 1A 1F 18 1D 1E 83 2C 81 82 07
Тоже самое в десятичной кодировке:
128   5   6  43  52  41  42  47  40  45  46  83 124  81  82  87
 80  85  86 123 132 121 122 127 120 125 126  99  12  97  98 103
 96 101 102  11  20   9  10  15   8  13  14  51  92  49  50  55
 48  53  54  91 100  89  90  95  88  93  94  67 108  65  66  71
 64  69  70 107 116 105 106 111 104 109 110  19  60  17  18  23
 16  21  22  59  68  57  58  63  56  61  62  35  76  33  34  39
 32  37  38  75  84  73  74  79  72  77  78 115  28 113 114 119
112 117 118  27  36  25  26  31  24  29  30 131  44 129 130   7
« Последнее редактирование: 16 Ноя 2020 в 18:26 от Board118 »


 

Протокол общения китайского контроллера МК с БК

Автор DarkByteРаздел Микроэлектроника

Ответов: 7
Просмотров: 1478
Последний ответ 24 Мар 2020 в 14:42
от DarkByte
Протокол KT-LCD

Автор Blik86Раздел Микроэлектроника

Ответов: 8
Просмотров: 2199
Последний ответ 01 Авг 2020 в 20:24
от Blik86
Универсальный протокол обмена между микроконтроллерными устройствами

Автор iРаздел Микроэлектроника

Ответов: 135
Просмотров: 40395
Последний ответ 20 Янв 2015 в 10:26
от i
Европейский протокол

Автор АгапитРаздел Электровелосипеды

Ответов: 11
Просмотров: 1256
Последний ответ 28 Ноя 2015 в 20:39
от Kullx