Maho 400p фрезерный станок по металлу (400x250x375)

Тяжелые фрезерные станки по металлу.
tpolimer2000
Мастер
Сообщения: 347
Зарегистрирован: 07 ноя 2018, 19:03
Репутация: 45
Настоящее имя: Александр
Откуда: Беларусь
Контактная информация:

Re: Maho 400p фрезерный станок по металлу (400x250x375)

Сообщение tpolimer2000 »

xenon-alien писал(а): Ну так постучитесь на форум и попросите прошивку. За одно про линейки можете спросить с выборкой люфтов.
Честно говоря погряз в работе и нет времени на станок. Кроме того, когда мы имеем дело с новыми прошивками, нет гарантии надежности, так как она только появилась и еще не проверена "временем".
xenon-alien писал(а): Мне где-то попадалось видео, как делается прошивка.
По идее "пару" щелчков и готово. Только нюанс - нужно знать, что и как и куда тыкать и что указывать.
Большое спасибо!
Бегло пробежался, похоже на какую-то ПЛИС. Пока с ПЛИС не знаком, сама среда разработки Xilinx Ise чем-то напомнила Keil Uvision (как-то баловался с stm32). У каждой прошивки Mesa есть исходный код, который можно загрузить в среду разработки и написать любую реализацию. Но есть нюанс, это требует знаний не только языка программирования (вроде бы C++), но и самой ПЛИС, ее семейства. Вы правильно сказали пару щелчков мышью и несколько строк кода :) , если знаешь как.

Эх, найти бы на все интересное время.
tpolimer2000
Мастер
Сообщения: 347
Зарегистрирован: 07 ноя 2018, 19:03
Репутация: 45
Настоящее имя: Александр
Откуда: Беларусь
Контактная информация:

Re: Maho 400p фрезерный станок по металлу (400x250x375)

Сообщение tpolimer2000 »

К счастью появляется время на хобби, вернулся к своему станочку.

Попытался собрать схему с поиском нуля в версии LinuxCnc 2.8.2. Идея была простой, завести индексную метку сервопривода и индуктивный датчик от которого мы начинаем искать индексную метку в Arduino Nano. При сработке индуктивного датчика и индексной метки сервопривода, Arduino выдавало сигнал на одном из выходов. Выход с Arduino подключал к входу контролера Mesa, в LinuxCnc прописывал этот вход как датчик Home. Из-за того что не внимательно изучил проблему или просто подзабыл свои результаты с индексными метками и индуктивными датчиками подключенными напрямую к Mesa, уперся в скорость обработки входов у Mesa. Все работает, но повторяемость из-за задержек (которые необходимы, чтобы Mesa успела увидеть сигнал) может немного плавать.
Код Arduino Nano, оставлю тут для истории (для просмотра содержимого нажмите на ссылку)

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

//https://upload.wikimedia.org/wikipedia/commons/e/e4/Arduino-nano-pinout.png
//https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf
//https://adior.ru/index.php/robototekhnika/249-pcint-arduino
//https://bellsoft.ru/arduino/pcint-arduino/
//https://chipenable.ru/index.php/item/4

#ifndef MC_CRITICAL_SECTION_START
#define MC_CRITICAL_SECTION_START  uint8_t _sreg = SREG; cli();
#endif

#ifndef MC_CRITICAL_SECTION_END
#define MC_CRITICAL_SECTION_END    SREG = _sreg;
#endif

#define PIN_X_OZ      2
#define PIN_X_NOZ     8
#define PIN_X_OUT     14

#define PIN_Y_OZ      3
#define PIN_Y_NOZ     9
#define PIN_Y_OUT     15

#define PIN_Z_OZ      4
#define PIN_Z_NOZ     10
#define PIN_Z_OUT     16

volatile uint32_t timeOnOZEncoder = 0;
volatile uint32_t timeOnOZEncoderX = 0;
volatile uint32_t timeOnOZEncoderY = 0;
volatile uint32_t timeOnOZEncoderZ = 0;
uint32_t timeOnOZEncoderDelay = 150UL;

