HAL2Arduino

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
sr480
Мастер
Сообщения: 1295
Зарегистрирован: 08 янв 2012, 20:48
Репутация: 139
Откуда: Ростов-на-Дону
Контактная информация:

HAL2Arduino

Сообщение sr480 »

Отличная штуковина!
http://emc2arduino.wordpress.com/tag/hal2arduino/

Сделал на ней управление шпинделем от РУ модели.
От EMC2 используется сигналы spindle-on и spindle-cmd.
spindle-on включает выключает шпиндель, а spindle-cmd задает скорость - на Arduino я знаю требуемые обороты, и перевожу сигнал в ШИМ для управления шпинделем.

Вообще поддерживает несколько Arduino, например одна будет в пульте, а вторая в станке включать/выключать всевозможную периферию и получать от неё данные.

Есть модуль чтения данных с концевых датчиков.
Есть модуль для вывода данных на LCD дисплей - может по свободе попробую сделать пульт с выводом координат и с энкодерами для регулировки подач и задания координат.
Есть даже модуль управления ШД, как я понял от EMC он получает координату в мм или дюймах, а Arduino сама рассчитывает скорости и выдает импульсы драйверам, но я его не испытывал, может под 3Д принтеры он и пойдет.

ОСТОРОЖНО: в коде есть ошибки! ;)

В этом файле: https://github.com/dewy721/EMC-2-Arduin ... ino-0.4.py
В месте инициализации пинов не определена переменная pinLabel

Код: Выделить всё

    if codesAccepted.find("107") > -1:
        if simulation == True:
            print "creating: motion_analog-out-02"
        else:
            print "makePins: creating: %r" % pinLabel
            c.newpin("motion_analog-out-02",hal.HAL_FLOAT,hal.HAL_IN)
В коде, которые передает данные arduino, если переменная hostCheck булева, то приведение к строке видимо возвращает "True" или "False" (я в питоне не силен) и получается, что сформированная команда имеет неправильный формат, тогда как сообщение должно быть 133 0 1 134; мы получим 133 0 True 134;

Код: Выделить всё

        if codesAccepted.find("133") > -1:
            command=133
            hostCheck=c['motion_spindle-on']
            if hostCheck != hostCheckOld[command]:
                hostCheckOld[command]=hostCheck
                checkSum=hostCheck+command
                comString=str(command) + " 0 " + str(hostCheck) + " " + str(int(checkSum)) + ";"
                masterTx.put(comString)
Я сделал так (через *опу конечно, о уже кайф было чтоб заработало):

Код: Выделить всё

        if codesAccepted.find("133") > -1:
            command=133
            hostCheck=c['motion_spindle-on']
            if hostCheck != hostCheckOld[command]:
                hostCheckOld[command]=hostCheck
                checkSum=hostCheck+command
                if hostCheck:
                     masterTx.put("133 0 1 134;")
                else
                     masterTx.put("133 0 0 133;")
А так штука классная, надо бы её подправить, но я че-то гитом пользоваться не умею.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: HAL2Arduino

Сообщение Nick »

А какие у него возможности? Сколько пинов, можно ли stepgen или что-то такое запихать?

Есть ли принципиальные отличия от вот этой прошивки и компонента?
http://emergent.unpythonic.net/01198594294
(Arduino EMC2 LinuxCNC - советы начинающим #1)


И сделай хоть какой-то обзор возможностей пожалуйста! :) Хотябы halcmd show | grep arduino
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: HAL2Arduino

Сообщение nkp »

у меня на Mega 2560 не прошивается со старта : ну это с разгону - ничего толком еще не смотрел
(в инструкции пишут мега поддерживается...)
===============
а вот вопрос по #include <AccelStepper.h> // load the library.
это что - стандартная библиотека ардуины и уже идет с IDE ?
по крайней мере на компе файлас таким именем нет (но и не ругается на его отсутствие :thinking: )
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: HAL2Arduino

Сообщение Nick »

Если нет, можно взять тут: https://github.com/adafruit/AccelStepper
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: HAL2Arduino

Сообщение aftaev »

nkp писал(а):а вот вопрос по #include <AccelStepper.h> // load the library.
это что - стандартная библиотека ардуины и уже идет с IDE ?
не понял зачем там это библиотека? Эта бибилиотека нужна для генерации шагов.

HAL2Arduino это наверно скидывает задание в Ардуино и та выполняет? HAL2Arduino наверно не для I/O для ЕМС, это ЕМС управляет Ардуиной.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: HAL2Arduino

Сообщение nkp »

да я нашел (в другом месте правда) - но вот вопрос - почему не ругалась ide при компиляции (ну ругалась - да не на это)
а может это связано именно с отсутствием библиотеки... :thinking:
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: HAL2Arduino

Сообщение Nick »

А разве оранжевыми буквами у тебя не на AccelStepper ругается?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: HAL2Arduino

Сообщение nkp »

aftaev писал(а):ЕМС управляет Ардуиной.
кусок Hal файла:

Код: Выделить всё

#First load the Python user module named /user/bin/9axis_Hal2Arduino with the name 'Hal2Arduino'
loadusr -Wn Hal2Arduino /home/dewy/Desktop/my-mill/HAL2Arduino-0.4.py

#Second 'unlinkp' our pins to make them available for use.
# Then use 'net' to recreate/hook into them.
#  Comment out any sections that your machine doesn't have.

#unlinkp axis.0.motor-pos-cmd
#net xpos-cmd axis.0.motor-pos-cmd Hal2Arduino.axis_0_motor-pos-cmd 

#unlinkp axis.1.motor-pos-cmd
#net ypos-cmd axis.1.motor-pos-cmd Hal2Arduino.axis_1_motor-pos-cmd

#unlinkp axis.2.motor-pos-cmd
#net zpos-cmd axis.2.motor-pos-cmd Hal2Arduino.axis_2_motor-pos-cmd
unlinkp axis.0.home-sw-in
net home-X Hal2Arduino.axis_0_home-sw-in axis.0.home-sw-in

unlinkp axis.1.home-sw-in
net home-Y Hal2Arduino.axis_1_home-sw-in axis.1.home-sw-in

unlinkp axis.2.home-sw-in
net home-Z Hal2Arduino.axis_2_home-sw-in axis.2.home-sw-in

unlinkp axis.0.neg-lim-sw-in
unlinkp axis.1.neg-lim-sw-in
unlinkp axis.2.neg-lim-sw-in
net min-X Hal2Arduino.axis_0_neg-lim-sw-in axis.0.neg-lim-sw-in
net min-Y Hal2Arduino.axis_1_neg-lim-sw-in axis.1.neg-lim-sw-in
net min-Z Hal2Arduino.axis_2_neg-lim-sw-in axis.2.neg-lim-sw-in
Последний раз редактировалось nkp 25 ноя 2013, 15:04, всего редактировалось 1 раз.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: HAL2Arduino

Сообщение nkp »

Nick писал(а):на AccelStepper ругается?
может и так - я подумал что просит возвращаемый тип указать...
поковыряю...
Аватара пользователя
sr480
Мастер
Сообщения: 1295
Зарегистрирован: 08 янв 2012, 20:48
Репутация: 139
Откуда: Ростов-на-Дону
Контактная информация:

Re: HAL2Arduino

Сообщение sr480 »

nkp писал(а):а вот вопрос по #include <AccelStepper.h> // load the library.
это что - стандартная библиотека ардуины и уже идет с IDE ?
Это не стандартная бибилиотека - где-то попадалась ссылка на неё.
При использовании этого модуля ардуино принимает координаты кажется, и занимается генерацией шагов. если ШД управлять не надо, то смело ставим #define useAccelStepper false

ВАЖНО
HAL2Arduino с самой Arduino договариваются о том, какие данные она может принимать.

Т.е. они здороваются, потом скрипт запрашивает у ардины, какие команды она может обрабатывать:
в файле: HAL2Arduino_0_4.ino
вот эта строка: #define commandsRequested "133 137"
Тогда скрипт создат соответствующие пины у модуля HAL2Arduino, и естественно их в custom.HAL использовать нельзя. Это необходимо для того, чтоб проверить еще на этапе запуска, что ваша ардуино поддерживает нужные команды.
Последний раз редактировалось sr480 25 ноя 2013, 15:38, всего редактировалось 1 раз.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: HAL2Arduino

Сообщение nkp »

sr480 писал(а):useAccelStepper false
так прошилась без проблем...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: HAL2Arduino

Сообщение nkp »

Nick писал(а):Если нет, можно взять тут
с библиотекой теперь ошибок нет ...
(#define useAccelStepper true)

Код: Выделить всё

halcmd: show pin
Component Pins:
Owner   Type  Dir         Value  Name
     5  bit   OUT         FALSE  Hal2Arduino.axis_0_home-sw-in
     5  float IN              0  Hal2Arduino.axis_0_joint-pos-cmd
     5  float IN              0  Hal2Arduino.axis_0_joint-vel-cmd
     5  bit   OUT         FALSE  Hal2Arduino.axis_0_neg-lim-sw-in
     5  bit   OUT         FALSE  Hal2Arduino.axis_0_pos-lim-sw-in
     5  bit   OUT         FALSE  Hal2Arduino.axis_1_home-sw-in
     5  float IN              0  Hal2Arduino.axis_1_joint-pos-cmd
     5  float IN              0  Hal2Arduino.axis_1_joint-vel-cmd
     5  bit   OUT         FALSE  Hal2Arduino.axis_1_neg-lim-sw-in
     5  bit   OUT          TRUE  Hal2Arduino.axis_1_pos-lim-sw-in
     5  bit   OUT         FALSE  Hal2Arduino.axis_2_home-sw-in
     5  float IN              0  Hal2Arduino.axis_2_joint-pos-cmd
     5  float IN              0  Hal2Arduino.axis_2_joint-vel-cmd
     5  bit   OUT         FALSE  Hal2Arduino.axis_2_neg-lim-sw-in
     5  bit   OUT          TRUE  Hal2Arduino.axis_2_pos-lim-sw-in

halcmd: 
Последний раз редактировалось nkp 25 ноя 2013, 15:48, всего редактировалось 1 раз.
Аватара пользователя
sr480
Мастер
Сообщения: 1295
Зарегистрирован: 08 янв 2012, 20:48
Репутация: 139
Откуда: Ростов-на-Дону
Контактная информация:

Re: HAL2Arduino

Сообщение sr480 »

Самые страшные танцыс бубном у меня были при настройке HAL - смотри предыдущее сообщение. Долго не мог понять, че на меня EMC ругается, что мол нет таких пинов (тем более, что я вобще первый раз настраивал HAL)
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: HAL2Arduino

Сообщение nkp »

sr480 писал(а):при настройке HAL
хал нам совсем не страшен :hehehe:
========
вечерком продолжу знакомство...
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: HAL2Arduino

Сообщение aftaev »

кто на пальцах объяснит назначение HAL2Arduino?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
sr480
Мастер
Сообщения: 1295
Зарегистрирован: 08 янв 2012, 20:48
Репутация: 139
Откуда: Ростов-на-Дону
Контактная информация:

Re: HAL2Arduino

Сообщение sr480 »

Описал как я прикручивал управление шпинделем:
Шпиндель с RC-модельным двигателем #199
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: HAL2Arduino

Сообщение Nick »

nkp писал(а):с библиотекой теперь ошибок нет ...
(#define useAccelStepper true)
О, вообще прикольно! Надо ее в осциллограф будет запихать!
Кстати, а как там параметры ШД задавать? При загрузке прошивки, или можно будет через hal?
Аватара пользователя
sr480
Мастер
Сообщения: 1295
Зарегистрирован: 08 янв 2012, 20:48
Репутация: 139
Откуда: Ростов-на-Дону
Контактная информация:

Re: HAL2Arduino

Сообщение sr480 »

aftaev писал(а):кто на пальцах объяснит назначение HAL2Arduino?
Это скрипт на питоне для EMC и скетч для Arduino, которые позволяют связываться им между собой по определенному протоколу с контрольной суммой.

Можно сигналы из EMC пересылать в Arduino и значения измеренные, посчитанные ардиной пересылать обратно в EMC2.
Я делал для управления шпинделем от РУ модели, при этом Arduino отвечает за генерацию ШИМ для управления движком, а EMC выдает значения оборотов, с которыми должен вращаться шпиндель, при получении значения Arduion пересчитывает обороты в скважность ШИМ и перенастраивает генератор.

Можно подключать несколько Arduino к одной EMC.
Можно из EMC передать положения осей и вывести их на дисплей, можно делать всё что захочется, просто нужно дописать это в скетче и настроить HAL, чтоб отправить данные в Arduino.
Аватара пользователя
sr480
Мастер
Сообщения: 1295
Зарегистрирован: 08 янв 2012, 20:48
Репутация: 139
Откуда: Ростов-на-Дону
Контактная информация:

Re: HAL2Arduino

Сообщение sr480 »

Nick писал(а):О, вообще прикольно! Надо ее в осциллограф будет запихать!
Кстати, а как там параметры ШД задавать? При загрузке прошивки, или можно будет через hal?
Автор пишет, что это так побаловаться, для домашних маленьких станков. я бы 3Д принтер делал на такой. EMC2 по USB - неплохо...
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: HAL2Arduino

Сообщение aftaev »

sr480 писал(а):я бы 3Д принтер делал на такой. EMC2 по USB - неплохо...
так 3Д принтер и сам неплохо на Ардуине работает без ЕМС :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Ответить

Вернуться в «LinuxCNC»