Re: Контроллер ЧПУ
Добавлено: 26 окт 2009, 20:24
celladon, понял. примерно так и у меня сейчас работает. если умеешь писать на ассемблере, то и на тини можно сваять что то подобное, но на меге лучше.
Статьи, обзоры, цены на станки и комплектующие.
https://cnc-club.ru/forum/
Ёлы палы, Дим, ну что спорить-то? Ты меня спрашивал о достоинствах приводов за 7тыр? Мои вот движки спокойно работают с нагрузкой на частоте где-то 8-10кГц в полушаге, можно здесь посмотреть. Я так до сих пор не ощутил что такое резонанс, мои привода на L297 не крутят роботроновские моторы выше 300 Гц, а этим вообще пофиг все. Да и это не предел, потому что такие эксперименты не самоцель )ab( . Опять же не пробовал вот L297 c нормальным FL60-м мотором... хотя давно собираюсь.malvin писал(а):Для кого немного? Для шагового движка? У меня, например, движки клинит на 2000 герц. Может быть, на коммерческих станках и 10000 - это я слыхал из проверенных источников. А вот больше - это уже из ряда фантастики.
malvin писал(а):Если мосто не нужен, что ж мы тогда обсуждаем? Все по домам.
Все просто: есть определенные сложности у моей программы - если работает интерфейс - плохо работают моторы, если хорошо работают моторы - дохлый интерфейс.spike писал(а):Я бы повторил такой девайс. Вообще, если он будет простым, то думаю что но станет весьма популярным.
Насчет приоритетов и драйверов: ты не совсем прав, драйвера не имеют приоритета реального времени, они еще круче - работают в нулевом кольце ядра и реагируют на прерывание. Практически, прерыванию при нормальной работе программы-контроллера взяться неоткуда, если конечно фигней всякой на компе не страдать... )bn(malvin писал(а):Ну, это конечно возможно, но в домашних условиях это просто экзотика. А на счет приоритетов - даже с приоритетом реального времени всегда найдется тот, кто готов будет потеснить твою программу, например, драйвера, которые ТОЖЕ работают в реальном времени. Так что слабо верится, уж извини.
)be( Бредятина какая-то...malvin писал(а):Теперь конкретно. Листинг ниже - это то, что выдает GIGAMESH в мою программу. Когда я кручу мышкой одной осью - крутятся все три оси, причем, в одном направлении. Конфигурация в листинге.
Это переписка меня и братана моего, вечного хакера-стахановца.... Думаю, комментарии бессмысленны.Димидрол (21:55:07 28/10/2009)
с какой точностью в винде можно мерить время?
Рус (21:55:53 28/10/2009)
ёххоу.... вааще винда это не система реал тайм то бишь.. время может запаздать..
Рус (21:56:07 28/10/2009)
или ты о маленьких премаленьких долях
Димидрол (21:56:18 28/10/2009)
зинаю.
Рус (21:56:26 28/10/2009)
умный , да?
Димидрол (21:56:44 28/10/2009)
просто меня чуть не переубедили в обратном
Вспомнил, ты говорил мне об этом, да. Представляешь, я еще добрую половину часов не перевел на зимнее время и сегодня наеххххх]]]] А ты хочешь чтобы я все помнил...spike писал(а):Ты меня спрашивал о достоинствах приводов за 7тыр? Мои вот движки спокойно работают с нагрузкой на частоте где-то 8-10кГц в полушаге
Понятно, зделаем и на 10 килогерц. Мне пофиг. Лишь бы комп успел.spike писал(а):Мое мнение - 4кГц для моста - мало. Ничего не хочу сказать, для отладки и экспериментов пойдет... но надо знать потолок, что-то мне подскажывает что 4кГц - это не он.
Недавно встречался с друганом моим - матершинник страшный - он мне сказал: "Дима, ты дурак. Все уже давно изобретено, написано и крякнуто. Нечего изобретать велосипед." У тебя работает круговая интерполяция?spike писал(а):Все просто: есть определенные сложности у моей программы - если работает интерфейс - плохо работают моторы, если хорошо работают моторы - дохлый интерфейс.
Да, твоя прога.spike писал(а):Программа 2H? отсюда?
Не понял. Это я ловлю вызовы функции, что пишет в порт. И вывожу их в лог.spike писал(а):А по какому адресу такие данные?
Pin Setup Port: Pin Setupspike писал(а):Какая распиновка выставлена в программе?
Это усредненный параметр времени. как видишь, он меняется в довольно широких приделах.... И это еще после усреднения... Представь, что отправляется в порт, точнее - не что, а с какой периодичностью....spike писал(а):Что такое TimeAvr?
Не проверял.spike писал(а):А без моста тоже так работает?
Ответил здесь... можем поспорить aemalvin писал(а):Это переписка меня и братана моего, вечного хакера-стахановца.... Думаю, комментарии бессмысленны.
значит выбросить из надо )bm(malvin писал(а):...я еще добрую половину часов не перевел на зимнее время...
Вот тут-то и вопрос, сколько через COM-порт можно качнуть? Думаю здесь будет узкое место.malvin писал(а):Понятно, зделаем и на 10 килогерц. Мне пофиг. Лишь бы комп успел.
Да, Дим, мы дураки, живем... а один хрен помирать... )bm(malvin писал(а):Недавно встречался с друганом моим - матершинник страшный - он мне сказал: "Дима, ты дурак. Все уже давно изобретено, написано и крякнуто. Нечего изобретать велосипед."
да, на дугах до 180°malvin писал(а): У тебя работает круговая интерполяция?
Ага! понял что забыл тебе сказать... )bk( Дело в том что выходные пины не ограничиваются 2-9 - это, например, адрес 0x378 (базовый адрес), еще вывод осуществляется в пины 1, 14, 16, 17 - адрес = базовый + 2. Чтение из порта производится по адресу = базовый + 1.malvin писал(а):spike писал(а): писал(а):А по какому адресу такие данные?
Не понял. Это я ловлю вызовы функции, что пишет в порт. И вывожу их в лог.
...
Объясни что ты пишешь в порт. Как я понял, идет сначала запись в порт сигналов, а потом еще один вызов функции записи - бинарный код 0 0 0 0 1 0 1 0. Что это?
Код: Выделить всё
26.10.2009-14:44:05 write: 1 1 0 0 0 0 1 0 632ms DeltaTime=0 TimeAvr=0.00/5.00
26.10.2009-14:44:09 write: 1 1 0 0 0 0 1 1 778ms DeltaTime=0 TimeAvr=0.00/5.00
26.10.2009-14:44:09 write: 1 1 0 0 0 0 1 0 778ms DeltaTime=0 TimeAvr=0.00/5.00
26.10.2009-14:44:09 write: 1 1 0 0 0 0 1 1 828ms DeltaTime=50 TimeAvr=5.56/5.00
26.10.2009-14:44:09 write: 1 1 0 0 0 0 1 0 838ms DeltaTime=0 TimeAvr=5.45/5.00
26.10.2009-14:44:09 write: 1 1 0 0 0 0 1 1 848ms DeltaTime=10 TimeAvr=5.38/5.00
26.10.2009-14:44:09 write: 1 1 0 0 0 0 1 0 848ms DeltaTime=0 TimeAvr=4.67/5.00
26.10.2009-14:44:09 write: 1 1 0 0 0 0 1 1 888ms DeltaTime=40 TimeAvr=6.47/5.00
26.10.2009-14:44:09 write: 1 1 0 0 0 0 1 0 898ms DeltaTime=10 TimeAvr=6.32/1.20
26.10.2009-14:44:09 write: 1 1 0 0 0 0 1 1 908ms DeltaTime=10 TimeAvr=6.50/5.00
26.10.2009-14:44:09 write: 1 1 0 0 0 0 1 0 908ms DeltaTime=0 TimeAvr=6.50/5.00
26.10.2009-14:44:09 write: 1 1 0 0 0 0 1 1 958ms DeltaTime=50 TimeAvr=9.00/5.00
26.10.2009-14:44:09 write: 1 1 0 0 0 0 1 0 958ms DeltaTime=0 TimeAvr=9.00/5.00Агаmalvin писал(а):Кстатти, параметр "уровень" - это и есть инверсия/без инверсии сигнала?
Меняется он у тебя потому что разрешающей способности у твоего таймера недостаточно. Это видно по DeltaTime - часто показывает значения 0 - это значит что интервал меньше разрешающей способности. Тебе полюбому нужен именно HighResolutionTimermalvin писал(а):Это усредненный параметр времени. как видишь, он меняется в довольно широких приделах.... И это еще после усреднения... Представь, что отправляется в порт, точнее - не что, а с какой периодичностью....
Выложил здесь.spike писал(а):Еще, проверил на станке программу, которую выше выложил - почему-то работает она плохо, пересобрал ее на другом компе - все окей, завтра выложу.
115200 килобит / 8 = 14400 байт. У меня идет один байт на команду. Плюс команда задержки. Итого где то 7000 герц. Если использовать чип FTDI на USB-порт, то можно завернуть и 1 мегагерц.Вот тут-то и вопрос, сколько через COM-порт можно качнуть? Думаю здесь будет узкое место
окей.malvin писал(а):Знаешь, я решил не заморачиваться с измерениями... Решил остановиться на варианте когда ты передаешь время вместе с 32-битным числом команды.
Код: Выделить всё
unsigned int __stdcall CncCmd(char *uType, unsigned long int Val1, unsigned long int Val2)Код: Выделить всё
procedure Out32(PortAddress: smallint; Value: smallint);stdcall; external 'inpout32.dll';
function Inp32(PortAddress: smallint): smallint; stdcall; external 'inpout32.dll';
procedure PulseTimes(PulseTime, TimeOut: integer); stdcall; external 'inpout32.dll';Хорошо, на первое время пойдет. Потом подумаем.malvin писал(а):115200 килобит / 8 = 14400 байт. У меня идет один байт на команду. Плюс команда задержки. Итого где то 7000 герц. Если использовать чип FTDI на USB-порт, то можно завернуть и 1 мегагерц.
Крутится?malvin писал(а):С пинами разобрался.
Тут тоже все не однозначно - в программе заложена возможность (теоретическая) работы интерполятора с неограниченным количеством осей, но навскидку трудно сказать как поведет себя парсер и другие компоненты... короче, надо пробовать. По идее должен откликаться на литеры A, B, C, U, V, W. Короче по совокупности траблов работать скорее всего не будет - нужна будет доработка (опять же я бы лучше это в третьей версии реализовал).malvin писал(а):Когда реализуешь поддержку передачи команды/времени в мост, например, в виде галочки в программе?) Хочу испытать мост с твоей программой.[/
quote]
Пока не могу сказать, надо подумать как это сделать... Я сейчас работаю над третьей версией (с плагинами которая), там точно будет реализовано, но во вторую (как и в первую) встроить может оказаться очень непросто. Там ТАКОЙ КОД )be( !!!... Сейчас пока ты можешь пока подменить dll-ку и время брать из процедуры PulseTimes... это уже встроено в GIGAMESH2 H. Если она увидит такую библиотеку, то внизу слева можно будет увидеть "Контроллер: LPTBridge".
malvin писал(а):Как и когда планируешь реализовать поддержку 4 оси и что она должна будет делать и на какие команды из G-кода откоикаться? Я уже делаю поворотный стол.
Код: Выделить всё
14.11.2009-21:46:10 write Out32(): port=888 Value=194
14.11.2009-21:46:10 write Out32(): port=890 Value=10
14.11.2009-21:46:10 read Inp32(): port=889
14.11.2009-21:46:10 write Out32(): port=888 Value=194
14.11.2009-21:46:10 write Out32(): port=890 Value=10
14.11.2009-21:46:10 read Inp32(): port=889
14.11.2009-21:46:10 write Out32(): port=888 Value=194
14.11.2009-21:46:10 write Out32(): port=890 Value=10
14.11.2009-21:46:10 read Inp32(): port=889
14.11.2009-21:46:10 write Out32(): port=888 Value=194
14.11.2009-21:46:10 write Out32(): port=890 Value=10
14.11.2009-21:46:10 read Inp32(): port=889
14.11.2009-21:46:10 write Out32(): port=888 Value=194
14.11.2009-21:46:10 write Out32(): port=890 Value=10
14.11.2009-21:46:10 read Inp32(): port=889
14.11.2009-21:46:10 write Out32(): port=888 Value=194
14.11.2009-21:46:10 write Out32(): port=890 Value=10
14.11.2009-21:46:10 read Inp32(): port=889
Надо сначала понять, подключилась ли PulseTimes. В левом нижнем углу после загрузки программы с подмененной библиотекой какой контроллер указан? HRT или LPT-bridge? Можешь библиотеку свою выложить с выводом в лог?malvin писал(а):Вызовов функции PulseTimes из программы нет. В чем дело?
Не могу воспроизвести у себя такую ситуацию: запускаю прогу - выбираю файл - запускаю интерполяцию - включаю (кнопка "Включить") - кнопка "Пуск" доступна - нажимаю - выполнение начинается. В каком месте у тебя проблема?malvin писал(а):Почему выполнение не запускается после нажатия кнопки Пуск, а сначала нужно что то поменять на вкладке настроек и применить изменения?
Это почти так! )ab( только еще круче - вовсе не обязательно пересылать в COM, это может быть любой доступный интерфейс - как говорится от фантазии разработчика...diglook писал(а):if (так) {то эта шняга СУПЕР решение} else { разьясните на пальцах}
Кинь пару ссылок, что это вообще такое? Или можт расскажешь в отдельной теме?diglook писал(а):А вообще я веду изыскания с МаксСтепером на АВРке.
Как только я реализовал в DLL функцию. прога показала LPT-bridge. На вызов всех используемых функций навешен лог. Как видишь, лог только от функций ввода-вывода.Надо сначала понять, подключилась ли PulseTimes. В левом нижнем углу после загрузки программы с подмененной библиотекой какой контроллер указан? HRT или LPT-bridge? Можешь библиотеку свою выложить с выводом в лог?
У меня тоже есть плата на меге 128. Использую мегу 32, так как ее возможностей вполне хватает, разумный минимум, так сказать.Здравствуйте. malvin! Заинтересовался Вашей разработкой! Знаю хорошо АВРы, есть возможность использовать любые из них. Есть хорошая плата для разработок на Мега128.
Идешь в банк, перечисляешь на мой счет ну, хотя бы, тридцать три килобакса и мы все живем счастливо... лет этак 5).Жду любых указаний.
Работает. Я же для себя и делал. Стану я для себя делать вещи, которые не работают)И еще вопрос. правда ли что описываемый мост можно подключить к КСАМу, и все работает?
Не принципиально. Запас по вычислительной мощности моста очень большой.к стати кварц 14,745600 MHz тоже для скорости 115200, а времени для обработки данных чуть прибавится.
Все так. Сейчас работает с Kcam, адаптирую для Gigamesh. Думаю, тут работать будет еще лучше, поскольку квантовать время будет сама прога!Почитав , посмотрев появилась куча вопросов и предложений( которые возможно отпадут после разяснений)
мои предположения 1)ДЛЛ моста это переходник ЛПТ->СОМ т.е КСАМ типа якобы степнул по ножке ЛПТ а переходник взял байт который должен заслатся в адрес ЛПТ и перенаправил в СОМ, в свою очередь АВРка приняв байт выставила его на ПОРТ. if (так) {то эта шняга СУПЕР решение} else { разьясните на пальцах}
Сигнал Enable появится когда ты его приделаешь. Я пока еще не дошел до этого. А так, схема, которую я набросал, это просто базовая версия. Сейчас буду работать над концевиками, реле и другими датчиками.также незаметил на схеме сигнала "enable" впрочем если реч идет об универсальности (работа с многими прогами которые долбят в ЛПТ) то в схеме нужно указывать не назначение бита, а номер вывода на DB25 ЛПТшного разьема(драйверу ведь пофиг как он называется степ или дир), тогда пользователь конфигурит разводку так как ему необходимо( под свои нужды) и настройки производить в проге (КСАМ, МАЧ, ВРИ-ЦНЦ Тогда возможно и разные ЛПТшные програматоры будут работать)
Что то я слышал об этом. Хочешь сделать клон по опубликованному протоколу автора Kcam-а? Ну попробуй. Я тоже хотел, но потом подумал, что тут будут проблемы с совместимостью с другими прогами. И непрогадал. Хотя вещь, на мой взгляд, будет клевая.А вообще я веду изыскания с МаксСтепером на АВРке. Ишо чуток и будет готов релиз(естественно всем доступный)
У меня дистанционка уже работает! Ха! Захотел, кино посмотрел, захотел - станок погонял. Круто.просто благодаря МаксСтеперовскому протоколу можно прикрутить выносной пульт ДУ, что очень удобно(ведь текущие координаты сразу отображаются и на экране КСАМ). и еще много разных фич.
А мы вдули автору этой приблуды, выпустив свою, не хуже чем его самая и которая управляется его любимой прогой, которая ни о чем не подозревает.....А что рассказывать MaxStepper это железяка которая вешается на СОМ порт и кней а из нее потом на выходе всякие степы. диры энейблы, ну в общем все чем управляет КСАМ. Изготовлено автором этой проги и продается.
А вот над этим мы как раз сейчас и работаем - вопрос открыт. Будет самая крутая ОС в мире. Хочешь, присоединяйся. Обмозгуем.Я думал вы расчехлили его ппротокол и ваяете свою , хотя ваша. если по скорости неуступит то будет круче, но вопрос об обратной связи(текущее положение итд) у вас не решен
Ты можешь мне библиотеку дать погонять с логом? Сразу разрулим...malvin писал(а):Как только я реализовал в DLL функцию. прога показала LPT-bridge. На вызов всех используемых функций навешен лог. Как видишь, лог только от функций ввода-вывода.