LinuxCNC + Orange Pi (allwincnc)

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
Курдль
Мастер
Сообщения: 1993
Зарегистрирован: 20 мар 2018, 16:55
Репутация: 259
Настоящее имя: Курдль Энтеропийский
Откуда: Msk
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение Курдль »

MX_Master писал(а): 01 фев 2024, 16:59
Привет!
Вопрос по пинам GPIO.
Есть ли какие-то ограничения или лучшие практики по назначению пинов и портов?
Например, все ли из них могут выдавать PWM или какие-то особые сигналы?
Спасибо!
Мой сайт: https://cnc1310.ru
Аватара пользователя
MX_Master
Мастер
Сообщения: 7478
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3099
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение MX_Master »

Сопроцессор и процессор дёргают все пины программно, поэтому никаких ограничений нет. Кроме аппаратно-электрических, когда пины подключены к какой-то периферии на плате.
Аватара пользователя
Курдль
Мастер
Сообщения: 1993
Зарегистрирован: 20 мар 2018, 16:55
Репутация: 259
Настоящее имя: Курдль Энтеропийский
Откуда: Msk
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение Курдль »

MX_Master писал(а): Сопроцессор и процессор дёргают все пины программно, поэтому никаких ограничений нет. Кроме аппаратно-электрических, когда пины подключены к какой-то периферии на плате.
Ясно, спасибо.
А может ли LinuxCNC генерировать разные сигналы PWM на разные пины для одной и той же скорости оборотов?
Сейчас поясню.
У меня 2 шпинделя. Один 12 000 об/мин, другой - 24 000 об.мин.
Таким образом одни и те же заданные обороты для одного шпинделя должны формировать сигнал с одной скважностью, а для другого - с другой. К примеру, 12 000 об/мин для одного выдают непрерывный сигнал, а для другого идеальный меандр.
Мой сайт: https://cnc1310.ru
Аватара пользователя
MX_Master
Мастер
Сообщения: 7478
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3099
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение MX_Master »

Подправить параметр "dc-scale"
Аватара пользователя
Курдль
Мастер
Сообщения: 1993
Зарегистрирован: 20 мар 2018, 16:55
Репутация: 259
Настоящее имя: Курдль Энтеропийский
Откуда: Msk
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение Курдль »

MX_Master писал(а): Подправить параметр "dc-scale"
Ясно, спасибо!
У меня один из контроллеров шпинделя имеет цифровое управление оборотами (3 разряда - 8 градаций).
Может и это LinuxCNC осилит?!! :shock:

И еще важный для меня прикладной вопрос.
Необходимо управлять мощностью лазера в так называемом растровом режиме.
Т.е. каретка ездит туда/сюда "построчно" по X и сдвигается каждый раз на ширину "строки" по Y.
При этом лазер в определенных точках должен включаться, а в определенных - выключаться.
В УП это достигается командами SXXX / S0.
Так вот, в этих точках LinuxCNC подтормаживает (видимо ждет раскрутки шпинделя до нужных оборотов).
Как избежать этих подтормаживаний и обеспечить непрерывное движение каретки по строке?
пример кода (для просмотра содержимого нажмите на ссылку)

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

...
Y44.3
X0.9
X0.0995 S1000
X-0.101 S0
X-5.549 S1000
X-7.153 S0
X-8.339 S1000
X-9.443 S0
X-50.485 S1000
X-51.117 S0
X-66.36 S1000
X-66.992 S0
X-101.501 S1000
X-101.701 S0
X-102.501 S1000
X-103.196 S0
Y44.2
X-102.501
...
Мой сайт: https://cnc1310.ru
Аватара пользователя
MX_Master
Мастер
Сообщения: 7478
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3099
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение MX_Master »

