Привет!
Вопрос по пинам GPIO.
Есть ли какие-то ограничения или лучшие практики по назначению пинов и портов?
Например, все ли из них могут выдавать PWM или какие-то особые сигналы?
Спасибо!
Привет!
Ясно, спасибо.
Ясно, спасибо!
Да. Но там придётся немного подумать над связкой разных хал компонентов, чтобы из дробного числа (подача) получить состояние трёх логических значений (0/1). Возможно, кто-то уже такое делал, надо поискать по форумам.
У меня точь также подтормаживает, если в строке есть S. Дело в том, что планировщик лцнц тормозит движение в любой строке гкода, где есть какие-то управляющие буквы кроме XYZ. Я много на лазаре не режу, поэтому смирился. Но в качестве решения можно заменить все S на Z и по хитрому настроить hal компоненты, чтобы из значения Z получать ШИМ для лазера.
Это может подождать неопределенное время. А вот вторая проблема весьма меня беспокоит.
Я приобретал станок в основном для производства печатных плат. Засветка фоторезиста лазером - один из эффективных приемов для этого.
А как обстоят дела с командами "М"?
Argentum47 писал(а): ↑ у вас лазер на механике фрезера стоит?
Да быстрее самому написать. Там строчек 5 кода будет в том компоненте.
Код: Выделить всё
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;
Спасибо! Запишу в блокнотик. Но пока что мне жаль 3-х пинов GPIO, особенно в условиях необходимости преобразования уровней 3.3В в 5В.
Читаю форумы - вроде "лазерники" так и выкручиваются.
Т.е. указанная нога начинает выдавать PWM?
Круто! Я впечатлен возможностями linuxcnc, хотя пока что не совсем вкурил принципы его конфигурирования.
Код: Выделить всё
# 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
если с электроникой на "ты" то точно разберешься.
Код: Выделить всё
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
Так получилось, что я по первому образованию инженер АСУ. Так что мне одинаково, что электроника, что программирование.
Команда loadrt загружает в поток реального времени компонент с именем pwmgen (генератор ШИМ) с выходным сигналом логических уровней 0, 1
Далее для компонента объявляются 2 функции, которые должны выполняться в цикле реального времени.
Это установка параметров. Понятно.
Объявление цепи с именем s-rpm-0 между сигналом motion.analog-out-00 и pwmgen.0.value
Так, разрешаем генерировать ШИМ на пине 0 компонента
Объявление цепи с именем s-pwm-out между пином pwmgen.0.pwm и arisc.gpio.PA1-out
нет, тут нужно смотреть документацию на конкретный компонент
не совсем так. функции уже объявлены (и описаны в той доке что выше). тут они подключаются к потоку выполнения. servo-thread это обычно "медленный" в районе 1кгц, а base-thread это максимально быстрый. не знаю есть ли он у тебя. если есть то первую функцию лучше туда.
там работает другой компонент и у него свои функции и схема включения. он вроде аппаратно генерит шаги. а этот программно.Кстати, в примерах выше этих определений нет, я их тоже в hal не прописывал, однако ШИМ как-то генерится и на GPIO поступает...
есть специальный компонент motion. это связь с "ядром" чпу, планировщиком и так далее. его пины описаны вот здесь https://linuxcnc.org/docs/html/man/man9/motion.9.html
В мануале написано:
Код: Выделить всё
M62-65 will not function unless the appropriate motion.digital-out-nn pins are connected in your HAL file to outputs.