Управление драйвером BLDC по rs232

Помогите подружить драйвер BLDC с ардуино по rs232

Evin
Рядовой
Сообщения: 22
Зарегистрирован: 17.05.2019{, 14:14}
Репутация: 1
Имя: Константин

Управление драйвером BLDC по rs232

#1

Сообщение Evin » 29.10.2019{, 18:41}

Что есть:
BLDC мотор с датчиками холла.
Инкрементальный энкодер на одном валу с мотором.
Драйвер BLDC мотора KYDBL4830-1E
Драйвер поддерживает Аналоговое управление, ШИМ, CANOPEN, rs232, работу с обратной связью совместно с энкодером.
Нано.
Дисплей LCD1602.
преобразователь UART-rs232.

Что хочется:
Чтоб Нано отправляла команды на драйвер (старт, стоп, скорость вращения) и получала реальную скорость с энкодера и ошибку PID регулирования для отображения на дисплее.

Описание команд драйвера есть. Например запрос RPM от энкодера:
S - Read Encoder Speed RPM
Reports the actual speed measured by the encoders as the actual RPM value.
Syntax: ?S
Reply: S =vv
Where: vv = speed in RPM

Подскажите как в FlProg правильно оформить отправку\получение этому драйверу команд?
подозреваю что надо использовать блоки отправки\получения переменной в UART, но как именно не соображу.

ну или пните в нужную сторону....

Форум и хелп курю третий день но сам толком разобраться не смог

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

Управление драйвером BLDC по rs232

#2

Сообщение Nikan » 29.10.2019{, 19:13}

.
Последний раз редактировалось Nikan 24.03.2023{, 00:09}, всего редактировалось 1 раз.

Evin
Рядовой
Сообщения: 22
Зарегистрирован: 17.05.2019{, 14:14}
Репутация: 1
Имя: Константин

Управление драйвером BLDC по rs232

#3

Сообщение Evin » 29.10.2019{, 19:19}

есть документация.
Вложения
Protocol of Serial Port.pdf
Описание протокола
(142.61 КБ) 44 скачивания
KYDBL4830-1E.pdf
Controller Operation Instruction
(396.66 КБ) 41 скачивание

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

Управление драйвером BLDC по rs232

#4

Сообщение Nikan » 29.10.2019{, 19:38}

.
Последний раз редактировалось Nikan 24.03.2023{, 00:08}, всего редактировалось 1 раз.

Evin
Рядовой
Сообщения: 22
Зарегистрирован: 17.05.2019{, 14:14}
Репутация: 1
Имя: Константин

Управление драйвером BLDC по rs232

#5

Сообщение Evin » 29.10.2019{, 19:59}

Nikan писал(а):
29.10.2019{, 19:38}
можно терминальной программой порулить
Так уже рулил. Рулится!
Но как ардуину заставить рулить?
Например где в штатном блоке отправки переменной в uart указывать индекс команды тот что с вопросом и как разобрать ответ, отделить индекс и значение?
И ещё, в терминале, отправляю команду получаю ответ, далее эта команда шлется в автомате с переодичностью пол секунды без меня. Ответы тоже приходят. Продолжается это до отправки новой команды.
Может надо терминал как-то настроить...
Nikan писал(а):
29.10.2019{, 19:38}
нано может не прокатить
Это не проблема. ESP32 есть.
Дело не в контроллере а в принципе

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

Управление драйвером BLDC по rs232

#6

Сообщение Nikan » 29.10.2019{, 20:13}

.
Последний раз редактировалось Nikan 24.03.2023{, 00:08}, всего редактировалось 1 раз.

Evin
Рядовой
Сообщения: 22
Зарегистрирован: 17.05.2019{, 14:14}
Репутация: 1
Имя: Константин

Управление драйвером BLDC по rs232

#7

Сообщение Evin » 19.11.2019{, 16:50}

Результаты 3-х недельной борьбы с китайским драйвером:
1. Отправлять команды от ESP32 получилось. В принципе в этой части ничего сложного. Драйвер команды понимает, мотор крутится как надо. Ответы отправляются в сторону ESP-хи.
2. С получением ответов и телеметрии - беда:
Скорее всего я чего то не понимаю.
Для тестирования использовал ESP32 DEVKIT V1.
Схема такая - Команды из Serial-0 (Монитор компорта) отправляются в Serial-2 (Rx соединен с Tx) далее эта команда возвращается в Serial-0 на монитор компорта.
String.JPG
В таком виде команда возвращается в монитор по одному символу.
Отправляю
S=3000
Получаю
S
=
3
0
0
0
M1.JPG
разобрать ответ с помощью блоков поиска подстроки не получилось.

В другом варианте, с использованием блока Стек как предложено в видео
Nikan писал(а):
29.10.2019{, 20:13}
посмотри
https://flprog.ru/uchebnyj-centr/videou ... t-bljutuz/
Все работает, но так как размер стека фиксирован, то значения получаются не корректными.
Stack.flp
(92.78 КБ) 42 скачивания
Лучше всего это видно при выводе ответов на дисплей LCD 1602
Отправка: S=1050
Ответ: 1050
1050.jpg
Отправка: S=148
Ответ: 148Э
Отправка: S=50
Ответ: 50Э+
48.jpg
Отправка: S=0
Ответ: 0ЭS=
Stop.jpg
Как победить некорректное отображение пока не придумал.
Если есть у кого идеи по этому поводу, буду очень признателен!

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

Управление драйвером BLDC по rs232

#8

Сообщение Nikan » 19.11.2019{, 23:17}

