Документ взят из кэша поисковой машины. Адрес оригинального документа : http://vega.inp.nsk.su/hardware/ksm485.html
Дата изменения: Fri Dec 15 16:18:01 2000
Дата индексирования: Mon Oct 1 19:38:17 2012
Кодировка: koi8-r
КШД-485: техническое описание

Техническое описание контроллера шагового двигателя КШД-485

КШД-485 представляет собой автономное устройство для управления шаговыми двигателями биполярного типа, размещаемое в непосредственной близости от объекта управления и соединяемое с компьютером с помощью последовательного интерфейса RS-485. Использование устройств такого типа позволяет существенно улучшить динамические характеристики шаговых двигателей и одновременно минимизировать количество и длину соединительных проводов и размеры системы управления по сравнению с существующими устройствами для управления шаговыми двигателями на основе магистрально-модульных систем.
Основные характеристики КШД-485:
Тип поддерживаемых двигателей двухобмоточные биполярные, четырехобмоточные униполярные, четырехобмоточные волновые
Ток в обмотке0.2..3.5 А
Скорость32..12000 шагов/сек.
Напряжение питаниянестаб. 12..48 В
ИнтерфейсRS-485
Скорость связи1200..57600 бод

Подключение

Все необходимые внешние соединения КШД-485 осуществляются через винтовые клеммники. Контакты клеммников имеют следующее назначение:
конт. Назначение
1 RS485 B
2 RS485 A
3 RS485 земля (возможно оплетка КММ)
4 выход импульсов +
5 выход импульсов -
6 выход +5v
7 вход датчика "0"
8 вход K+
9 вход К-
10 земля (общий для концевиков и датчика)
11 двигатель AН
12 двигатель АК
13 двигатель БН
14 двигатель БК
15 питание +12..48v
16 силовая земля

Интерфейс RS-485

Для связи контроллера с ЭВМ применен интерфейс RS-485, широко распространенный в системах промышленной автоматизации благодаря его высокой помехозащищенности. Здесь я не буду на нем подробно останавливаться. Отмечу лишь, что данный интерфейс обеспечивает подключение до 32-х устройств к моноканалу длиной до 1200 метров. В то же время стандарт RS-485 не регламентирует используемые для передачи протоколы.
В данном случае в качестве протокола физического уровня был выбран стандартный асинхронный протокол RS-232 (8 бит, без паритета, 1 стоп-бит, скорость 1200..57600 бод). Для подключения моноканала RS-485 к стандартному порту RS-232 используется специальный гальванически развязанный преобразователь.

Протокол ПИВ-485

К сожалению, мне не удалось найти ни одного стандартного протокола логического уровня, удовлетворяющего поставленной задаче, пришлось разработать собственный. Назовем его без ложной скромности "Протокол имени Волкова" или ПИВ-485. Надо же его как-то называть. Протокол ПИВ-485 прост, незатейлив и обеспечивает минимальные ограниченя для будущего развития.

Весь обмен информацией производится только по инициативе компьютера. Передача осуществляется пакетами из произвольного числа произвольных байт. Каждый пакет начинается специальным байтом START за которым следует байт адреса устройства. Завершается пакет контрольной суммой и специальным байтом STOP. Конторольная сумма является исключающим ИЛИ всех байт пакета кроме START и STOP, то есть XOR всех байт, включая контрольную сумму, должен быть равен нулю. Для передачи байтов, совпадающих с выделенными байтами START и STOP служит еще один выделенный байт SHIFT. Таким образом, если внутри пакета должен быть байт BYTE, совпадающий со значением START, STOP или SHIFT, этот байт заменяется на последовательность . Делается эта замена после подсчета контрольной суммы при передаче. Соответственно при приеме SHIFT выбрасывается, а к следующему за ним байту прибавляется значение START.

Были выбраны следующие значения специальных байт:
START   AAH
STOP    ABH
SHIFT   ACH
На правильно принятый пакет устройство должно ответить пакетом аналогичного формата, но без START. То есть ответный пакет должен начинаться с адреса устройства и заканчиваться контрольной суммой и STOP.
Например, если вы хотите послать в устройство с адресом 01H пять байт 10H 20H 30H ABH 02H, а оно в ответ должно послать два байта AAH и 00H, обмен в линии будет выглядеть так:
От ЭВМ:
AAH01H10H20H30H ACH01H02HA8HABH

От устройства:
01HACH00H00HACH00HABH

В случае неправильной контрольной суммы или если устройство не распознает пакет как допустимый, ответный пакет не передается.

Поскольку передача и прием информации производится по одним и тем же проводам, нельзя передавать несколько пакетов подряд, необходимо дождаться ответа на каждый переданный пакет либо истечения таймаута, прежде чем передавать следующий. Величина таймаута зависит от конкретного устройства. Для КШД-485 таймаут определяется только временем передачи пакета, зависяшим от скорости передачи, поскольку ответ КШД-485 посылает сразу.

Команды КШД-485

Команды передаются в КШД-485 в виде пакетов ПИВ-485, описанных выше. Первый байт тела пакета является кодом команды за которым следуют параметры, зависящие от команды. В параметрах, являющихся целым или длинными целыми числами, первым передается старший байт.

Большинство команд, если не указано особо, возвращают в качестве ответа один байт состояния устройства следующего формата:

Байт состояния (по битам):
0 сработал концевикпрециз.скорость* датчикК+К-идуготов

Обрабатываются следующие команды (команды и параметры помеченные "*" поддерживаются только в версии 2.0 и выше):

Идентификация - сообщить информацию об устройстве
формат:
1
ответ:
'W''S'номер версиисерийный номер*