void setup()
{
  Serial.begin(115200);

  pinMode(PIN_X_OZ, INPUT_PULLUP);
  pinMode(PIN_X_NOZ, INPUT_PULLUP);
  pinMode(PIN_X_OUT, OUTPUT);

  pinMode(PIN_Y_OZ, INPUT_PULLUP);
  pinMode(PIN_Y_NOZ, INPUT_PULLUP);
  pinMode(PIN_Y_OUT, OUTPUT);

  pinMode(PIN_Z_OZ, INPUT_PULLUP);
  pinMode(PIN_Z_NOZ, INPUT_PULLUP);
  pinMode(PIN_Z_OUT, OUTPUT);

  MC_CRITICAL_SECTION_START

  // PCICR (Pin Change Interrupt Enable) - регистр разрешающий прерывания по изменению состояния группы выводов.
  // PCIEn - биты которые разрешают прерывания по изменению состояния группы выводов. Когда бит PCIEn и бит I регистра SREG установлены в 1 - прерывания по изменению состояния на группе выводов PCIEn разрешены.
  // Очищаем регистр разрещающий прерывания по изменению состояния группы выводов.
  PCICR |= (0 << PCIE0);

  // PCMSKn (Pin Change Mask Register) - регистр включающий выводы конкретной группы портов на прерываний по изменению состояния.
  PCMSK0 |= (0 << PCINT7) | (0 << PCINT6) | (0 << PCINT5) | (0 << PCINT4) | (0 << PCINT3) | (1 << PCINT2) | (1 << PCINT1) | (1 << PCINT0);

  // PCIFR (Pin Change Interrupt Flag Register) - регистр флагов прерываний по изменению состояния группы выводов. Указывает от какой группы поступило прерывание.
  // Очищаем регистр флагов прерываний по изменению состояния группы выводов.
  PCIFR = (1 << PCIF0);

  // PCICR (Pin Change Interrupt Enable) - регистр разрешающий прерывания по изменению состояния группы выводов.
  // PCIEn - биты которые разрешают прерывания по изменению состояния группы выводов. Когда бит PCIEn и бит I регистра SREG установлены в 1 - прерывания по изменению состояния на группе выводов PCIEn разрешены.
  PCICR |= (1 << PCIE0);

  MC_CRITICAL_SECTION_END
}

void loop()
{
  timeOnOZEncoder = millis();

  if (timeOnOZEncoderX > 0 && (timeOnOZEncoder - timeOnOZEncoderX) > timeOnOZEncoderDelay)
  {
    // Состояние вывода изменилось с низкого уровня на низкий.
    PORTC &= ~(1 << PC0);
    timeOnOZEncoderX = 0;
  }

  if (timeOnOZEncoderY > 0 && (timeOnOZEncoder - timeOnOZEncoderY) > timeOnOZEncoderDelay)
  {
    // Состояние вывода изменилось с низкого уровня на низкий.
    PORTC &= ~(1 << PC1);
    timeOnOZEncoderY = 0;
  }

  if (timeOnOZEncoderZ > 0 && (timeOnOZEncoder - timeOnOZEncoderZ) > timeOnOZEncoderDelay)
  {
    // Состояние вывода изменилось с низкого уровня на низкий.
    PORTC &= ~(1 << PC2);
    timeOnOZEncoderZ = 0;
  }
}

/// <summary>
/// Прерывание по изменению состояния группы выводов 0.
/// </summary>
ISR(PCINT0_vect)
{
  // Проверяем состояние пина PB0 (8) и PD2 (2).
  if ((PINB & (1 << PB0)) && !(PIND & (1 << PD2)))
  {
    
  }
  else
  {
    // Состояние вывода изменилось с высокого уровня на высокий.
    PORTC |= 1 << PC0;
    timeOnOZEncoderX = millis();
  }

  // Проверяем состояние пина PB1 (9) и PD3 (3).
  if ((PINB & (1 << PB1)) && !(PIND & (1 << PD3)))
  {
    
  }
  else
  {
    // Состояние вывода изменилось с высокого уровня на высокий.
    PORTC |= 1 << PC1;
    timeOnOZEncoderY = millis();
  }

  // Проверяем состояние пина PB2 (10) и PD4 (4).
  if ((PINB & (1 << PB2)) && !(PIND & (1 << PD4)))
  {

  }
  else
  {
    // Состояние вывода изменилось с высокого уровня на высокий.
    PORTC |= 1 << PC2;
    timeOnOZEncoderZ = millis();
  }
}

Куда лучше использовать поиск нуля который предложил xenon-alien - viewtopic.php?p=638907#p638907.

Я же вернулся к поиску нуля с помощью сервопривода, о настройках сервопривода писал тут - viewtopic.php?p=634775#p634775. Но с одним дополнением, так как поиск нуля идет в специальном режиме (PR внутреннего позиционирования), в котором LinuxCnc не контролирует перемещения, все лимиты станка заведены на реле, которое разрывает вход сервопривода PT-PR (DI2- 7 номер пина на фишке CNC1). Это сделано для безопасности, на случай если станок прошел индуктивный датчик поиска индексной метки и запущена команда поиска нуля в режиме PR. Без этого он будет искать индуктивный датчик, который уже прошел, до тех пор пока не упрется в механику, а там или выбьет по перегрузке или сломает механику.