Evin писал(а):
19.11.2019{, 16:50}
В таком виде команда возвращается в монитор по одному символу.
у вас в блоке прием из uart стоит галка - очистка буфера при приеме новых данных,
по этому каждый принятый портом байт стирает предыдущий,
поставте галку накопление,
только не забывайте чистить буфер

Evin
Рядовой
Сообщения: 22
Зарегистрирован: 17.05.2019{, 14:14}
Репутация: 1
Имя: Константин

Управление драйвером BLDC по rs232

#9

Сообщение Evin » 20.11.2019{, 13:33}

Nikan писал(а):
19.11.2019{, 23:17}
только не забывайте чистить буфер
А откуда брать сигнал для очистки буфера?
Вложения
Substring.flp
(54.04 КБ) 39 скачиваний

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

Управление драйвером BLDC по rs232

#10

Сообщение Nikan » 20.11.2019{, 14:04}

.
Последний раз редактировалось Nikan 24.03.2023{, 01:17}, всего редактировалось 1 раз.

Evin
Рядовой
Сообщения: 22
Зарегистрирован: 17.05.2019{, 14:14}
Репутация: 1
Имя: Константин

Управление драйвером BLDC по rs232

#11

Сообщение Evin » 20.11.2019{, 16:57}

Вот в таком раскладе значение прилетает, но фильтрация по "S=" не срабатывает.
Отправляю S=3000
Получаю 3000
Отправляю S=20
Получаю 20
Отправляю D=3000
Получаю =3000 Хотя ничего не должен получить, т.к. в строке отсутствует "S="

Где ошибка, помогите!
Вложения
Substring1.flp
(75.42 КБ) 37 скачиваний

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

Управление драйвером BLDC по rs232

#12

Сообщение Nikan » 20.11.2019{, 17:41}

Evin писал(а):
20.11.2019{, 16:57}
Вот в таком раскладе значение прилетает, но фильтрация по "S=" не срабатывает.
попробуй вот так
uart.jpg

Evin
Рядовой
Сообщения: 22
Зарегистрирован: 17.05.2019{, 14:14}
Репутация: 1
Имя: Константин

Управление драйвером BLDC по rs232

#13

Сообщение Evin » 20.11.2019{, 18:19}

Nikan писал(а):
20.11.2019{, 17:41}
попробуй вот так
тоже самое %)

edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20.09.2019{, 11:38}
Репутация: 65
Имя: Эдуард

Управление драйвером BLDC по rs232

#14

Сообщение edyapd » 20.11.2019{, 18:30}

Evin, ну так всё логично. На выходе Index "-1", если подстрока отсутствует. -1+2=1. Что у вас и принимает.
Вам нужно использовать выход, который указывает наличие подстроки. И уже он должен разрешать принимать или нет.

Отправлено спустя 3 минуты 20 секунд:
Думаю примерно так
Substring1_1.flp
(88.83 КБ) 38 скачиваний

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

Управление драйвером BLDC по rs232

#15

Сообщение Nikan » 20.11.2019{, 18:47}

.
Последний раз редактировалось Nikan 24.03.2023{, 01:17}, всего редактировалось 1 раз.

Evin
Рядовой
Сообщения: 22
Зарегистрирован: 17.05.2019{, 14:14}
Репутация: 1
Имя: Константин

Управление драйвером BLDC по rs232

#16

Сообщение Evin » 20.11.2019{, 23:31}

Nikan писал(а):
20.11.2019{, 18:47}
а
Отправка S=3000
Прилетает 3000
Отпр. S=20
Прилетает 20
Если в отправке нет "S=" ничего не хочу видеть.

Прилетать в порт будет много разных параметров. S= скорость вращения (может быть отрицательной), А= ток, V= напряжение и ещё штук пять.
Одно значение- одна строка. Конец строки '\r'
Кроме того будут '+' прилетать как подтверждение команды, но это другая песня.

Как-то так...
Как-то так

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

Управление драйвером BLDC по rs232

#17

Сообщение Nikan » 20.11.2019{, 23:40}

.
Последний раз редактировалось Nikan 24.03.2023{, 01:16}, всего редактировалось 1 раз.

Evin
Рядовой
Сообщения: 22
Зарегистрирован: 17.05.2019{, 14:14}
Репутация: 1
Имя: Константин

Управление драйвером BLDC по rs232

#18

Сообщение Evin » 20.11.2019{, 23:43}

Вот выдержка из описания протокола драйвера мотора:

Для команд, где не ожидается ответа, таких как установка скорости, контроллер
выдаст символ «плюс» (+), за которым следует возврат каретки после каждой команды как подтверждение...
...Контроллер использует простой протокол связи, основанный на символах ASCII. Команды не чувствительны к регистру. Команды заканчиваются возвратом каретки (Hex 0x0d, ‘\ r’).

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

Управление драйвером BLDC по rs232

#19

Сообщение Nikan » 20.11.2019{, 23:52}

.
Последний раз редактировалось Nikan 24.03.2023{, 01:16}, всего редактировалось 1 раз.

Evin
Рядовой
Сообщения: 22
Зарегистрирован: 17.05.2019{, 14:14}
Репутация: 1
Имя: Константин

Управление драйвером BLDC по rs232

#20

Сообщение Evin » 20.11.2019{, 23:52}

Nikan писал(а):
20.11.2019{, 23:40}
перевожу - отправили S=3000 получил
Нет. Отправил S=3000 получил 3000

Отправлено спустя 5 минут 9 секунд:
Хорошо. Опишу полный диалог.
Отправляю запрос о текущей скорости драйверу:
?S
Прилетает ответ
S=3000
Далее значение надо записать в переменную rpm и отправить на экран.

Ответить

Вернуться в «Помогите, а то я "нимагу"»