Перейти к содержанию

    

Разработка комплекса программа+железо LPT/USB для станков

вот симуляшка, собранная из g-кода одной из моделей, идущих с mach3

 

post-26588-1492478698_thumb.png

 

сколько такое на fpga кодить будете ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть два вопроса которые сейчас нужно выяснить:

1. Формат передачи информации в линукс-cnc. Как это выглядит при работе через платы PCI; для общего развития ещё через езернет/USB.

2. Форматы управления частотниками KEB и хитачи по rs-485. Имеются в виду частотники с датчиками обратной связи и возможностью позиционирования вала. Может кто-то знает другие фирмы, или конкретные модели, которые работают в таком режиме? На первое время нужен частотник, понимающий сигнал TTL на входе (такое как-бы дублирование вращения чего-то), а ещё лучше - понимающий сигнал шаг-направление (таких, боюсь, вообще нет).

 

Покажите пример приводов, которые управляются по "витой паре".

Сразу два примера: CAN и RS-485. В случае с CAN есть такая плата-заготовка, на базе которой можно начинать собирать привод, на плате есть CAN. Для одной оси даёт отличную скорость управления.

В случае с RS-485 есть преобразователи частоты под таким управлением, да и еще много чего можно найти. Вопрос только в том, как это будет выглядеть: запихать на плату пару контроллеров RS-485 и сотню контроллеров CAN или же сделать выводы на витые пары с микросхемы ПЛИС и передавать данные по своему стандарту, а где нужно - подключать преобразователи в CAN - RS-485

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

думаю, для начала можно даже не заморачиваться с fpga, а остановиться на rs232/422 - на 5 осей и несколько команд управления должно хватить

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
думаю, для начала можно даже не заморачиваться с fpga

FPGA необходимо при использовании петли ОС по позиции от внешнего энкодера или оптической линейки. В этом случаеи петля замкнута через софт контроллера. Возможно конечно применнеие сервопривода с внутренней обратной связью, тогда вариант с FPGA может быть излишне усложненный.

Также FPGA и DAC на дополнительной карте необходимы при использовании древних сервоприводов с аналоговым управлением, стандарт +/-10В сигнала управления скоростью ( а не позицией) сервопривода. Актуально для большинства промышленных ЧПУ советских станков, если задумаете прересадить станку "мозги" без замены сервоприводов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

fpga необходимо при параллельных вычислениях одновременно по нескольким осям неортогональной кинематики

в остальных случаях достаточно обычного stm32

 

Изменено пользователем Огурцов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
fpga необходимо при параллельных вычислениях одновременно по нескольким осям неортогональной кинематики

Очень спорное утверждение. Во всех контролерах CNC что встречались, FPGA использовалось не в "мозгах", а в интерфейсе. Траекторию многоосевого движения типа хеликальной интерполяции считали специализированные процессоры или DSP, но это было лет 10 назад. Сейчас любой Cortex-M7 ( nbgf STM32F756) с double-FPU те древние DSP за пояс заткнет.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

stm32 вполне справится с одной осью, но несколько осей даже для 2.5d никак не потянет

поэтому либо fpga и гоним через com команды, типо распарсенного g-кода

либо считаем траекторию на pc и через com идет тактирование приводов по step/dir

первый вариант более правильный, второй - более быстрый в реализации

сейчас нужно определиться, насколько реально поднять разработку на fpga или забить и для начала считать на pc

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пошла параллельная разработка :)

Все равно интересно наблюдать этот процесс.

Я бы не стал связываться с COM портом. Он очень чувствителен к помехам, уже есть опыт в этом деле. Даже USB более помехоустойчив. Еще как вариант - воткнуть плату RS-485

http://www.nnz-ipc.ru/good/show/14821/10212/

Другой вариант- выше была предложена отладочная плата для PCI-E. Думаю, там можно даже обратную связь с датчика сделать. В случае с RS485 петля обратной связи (с датчика) будет замыкаться на отдельное устройство, т. е. привод, тот, что на одну ось.

Ещё один вариант был представлен выше, рабочее название "100%".

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