Поиск нуля с помощью сервопривода имеет ряд неудобств, которые постараюсь побороть со временем.
Аватара пользователя
mikehv
Мастер
Сообщения: 2101
Зарегистрирован: 14 авг 2013, 10:10
Репутация: 1170
Откуда: Иваново
Контактная информация:

Re: Maho 400p фрезерный станок по металлу (400x250x375)

Сообщение mikehv »

Какие то адовые костыли. Есть же штатный поиск нуля по концевику и метке. Зачем это вот всё?
tpolimer2000
Мастер
Сообщения: 347
Зарегистрирован: 07 ноя 2018, 19:03
Репутация: 45
Настоящее имя: Александр
Откуда: Беларусь
Контактная информация:

Re: Maho 400p фрезерный станок по металлу (400x250x375)

Сообщение tpolimer2000 »

mikehv писал(а): Какие то адовые костыли. Есть же штатный поиск нуля по концевику и метке. Зачем это вот всё?
Использую Mesa 7i96, на ней только один энкодерный вход, который используется шпинделем. Как понял, LinuxCnc 2.8 не поддерживает подключение индексной метки энкодера к обычному входу (или я не нашел как это сделать). В LinuxCnc 2.9 эту функцию добавили, но мне не легко дается LinuxCnc, поэтому пока не хочу ее обновлять, вдруг есть какие-то баги или что-то нужно перенастроить. Именно поэтому появилась версия на Arduino, а так да, костыль.

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

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

%
G91
G1 X-0.01 Y-0.01 Z-0.01 F100
G90
M64 P0
G4 P1
M64 P1
G4 P15
M65 P1
G4 P1
M65 P0
%
Чтобы M64 и M65 работали, прописал в hal

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

net home-dout-00 	motion.digital-out-00 => hm2_7i96.0.ssr.00.out-03
net home-dout-01 	motion.digital-out-01 => hm2_7i96.0.ssr.00.out-04
Вообще возможности конфигураций, настроек и гибкость LinuxCnc просто поражает. Это огромный плюс и это огромный минус :).

Добрались до насоса СОЖ, подключили его через частотник, в его роли выступил старичок Mitsubishi FR-S520S. Очень приятная настройка частотника благодаря великолепной документации. Сейчас задумался какую СОЖ купить из доступного мне ЭМ-1 или Унизор-М (скорее всего эту).

Хотел попробовать использовать датчик инструмента + Probe Screen, но сходу не запустил, буду изучать соответствующую ветку, чтобы не изобретать велосипед самому, как обычно :) .
Аватара пользователя
mikehv
Мастер
Сообщения: 2101
Зарегистрирован: 14 авг 2013, 10:10
Репутация: 1170
Откуда: Иваново
Контактная информация:

Re: Maho 400p фрезерный станок по металлу (400x250x375)

Сообщение mikehv »

tpolimer2000 писал(а): Вообще возможности конфигураций, настроек и гибкость LinuxCnc просто поражает. Это огромный плюс и это огромный минус .
Когда та гибкость нужна, все минусы становятся несущественными :)
tpolimer2000 писал(а): мне не легко дается LinuxCnc, поэтому пока не хочу ее обновлять, вдруг есть какие-то баги или что-то нужно перенастроить
Я бы так не сказал) Уверенно щелкаешь вполне :good:
tpolimer2000
Мастер
Сообщения: 347
Зарегистрирован: 07 ноя 2018, 19:03
Репутация: 45
Настоящее имя: Александр
Откуда: Беларусь
Контактная информация:

Re: Maho 400p фрезерный станок по металлу (400x250x375)

Сообщение tpolimer2000 »

mikehv писал(а): Я бы так не сказал) Уверенно щелкаешь вполне
Мне сильно помогаю в этой ветке, а так же в других ветках, где до меня задавались те же вопросы.

На моем станке Z в абсолютных координатах всегда работает в минусе. При переходе на ноль по Z, стол идет вниз, внизу стоит индуктивный датчик начала поиска индексной метке. Если стол идет вверх, то абсолютные координаты идут в минус. До сегодняшнего дня меня все устраивалo, пока не получил ошибку при попытке измерить диаметр инструмента с помощью Probe Screen - Не могу использовать G53 инкрементально. Вероятнее всего, проблема в том, что скрипт ухода к датчику инструмента использует G53, но почему-то используется режим G91. Надо попробовать вручную переключить его перед измерением инструмента. Так же немного порылся в сети для собственного успокоения и понял, что абсолютные координаты могут быть с минусом.

Нужно так же перепроверить настройки LinuxCnc, так как у меня не работает M6 T1. Ругается pycall(remap.change_pro_log) falied, видимо дело в настройках LinuxCnc + Probe Screen, так как на виртуальной LinuxCnc с Probe Screen таких проблем нет.
tpolimer2000
Мастер
Сообщения: 347
Зарегистрирован: 07 ноя 2018, 19:03
Репутация: 45
Настоящее имя: Александр
Откуда: Беларусь
Контактная информация:

Re: Maho 400p фрезерный станок по металлу (400x250x375)

Сообщение tpolimer2000 »

tpolimer2000 писал(а): Нужно так же перепроверить настройки LinuxCnc, так как у меня не работает M6 T1. Ругается pycall(remap.change_pro_log) falied, видимо дело в настройках LinuxCnc + Probe Screen, так как на виртуальной LinuxCnc с Probe Screen таких проблем нет.
Разобрался с этой ошибкой, проблема оказалась банальной, переносил настройки из старого конфига в новый и не перенес все секции. В данном случае не было секции [PYTHON] в файле .ini.
tpolimer2000 писал(а): До сегодняшнего дня меня все устраивалo, пока не получил ошибку при попытке измерить диаметр инструмента с помощью Probe Screen - Не могу использовать G53 инкрементально. Вероятнее всего, проблема в том, что скрипт ухода к датчику инструмента использует G53, но почему-то используется режим G91.
Эта ошибка была из-за некорректной настройки секции [TOOLSENSOR], [CHANGE_POSITION] и файла .hal. Закончу тестирование, сохраню файл настроек тут, чтобы не потерять. Правда измерить высоту и диаметр инструмента не удалось. Но это из-за другой ошибки, из-за спешки не записал ее, вернусь к ней как будет время.

Сегодня опробовали защиту станка.
Защита станка (1874 просмотра) <a class='original' href='./download/file.php?id=206500&sid=ab3798cb149e841534c26470931156fc&mode=view' target=_blank>Загрузить оригинал (270.75 КБ)</a>
Защита станка
Защита станка вид сбоку (1874 просмотра) <a class='original' href='./download/file.php?id=206501&sid=ab3798cb149e841534c26470931156fc&mode=view' target=_blank>Загрузить оригинал (303.36 КБ)</a>
Защита станка вид сбоку
Центральная дверь пока снята. Из минусов защиты, она шумит и вибрирует в некоторых местах. Надо проверить, возможно она где-то трется, а не только вибрирует. Во все остальном одни плюсы, особенно когда работаешь с СОЖ.

Использовал СОЖ Унизор-М, ожидал что ее 5% раствор будет молочного цвета, но нет.
СОЖ (1874 просмотра) <a class='original' href='./download/file.php?id=206502&sid=ab3798cb149e841534c26470931156fc&mode=view' target=_blank>Загрузить оригинал (325.08 КБ)</a>
СОЖ
Система подачи СОЖ еще не сделана (нужно установить в шкаф частотник, вывести управление, провести трубки подачи СОЖ в рабочую зону), поэтому пока из бутылочки и шприца. Но чистота обработки с ней намного приятнее.
Обработка с СОЖ (1874 просмотра) <a class='original' href='./download/file.php?id=206503&sid=ab3798cb149e841534c26470931156fc&mode=view' target=_blank>Загрузить оригинал (592.03 КБ)</a>
Обработка с СОЖ
Обработка почти получилась, есть какие-то небольшие зарезы фрезы по Х-су, повторяющиеся через 5мм по высоте обработки. Вероятнее всего фрезу отгибало (скорее всего не правильные режимы фрезы), и при повторных проходах в том же месте выполнение получалось "лучше". Может что-то намудрил в настройках SolidCam, надо разбираться. Нашел превосходное видео, по работе SolidCam в режимах HSR, 3D-Модель и HSS. https://www.youtube.com/watch?v=pscjMj9 ... mA&index=5
Кстати, на канале CNC SKILL очень много полезной информации по работе в разных режимах SolidCam, одном словом рекомендую :good:. Автору канала огромное спасибо!
Ответить

Вернуться в «Фрезерные станки по металлам»