ВОПРОС Регулировка оборотов штатного шпинделя

Статус
В этой теме нельзя размещать новые ответы.
Когда мотор молотит на 100% тут и регулировка по обратной связи особо не поможет, нет запаса чем регулировать, а вот когда надо работать на меньших мощностях тут уже работа обратной связи хорошо помогает старается удержать обороты. Десятки оборотов конечно ловить не стоит но в пределах сотен вполне возможно .
Честно говоря с реальными оборотами не заморачивался.
А когда вы поставили в УП например 8 000 и получаете реальные 8 000 , не понравилось подправили УП 7 800, будет 7 800...
 
нет, в УП я ставлю мах 2000, тк я помню что в прошивке у меня мах 2000, где то уже была тема по реальным оборотам. В УП програме я ставлю приблизительно, т.к. в candle у меня есть возможность онлайн коррекции.
 
в candle у меня есть возможность онлайн коррекции.
Только учитывайте, что если в УП 2000, и в GRBL 2000, то шпиндель будет работать на максимуме и скорректировать в большую сторону не получится.
 
Я это учитываю, при создании УП. Пока работаю с материалами где увеличивать не надо, можно и на мах работать
 
... всё это приблизительно...
а когда поставили 8 000 в УП и они реально 8 000 под нагрузкой...
 
... всё это приблизительно...
а когда поставили 8 000 в УП и они реально 8 000 под нагрузкой...
Да не вопрос, ваши предложения модуля с обратной связью? штатный 775 мотор, штатная плата дятла в.3.0 без переделок (перерезания дорожек, впаивания проводов и прочего изменения схемотехники )
 
штатная плата дятла в.3.0 без переделок (перерезания дорожек, впаивания проводов и прочего изменения схемотехники )
ничего резать и припаивать не надо, на разъёме офлайн контроллера есть нужные сигналы и ещё один от выхода на шпиндель, просто добавить внешний модуль с тахометром и ШИМ регулятором
 
ничего резать и припаивать не надо, на разъёме офлайн контроллера есть нужные сигналы и ещё один от выхода на шпиндель, просто добавить внешний модуль с тахометром и ШИМ регулятором
Тогда я прошу здесь поделиться данной технологией. Я думаю форумчане будут только ЗА
 
Честно говоря с реальными оборотами не заморачивался. Поставил БП 36В, в прошивке изменил значение с 1000 до 2000, в итоге в candle получил регулировку от 200 до 1000. Практически для всех видов материалов хватает. можно конечно заморочиться и сделать шим с ОС. Но было 1.Лень. 2. Я в схемотехнике слабоват.
у меня тож 36 вольт но в прошивке ничего не менял так и ездит
Ваши сообщения автоматически объединены:

Тогда я прошу здесь поделиться данной технологией. Я думаю форумчане будут только ЗА
3 раза "ЗА"
Ваши сообщения автоматически объединены:

по поводу 36 вольт питания плата держит все нормально только "сцыкотно " немного без обдува то работать нагрузка то на стабилдизаторах повышена. правда просадок напряжения не боится там запас хороший. но все ж думаю пару " ветролетов" поставить
 
  • Последнее редактирование:
Последнее редактирование:
Тогда я прошу здесь поделиться данной технологией. Я думаю форумчане будут только ЗА
Ничего сложного особо нет
У меня решено на Pro mini 5V
16256


С разъёма офлайн нужен сигнал RX входящие данные , запуск двигателя идёт командой "М03" далее "S" и количество оборотов, я считываю только "S" и количество оборотов , но сам запуск делаю по отдельной команде можно взять выход ШИМа двигателя через делитель и интегрирущую RC цепь," М05' я не использую так как он приходит на плату и исполняется не сразу, зависит от размера буфера, поэтому мотор остановиться раньше чем закончиться программа.
В плате реализован тахометр датчик холла из вентилятора и магнита от CD/DVD головки посаженный в термоусадке на конец вала держится хорошо при 30 000 не улетает , ПИД регулятор , формирователь ШИМа и индикация, экстренный "СТОП" при остановке двигателя, у меня система с ремённой передачей.
Выход можно делать на отдельный транзистор или на родной, у меня через родной на плате на вход опторазвязки.
Пробовал разные частоты ШИМа, но если через оптрон то особо повысить не получиться, без оптрона работает и на более высоких частотах, я остановился на 3.9 кГц c большой разрядностью 0-4095 .
У меня родной двигатель, 775 стал работать не стабильно и сейчас другой моторчик поэтому настройки ПИДа не могу проверить на 775, индикатор тоже не из простых на MAX7219 и 4 матрицы, пришлось мудрить с индикацией 5 знака, и работает до 32 700.
В программе я установил диапазон реальных оборотов , у меня 500-40 000, и при включении двигатель держит то что установлено, так же и с УП какие цифры в параметре "S" то и крутит....
 
а исходник увидеть можно?
Код:
[code]

#define PID_INTEGER
#include "GyverPID.h"
#include <GyverPWM.h>
#include <MaxMatrix.h>

int DIN_7219 = 7;  // DIN pin of MAX7219 module
int CS_7219 = 8;  // CS pin of MAX7219 module
int CLK_7219 = 9; // CLK pin of MAX7219 module


int maxInUse = 4;    //change this variable to set how many MAX7219's you'll use
MaxMatrix m(DIN_7219, CS_7219, CLK_7219, maxInUse); // define module

const int no_position = 23;
int *pos_1;
int *pos_2;
int *pos_3;
int *pos_4;
int *pos_5;

int so = 0;
int in_t = 0;
int incomingByte = 0;
boolean SP_EN;

byte bufer[] = {                 // цифры индикации
  0, 6, 9, 9, 13, 11, 9, 6,
  0, 7, 2, 2, 2, 2, 6, 2,
  0, 15, 8, 4, 2, 1, 9, 6,
  0, 6, 9, 1, 2, 4, 2, 15,
  0, 1, 1, 1, 15, 9, 9, 9,
  0, 6, 9, 1, 1, 14, 8, 15,
  0, 6, 9, 9, 14, 8, 9, 6,
  0, 4, 4, 4, 2, 1, 9, 15,
  0, 6, 9, 9, 6, 9, 9, 6,
  0, 6, 9, 1, 7, 9, 9, 6
};

int ones;
int tens;
int hundreds;
int thousands;
int thousands1;
int ob = 0;


GyverPID regulator(0.06, 0.050, 0.010);  // коэф. П, коэф. И, коэф. Д, период дискретизации dt (мс)
// или так:
//GyverPID regulator(0.01, 0.05, 0.01);    // можно П, И, Д, без dt, dt будет по умолч. 100 мс
volatile unsigned long lastflash;
volatile boolean state = false;
boolean state1;
int RPM;
int rpm0 = 0;
int rs_p = 0;
int Sp_ON = 5;     //вход шпиндель "ON" "OF" pin 5
int Stop = 6;      // выход на "СТОП" pin 6

void setup() {
  Serial.begin(115200);  //открыть порт
  Serial.setTimeout(2);
  m.init();
  m.setIntensity(5); // dot matix intensity 0-15
  pinMode(DIN_7219, OUTPUT);
  digitalWrite(DIN_7219, LOW);
  pinMode(CS_7219, OUTPUT);
  digitalWrite(CS_7219, LOW);
  pinMode(CLK_7219, OUTPUT);
  digitalWrite(CLK_7219, HIGH);
  pinMode(Sp_ON, INPUT);
  pinMode(10, OUTPUT);              // выход ШИМ 10 pin
  pinMode(Stop, OUTPUT);
  digitalWrite(Stop, HIGH);
  PWM_resolution(10, 12, FAST_PWM);
  attachInterrupt(0, sens, RISING);    // вход датчика холла pin 2
  regulator.setDirection(NORMAL); // направление регулирования (NORMAL/REVERSE). ПО УМОЛЧАНИЮ СТОИТ NORMAL
  regulator.setLimits(10, 4050);    // пределы для управления ШИМ
  regulator.setpoint = 0;        // сообщаем регулятору обороты, которые он должен поддерживать
  regulator.setMode(0);
  //number(0, 0, 0, 0, 0);
  // в процессе работы можно менять коэффициенты
  // regulator.Kp = 0.2;
  //regulator.Ki = 0.5;
  // regulator.Kd = 0;
}