Программу можно сделать как с нуля - в самом простом исполнении, для получения навыков и понимания процесса, так и использовать готовые наработки. Здесь единственный вариант линукс CNC, с их открытым исходным кодом.

Зы: неспешно ищется исполнитель для написания оной программы. Финансирование уже обеспечено.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

сделал самую страшную и не понятную половину - математику

вот это уже нужно выдавать на станок, чтобы понять, где ошибся или нет

post-26588-1492736498_thumb.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вырос до Arduino due :)

Есть пример из интернета по опросу Lpt порта:

Работа с LPT портом

Вот тестовая программка: нигде не накосячил?

 

#include <sys/io.h>

#include <sys/perm.h>

#include <stdio.h>

#include <stdlib.h>

main()

{

unsigned int x;

int init = 0xff;

if(ioperm(0x378,3,1))

{

printf("error opening lpt");

exit(1);

}

outb(init, 0x378);

outb(init, 0x37a);

while(1)

{

x=inb(0x378);

if(x != 255)

{

printf("%d\n", x);

}

}

if(ioperm(0x378,3,0))

{

printf("error closing lpt");

exit(1);

}

}

Под линуксом выдаёт ошибку открытия лпт. Кто-нибудь может помочь разобраться с этой программой, чтобы она работала?

Есть пример на Питоне, выставляет логические уровни на порте, работает. Не знаю, как там допрашивать порт, да и питон в конечном итоге будет работать медленнее, чем C. В примере испольховалась библиотека python.parallel.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Я бы не стал связываться с COM портом. Он очень чувствителен к помехам, уже есть опыт в этом деле. Даже USB более помехоустойчив. Еще как вариант - воткнуть плату RS-485

 

Вот это поворот, я смотрю. Вы точно с ком портом работали правильно, в смысле софта?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сейчас вопрос не в COM-порте.

 

Пример на питоне:

 

Робоферма

Управление LPT портом из Debian Linux на языке python

 

В манипуляциях, описанных в статье использовался дистрибутив debian-live-7.2-i386-xfce-desktop.iso Операционная система работала в режиме live-usb, то есть без инсталляции на компьютер.

 

debian lpt.jpg

От себя рекомендую именно этот способ. Банально проще иных вариантов, которые мне удалось попробовать.

 

Приступим по этапам. Большая часть действий выполняется в программе "Эмулятор терминала".

 

 

1. Модуль Рython-Рarallel

 

Данный модуль собственно и предназначен для управления параллельным (lpt) портом.

1.1 Создайте новую директорию, в которой будет вестись работа.

1.2 Скачайте и перенесите в неё пакет python-parallel_0.2-7_all.deb.

1.3 Запустите эмулятор терминала. Можно кликнуть правой кнопкой мыши по рабочей директории и в контекстном меню выбрать пункт "открыть в терминале". Тогда терминал будет сразу ориентирован на работу с её содержимым.

Открыть в терминале 1.4 Устанавливаем пакет следующей командой:

sudo dpkg -i python-parallel_0.2-7_all.deb

 

2. Подготовка управляющего скрипта на Python

 

2.1 Создаём пустой файл, например "lpt.py".

2.2 Открываем его в текстовом редакторе и переносим следующий код:

import parallel;

import time;

p = parallel.Parallel()

p.setData(1)

time.sleep(1)

p.setData(2)

time.sleep(1)

p.setData(4)

time.sleep(1)

p.setData(8)

time.sleep(1)

p.setData(16)

time.sleep(1)

p.setData(32)

time.sleep(1)

p.setData(64)

time.sleep(1)

p.setData(128)

time.sleep(1)

p.setData(0)

 

В эмуляторе терминала откройте доступ к порту:

sudo rmmod lp

Запускается командой sudo lpt. py

 

Работает.

Теперь вопрос: как здесь опросник порт? На уровне программы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Научился в Питоне считывать порт. Функция getInSelected()

getInError()

и т. д.

Получил частоту обмена 22 КГц. Теперь нужно на C.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация