Протокол KT-LCD

Автор Blik86, 30 Апр. 2019 в 01:32

« назад - далее »

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

puh

#54
Разобрал KT-LCD3 чтобы изучить плату на предмет мест подключения к Rx и Tx, а также GND и +5В. Так как дисплей все равно треснутый - откусил его чтобы посмотреть дорожки под ним (плата как будто двухсторонняя).
Небольшой фотосет:
Вид коробки с торца перед вскрытием:


Винтики залиты силиконом - но без проблем откручиваются (6 штук), сняв крышку видим это:


Переворачиваем плату чтобы увидеть место прихода проводков от контроллера и кнопок:




Безжалостно ножка за ножкой откусываем дисплей, под ним белый модуль подсветки - отламываем и его (припаян сбоку на 2 контакта - невероятно, но там полное напряжение батареи - у меня 48 вольт!)


В общем с подключением к сигнальным проводникам все ясно, вот я указал на фото места где можно подпаяться:


Но пока непонятно где есть стабильные 5В на этой плате... Тыкать вольтметром как то рискованно, учитывая 48В местами...
Может кто-то разберется по схемотехнике и подскажет?

Кстати, вот тут https://endless-sphere.com/forums/viewtopic.php?f=2&t=79763&start=25#p1395701 человек описывает как у него сгорела такая плата при подключении к батарее 14s (42-59V). Вроде мощный транзистор - значит там и есть переход от высокого к низкому напряжению (ведь для LCD модуля необходимо 5V)

UPD: Нашел стабилизатор CJ 78 L 05 - от него идет дорожка до J7 - думаю то, что надо! Возможно тут должен был быть коннектор для подключения внешнего USB - видел такие экранчики с гнездом https://www.aliexpress.com/item/4000321763567.html



sdenis2017

Цитата: puh от 22 Авг. 2022 в 22:225. В качестве программы использовал HTerm ссылка - рекомендую, очень все наглядно - на скриншотах видно.
спасибо за прогу! давно искал что то подобное - безрезультатно
очень удобная - отображает сразу и НЕХ и по битам
1кВт  ДД 273-й + Келли kls-s 7230 + лифер 32700 12s4p + антбмс 8-24S 100А

Evgesh

#56
Кто-нибудь понял как вычислить скорость из B3 * 256 + B4? Пытался по инструкции в этой теме и тут https://endless-sphere.com/sphere/threads/s-lcd-to-s12s-controller-communication-protocol-hacked.73471/post-1556788.

P.S. Получилось следующим образом ((1000.0 / float(b[3] * 256 + b[4])) * 2055.0 * 3.6) * 0.001