Курдль писал(а): У меня один из контроллеров шпинделя имеет цифровое управление оборотами (3 разряда - 8 градаций).
Может и это LinuxCNC осилит?!!
Да. Но там придётся немного подумать над связкой разных хал компонентов, чтобы из дробного числа (подача) получить состояние трёх логических значений (0/1). Возможно, кто-то уже такое делал, надо поискать по форумам.
Курдль писал(а): В УП это достигается командами SXXX / S0.
Так вот, в этих точках LinuxCNC подтормаживает (видимо ждет раскрутки шпинделя до нужных оборотов).
Как избежать этих подтормаживаний и обеспечить непрерывное движение каретки по строке?
У меня точь также подтормаживает, если в строке есть S. Дело в том, что планировщик лцнц тормозит движение в любой строке гкода, где есть какие-то управляющие буквы кроме XYZ. Я много на лазаре не режу, поэтому смирился. Но в качестве решения можно заменить все S на Z и по хитрому настроить hal компоненты, чтобы из значения Z получать ШИМ для лазера.
Аватара пользователя
Курдль
Мастер
Сообщения: 1993
Зарегистрирован: 20 мар 2018, 16:55
Репутация: 259
Настоящее имя: Курдль Энтеропийский
Откуда: Msk
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение Курдль »

MX_Master писал(а): Да. Но там придётся немного подумать над связкой разных хал компонентов, чтобы из дробного числа (подача) получить состояние трёх логических значений (0/1). Возможно, кто-то уже такое делал, надо поискать по форумам.
Это может подождать неопределенное время. А вот вторая проблема весьма меня беспокоит.
MX_Master писал(а): Я много на лазаре не режу, поэтому смирился.
Я приобретал станок в основном для производства печатных плат. Засветка фоторезиста лазером - один из эффективных приемов для этого.
И без неё мой инструментарий сильно обеднеет.
MX_Master писал(а): Дело в том, что планировщик лцнц тормозит движение в любой строке гкода, где есть какие-то управляющие буквы кроме XYZ.
А как обстоят дела с командами "М"?
У Mach3 подобная проблема была решена командами М11/М10 Рххх, где Рххх - номер пина, которым надо подрыгать "на ходу".
Не поможет ли в этом такая группа команд? (для просмотра содержимого нажмите на ссылку)
15. M62 - M65 Digital Output Control
M62 P- - turn on digital output synchronized with motion. The P- word specifies the digital output number.

M63 P- - turn off digital output synchronized with motion. The P- word specifies the digital output number.

M64 P- - turn on digital output immediately. The P- word specifies the digital output number.

M65 P- - turn off digital output immediately. The P- word specifies the digital output number.

The P-word ranges from 0 to a default value of 3. If needed the the number of I/O can be increased by using the num_dio parameter when loading the motion controller. See the Motion Section for more information.

The M62 & M63 commands will be queued. Subsequent commands referring to the same output number will overwrite the older settings. More than one output change can be specified by issuing more than one M62/M63 command.

The actual change of the specified outputs will happen at the beginning of the next motion command. If there is no subsequent motion command, the queued output changes won’t happen. It’s best to always program a motion G code (G0, G1, etc) right after the M62/63.

M64 & M65 happen immediately as they are received by the motion controller. They are not synchronized with movement, and they will break blending.

Note
M62-65 will not function unless the appropriate motion.digital-out-nn pins are connected in your hal file to outputs.
Мой сайт: https://cnc1310.ru
Argentum47
Мастер
Сообщения: 867
Зарегистрирован: 05 июн 2015, 10:00
Репутация: 97
Откуда: Саратов
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение Argentum47 »

Курдль писал(а): Я приобретал станок в основном для производства печатных плат. Засветка фоторезиста лазером - один из эффективных приемов для этого.
И без неё мой инструментарий сильно обеднеет.
у вас лазер на механике фрезера стоит?
Аватара пользователя
Курдль
Мастер
Сообщения: 1993
Зарегистрирован: 20 мар 2018, 16:55
Репутация: 259
Настоящее имя: Курдль Энтеропийский
Откуда: Msk
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение Курдль »

