PMS007c2

Apr. 30th, 2020 03:47 pm
eddy_em: (Default)
[personal profile] eddy_em
Вожусь с этим контроллером ШД. Довольно занятная штука. Очень грамотно сделано (надо бы вскрыть, посмотреть, что за микросхема-драйвер используется): двигатель при удержании вообще примерно комнатной температуры, да и сам контроллер не раскаляется, как некоторые!..
Правда, с протоколом пришлось помучиться. Благо, народ на форумах навел на путь истинный.

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

В принципе, второй подтягивающий резистор на 120Ом не очень-то нужен, я его вчера засунул, пока разбирался, что за проблема у меня на 250кбод (оказалось все банально: в CAN-сниффере я забыл вычитать единичку из значения регистра тайминга, поэтому получилось, что МК был настроен на 260кбод, вот и лезло огромное количество ошибок).
Часть настроек контроллера хранятся во флеш-памяти, только нужно не забывать их туда сохранить командой 0x2f 7 0x20 0 2 0 0 0. Т.к. работаем с SDO-параметрами, пишем на 0x600+ID, читаем с 0x580+Id. Еще читаем аварийные сообщения с 0x80+Id. Также я обратил внимание на то, что при включении контроллера на COB-ID 0x181 приходит посылка из шести нулей (какой-то PDO-объект).
Еще есть heartbeat-сообщения, по умолчанию они идут каждую секунду — COB-ID=0x700+Id, данные — один байт (состояние объекта в CANopen-понятии). Их можно вообще отключить командой 0x2b 0x17 0x10 0 0 0 0 0, а можно сделать пореже (эта команда - интервал между сообщениями, 0 означает бесконечность, все остальное — в миллисекундах). Скажем, 10 секунд: 0x2b 0x17 0x10 0 0x10 0x27 0 0.
Помимо всех этих штук в CANopen есть т.н. NMT-посылки, отправляемые на COB-ID=0. В их данных содержится два байта: новое состояние узла и его идентификатор. Скажем, чтобы перезапустить контроллер #1, нужно отправить команду 0x81 1 на идентификатор 0.

У контроллера очень много режимов (SDO #0x6005): позиция, скорость, синхронизация, ведомый за энкодером и движение по профилю положения или скорости. Мне нужен только режим по умолчанию. Задается он несколькими параметрами. И здесь важно не упустить, что параметр maximum speed (SDO #0x6003) хранится в оперативке и не дублируется во флеше! Т.е. каждый раз после перезапуска контроллера его нужно заново устанавливать. Посылаем 0x40 3 0x60 0 0 0 0 0 и видим, что действительно после перезапуска это нуль:
s 0x601 0x40 3 0x60 0 0 0 0 0
Message parsed OK

6928998 #0x0581 0x43 0x03 0x60 0x00 0x00 0x00 0x00 0x00

(надо доделать CAN-сниффер, чтобы им можно было из всяких утилит пользоваться — убрать это море отладочных сообщений).
Если сейчас дать команду движения (relative displacement, 0x6004, или absolute displacement, 0x601c), то вал вращаться не будет! Я с этим промучился целый день, пока на изиэлектрониксе не подсказали проверить max speed.
Итак, даем команду двигаться на 1000 шагов в плюс:
s 0x0601 0x23 4 0x60 0 0xe8 3 0 0
Message parsed OK

7212660 #0x0581 0x60 0x04 0x60 0x00 0x00 0x00 0x00 0x00

Мотор, понятное дело, никуда не спешит. Контроллер ждет установки команды max speed. Устанавливаем:
s 0x601 0x23 3 0x60 0 0 4 0 0
Message parsed OK

7290943 #0x0581 0x60 0x03 0x60 0x00 0x00 0x00 0x00 0x00

Повторяем предыдущую команду — и двигатель крутится! Ура!!!

Остается лишь разобраться с настройками микрошага, ускорений, поиграться с величиной максимальной скорости (в зависимости от нагрузки)...
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org

April 2025

S M T W T F S
  1 23 45
67 89101112
13141516171819
20212223242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2025 12:30 pm
Powered by Dreamwidth Studios