avatar_sergey.67

Программирование кареточных моторов BBS01, BBS02.

Автор sergey.67, 11 Май 2014 в 00:03

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

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

Ev

Удивительно, но, похоже, информация о том, что старая версия ПО не работает, оказалась ложной: http://endless-sphere.com/forums/viewtopic.php?f=28&t=58780&start=400#p932194
Я ещё не пробовал программировать, только подключил мотор к блоку питания, проверил. Сейчас думаю, как подключиться к этому нестандартному разъёму. Наверное поставлю дополнительный разъём, хотя это и грозит потерей водонепроницаемости.

Цитата: Sattva от 14 Авг. 2014 в 13:59
Прекрасное дело делаете EV, но составить вам компанию по реверсу могут единицы в этой жизни,
и едва ли кто-то с форума. Моих знаний пока недостаточно.  :ah:

Особых сложностей пока нет, т.к. доступны исходники на Delphi (не факт, что рабочие) с комментариями на китайском  :-).

Ev

Действительно работет, я проверил (всё, кроме записи параметров). Судя по всему, протокол не изменился.

connect_tx: 11 51 04 B0 05
connect_rx: 51 10 48 5A 58 54 53 5A 5A 39 31 31 31 30 30 31 02 19 20

В программе отображается соответственно:
Спойлер

Manufacturer: HZXT
Model: SZZ9
Harware Ver.: V1.1
Firmware Ver.: V1.0.0.1
Nominal Voltage: 48V
Max.Current: 25A

read_flash_tx (3 посылки):
11 52

11 53

11 54

read_flast_rx (соответственно 3 посылки):
52 18 29 19 00 34 3A 40 46 4C 52 58 5E 64 00 2C 33 3A 41 48 4F 56 5D 64 34 01 FF

53 0B 03 FF FF 28 05 04 FF 05 08 00 3C CF

54 06 0B 23 00 09 FF 3C C8

Таким образом, были считаны настройки по умолчанию из новой версии контроллера:
Спойлер

[Basic]
LBP=41
LC=25
ALC0=0
ALC1=52
ALC2=58
ALC3=64
ALC4=70
ALC5=76
ALC6=82
ALC7=88
ALC8=94
ALC9=100
ALBP0=0
ALBP1=44
ALBP2=51
ALBP3=58
ALBP4=65
ALBP5=72
ALBP6=79
ALBP7=86
ALBP8=93
ALBP9=100
WD=10
SMM=0
SMS=1
[Pedal Assist]
PT=3
DA=0
SL=0
SSM=4
WM=0
SC=40
SDN=4
TS=5
CD=8
SD=0
KC=60
[Throttle Handle]
SV=11
EV=35
MODE=0
DA=10
SL=0
SC=60

Sattva

Чудесный результат!  :dance:

ЦитироватьОсобых сложностей пока нет, т.к. доступны исходники на Delphi (не факт, что рабочие) с комментариями на китайском
А вот исходники на Delphi - уже вдохновляют. А какая версия Delphi?

Если можно подкорректировать
SV=11 (Start voltage x100 mv)
EV=35 (End voltage x100 mv)
то возможно и индикатор заряженности батареи заработает.

Но эти два параметра в Throttle Handle группе, так что вряд ли это поможет...

Ev

Цитата: Sattva от 14 Авг. 2014 в 23:15
А какая версия Delphi?

Borland Delphi 7.0

Цитата: Sattva от 14 Авг. 2014 в 23:15
Если можно подкорректировать
SV=11 (Start voltage x100 mv)
EV=35 (End voltage x100 mv)
то возможно и индикатор заряженности батареи заработает.

Но эти два параметра в Throttle Handle группе, так что вряд ли это поможет...

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


Sattva

ЦитироватьЭто, скорее всего, границы чувствительности к изменению напряжения с датчика Холла в ручке газа.
У меня те же мысли.

Теперь буду искать кабель в Киеве. Стало интересно попрограммировать благодаря вашей затее!

Ev

Хотя разбор алгоритма обмена с контроллером потерял актуальность (т.к. программа работает и с новой версией контроллера), выложу свои текущие наработки:
В этом посте описывается чтение настроек из контроллера.
Ясно, что для чтения настроек, ПО посылает в контроллер следующие запросы:
11 52
11 53
11 54
Эти запросы относятся, соответственно, к трём вкладкам настроек в программе.
В ответ на каждый запрос контроллер начинает выдачу информации, соответственно, с байта 52, 53 или 54. Второй по счёту байт в ответе - байт статуса.
Далее - подробный разбор каждой посылки. Присутствуют куски программного кода для описания алгоритма выбора некоторых параметров. Есть непонятные моменты.
Спойлер

Вкладка Basic
52 18 29 19 00 34 3A 40 46 4C 52 58 5E 64 00 2C 33 3A 41 48 4F 56 5D 64 34 01 FF

52 - Признак чтения информации для вкладки Basic
18 - Статус операции:
(dec)
0-The Limit Volt setting error
1-The Limited Current setting error
2-The Limit Current0 setting error
3-The Limit Current1 setting error
4-The Limit Current2 setting error
5-The Limit Current3 setting error
6-The Limit Current4 setting error
7-The Limit Current5 setting error
8-The Limit Current6 setting error
9-The Limit Current7 setting error
10-The Limit Current8 setting error
11-The Limit Current9 setting error
12-The Limit SPD0 setting error
13-The Limit SPD1 setting error
14-The Limit SPDt2 setting error
15-The Limit SPD3 setting error
16-The Limit SPD4 setting error
17-The Limit SPD5 setting error
18-The Limit SPD6 setting error
19-The Limit SPD7 setting error
20-The Limit SPD8 setting error
21-The Limit SPD9 setting error
22-The Wheel Diameler (SpdMT) setting error
23-The SpdMeter Signal setting error
24-Basic Set successfully

29 - Low BAttery Protect (41V)
19 - Limited Current (25A)
00 - Assist0 Limit Current (0%)
34 - Assist1 Limit Current (52%)
...
00 - Assist0 Limit Spd (0%)
2C - Assist1 Limit Spd (44%)
...
34 - Wheel Diameler?:
s=34
t=s mod 2
n=s div 2
m=t+n
if (m>27) then
         begin
          if (m=28) and (t=1) then
            ComboBox4.ItemIndex:=12
          else
            ComboBox4.ItemIndex:=m-15;
          end
         else
          ComboBox4.ItemIndex:=m-16;


01 - SpdMeter Signal setting?:
s=01
t=s mod 64
n=s div 64
if n=3 then
            ComboBox5.ItemIndex:=2
         else
            ComboBox5.ItemIndex:=n;
Edit22.Text:=inttostr(t);


где значение поля "SpdMeter Signal?

FF - контрольная сумма?

Вкладка Pedal Assist
53 0B 03 FF FF 28 05 04 FF 05 08 00 3C CF

53 - Признак чтения информации для вкладки Pedal Assist
0B - Статус операции:
(dec)
0-The Pedal Type setting error
1-The Disignated Assist setting error
2-The Speed Limited setting error
3-The Start Current setting error
4-The Slow-Start Mode setting error
5-The Startup Dgree setting error
6-The Work Mode setting error
7-The Time of stop setting error
8-The Current Decay setting error
9-The Stop Decay setting error
10-The Keep Current setting error
11-Pedal Assist Set successfully