Мой сайт: https://cnc1310.ru
alex_sar
Мастер
Сообщения: 1718
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 286
Настоящее имя: Алексей
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение alex_sar »

MX_Master писал(а): Да. Но там придётся немного подумать над связкой разных хал компонентов, чтобы из дробного числа (подача) получить состояние трёх логических значений (0/1).
Да быстрее самому написать. Там строчек 5 кода будет в том компоненте.
https://linuxcnc.org/docs/html/hal/comp.html#_arraydemo

вот что то такое

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

component spindle3 "3-bit spindle speed control";
pin in u32 in;
pin out bit out-# [3];
function _ nofp;
license "GPL"; // indicates GPL v2 or later
;;
int outv = in / 100 ; // change divider as you want
out(0) = outv & 0x01;
out(1) = outv & 0x02;
out(2) = outv & 0x04;
кладешь это в файл spindle3.comp где нибудь в отдельной папке
запускаешь
sudo halcompile --install spindle3.comp

и всё. можно делать
loadrt spindle3 ....
Последний раз редактировалось alex_sar 18 мар 2024, 13:22, всего редактировалось 4 раза.
alex_sar
Мастер
Сообщения: 1718
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 286
Настоящее имя: Алексей
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение alex_sar »

Курдль писал(а): Не поможет ли в этом такая группа команд? (для просмотра содержимого нажмите на ссылку)
должно помочь.
Аватара пользователя
Курдль
Мастер
Сообщения: 1993
Зарегистрирован: 20 мар 2018, 16:55
Репутация: 259
Настоящее имя: Курдль Энтеропийский
Откуда: Msk
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение Курдль »

alex_sar писал(а): Да быстрее самому написать. Там строчек 5 кода будет в том компоненте.
Спасибо! Запишу в блокнотик. Но пока что мне жаль 3-х пинов GPIO, особенно в условиях необходимости преобразования уровней 3.3В в 5В.
alex_sar писал(а): должно помочь.
Читаю форумы - вроде "лазерники" так и выкручиваются.
Придется только логику добавить ключевания PWM лазера т.е. его манипулирования, т.к. в моих модулях нельзя просто отрубать/врубать питание, а только через TTL канал.
Правда не знаю, как выкручиваются "лазерники", которым требуется пропорциональное управление мощностью на траектории (например, для реализации художественных гравировок). Там без команд S не обойдешься...
Мой сайт: https://cnc1310.ru
alex_sar
Мастер
Сообщения: 1718
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 286
Настоящее имя: Алексей
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение alex_sar »

Курдль писал(а): Правда не знаю, как выкручиваются "лазерники", которым требуется пропорциональное управление мощностью на траектории (например, для реализации художественных гравировок). Там без команд S не обойдешься...
есть же аналоговые выходы в той же группе команд.
Аватара пользователя
Курдль
Мастер
Сообщения: 1993
Зарегистрирован: 20 мар 2018, 16:55
Репутация: 259
Настоящее имя: Курдль Энтеропийский
Откуда: Msk
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение Курдль »

alex_sar писал(а): есть же аналоговые выходы в той же группе команд.
Т.е. указанная нога начинает выдавать PWM?
Мой сайт: https://cnc1310.ru
alex_sar
Мастер
Сообщения: 1718
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 286
Настоящее имя: Алексей
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение alex_sar »

нет ,там не нога. там выход motion.analog-out-00 / float дергается по этой команде

а уж куда ты его прицепишь - твоё дело.

можно через pwm на ногу https://linuxcnc.org/docs/html/man/man9/pwmgen.9.html
Аватара пользователя
Курдль
Мастер
Сообщения: 1993
Зарегистрирован: 20 мар 2018, 16:55
Репутация: 259
Настоящее имя: Курдль Энтеропийский
Откуда: Msk
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение Курдль »

alex_sar писал(а): нет ,там не нога. там выход motion.analog-out-00 / float дергается по этой команде
а уж куда ты его прицепишь - твоё дело.
Круто! Я впечатлен возможностями linuxcnc, хотя пока что не совсем вкурил принципы его конфигурирования.
Не поможешь настроить HAL?
Задача: чтобы на определенной пине GPIO (напр. PA1) по команде M62 появлялся сигнал ШИМ управления оборотами шпинделя, а по команде M 63 он сбрасывался.
(кстати, чем на практике отличается M62/M63 от M64/M65?)

У меня сейчас такие настройки для шпинделя:

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

# spindle setup
# PA3:PWM,  PC4:DIR,  PA0:EN
setp arisc.pwm.3.freq-cmd    1000.0 # Hz
setp arisc.pwm.3.dc-scale    24000.0 # max RPM
setp arisc.pwm.3.pwm-port    0 # PA
setp arisc.pwm.3.pwm-pin     3
setp arisc.pwm.3.dir-port    2 # PC
setp arisc.pwm.3.dir-pin     4
setp arisc.pwm.3.dir-invert  1
net s-rpm  spindle.0.speed-out  arisc.pwm.3.dc-cmd
net s-en   spindle.0.on         arisc.pwm.3.enable  arisc.gpio.PA0-out-not
Спасибо!
Мой сайт: https://cnc1310.ru
alex_sar
Мастер
Сообщения: 1718
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 286
Настоящее имя: Алексей
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение alex_sar »

Курдль писал(а): Круто! Я впечатлен возможностями linuxcnc, хотя пока что не совсем вкурил принципы его конфигурирования.
если с электроникой на "ты" то точно разберешься.

когда делаешь loadrt / addf ты добавляешь "микросхему" в систему. у нее есть определенные выходы и входы.
некоторые очень важные выходы и входы даны "свыше" ) https://linuxcnc.org/docs/html/man/man9/motion.9.html
ну а остальные подключаются по желанию и необходимости.

потом берешь и командами net соединяешь их между собой. первый параметр это уникальное название "провода" а остальные это выводы "микросхем". setp это подача фиксированного значения на вход.

вот и всё описание.

будет примерно так:

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

loadrt pwmgen output_type=0
addf pwmgen.0.make-pulses servo-thread
addf pwmgen.0.update servo-thread

setp pwmgen.0.pwm-freq 1000
setp pwmgen.0.scale 1.0 #<- tune as you need
setp pwmgen.0.offset 0.0 #<- tune as you need

net s-rpm-0 motion.analog-out-00   => pwmgen.0.value 
setp pwmgen.0.enable 1
net s-pwm-out pwmgen.0.pwm  => arisc.gpio.PA1-out

про разницу М-кодов точно не скажу но судя по всему как раз связано с тормозом и планировщиком.
Аватара пользователя
Курдль
Мастер
Сообщения: 1993
Зарегистрирован: 20 мар 2018, 16:55
Репутация: 259
Настоящее имя: Курдль Энтеропийский
Откуда: Msk
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение Курдль »

alex_sar писал(а): если с электроникой на "ты" то точно разберешься.
Так получилось, что я по первому образованию инженер АСУ. Так что мне одинаково, что электроника, что программирование.
Давай разберем твой пример по полочкам.
alex_sar писал(а): loadrt pwmgen output_type=0
Команда loadrt загружает в поток реального времени компонент с именем pwmgen (генератор ШИМ) с выходным сигналом логических уровней 0, 1
alex_sar писал(а): addf pwmgen.0.make-pulses servo-thread
addf pwmgen.0.update servo-thread
Далее для компонента объявляются 2 функции, которые должны выполняться в цикле реального времени.
Одна генерирует ЩИМ, а другая - приводит к нужной форме.
Примечание в мануала меня озадачивает: "Можно (и нужно) вызывать реже, чем make-pulses"
Что это значит? Что она не должна помещаться в servo-thread?
Кстати, в примерах выше этих определений нет, я их тоже в hal не прописывал, однако ШИМ как-то генерится и на GPIO поступает...
alex_sar писал(а): setp pwmgen.0.pwm-freq 1000
setp pwmgen.0.scale 1.0 #<- tune as you need
setp pwmgen.0.offset 0.0 #<- tune as you need
Это установка параметров. Понятно.
alex_sar писал(а): net s-rpm-0 motion.analog-out-00 => pwmgen.0.value
Объявление цепи с именем s-rpm-0 между сигналом motion.analog-out-00 и pwmgen.0.value
Вот это не понятно. Откуда берется значение motion.analog-out-00?
alex_sar писал(а): setp pwmgen.0.enable 1
Так, разрешаем генерировать ШИМ на пине 0 компонента
alex_sar писал(а): net s-pwm-out pwmgen.0.pwm => arisc.gpio.PA1-out
Объявление цепи с именем s-pwm-out между пином pwmgen.0.pwm и arisc.gpio.PA1-out
Мой сайт: https://cnc1310.ru
alex_sar
Мастер
Сообщения: 1718
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 286
Настоящее имя: Алексей
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение alex_sar »

Курдль писал(а): Команда loadrt загружает в поток реального времени компонент с именем pwmgen (генератор ШИМ) с выходным сигналом логических уровней 0, 1
нет, тут нужно смотреть документацию на конкретный компонент
https://linuxcnc.org/docs/html/man/man9/pwmgen.9.html
это тип генерации, 0 - обычный pwm а там ещё есть варианты
Курдль писал(а): Далее для компонента объявляются 2 функции, которые должны выполняться в цикле реального времени.
не совсем так. функции уже объявлены (и описаны в той доке что выше). тут они подключаются к потоку выполнения. servo-thread это обычно "медленный" в районе 1кгц, а base-thread это максимально быстрый. не знаю есть ли он у тебя. если есть то первую функцию лучше туда.

если функции не подключить к потокам, компонент будет висеть но работать не будет.
Кстати, в примерах выше этих определений нет, я их тоже в hal не прописывал, однако ШИМ как-то генерится и на GPIO поступает...
там работает другой компонент и у него свои функции и схема включения. он вроде аппаратно генерит шаги. а этот программно.

все эти команды можно выполнять пошагово из консоли при запущенном linuxcnc и смотреть результат. только перед командой дописать halcmd
а смотреть что получилось например: halcmd show pin | grep pwm
Курдль писал(а): Откуда берется значение motion.analog-out-00?
есть специальный компонент motion. это связь с "ядром" чпу, планировщиком и так далее. его пины описаны вот здесь https://linuxcnc.org/docs/html/man/man9/motion.9.html
Аватара пользователя
Курдль
Мастер
Сообщения: 1993
Зарегистрирован: 20 мар 2018, 16:55
Репутация: 259
Настоящее имя: Курдль Энтеропийский
Откуда: Msk
Контактная информация:

Re: LinuxCNC + Orange Pi (allwincnc)

Сообщение Курдль »

Ну что, маленькая победа есть!
Контроллер дрыгает ногой в нужных точках траектории и при этом не подтормаживает!
Осталось реализовать функцию, чтобы дрыгал не ногой, а манипулировал PWM.
В этой строчке меня кое что смущает:
alex_sar писал(а): net s-rpm-0 motion.analog-out-00 => pwmgen.0.value
В мануале написано:

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

M62-65 will not function unless the appropriate motion.digital-out-nn pins are connected in your HAL file to outputs.
Т.е. не motion.analog-out-00
А есть возможность сигналы логически умножать (т.е. исполнить логическую операцию "И" над сигналом PWM и M62)?
Мой сайт: https://cnc1310.ru
Ответить

Вернуться в «Электроника»