void loop() {

  if (Serial.find('S')) {
    rs_p = Serial.parseInt();     //считываем заданние оборотов сигнал"RX" с платы на "RX" ардуины
  }
  if (digitalRead(Sp_ON)) {       // сигнал включения шпинделя есть или нет
    if (rs_p == 0) {
      regulator.setpoint = 0;
      regulator.input = 0;
      PWM_set(10, 0);
    } else {
      regulator.setpoint = rs_p;
      regulator.input = RPM;
      PWM_set(10, regulator.getResult());
    }
    if (state1 != state) {     // проверяем крутиться или нет
      so++;
      state1 = state;
      rpm0 = 0;
      in_t = 0;
    }
    else                        //не крутиться чуть ждём
    {
      rpm0++;
      if (rpm0 > 50) {
        digitalWrite(Stop, LOW);    //сигнал "-" на 6 ножке подсоединён к "СТОП" на плате, сбрасывается кнопкой рессет на ардуине
        RPM = 0;
        regulator.setpoint = 0;
        PWM_set(10, 0);
      }
    }
    if (RPM == 0) {
      //in_t = 0;
      number(0, 0, 0, 0, 0);
    }
    else if (so > 5) {              // вывод на индикацию через 5 оборотов
      so = 0; //in_t = 0;
      //ob= RPM;
      thousands1 = RPM / 10000;
      thousands = (RPM - (thousands1 * 10000)) / 1000;
      hundreds = (RPM - (thousands1 * 10000 + thousands * 1000)) / 100;
      tens = (RPM - (thousands1 * 10000 + thousands * 1000) - hundreds * 100) / 10;
      ones = (RPM - (thousands1 * 10000 + thousands * 1000) - hundreds * 100) - tens * 10;
      //Serial.println(ones);
      pos_5 = &thousands1;
      pos_4 = &thousands;
      pos_3 = &hundreds;
      pos_2 = &tens;
      pos_1 = &ones;
      number(*pos_1, *pos_2, *pos_3, *pos_4, *pos_5);
    }
  }
  else {
    regulator.setpoint = 0;
    PWM_set(10, 0);
    number(0, 0, 0, 0, 0);
  }
}
void sens() {
  RPM = 60 / ((float)(micros() - lastflash) / 1000000); //расчет
  lastflash = micros(); //запомнить время последнего оборота
  state = !state;
}

void number(int position1, int position2, int position3, int position4, int position5)
{
  for (int i = 0; i < 8; i++)
  {
    digitalWrite(CS_7219, LOW);
    //Serial.println(bufer[i]);
    for (int f = 0; f < 4; f++)
    {
      if (position5 > 0) {
        if (f == 3 && position4 != no_position)
        {
          int k = 5;
          if (position5 > 1)k = 4;
          shiftOut(DIN_7219, CLK_7219, MSBFIRST, i + 1);
          shiftOut(DIN_7219, CLK_7219, LSBFIRST, bufer[i + position5 * 8] << k | bufer[i + position4 * 8]);
          continue;
        }
      }
      else if (f == 3 && position4 != no_position)
      {

        shiftOut(DIN_7219, CLK_7219, MSBFIRST, i + 1);
        shiftOut(DIN_7219, CLK_7219, LSBFIRST, bufer[i + position4 * 8]);
        continue;
      }

      if (f == 2 && position3 != no_position)
      {

        shiftOut(DIN_7219, CLK_7219, MSBFIRST, i + 1);
        shiftOut(DIN_7219, CLK_7219, LSBFIRST, bufer[i + position3 * 8] << 1);
        continue;

      }

      if (f == 1 && position2 != no_position)
      {
        //if(i==1)bufer[1]+=1;
        shiftOut(DIN_7219, CLK_7219, MSBFIRST, i + 1);
        shiftOut(DIN_7219, CLK_7219, LSBFIRST, bufer[i + position2 * 8] << 2);
        continue;
      }

      if (f == 0 && position1 != no_position)
      {

        shiftOut(DIN_7219, CLK_7219, MSBFIRST, i + 1);
        //shiftOut(DIN_7219, CLK_7219, MSBFIRST, bufer[i+position1*8]<<1);
        shiftOut(DIN_7219, CLK_7219, LSBFIRST, bufer[i + position1 * 8] << 3);
        continue;

      }
      shiftOut(DIN_7219, CLK_7219, MSBFIRST, 0);
      shiftOut(DIN_7219, CLK_7219, LSBFIRST, 0);

    }

    digitalWrite(CS_7219, LOW);
    digitalWrite(CS_7219, HIGH);

  }

}
[/CODE]
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу
Обнаружен блокировщик рекламы AdBlock

МЫ ДОГАДЫВАЕМСЯ, ЧТО РЕКЛАМА ВАС РАЗДРАЖАЕТ!

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

Спасибо за Ваше понимание!

Я отключил свой AdBlock    Нет, я не буду ничего отключать