1000 (мс) делим на время одного оборота ((b[3] * 256 + b[4]) и получаем количество оборотов за секунду
Это число умножаем на длину окружности колеса и переводим в км\ч
Все это делим на 1000

13_chip_13

Цитата: Evgesh от 01 Июнь 2023 в 01:56
Кто-нибудь понял как вычислить скорость из B3 * 256 + B4? Пытался по инструкции в этой теме и тут https://endless-sphere.com/sphere/threads/s-lcd-to-s12s-controller-communication-protocol-hacked.73471/post-1556788.

P.S. Получилось следующим образом ((1000.0 / float(b[3] * 256 + b[4])) * 2055.0 * 3.6) * 0.001

1000 (мс) делим на время одного оборота ((b[3] * 256 + b[4]) и получаем количество оборотов за секунду
Это число умножаем на длину окружности колеса и переводим в км\ч
Все это делим на 1000
А че там понимать,  во всех 7 протоколах самокатов, что я знаю, инвертор отдаёт либо период вращения колеса в мс, либо частоту смены фаз в Гц. Дальше одна математика, переход к плавающей точке необязательно.

v747

Возможно ли вывести отдельную кнопку на включение подсветки дисплея и активации света в контроллере? То есть не долго удерживать, а просто коротко нажал и все, нажал опять-выключилось
Подскажите в каком направлении копать?

Blik86

Цитата: v747 от 16 Июнь 2023 в 23:53Подскажите в каком направлении копать?
Писать свою прошивку для дисплея, на сфере была тема по реверс инжинирингу KT-LCD3.
Нужно больше конкретики...
Если вы программист и задача сделать свой "дисплей" то можно пофантазировать. Если нет - то подать питание на свет мимо контроллера и рвать его кнопкой, но это уже разговор не по теме этой ветки.


Mike 372

Если желание сильное, можно попробовать и аппаратными средствами. Например, делаем отдельную кнопку параллельно штатной. В цепь ставим конденсатор и резистор, чтобы конденсатор при кратковременном нажатии заряжался и, разряжаясь на вход, имитировал долгое нажатие. От штатной кнопки развязать диодом.  /:-)  И да, это офтоп.  :ah:  Дальнейшее обсуждение надо переносить в другую тему.

p-a-h-a

Написал ардуино библиотеку для работы с контроллером. Тестировал на Arduino nano. С ESP8266 и ESP32 совместима(не тестирована). Может отсылать и принимать данные от контроллера. Прошу отписаться кто протестировал. Сам не могу тестировать frontLight, отображение brake. walkMode у меня не работает (причина не ясна или не понимаю как это работает).
Не пойму как влияет на контроллер макс скорость, диаметр колеса и настройки P, C. Буду пробовать их менять.
По итогу планирую заменить LCD Дисплей мобильным телефоном и wi-fi. Наработка интерфейса имеется (последняя картинка).
Прикрепленные файлы и изображения
Скачать библиотеку: KTLCD3_DISPLAY.zip

1689275880515.jpg
код.jpg
1689277350268.jpg


Blik86

Цитата: p-a-h-a от 17 Июль 2023 в 02:44Наработка интерфейса имеется (последняя картинка).
Восстановил LCD6 to KTcontroller2.xls с первом сообщении. Там более полная расшифровка слов дисплея, размеров колес, правильный CRC.

Blik86

Цитата: p-a-h-a от 17 Июль 2023 в 02:44Не пойму как влияет на контроллер макс скорость, диаметр колеса и настройки P, C. Буду пробовать их менять.
Контроллер рассчитывает скорость в соответствии с установленными параметрами, при достижении максимальной скорости перестает вкачивать мощу.
Цитата: p-a-h-a от 17 Июль 2023 в 02:44Сам не могу тестировать frontLight, отображение brake. walkMode у меня не работает (причина не ясна или не понимаю как это работает).
Какую именно часть?
Цитата: p-a-h-a от 17 Июль 2023 в 02:44Прошу отписаться кто протестировал.
Программисты тут не водятся, что бы протестировали нужен что то делающий готовый проект (с описанием) под условную Arduino, ESP8266 или ESP32.

p-a-h-a

Благодарю. Дополнил данными из Вашей таблицы библиотеку.
Дописал готовый пример для настройки контроллера. Возможно мои труды кому-то пригодятся для другого проекта.
Схема:
ktlcd_arduino.jpg

Библиотека: KTLCD_Display.zip
В arduino ide Скеч => Добавить библиотеку => Добавить zip библиотеку (и выбрать скачанный файл KTLCD_Display.zip)
Потом Файл => Примеры => KTLCD_Display => KTLCDTEST
Заполняем свои настройки в структуру:
SettingsStruct *settings = new SettingsStruct{
  LCD_RX_PIN : 3, //green
  LCD_TX_PIN : 2,// yellow
  pasLevel : 5,                               // Range:0-5
  cruise : false,                             // Rage:0-1
  walkMode : false,                           // Rage:0-1
  frontLight : false,                         // Rage:0-1
  speedDivided : 7420.0,                      // Делимое для расчета скорости, зная период. Влияет на отображение скорости библиотекой, не передается в контроллер. ReceiveData.speed = settings.speedDivided / ReceiveData.speedPeriod;
  maxSpeedLimit : 30,                         //
  wheelRimDiameter : 26,                      // Range: 5, 6, 8, 10, 12, 14, 16, 18, 20, 23, 24, 26, 28, 29, 700
  P1_MotorFeature : 100,                      // Range:1-255
  P2_WheelSetSpeedPulse : 1,                  // Rage:0-6
  P3_PasControlMode : true,                   // Rage:0-1
  P4_ThrottleActiveMode : false,              // Rage:0-1
  P5_BatteryMonitorModes : 12,                // Range:0-40
  C1_PasSensorSensitivity : 2,                // Range:0-7
  C2_MotorPhase : 0,                          // Range:0-7
  C4_ThrottleFunction : 3,                    // Range:0-4
  C4_SpeedLimitValueOfThrottle : 20,          // Range:0-127
  C4_PercentageValueOfTheFirstGearSpeed : 50, // Range:0-100
  C5_ControllerMaxCurrent : 0,                // Range:0-10
  C12_ControllerLowestVoltage : 4,            // Range:0-7
  C13_ControllerAbsBraking : 0,               // Range:0-5
  C14_PasAdjustment : 2,                      // Range:1-3
};
Прошиваем ардуино (использовал нано) и смотрим монитор порта на скорости 74880 (можно изменить в скече) с подключенным контроллером КТ. Должны увидеть первую строку байт настроек, которые шлются в контроллер, вида:
"12   5   165   100   9   63   16   64   132   20   0   50   14"
И затем повторяющиеся каждую секунду расшифровки ответа контроллера вида:
"speed:20.16  power:13  temper:15  0bThrot:1  0bCruise:0  0bAsist:0  0bBrake:0  battery:16"

Для чтения отдельных параметров (скорость, газ, тормоз...) можно использовать свойства экземпляра класа:
float speed = bicycle.ReceiveData.speed;
Доступные параметры после "bicycle.ReceiveData." на картинке:
param.jpg

Для управления двумя (и более) контроллерами достаточно создать вторую структуру настроек, и второй экземпляр класса.
KTLCD_Display bicycle2(settings2); Соответственно нужно указать другие пины подключения второго контроллера.

Blik86

Цитата: p-a-h-a от 23 Июль 2023 в 23:38Дополнил данными из Вашей таблицы библиотеку.
Почему L-параметры не стали делать? Не работают? За L3 я неуверен, так как его на просторах интернета нашел (у моего дисплея параметры только до L1).
Цитата: p-a-h-a от 23 Июль 2023 в 23:38KTLCDTEST
А можно еще для esp и  temper заменить на error?))