Повторить последний ответ - на случай, если ответ был принят с ошибкой, а очень хочется его знать
формат:
2
ответ - повторяет последний ответ

Запрос состояния - просто возвращает байт состояния (см. выше)
формат:
3

Идти
формат:
4 кол-во шагов со знаком (4-байта)

Идти без ускорения
формат:
5 кол-во шагов со знаком (4-байта)

Конфигурация
формат (все параметры байтовые):
6ток движенияток удержания задержка удержанияCFG
здесь
ток движения, ток удержания:
кодток (А)
0 0.0
1 0.2
2 0.3
3 0.5
4 0.6
5 1.0
6 2.0
7 3.5
задержка удержания - в 1/30сек (30 = 1сек)
CFG (по битам):
AccLeave*LeaveK*SoftK*датчик К+К-0half
биты "К+", "К-", "датчик" - определяют тип датчиков (0 - нормально замкнутый, 1 - нормально разомкнутый)
бит "half" - режим движения (0 - 4х-фазный, 1 - 8ми-фазный; рекомендуется 1)
бит "SoftK*" - "мягкие" концевики, при срабатывании концевиков остановка делается с плавным торможением, а не сразу
бит "LeaveK*" - автоматически сходить с концевика
бит "AccLeave*" - в дополнение к предыдущему параметру, использовать ускорение при сходе с концевика (можно использовать для подключения кнопок ручного управления параллельно концевикам либо вместо них)

Установка скорости
формат:
7 мин.скоростьмакс.скорость ускорение
мин.скорость, макс.скорость - 32..12000 шагов/сек
ускорение - беззнаковое целое 32..65535 шаг/сек/сек

Принудительная остановка
формат
8
В версии 1.0 остановка делается без плавного торможения в состоянии 0-й фазы. В версии 2.0 и выше остановка производится плавно.

Выключение тока - служит для полного выключения тока мотора, даже если был выбран ненулевой ток удержания.
формат:
9

Сохранить параметры - записывает уставки в энергонезависимую память
формат:
10(0AH)

Выдача импульсов - позволяет выдавать выходные импульсы во время движения. Действует только на одну следующую команду движения.
формат:
11(0BH)скольконачинаячерез
все параметры беззнаковые целые:
"сколько" - нужное количество импульсов (в версии 2.0* 0 - бесконечно, в версии 1.0 0 - 65536)
"начиная" - с какого шага начать (0 - 65536)
"через" - через сколько шагов повторять (0 - 65536)

Сколько осталось* - узнать сколько шагов осталось непройдено (при остановке по срабатыванию концевика или по команде принудительной остановки). Может также использоваться при движении с прецизионной скоростью. Во время обычного движения и после автоматического схода с концевика не действует.
формат:
12(0CH)
ответ:
число шагов (4-байта)

Прочитать конфигурацию*
формат:
13(0DH)
ответ:
ток движенияток удержаниязадержка удержанияCFG
значение ответа аналогично команде конфигурации

Прочитать скорость*
формат:
14(0EH)
ответ:
мин.скоростьмакс.скоростьускорение
значение ответа аналогично команде установки скорости

Тест частоты* - позволяет точно измерить частоту внутреннего генератора (для калибровки). По этой команде на выход импульсов выдается частота тактового генератора /4. Выдача прекращается при получении любой посылки по RS485, на время измерения частоты любой обмен по RS485 необходимо прекратить.
формат:
15(0FH)
ответа на эту команду нет

Калибровка* - задание периода таймера для движения с прецизионной скоростью.
формат:
16(10H)Period (4-байта)
"Period" - период таймера в наносекундах, равный 256 периодам тактового генератора т.е. 64 периодам частоты, измеренной с помощью предыдущей команды.

Идти с прецизионной скоростью*
формат:
17(11H)кол-во шагов со знаком (4-байта) время между шагами (4-байта)
"время между шагами" - время в наносекундах между соседними шагами. Разумеется, каждый шаг не отрабатывается с точностью до наносекунды, точность отработки одного шага ~200мкс. Однако ошибка не накапливается и точность отработки, к примеру, 1000000 шагов будет 200мкс+1000000*0.5нс=700мкс.
Замечание: период не обязательно мерять в наносекундах, можно использовать любые удобные единицы измерения, главное чтобы период калибровки и период движения был измерен в одних и тех же единицах.

Выдать выходной импульс* - позволяет использовать выход импульсов для управления каким-либо внешним устройством
формат:
18(12H)

Установка адреса и скорости передачи

Установка адреса и скорости передачи производится программно. В версии 2.0 и выше для программирования адреса и скорости необходимо передать со скоростью 600 бод следующую последовательность:
0AAH'W''S'серийный номер RATEADDR

RATEBAUD
0 1200
1 2400
2 4800
3 9600
419200
538400
657600
Если серийный номер нулевой, действует на любой контроллер, иначе только на заданный. Если ADDR нулевой, адрес останется без изменения.

В версии 1.0 для установки адреса необходимо, чтобы к моноканалу было подключено только одно устройство, иначе всем подключенным приборам будет присвоен один адрес. Для программирования адреса и скорости необходимо установить "разрыв линии (break)" RS232 на 0.1 сек а затем передать со скоростью 600 бод следующую последовательность:
55HRATEADDR
Для совместимости этот способ допустим и в контроллерах версии 2.0, однако новый способ предпочтительнее.
После программирования адреса и скорости любым из этих способов нужно переключиться на выбранную скорость передачи, проверить работоспособность устройства с новыми параметрами и выполнить команду сохранения параметров в энергонезависимой памяти.

Некоторые особенности работы с КШД-485

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

А.А. Волков
(3832)39-4664.
ИЯФ СО РАН