Команды управления контроллером BMSD по интерфейсу RS-485.
 

Команды управления контроллером BMSD по интерфейсу RS-485.

Автор bashkirov.sergey, 09 ноября 2012, 17:50:22

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

bashkirov.sergey

    Добрый день!

    Мы хотели бы использовать контроллер http://electroprivod.ru/pdf/bmd/BMSD.pdf (http://electroprivod.ru/pdf/bmd/BMSD.pdf) в своей разработке. Но самостоятельно не можем найти описания как этим контроллером управлять.

    1) Есть ли какое-нибудь описание команд, которые нужно передавать в контроллер по протоколу RS-485?

    2) При управлении через пины DIR и START/STOP каков ток при замыкании? Из каждой пары замыкаемых контактов подсоединён ли один из них к земле, т.е. можно ли обойтись одним транзистором в качестве замыкателя контактов? И если один из контактов из каждой пары действительно подсоединён к земле, можно ли обойтись одним проводом, подключенным к земле вместо трёх для сокращения числа проводов?

    3) Какова ёмкость (верхний предел) аналогового входа (0-+5V) управления?

    4) Может быть есть описание входов DIR, START/STOP и 0-+5V в терминах эквивалентных цепей? Ну или хотя бы граничные значения (ёмкость/сопротивление).


Ilya

1) Описание контроллера и команд управления:
Страница на сайте - http://electroprivod.ru/bls-driver_blsd.htm
паспорт на блок управления http://electroprivod.ru/pdf/BLSD-pasp.pdf

2) Управление блоком с использованием внешних разъемов (DIR, START/STOP), осуществляется замыканием вывода на землю. В качестве управляющего устройства можно использовать тактовые кнопки, десконтактные датчики, герконы и другие электронные или механические выключатели. Выбирать лучше из тех, в которых отсутствует дребезг контактов, т.к. управление происходит по переднему фронту сигнала.
"Земля" управляющих клемм общая, поэтому для снижения количества проводников можно использовать один провод подключенный к любой клемме "земля".

3) Верхний предел - 5В.


bashkirov.sergey

3) Верхний предел - 5В.
Возможно, я недостаточно корректно выразился. Интересовала ёмкость вывода в пикофарадах. И/или эквивалентная схема, если есть. Но вроде и так уже работает. Спасибо за разъяснение.

Однако с RS-485 пока возникли сложности. Был бы благодарен на любую помощь или совет.

1) Самое первое и основное, может у меня скорость передачи не соответствует? Я использую 9600bps, 1 стартовый бит, 1 стоповый бит, бита чётности нет. Полная длительность посылки = 5.21мс. Так и должно быть?

2) Линия A в в высоком состоянии, B - в низком. Стартовый бит - переход A в низкое, а B в высокое. Это правильно?

3) Возможно, я неверно вычисляю CRC. Например, переход в режим регулировки от ПК у меня получается таким: "0xE6, 0xFF, 0x51, 0x00, 0x61". CRC = 0x61. Может это неправильно?

4) Как следует передавать, младшим или старшим битом вперёд?

5) Достаточно ли 1 стопового бита паузы между соседними байтами, т.е. передавать можно подряд с максимальной скоростью, или нужны бОльшие задержки?

Заранее спасибо!

Administrator

1) Скорость передачи 9600 бит/с, 8 бит данных.
В идеальном случае полная длительность посылки (пакет 5 байт)  5,21 мс. В реальности зависит от используемого "железа" (платы ПК, преобразователей интерфейса и т.п.).

2) В основе интерфейса RS-485 лежит принцип дифференциальной (балансной) передачи данных. Суть его заключается в передаче одного сигнала по двум проводам. Причем по одному проводу (условно A) идет оригинальный сигнал, а по другому (условно B) - его инверсная копия. Другими словами, если на одном проводе "1", то на другом "0" и наоборот. Таким образом, между двумя проводами витой пары всегда есть разность потенциалов: при "1" она положительна, при "0" - отрицательна.
Более подробно и достаточно понятно, например, здесь http://masters.donntu.edu.ua/2004/fema/kovalenko/library/art7.html

3) CRC вычислена правильно. Неверна сама посылка. Управляющие команды, в том числе 0x51 можно передавать только блокам с установленным коммуникационным адресом от 0х00 до 0xFE. 0xFE является "дефолтным" адресом. Блоку с дефолтным адресом можно передать только 2 команды - установка адреса 0хA0 или отбой установки адреса 0xA1.
Т.е. Вашему блоку в первую очередь необходимо установить коммуникационный адрес. И только после этого передавать ему команды на исполнение, обращаясь к нему по этому адресу.

bashkirov.sergey

В основе интерфейса RS-485 лежит принцип дифференциальной
Большое спасибо за подробный ответ, я хотел уточнить, какой из двух проводов прямой, а какой инверсный. Для BMSD, если я правильно понял Ваш ответ, A - прямой, а B - инверсный. Правильно?

Кажется, после изменения адреса блока он стал вести себя немного иначе. Но, к сожалению, я не смог подобрать последовательность команд, необходимую для запуска двигателя. Если подать команду "перевод в режим регулировки от ПК,запуска двигателя", то светодиод горит иначе, чем если нажать на кнопку start/stop. И если после нажатия start/stop двигатель запускается и по крайней мере команда смены направления работает, то после команды "перевод в режим регулировки от ПК,запуска двигателя" ничего кроме изменения характера мигания светодиода не происходит.

Не могли бы Вы пояснить, как следует включать двигатель, используя RS-485?



Administrator


По всей видимости, с передачей по RS-485 все в порядке, и команду Вы передаете правильно, т.к. мигание светодиода меняется.
Скорее всего, Вы не задали двигателю скорость работы. По умолчанию она равна 0 при управлении через интерфейс.

Чтобы запустить двигатель командами нужно дать две команды - установка скорости: 0xA3 и запуск 0x51 (в любой последовательности).
Если скорость не задать командой A3, привод будет работать с 0 скоростью, т.е. стоять на месте. Характер мигания светодиода меняется, т.к. меняется способ управления.

bashkirov.sergey

Большое спасибо за техническую поддержку!

Проблема оказалась в следующем. Проверял с маломощным мотором без стабилизации скорости. Боясь контроллер или мотор повредить, не устанавливал большие значения скорости. А оказалось, что он начинает крутиться при минимальной скорости 0x50 и выше.

Извините за беспокойство!