13_chip_13

Цитата: p-a-h-a lсмотрим монитор порта на скорости 74880 (можно изменить в скече) с подключенным контроллером КТ.
Скорость странная какая-то это точно так? 1200 или 9600 используется на uart у китайцев обычно.

p-a-h-a

#67
Blik86, мне нужна помощь. Пока не все сделано и не все протестировано. В процессе.
Столкнулся с неожиданностью. Пока катаюсь от ручки газа все нормально. Установил на днях асистент на педали.
При катании с педальным асистентом контроллер по другому считает контрольную сумму в данных которые я принимаю (скорость, ток потребления, напряжение состояния ручек газа и т.д).

Принимаю 12 байт.
контрольная сумма расчитывается = B0^B1^B2^B3^B4^B5^B7^B8^B9^B10, где ^ побитовый XOR. В 6м байте находиться контрольная сумма посчитанная контроллером, его в формуле нет. 11й байт в расчете не учитывается (в этом проблема).
Вот лог:
CRC расч= 253. | 65:8:36:27:10:0:253:1:0:0:128:65: покой
CRC расч= 36.  | 65:8:36:11:195:0:36:1:0:0:128:65: накат
CRC расч= 157. | 65:8:36:0:225:0:226:17:1:0:1:62: PAS
CRC расч= 160. | 65:8:36:0:220:0:192:17:1:0:1:33: PAS
CRC расч= 160. | 65:8:36:0:220:0:248:17:1:0:1:25: PAS
CRC расч= 160. | 65:8:36:0:220:0:243:17:1:0:1:18: PAS
CRC расч= 160. | 65:8:36:0:220:0:247:17:1:0:1:22: PAS
CRC расч= 162. | 65:8:36:0:222:0:167:17:1:0:1:68: PAS
CRC расч= 162. | 65:8:36:0:222:0:208:17:1:0:1:51: PAS
CRC расч= 162. | 65:8:36:0:222:0:195:17:1:0:1:32: PAS
CRC расч= 163. | 65:8:36:0:220:0:194:17:2:0:1:32: PAS
CRC расч= 163. | 65:8:36:0:220:0:236:17:2:0:1:14: PAS
CRC расч= 165. | 65:8:36:0:217:0:227:17:1:0:1:7: PAS
CRC расч= 165. | 65:8:36:0:217:0:196:17:1:0:1:32: PAS
CRC расч= 165. | 65:8:36:0:217:0:133:17:1:0:1:97: PAS
CRC расч= 167. | 65:8:36:0:219:0:213:17:1:0:1:51: PAS
CRC расч= 167. | 65:8:36:0:219:0:232:17:1:0:1:14: PAS
последний байт, когда его значение не 65 как-то влияет на СRC. Также как-то это значение связано с PAS.  Есть мысли как это устроено?

Добавлено:
Нашел закономерность.
Если B11 <65 и B11 четное то B6 = CRC = CRC расч ^(B11+65)
Если B11 <65 и B11 НЕ четное то B6 = CRC = CRC расч ^(B11+63)
Если B11 >65 и B11 четное то B6 = CRC = CRC расч ^(B11-63)
Если B11 >65 и B11 НЕ четное то B6 = CRC = CRC расч ^(B11-65)
Если B11 == 65 то B6 == CRC расч
Как то дико но закономерность такая. И ее как то хочется реализовать без 10ти условий.





Blik86

 = B1^B2^B3^B4^B5^B7^B8^B9^B10^B11

Blik86

Цитата: p-a-h-a от 15 Нояб. 2023 в 22:40Добавлено:
Нашел закономерность.
Как то дико но закономерность такая. И ее как то хочется реализовать без 10ти условий.
Как по мне закономерность очевидная: коли изменение B11 меняет CRC- значит B11 должно быть в нем...
А раз до этого считалось правильно, значит ее отсутствие что то компенсировало...
И глядя на B0^B1^B2^B3^B4^B5^B7^B8^B9^B10 и 65:......:65 закономерность становится очевиднее.

13_chip_13

#70
Цитата: p-a-h-a от 15 Нояб. 2023 в 22:40Принимаю 12 байт.
контрольная сумма расчитывается = B0^B1^B2^B3^B4^B5^B7^B8^B9^B10, где ^ побитовый XOR...
Добавлено:
Нашел закономерность...

Массив сделай на 255 элементов, где индекс это значение В11, и в СRC xor делай с элементом этого массива по индексу В11,  памяти от ест, но зато без условий и быстро, а оперативы в esp навалом в таком  простом проекте  без Web форм. Формульную зависимость искать больше,  если не занимаешься математикой.

Blik86

Цитата: 13_chip_13 от 16 Нояб. 2023 в 19:43Массив сделай
Зачем этот изврат если и  B1^B2^B3^B4^B5^B7^B8^B9^B10^B11 отлично работает....