03 - Pedal Type (3-DoubleSignal-24 ?)
FF- Disignated Assist (0-by display's command)
s=FF
if s=255 then
            ComboBox7.ItemIndex:=0
         else
            ComboBox7.ItemIndex:=s+1;


FF- Speed Limited (0-by display's command)
s=FF
if s=255 then
            ComboBox8.ItemIndex:=0
         else
            ComboBox8.ItemIndex:=s-14;


28 - Start Current (40%)
05 - Time of stop
04 - Slow-Start Mode ?
FF - Work Mode? (0-Undefined ?)
s=FF
if s=255 then
            ComboBox10.ItemIndex:=0
         else
            ComboBox10.ItemIndex:=s-9;


05 - Time of stop?
08 - Current Decay
00 - Stop Decay?
3C - Keep Current
CF - контрольная сумма?

Вкладка Throttle Handle
54 06 0B 23 00 09 FF 3C C8

54 - Признак чтения информации для вкладки Throttle Handle
0B - Статус операции:
(dec)
0-The Start Voltage setting error
1-The End Voltage setting error
2-The Mode setting error
3-The Designated Assist setting error
4-The Speed Limited setting error
5-The Start Current setting error
6-Throttle Handle Set successfully


0B - Start Voltage (11*100mv)
23 - End Voltage (35*100mv)
00 - Mode (speed)
09 - Designated Assist (10? что это значит?)
s=09
if s=255 then
            ComboBox12.ItemIndex:=0
         else
            ComboBox12.ItemIndex:=s+1;


FF - Speed Limited (0-by display's command)
s=FF
if s=255 then
            ComboBox13.ItemIndex:=0
         else
            ComboBox13.ItemIndex:=s-14;


3C - Start Current (60%)
C8 - контрольная сумма?


dengor

#42
Давноема не обновлялась... И так как тема на форуме раскрыта не полностью, у пользователей были траблы, а желающие поставить мотор активировались, попробую сжато рассказать о моём программировании BBS-02 750 Вт. Уточню, что штудировал сферу и какие-то моменты, возможно будут интересны другим владельцам мотора. У меня дорожный велосипед с колёсами 28 дюймов, планетарка Shimano Nexus 8-скоростная SG-8R36. Переключатель скоростей рычажный. Стоит курок газа и отдельная ручка тормоза только для отключения мотора (в дополнение к двум другим ручкам тормозов). Переключаю передачи, частично нажимая на курок. В основном езжу на педалях.
Поэтому работа PASа и была первой причиной заняться программированием. Тем более пришёл мне наконец-то из Китая с ДХ USB TTL адаптер за 3 доллара. Работает отлично. У адаптера на одном конце USB-разъём, на другом - четыре отдельных провода с черными пластиковыми фишками: красный 5В, белый RXD, зелёный TXD, черный GND. Очень удобно оказалось снять эти фишки и оставить только металлические коннекторы, изолировав их проводной изоляцией подходящего диаметра (можно, наверное, и тонкую термоусадку использовать). Отдельно для замыкания питания я использовал дополнительный провод (от старого 4-пинового внутрикомпьютерного аудиокабеля) с такими же металлическими коннекторами, как у адаптера. Все эти коннекторы легко подключаются к разъему дисплея со стороны мотора (одеваются на штырьки). Могут возникнуть проблемы с драйвером для адаптеров на некоторых версиях чипов для вин8, но у меня была ХР на ноутбуке, так что вопросов не было.
Поставил драйвер, ПО от Bafang'а, подключил провода по схеме. Подключил батарею. Поменял в настройках адаптера на компьютере com-порт с 39, как он установился по-умолчанию, на com 2 иначе прога не хотела подключаться. Подключился к контроллеру, считал данные "ReadFlash". Поменял настройки в программе. Сохранил "WriteFlash". (На сфере рекомендуют менять настройки и сохранять изменения в каждой закладке (read-write), я же менял сразу во всех и потом сохранял во Flash. Не знаю почему они так рекомендовали. :sorry:) После сохранения отключаю батарею, закрываю софт, отсоединяю все провода, подсоединяю коннектор обратно и "Ура!"  ;-)
Теперь о главном. Основной смысл переделки был: первое (и как оказалось зря) - в изменении режима работы курка с "speed" на "current", и второе - продлить действие помощи мотора (исключить раннее отключение). Итак, о-первом. Изменение режима курка ведёт к увеличению его чувствительности, и реакции. Это безусловно будет удобно тем, кто ездит только с курка. Но для меня, например, который ездит на педалях, и переключает передачи полунажатием курка, это оказалось неприемлемо (слишком уменьшилась мёртвая зона и в этой зоне появился слишком большой газ). Эту настройку я вернул как было. Второе более интересно. В настройках Basic можно установить ограничение тока (Current%) и ограничение скорости (Spd%). Тут такая штука, что ограничение скорости - это каденс педалирования. И если он стоит на низких значениях, мотор прекращает помогать возможно слишком рано (при низкой скорости вращения педалей). Приходится слишком рано переключаться на повышенную скорость. Суть изменений - получить комфортный каденс на любой передаче. Для себя я поставил 80% в низких ассистах (на которых я постоянно езжу) и 100% в высоких. (В принципе 100% - слишком быстро на самом деле. Приходится крутить как белка. :run: Годится для скоростных режимов для любителей вкручивать :hello:). (На второй оставил 50% гипер низкие скорости для брусчатки и ям). Лимиты тока я не менял. (В новых движках они требуют корректировки).
Ещё одна важная настройка в следующей закладке - PedalAssist. Это - Keep Current. Его суть - после достижения определённых оборотов назначенный ток ассиста уменьшается до этого значения (по умолчанию - 20%). Вредит при езде в горки, когда вы переключаетесь на пониженную передачу, обороты мгновенно возрастают и тут... мощность понижается вопреки логике. На сфере советовали ставить 100%, но лично я поставил 50% и считаю, что этого вполне достаточно для комфортной езды в горки. По ощущениям похоже на обычный велосипед с необычными ногами. Скорее всего влияет на расход. Но удобство важнее.  :wow:
Вот так я езжу на 5 уровнях ассиста: до переделки в основном на третьем, теперь вполне комфортно на втором. Особо не гоняю. С уважением ко всем форумчанам. ;-)

______________________________________
UPD. 10 января 2016 г.

Поставил, все-таки токовое (current) управление газом. Start current - 5%. Диапазон курка - 42 (4,2 в). Вроде неплохо получилось.  6_6
Расставить все точки нади

no fat no bike

Цитата: dengor от 12 Нояб. 2014 в 18:58
Давно тема не обновлялась... И так как тема на форуме раскрыта не полностью
Уважаемый, [b-b]dengor[/b-b], как думаете, а можно вообще убрать дисплей из системы оставив только на руле переключатель режимов + и - с кнопкой питания, которая подключается непосредственно в обход дисплея (предварительно отпаяв от него). По проводам видно, что 5 и как приходят в дисплей 5 по цветам, так и уходят в эту кнопку на руль 5 с теми же цветами. К примеру можно выставить все значения заранее, которые устраивают пользователя, запомнить, что есть 2 или 5 режимов ассиста, пользоваться только кнопочками + и - для переключения вслепую.

Как думаете? Напрямую если перепаять проводки, ничего не погорит в контроллере?

Silvaticus

Да, мне тоже любопытно, т.к. дисплей на трайке  мне в принципе ни к чему, там и так мест для крепления других девайсов мало.
Модератор 95% времени живущий в единственной теме флудилки это глобальный флудер с фееричным статусом модера.
Нередко красный фломастер это признак бессилия оппонента.

sergey.67

Без дисплея не сможете переключать режима асиста.
Если уж так не хочется ставить дисплей, можно поставить кнопку с фиксацией для включения контролера, эту кнопку подключить к контактам "PL" и "P+" и запрограмировать контролер на первом положение асиста нужную скорость и ток.

killer258

#46
Цитата: bigolen от 13 Нояб. 2014 в 19:57
как думаете, а можно вообще убрать дисплей из системы оставив только на руле переключатель режимов + и - с кнопкой питания, которая подключается непосредственно в обход дисплея (предварительно отпаяв от него).

Я смотрю на цоколёвку разьёма, и кроме тех проводов, через которые подключаем комп, других сигнальных проводов в разьёме нет. Значит, эти Rx и Tx не только  для перепрограммирования, а через них же дисплей общается с  контроллером. Точнее, микроконтроллер, находящийся в дисплее, через тот же самый UART скорее всего по тому же самому   протоколу RS-232 общается с микроконтроллером силовой части.

Здесь  скорее всего, при нажатии кнопки включения дисплей шлёт в мотор  ряд констант, с которыми тот  должен работать и замолкает до тех пор, пока  человек не изменит кнопками уровень ассиста или ещё что-то.

Значит, надо сделать переходник, врезать его между  дисплеем и мотором, и заснифферить весь обмен, скажем, на комп, и поковыряться в этих записях.. Скорее всего, там протокол простенький. После выяснения кодов операций в перехваченных пакетах. Потом можно взять какой-нибудь пик с уартом или 8-ю атмегу,хватит за глаза их возможностей, вписать  туда простейшую прогу, которая при  включении  питания  заставляет вдуть в процессор мотора десяток-другой  байтов, о том, с какими параметрами мотору ехать (уровни ассиста и прочее)и  далее ничего не делать до пропадания питания. Будет  работать как своего рода заглушка, или лучше наверное , сказать, эмулятор дисплея для контроллера мотора..

Хотя... дисплей всё же полезен. Можно видеть  скорость и  уровень разряда  батареи. Без этого как-то некомфортно ездить. Стоит ли его убирать?
Бафанги: МК 250w (передн), МК 350w(задн), МИДы BBS-02 500W, и BBS-02 750W ,моноколесо KS14b, бензо: Д8Э, KD-F80

sergey.67

Цитата: killer258 от 13 Нояб. 2014 в 22:58
Я смотрю на цоколёвку разьёма, и кроме тех проводов, через которые подключаем комп, других сигнальных проводов в разьёме нет. Значит, эти Rx и Tx не только  для перепрограммирования, а через них же дисплей общается с  контроллером. Точнее, микроконтроллер, находящийся в дисплее, через тот же самый UART скорее всего по тому же самому   протоколу RS-232 общается с микроконтроллером силовой части (подобно тому, как это было сделано в старых моделях Индезитов и Аристонов,когда я их ремонтировал, там два процессора, между ними связь, один отвечает  за индикацию и клавиатуру, и передаёт второму процессору, управляющему силовой частью, "что ему делать".)

Значит, надо сделать переходник, врезать его между  дисплеем и мотором, и заснифферить весь обмен, скажем, на комп, и поковыряться в этих записях.. Скорее всего, там протокол простенький. После выяснения кодов операций в перехваченных пакетах. Потом можно взять какой-нибудь пик с уартом или 8-ю атмегу, вписать  туда простейшую прогу, которая при  включении  питания  заставляет вдуть в процессор мотора десяток-другой  байтов, о том, с какими параметрами мотору ехать (уровни ассиста и прочее)и  далее ничего не делать до пропадания питания. Будет  работать как своего рода заглушка, или лучше наверное , сказать, эмулятор дисплея для контроллера мотора..
Вы совершенно правы, только не все смогут написать программу так называемого эмулятора дисплея поэтому я и написал как отказаться от дисплея "малой кровью".
Лично мне дисплей нравится и отказываться от него нет желания.

Silvaticus

Цитата: killer258 от 13 Нояб. 2014 в 22:58
Хотя... дисплей всё же полезен. Можно видеть  скорость и  уровень разряда  батареи. Без этого как-то некомфортно. Стоит ли его убирать?
Ну мне лично еще один дисплей не нужен, а если он единственные и места на руле достаточно, то зачем так извращаться?
Модератор 95% времени живущий в единственной теме флудилки это глобальный флудер с фееричным статусом модера.
Нередко красный фломастер это признак бессилия оппонента.

ra6fnq

Может проще велокомп убрать? - одним дисплеем меньше... Если вы о навигаторе (в телефоне который), то после поломки пары креплений, уже боюсь его на руль ставить, в сумке ездит.
Евгений
http://fotki.yandex.ru/users/ra6fnq/
https://yadi.sk/d/8wi9CuXnvvFRh - инструкции на Bafangs

no fat no bike

Уважаемые, я не так просто интересуюсь этим вопросом вот уже не первый раз. Все руки не дойдут до переделки.
1. Широкий дисплей неоднозначно воспринимается, как смартфон на руле и взгляды к нему просто прилипают у прохожих если остановился на светофоре допустим или еще где в скоплении людей. Нет желания потом бежать (ехать) за упырем, который подумает, что это телефон и попытается его сорвать. Это только гипотеза.
2. Зима - холода. Это ABS пластик как я понял из инструкции. Он до -10 вроде работает. Но я катаюсь и в -30, что может с ним происходить в этот момент? Покупать прозапас еще 10 дисплеев (или скотчем перематывать) если растрескаются? Но нужно тестировать, так однозначно не скажешь.

Мне он тоже очень нравится, но вот из-за этих вопросов я себе и "ломаю голову".
Многие я так думаю не станут вешать смартфон на руль даже в -15, так как его батарея будет помирать и тормоза страшные будут. Вот и дисплей как слабое звено. Т.е. если его отрубит, велик встанет (точнее мотор).

ra6fnq

А почему его должно "отрубить", каналы индикации и управления независимы. наблюдал ЖК индикаторы на работе, до -27 тупят, но работают - его кстати, можно греть подсветкой.
Я думаю его просто так сорвать не получится, у Ольги С961, выглядит очень надёжно...
Евгений
http://fotki.yandex.ru/users/ra6fnq/
https://yadi.sk/d/8wi9CuXnvvFRh - инструкции на Bafangs

killer258

#52
Цитата: ra6fnq от 14 Нояб. 2014 в 10:07
А почему его должно "отрубить", каналы индикации и управления независимы.

А если вместо дисплея  соединить в разьёме перемычкой P+ и PL, как при перепрограммировании с компа,  я так понял, что велосипед поедет при нажатии курка и в таком виде тоже, просто не будет никакой индикации?

Вообще говоря, назревает идея. Не случайно линии программирования и линии связи с дисплеем одни и те же. Подозреваю, что для индикации на экране уровня ассиста  наш дисплей подаёт в контроллер мотора команды, совершенно аналогичные командам  чтения установок при программировании с компа. Отсюда возникает возможность  доработки.  Взять какую-нибудь атмегу с достаточным кол-вом линий ввода-вывода,(UART вроде у них у всех есть, даже два), ЖК индикатор какой-нибудь 4-хстрочный (можно даже  графический, но это здесь не стоит заморачиваться с этим, хотя библиотечные функции готовые существуют),несколько  кнопок, написать процедуру обмена по UARTу и вывода на экран. Но я  к чему всё это начал? Дисплей только лишь читает установки мотора, и то я так понял, что далеко не все.Остальное мы  делаем, присоединяя  к компу. Так вот, можно добавить  команды записи. И тогда всё , что угодно,можно  будет менять прямо с дисплея, причём даже на улице, где нет компов. Команды чтения/записи уже былиизучены  кое-кем из участников и список их приведён. Так что, разбор алгоритма обмена с контроллером не потерял актуальность, как было написано выше.
Если в самом дисплее находится пик или атмега, то было  бы вообще красиво, ничего своего не собирать, а перепрошить тот проц, что стоит там. Правда, пришлось  бы разбираться с жк-индикатором, он нестандартный вроде бы.
Конечно, разработка достаточно  серьёзная, так как нужно  будет  не просто написать функции приёма/отправки пакетов, а ещё и некоторую логику и интерфейс пользователя, но непонятных для написания программы моментов в ней вроде, нет. (контроллер мотора куда сложнее по сравнению с этим выносным терминалом, коим является этот дисплей) Все команды обмена известны, а остальное тоже всё как обычно. Мне лично кажется, экспериментирующим пользователям возможность менять все настройки прямо с дисплея бы очень понравилось. И тогда, желание избавиться от дисплея стало бы , наверное, гораздо меньше, учитывая то, что он может. Или нет?
Бафанги: МК 250w (передн), МК 350w(задн), МИДы BBS-02 500W, и BBS-02 750W ,моноколесо KS14b, бензо: Д8Э, KD-F80

killer258

А интересно, дисплеи отдельно от моторов продаются? Чтобы было на чём экспериментировать, не портя того, который стоит на руле.
Бафанги: МК 250w (передн), МК 350w(задн), МИДы BBS-02 500W, и BBS-02 750W ,моноколесо KS14b, бензо: Д8Э, KD-F80